Commit Graph
2299 Commits
Author SHA1 Message Date
Sylvain ZimmerandAnthony LC 19b9fb483c 🐛(y-provider) fix interlinking markdown test for blocknote 0.51.4
The 0.51.4 markdown serializer no longer emits the optional link title
attribute, so the exported link is `[text](url)` without ` "title"`. The
title is still present in the HTML export. Update the expectation to match.
2026-06-23 09:43:27 +02:00
Sylvain ZimmerandAnthony LC 635f1cf7a4 (y-provider) preserve commented text on HTML/markdown conversion
The "comment" mark must exist in the conversion editor schema, otherwise
y-prosemirror silently drops every commented run of text when reading the
Yjs document, turning any block holding a comment into an empty block.
Register the CommentsExtension on the conversion editor so commented text
round-trips like the other custom blocks.
2026-06-23 09:43:27 +02:00
Sylvain ZimmerandAnthony LC 46fc08a538 (y-provider) preserve custom blocks on HTML/markdown conversion
Wire the docs BlockNote schema (callout, pdf, uploadLoader, interlinking
link, page break) into the conversion editor so /api/convert no longer
drops or mangles these blocks.
2026-06-23 09:42:43 +02:00
Quentin BEY 3382e67a46 📝(readme) add Snyk badge to header
As part of the Snyk opensource program we proudly add
their badge to show their support.
2026-06-22 21:52:15 +02:00
Anthony LC e844929404 ️(frontend) try to improve performance of tree
The tree rerenders crazily, creating performance
issues, especially on big trees. To fix it properly
we will need a big refacto, on the uikit side.
Before doing that, we try to optimize the current
code by memoizing the tree view, and by using the
selected node from the url instead of the one
from the context.
We improve the treeitem link, we can now easily
opening a new tab by doing CTRL+Click.
2026-06-22 17:09:41 +02:00
Anthony LC a63fa17e20 🐛(frontend) fix removed item in the tree
react-arborist's scrollTo calls react-window's scrollToItem, which mutates
the internal scrollOffset state. When navigating to a deep item in a large
tree, this causes all items above the target to be removed from the DOM
(virtualized away), making the tree appear empty above the selected node.
We no-op it to prevent that — the panel's own overflow-y handles scrolling.
2026-06-22 17:09:41 +02:00
Manuel Raynaud a8d67f34c4 🔖(minor) release 5.3.0
Added

- (backend) add limit on distinct reactions per comment #1978
- (frontend) leave a document #2410
- (frontend) add top parent on sub docs search #1952
- (frontend) unauthenticated users can search #2407
- (backend) specific user delete method to delete its relations #2437

Changed

- 👷(CI) remove test-e2e-other-browser job #2404
- ️(frontend) use heading element for pinned documents section title #2380
- ️(frontend) use anchor links for table of contents entries #2390
- ️(frontend) improve presenter mode screen reader and keyboard support #2383
- ️(frontend) link export modal name to its heading #2422

Fixed

- 🐛(frontend) overlap of block menu dropdown #2406
- ️(backend) fix N+1 queries when serializing thread comments #2415
v5.3.0-preprod v5.3.0
2026-06-19 15:57:23 +02:00
github-actions[bot]andManuel Raynaud 1fa3aaa8ae 🌐(i18n) update translated strings
update translated strings
2026-06-19 15:57:22 +02:00
renovate[bot]andGitHub 87fbcbaceb ⬆️(dependencies) update PyJWT to v2.13.0 [SECURITY] 2026-06-19 12:28:35 +00:00
Manuel Raynaud 82013a84b6 ♻️(backend) change how a user is deleted in the admin
In the admin there were 2 ways to delete a user : by the actions select
box and the button on its change view. Both are leading to a failure. To
fix it, both way are removed and we implemented a custom action calling
the user.delete method with all the specific workflow we implemented.
2026-06-19 11:53:32 +02:00
Manuel Raynaud ed0dce66c5 (backend) specific user delete method to delete its relations
Deleting a user is not possible when it has created docs because the
on_delete on the Document class id RESTRICT and we don't want to change
it. We decided to have a specific workflow for correctly delete a user.
The document where the user is the sole owner must be deleted, the other
only the owner access must be deleted. For the remaining Documents where
the user is the creator, we set it to `null`, then the user can be
delete, remaining relations are deleted in cascade.
2026-06-19 11:53:32 +02:00
Manuel Raynaud b417a57418 ♻️(backend) use user_id instead of user relation in sharing module
In the sharing module, the user model was used instead of working with
the user id. Only the user id is used in this module, forcing in the
module calling this functions to load the user model for nothing and
doing a N+1 query.
2026-06-19 11:53:30 +02:00
Mohamed El Amine BOUKERFAandManuel Raynaud 51364e3d3c (frontend) add UI support for reaction limit on comments
Prevent users from adding more reactions once the per-message
limit has been exceeded. It Disables reaction buttons
when limit is reached

Signed-off-by: Mohamed El Amine BOUKERFA <boukerfa.ma@gmail.com>
2026-06-15 08:56:45 +02:00
Mohamed El Amine BOUKERFAandManuel Raynaud 867583a52a (backend) add limit on distinct reactions per comment
Implement a configurable limit (default: 15) on the number of distinct
emoji reactions per comment.

  - Backend validation ensures the limit cannot be exceeded via API

Signed-off-by: Mohamed El Amine BOUKERFA <boukerfa.ma@gmail.com>
2026-06-15 08:56:45 +02:00
Cyril 0f984d6832 ️(frontend) link export modal name to its heading
Link aria-describedby to modal description, not title
2026-06-12 11:03:00 +02:00
Anthony LC 4c3b17a541 (frontend) leave a document feature
When we were visiting a public document, it was part of
our list of documents, and we couldn't leave it.
Now, we can leave a public document, and it will
be removed from our list of documents.
We coupled it with remove access to a document if
you had access to it, and you can also leave a
document without having to pass through the share
modal, which is a better user experience.
2026-06-11 16:49:09 +02:00
Amine BOUKERFAandGitHub 5aa1402aa3 ️(backend) prefetch thread comments tree to fix N+1 queries
Retrieving a thread serialized its nested comments, reactions and
reaction users without prefetching, issuing one query per comment for
its author and reactions and one query per reaction for its users.
    
Signed-off-by: Mohamed El Amine BOUKERFA <boukerfa.ma@gmail.com>
2026-06-11 13:25:12 +00:00
Anthony LC 6ce853312f ️(frontend) accessibility improvements on search components
Improve accessibility of search components by adding
appropriate ARIA attributes and enhancing screen reader
compatibility.
2026-06-10 16:51:02 +02:00
Anthony LC 7edbd4efcb 💄(frontend) update search ui to fit the design mockup
The search ui has been updated to fit
the design mockup.
It includes:
- the search feature
- the move doc modal
- the interlinking search part
2026-06-10 16:44:49 +02:00
Anthony LC 359fb42605 (frontend) add top parent on sub docs search
In the search modal, under the sub docs,
we now display the top parent of the doc, to give
more context to the user about the doc they are
looking for.
We refactorize the filters to get more flexibility
and avoid too much props drilling.
2026-06-10 16:44:49 +02:00
Manuel RaynaudandAnthony LC da6e65b204 ♻️(backend) return only the top parent in the search endpoint
In the search endpoint, we were returning all the parents for a document
mathing the search. We want instead to return only the top parent the
user has access to.
2026-06-10 16:44:48 +02:00
Cyril 69c3303c1a ️(frontend) restore focus after presenter close
Restore focus to menu trigger after closing presenter mode.
2026-06-10 14:27:06 +02:00
Cyril fd0e858304 ️(frontend) trap focus inside presenter dialog
Trap focus with FocusScope; remove editor role from slides for better SR sprt.
2026-06-10 14:26:43 +02:00
Cyril a8705195fe ️(frontend) announce slide position in presenter mode
Announce slide position via react-aria on change; drop bar live region.
2026-06-10 14:26:43 +02:00
Cyril ad33e9e0eb ️(frontend) use anchor links for table of contents entries
Replace TOC buttons with anchor links and heading ids for a11y navigation.
2026-06-10 14:04:57 +02:00
Anthony LC 6dc9955d64 (frontend) unauthenticated users can search
Unauthenticated users can now search documents inside
a document depend their permissions on the document.
2026-06-10 11:44:13 +02:00
Manuel RaynaudandGitHub 021f53092e 🐛(backend) stream empty string with an async iterator under ASGI
In the content_retrieve action, if the document is not existing on the
object storage, we return an empty binary string. In the case the app is
ran as an ASGI application we still have a warning explaining it must
consume the iterator before sending it.
2026-06-10 06:36:03 +00:00
Anthony LC 87061dd26d 🐛(frontend) fix ui issues
- Fix floating bar z-index to ensure it appears
  under the editor toolbar and suggestion menu
- Add text center to toolip content
2026-06-09 16:38:25 +02:00
Anthony LC f4db774545 👷(CI) remove test-e2e-other-browser job
We don't maintain the test-e2e-other-browser job,
and it often fails due to various reasons.
To avoid unnecessary noise in our CI pipeline, we
will remove this job.

We are adding workflow_dispatch trigger to the e2e-tests
workflow, so that we can still run e2e tests on other
browsers when needed from the Github actions UI.
2026-06-09 15:18:33 +02:00
Manuel RaynaudandGitHub 593c98c7d1 🔧(backend) delete object created in object storage during tests
The tests are using the local object storage configured in the docker
compose stack. Every time a test using the DocumentFactory is executed,
an object is created in the object storage and will stay here but never
used. The data/media directory is growing and time to time we have to
delete it in order to free some gigabytes. In this commit we add a
global conftest responsible to delete the object created during the test
execution. The space will be really free when the object storage
container will be shutdown.
2026-06-09 13:14:58 +00:00
Cyril a4559d9519 ️(frontend) use heading element for pinned documents section title
Replace <span> with <h2> so the section appears in the heading for SR.
2026-06-09 10:35:27 +02:00
Manuel RaynaudandGitHub 57d7116e54 📝(doc) add missing setting CONVERSION_UPLOAD_ENABLED
The setting CONVERSION_UPLOAD_ENABLED is not present in the env.md
documentation. It was added in a previous release but not documented.
2026-06-09 07:46:25 +00:00
Anthony LC a43883caf0 🔖(patch) release 5.2.1
Changed:
- 💄(frontend) display emoji button on hover

Fixed:
- 🐛(backend) close thread DB connections to fix test teardown
  OperationalError
- 🐛(frontend) fix crash when orphaned threads
- 🐛(backend) order trashbin response by most recently deleted
- 🐛(backend) stream document content with an async
  iterator under ASGI
- 🐛(frontend) fix long titles in table of content
v5.2.1-preprod v5.2.1
2026-06-05 13:44:21 +02:00
AntoLCandAnthony LC c9829576a5 🌐(i18n) update translated strings
Update translated files with new translations
2026-06-05 13:44:21 +02:00
Anthony LC 8bf30d0ec3 🐛(frontend) fix long titles in table of content
Long title in table of content is were not displayed correctly.
This commit fixes the issue.
2026-06-05 12:42:26 +02:00
Manuel RaynaudandGitHub 26670eb588 🐛(backend) stream document content with an async iterator under ASGI
When docs is ran using an ASGI server, the django StreamingHttpResponse
expect to consume an async generator. If a sync generator is used, it
fully consumes it and then return all the content and we loose the
benefits of using a StreamingHttpResponse.
2026-06-04 15:43:41 +00:00
Anthony LC 559b73bfc2 💄(frontend) display emoji button on hover
The emoji button is now displayed when hovering
the doc header. We reduced the size as well.
2026-06-04 16:22:47 +02:00
Anthony LC 6e60bb9cb1 🐛(frontend) fix crash when orphaned threads
The app expect threads to always have
comments, but in some cases threads can end up without
comments, which causes crashes. This PR adds a
check to delete orphaned threads without comments
to avoid this issue.
2026-06-04 14:46:12 +02:00
Manuel RaynaudandGitHub 3b9a0f0f2d 🐛(backend) order trashbin reponse by most recently deleted
The trashbin response wasn't ordered at all. We want to order by default
by -deleted_at.
2026-06-04 12:29:52 +00:00
Manuel RaynaudandGitHub ccb44aec6c 🐛(backend) close thread DB connections to fix test teardown OperationalError
When all the tests are ran, there is a PytestWarning log present to warn
us that there is remaining database connection open and can not be
closed. It appears that the tests about concurrence are responsible of
leaving connection open. We need to manually close them in these tests.
2026-06-03 14:43:46 +00:00
Anthony LC 9633f5f7a0 🔖(patch) release 5.2.0
Added:
- (backend) support creating subdoc from file
- (frontend) comment side panel
- (buildpack) add PaaS deployment support, tested with Scalingo
- 🔧(backend) allow configuring settings
  OIDC_OP_USER_ENDPOINT_FORMAT
- ️(helm) create a dedicated svc and deployment for
  yprovider converter
- (backend) allow to leave a document
- (frontend) add the presenter mode
- 📈(backend) create a utils to capture event with posthog
- 🔧(backend) new setting DOCUMENT_ALL_ENDPOINT_ENABLED

Changed:
- ♻️(backend) allow global search in sub documents
- (backend) add a breadcrumb in the search response
- ♻️(frontend) move doc action buttons to fix toolbar
- ️(frontend) add aria-hidden to decorative avatar SVGs
  in share modal
- 🏗️(frontend) move comments to its own folder feature

Fixed:
- 🐛(docs) run migration 0027 without superuser role
- 🐛(backend) prevent admins/owners from overwriting other
  users comments
- 🐛(y-provider) return empty output when converting empty
  Yjs document
- 🐛(backend) use computed_link_reach in
  handle_onboarding_document
- 🐛(frontend) fix toolbar blocknote hidden
- 🐛(frontend) fix application crashes when using
  GTranslate and zoom
- 🐛(frontend) fix emoji pdf not matching
- 🐛(backend) fix UnorderedObjectListWarning for
  DocumentAskForAccess viewset
v5.2.0-preprod v5.2.0
2026-06-03 12:09:39 +02:00
AntoLCandAnthony LC 0ed6167b56 🌐(i18n) update translated strings
Update translated files with new translations
2026-06-03 12:06:56 +02:00
Cyril a78269a69f ️(frontend) align mobile header menu aria-label i18n pattern
Use t() on each aria-label branch to match impress i18n convention.
2026-06-03 09:15:29 +02:00
Manuel Raynaud dc692a1594 🔥(backend) remove unused order parameter in Paginator class
In the custom Paginator present in the viewset, an ordering parameter
was set. This parameter is never used by the DRF paginator and can be
removed.
2026-06-02 19:47:38 +02:00
Manuel Raynaud 9bdf36a323 🐛(backend) fix UnorderedObjectListWarning for DocumentAskForAccess
In the tests there is a UnorderedObjectListWarning, we also find this same
warning in the logs in production. This warning appears because the
queryset used by the DocumentAskForAccess paginator is not ordered and
can lead to inconsistent result. Ordering the queryset fix this warning.
2026-06-02 19:47:31 +02:00
Manuel Raynaud 5b70c5aecb 🔧(backend) new setting DOCUMENT_ALL_ENDPOINT_ENABLED
We want to allow or not the usage of the /documents/all/ endpoint. It has
been created to be used for an other purpose than the js client. For
those who don't use it this new settings allow to disable it. By default
it is set to True to keep the same behavior.
2026-06-02 17:28:04 +02:00
Manuel Raynaud b946080881 🔧(doc) add missing POSTHOG_HOST in env.md
We missed to add the setting POSTHOG_HOST in the env.md file
2026-06-02 17:28:04 +02:00
Nathan Panchout 73c3ca8105 (e2e) add presenter mode e2e test
Add a Playwright spec that opens the presenter overlay from the
doc options menu, walks through a multi-slide document built with
dividers, and verifies that Escape closes the overlay.
2026-06-02 16:25:56 +02:00
Nathan Panchout 39390eff0e (frontend) add unit tests for presenter hooks
Cover the three hooks that drive the presenter overlay:
useSlides for divider-based block segmentation,
useBrowserFullscreen for the Fullscreen API wrapper,
and usePresenterShortcuts for the keyboard navigation bindings.
2026-06-02 16:25:56 +02:00
Nathan Panchout 5f7e59a8dd (frontend) add presenter mode
Add a presenter overlay that turns the current document into a
slide deck. The editor's blocks are snapshot at open time and
split into slides on each divider; navigation is driven by
keyboard shortcuts and a floating bar with browser fullscreen
support. The overlay is wired to the doc header toolbox via a
new "Present" entry, lazy-loaded to keep the editor bundle lean.
2026-06-02 16:25:56 +02:00