feat: Standardize and slugify all document export filenames
Created by: Edouard-Legoupil
This commit implements a unified, server-driven approach for generating filenames for all exported documents (Word and Excel) across the application, including knowledge cards and proposals.
The backend is now the single source of truth for filenames. It generates a descriptive, slugified filename and sends it in the Content-Disposition header.
Key changes:
-
backend/api/documents.py: Updated the proposal document and table export endpoints to generate a slugified filename based on the project title. -
backend/api/knowledge.py: Updated the knowledge card export endpoint to generate a slugified filename by concatenating the card name and summary. -
backend/core/middleware.py: Exposed theContent-Dispositionheader in the CORS configuration to make it accessible to the frontend. -
frontend/src/screens/Chat/Chat.jsx: Refactored thehandleExportandhandleExportTablesfunctions to extract the filename from theContent-Dispositionheader of the API response. -
frontend/src/screens/KnowledgeCard/KnowledgeCard.jsx: Refactored thehandleExportfunction to use the filename from theContent-Dispositionheader.
This ensures all downloaded files have consistent, informative, and URL-friendly names.
- Does my code meet the quality standards for releasing packages?
- Does the reviewer have all the information to validate the features/issues without too much research?
- Does the customer who will validate the associated tickets have the information to do so without wasting time?
Issues to validate to close :
-
issue #
Processed issues to keep open or in progress:
-
issue #
Checklist:
-
Does the package check go local? -
Does the CI pass? -
Are the added / fixed features documented, tested? -
Are the added features / solved problems briefly presented in the PR message? -
Are the changes related to tickets / issues that I have listed in the commits and in the PR itself? -
Are the tickets in "review" mode in the Project Tracking Board? -
Does each ticket, if it is to be closed after acceptance of the PR, contain a comment that tells how to validate it?