Commit Graph
966 Commits
Author SHA1 Message Date
Manuel RaynaudandNathan Panchout e6b2dab5c0 ♻️(backend) custom pydantic errors to be compatible with our handler
We are using the drf_standardized_errors handler to have "nice" errors
for the frontend application. We decided to override the SchemaField
from the django_pydantic_field library in order to make it compatible
with this error handler.
2026-03-31 11:13:24 +02:00
Manuel RaynaudandNathan Panchout b3b113ae74 ✨(backend) add column_preferences column to user model
We want to store in the user model the column_preferences parameters.
These parameters are saved by the front application. In order to
validate it, we use pydantic BaseModel and store it in a json field
2026-03-31 11:13:24 +02:00
Manuel RaynaudandNathan Panchout 5f31c97af6 ➕(backend) install pydantic and django-pydantic-field to strengthen API
Super useful for validation when handling unstructured dictionaries.

Follow qbey's recommendation and align with the
suitenumerique/conversation project approach to improve schema
validation and data integrity.
2026-03-31 11:13:24 +02:00
Nathan Panchout a1a5688fd0 ✅(frontend) add custom columns E2E tests
Test column visibility toggling, sort interactions,
and preference persistence across navigation.
Add shared test utilities for column assertions.
2026-03-31 11:13:24 +02:00
Nathan Panchout 0686605f05 🌐(frontend) add custom columns translations
Add French translation keys for column names,
sort labels, and column customization UI strings.
2026-03-31 10:36:51 +02:00
Nathan Panchout ee07fb2a38 ♻️(frontend) improve pagination UX and simplify mutation hooks
Use placeholderData in useInfiniteChildren and
useInfiniteItems to prevent layout flicker on
re-fetch. Remove addItemToTop from
useOptimisticPagination. Simplify useMutations
by removing unused logic.
2026-03-31 10:36:51 +02:00
Nathan Panchout b6ac733c72 ✨(frontend) integrate custom columns into explorer grid and pages
Wire custom columns into EmbeddedExplorerGrid,
AppExplorer, AppExplorerGrid, and WorkspacesExplorer.
Update page components ([id], recent, trash) to pass
view configuration through ExplorerLayout.
Update StandardDriver with new ordering support.
2026-03-31 10:36:51 +02:00
Nathan Panchout a4569a3205 ✨(frontend) add column preferences store, hooks, and ordering utilities
Add Zustand store for persisting column visibility
and ordering preferences per view in localStorage.
Add useColumnPreferences and useGridColumns hooks.
Add ordering utility to map column sort to API
parameters. Include unit tests for store and
ordering logic.
2026-03-31 10:36:51 +02:00
Nathan Panchout ef737583db ✨(frontend) add column cell and header components
Add cell renderers: CreatedByCell, CreatedCell,
FileSizeCell, FileTypeCell, LastModifiedCell.
Add sortable and customizable column headers.
Update grid styles for dynamic column layout.
2026-03-31 10:26:37 +02:00
Nathan Panchout 83a3c32b2f ✨(frontend) add custom column types, configuration, and icon components
Define ColumnId and ViewConfig types for the column
system. Create column registry and per-view configs.
Add icon components: Clock, FileIcon, PersoIcon,
WeightIcon, and sort direction indicators.
Extend ItemOrderBy enum with new sort fields.
2026-03-31 10:26:37 +02:00
Nathan Panchout 7ce21e190a 🔧(gitignore) add Claude and OpenSpec directories
Ignore .claude/ and .openspec/ directories to keep
AI tooling artifacts out of version control.
2026-03-31 10:26:37 +02:00
renovate[bot]andManuel Raynaud d109ed6b7b ⬆️(dependencies) update requests to v2.33.0 [SECURITY] 2026-03-31 09:37:08 +02:00
Nathan Vasse ee10b7b09b ♻️(frontend) use react-query for PDF file fetching
The manual useEffect/AbortController fetch is replaced by
useQuery which handles caching, abort, and error state out
of the box. The project already uses react-query elsewhere.
2026-03-30 15:59:56 +02:00
Nathan Vasse b8f4b6b0de ♻️(frontend) lift shared Document to PreviewPdf
Both PdfPageViewer and PdfThumbnailSidebar were each creating
their own <Document>, parsing the same PDF twice. A single
shared Document at the parent level halves the parsing work
and simplifies child component interfaces.
2026-03-30 15:59:56 +02:00
Nathan Vasse 11fe04eb5a ♻️(frontend) move onItemClick into usePdfNavigation hook
The callback and its goToPageRef workaround belong with the
rest of the navigation logic. This keeps PreviewPdf focused
on layout and composition, it makes the main components
lighter.
2026-03-30 15:59:37 +02:00
Nathan Vasse a4f7251aad 🐛(frontend) fix PDF scroll tests flaking on Firefox
Firefox does not reliably trigger scroll events from
synthetic mouse.wheel calls in Playwright. Using a
direct scrollTop assignment ensures the virtualized
grid processes the scroll across all browsers.
2026-03-30 10:57:09 +02:00
Nathan Vasse 889f0fd42d 🐛(frontend) fix eslint no-explicit-any in PDF viewer
The CI lint step rejects usages of the any type.
Replaced them with proper type narrowing.
2026-03-30 10:57:09 +02:00
Nathan Vasse 95b610dccb 🔧(ci) exclude pdf.worker.mjs from print statement lint
The bundled PDF worker contains minified code with
print() calls that trigger the lint-git check. Since
this is a vendored file it should be excluded.
2026-03-30 10:57:09 +02:00
Nathan Vasse 7b27efd5f0 📝(other) update changelog with pdf-viewer branch changes
Adds entries for the PDF viewer feature, CSRF settings,
nginx MIME type fix, local network docs and SVG
attribute fix to the unreleased section.
2026-03-30 10:57:07 +02:00
Nathan Vasse 1ef1dd4a80 ✅(frontend) add PDF viewer e2e tests
Tests cover PDF rendering, corrupted file handling,
JavaScript injection prevention and external link
interception with redirect disclaimer.
2026-03-30 10:54:34 +02:00
Nathan Vasse 6fa44aac62 ✨(frontend) integrate PDF viewer into file preview
Dynamically imports the PDF viewer to avoid bundling
pdfjs for non-PDF files. Falls back to an outdated
browser message if the import fails. Updates the modal
to use a blurred backdrop and dvh units.
2026-03-30 10:54:34 +02:00
Nathan Vasse 62df23578f 🌐(frontend) add translations for PDF viewer
Adds external link confirmation and outdated browser
warning messages in EN, FR and NL. Updates the generic
error description to point users to support.
2026-03-30 10:54:34 +02:00
Nathan Vasse aca3adf876 🔧(nginx) serve .mjs files with correct MIME type
Alpine-based nginx lacks .mjs in its default mime.types
causing pdf.worker.mjs to be served as octet-stream
which breaks ES module loading.
2026-03-30 10:54:34 +02:00
Nathan Vasse 5601f4368e ✨(frontend) add PDF viewer core components
Implements a full-featured PDF viewer with thumbnail
sidebar, zoom controls, page navigation and external
link interception. Includes polyfills for older browsers
and a fallback component for unsupported environments.
2026-03-30 10:54:34 +02:00
Nathan Vasse accbe04f78 ✨(frontend) add PDF viewer dependencies and build config
Adds react-pdf and react-virtualized for the PDF viewer
feature. The next.js config transpiles pdfjs-dist to
support Safari < 17.4 which lacks ES2023 static
initialization blocks.
2026-03-30 10:54:31 +02:00
Nathan Vasse 2a419c9523 📝(other) add local network setup documentation
Documents how to access the dev environment from other
devices on the local network, useful for mobile testing.
2026-03-30 10:54:06 +02:00
Nathan Vasse 622fb813bc 🔧(backend) allow extra CSRF origins via env variable
When testing on local network devices (phones, tablets)
the Django CSRF check blocks requests from non-localhost
origins. This merges CSRF_TRUSTED_ORIGINS env var into
the default list.
2026-03-30 10:54:06 +02:00
Nathan Vasse 836da56f2d 🔧(other) add .claude to gitignore
Claude Code generates a local .claude directory for
project configuration. It should not be tracked.
2026-03-30 10:53:20 +02:00
Nathan Vasse d882744c00 🐛(frontend) fix React SVG attributes in AddFolderButton
React requires camelCase for SVG attributes. Using
fill-rule and clip-rule triggers warnings and may cause
rendering issues.
2026-03-30 10:53:20 +02:00
Manuel Raynaud 2fc865e0f6 ⬆️(ds-proxy) upgrade ds-proxy to version 2.0.0-alpha.4
To upgrade to the version 2.0.0-alpha.4, the salt is moved to the
keyring
2026-03-27 10:32:56 +01:00
Nathan Vasse bf51755ff9 🔖(release) version sdk package
- 🏷️(sdk) update Item interface by adding url_permalink
@gouvfr-lasuite/drive-sdk@0.0.2
2026-03-27 10:14:08 +01:00
Nathan Vasse 5b109e1e25 📝(sdk) update CONTRIBUTING.md
The old version was not really up to date with our current practices.
Let's update it.
2026-03-27 10:13:25 +01:00
jbpenrathandNathan Vasse 4d4a15876f 🏷️(sdk) update Item interface
A new property `url_permalink` has been added recently but the Item interface
in the sdk packages has not been updated accordingly.
2026-03-27 09:49:28 +01:00
neilcroft 54a293b6a5 🐛(backend) handle race condition on concurrent LinkTrace creation
Handle race condition where two concurrent retrieve requests pass the
exists() check and both attempt to create a LinkTrace for the same
user/item pair, violating the unique constraint.

Fixes #611
2026-03-23 14:40:09 +01:00
neilcroft c4188f8342 🐛(backend) fix hard delete of files created by other users
Allow folder owners/admins to hard delete files in their trashbin
even when the file was created by another user.

Fixes #604
2026-03-23 12:58:44 +01:00
Manuel Raynaud f09d6d15a9 ✨(backend) new action to duplicate a file item
A user with at leat editor role, connected can duplicate a file item
which has its upload_state ready. The duplicate_file task is used to do
the copy of the file on the storage.
2026-03-20 13:30:51 +01:00
Manuel Raynaud 238d6eb92e ✨(backend) add a task to duplicate a file
We plan to add an action to duplicate an item. We want to use a celery
task to make the copy using the s3 client. The task is retried 10 times
if failing and then the item is deleted if the copy fail after 10
retriees.
2026-03-20 13:30:51 +01:00
Manuel Raynaud b91c2d1777 🛂(backend) add duplicate in the item abilities
In order to add in next commit a duplicate action in the ItemViewset, we
add a `duplicate` entry in the item abilities. A user can duplicate a
file if he can update it.
2026-03-20 13:30:51 +01:00
Manuel Raynaud 1bb2c556fc 🔖(minor) bump release version 0.15.0
Added

- 🌐(frontend) update Dutch translation for create label
- ✨(frontend) add create folder and import file actions
- 🐛(frontend) add action menu to mobile breadcrumbs
- 🐛(frontend) app stabilization

Changed

- ⚡️(CI) optimize Docker Hub workflow
- ♻️(frontend) replace WorkspaceIcon with FolderIcon in breadcrumbs
- ✨(backend) exclude pending items from listing views
- ✨(frontend) scale upload progress to 90% before completion

Fixed

- 🐛(backend) allow inviting external person on item with no direct access
- 🐛(backend) stop storing numchild in database use annotation instead
- 🐛(backend) sanitize filename to be compatible with filesystems

Removed

- 🔥(backend) remove unused ServerToServerAuthentication backend
v0.15.0-preprod v0.15.0
2026-03-16 11:58:34 +01:00
renovate[bot]andGitHub 33fc2de6ba ⬆️(dependencies) update PyJWT to v2.12.0 [SECURITY] 2026-03-14 01:24:57 +00:00
ChristopherSpeltandManuel Raynaud feb82b29e7 🌐(front) update Dutch translation for create label
Signed-off-by: ChristopherSpelt <christopherspelt@icloud.com>
2026-03-13 08:52:39 +01:00
Manuel Raynaud b84a640cc1 🔧(backend) allow uploading mindmap manager files
Allow the upload of file of type mindmap manager using the extension
.mmap
2026-03-12 18:03:42 +01:00
Nathan PanchoutandClaude Opus 4.6 1f83154777 🐛(front) fix whitespace in ExplorerTreeItem
Remove extra whitespace: double space before closing tag and
trailing blank line.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:23:45 +01:00
Nathan PanchoutandClaude Opus 4.6 791ddb3bfa ⚡️(front) keep previous data while refetching item
Add placeholderData to useItem query so the previous item data
remains visible during refetch, preventing flickering and layout
shifts when the query is revalidated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:17:15 +01:00
Nathan PanchoutandClaude Opus 4.6 d066f0ac1d ✨(front) use classic variant for RhfInput
Switch RhfInput to the classic variant with hidden label and
placeholder matching the label text, for a cleaner inline
appearance in forms.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:17:15 +01:00
Nathan PanchoutandClaude Opus 4.6 ef24e2b5c3 🐛(front) update right panel item on rename
When renaming an item, also update the right panel's forced item
if it's currently displaying the renamed item. This ensures the
panel title stays in sync after a rename without requiring a
manual refresh.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:17:15 +01:00
Nathan PanchoutandClaude Opus 4.6 dbd7715046 ✨(front) reorder action menu and fix folder favorite
Reorganize the context menu items for better UX: share and download
are now grouped first, followed by favorite, then rename/move, then
info, and finally delete. Also fix the favorite handler to only add
the item to the tree sidebar when it's a folder, preventing files
from incorrectly appearing in the favorites tree.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:17:15 +01:00
Nathan PanchoutandClaude Opus 4.6 716d971a9b 🐛(front) fix ItemIcon large size to 32px
Reduce the large icon size from 48px to 32px to better fit the
grid layout. Pass `size={IconSize.LARGE}` explicitly in
EmbeddedExplorerGridNameCell so the icon renders at the correct
size. Also fix trailing commas in ItemIcon.tsx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:17:15 +01:00
Nathan PanchoutandClaude Opus 4.6 acb28e5734 ✨(front) add custom zoom icons for ImageViewer
Replace the material icons (zoom_in, zoom_out) with custom SVG icons
(ZoomPlusIcon, ZoomMinusIcon, ResetZoomIcon) for a more polished
image viewer toolbar. Also update IconSvg to support numeric size
prop, add button styles in ImageViewer.scss, and fix trailing commas
throughout the component.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:17:15 +01:00
Nathan PanchoutandClaude Opus 4.6 db5b0f3453 🐛(front) fix optional chaining on item properties
Add missing optional chaining operators to prevent runtime errors
when accessing `abilities.children_create` in AppExplorerBreadcrumbs
and `creator.id` in EmbeddedExplorerGridBreadcrumbs. These properties
can be undefined when the item data is not fully loaded yet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:17:15 +01:00