Commit Graph

1786 Commits

Author SHA1 Message Date
Fabre Florian
4644bb4f47 🔧(compose) disable indexer in default configuration
Set SEARCH_INDEXER_CLASS=None as default configuration for dev.
Rename docker network 'lasuite-net' as 'lasuite' to match with Drive
configuration.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
de3dfbb0c7 (backend) keep ordering from fulltext search in results
Keep ordering by score from Find API on search/ results and
fallback search still uses "-update_at" ordering as default

Refactor pagination to work with a list instead of a queryset

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
b0e7a511cb (backend) throttle indexation tasks instead of debounce (simplier)
Replace indexer_debounce_lock|release functions by indexer_throttle_acquire()
Instead of mutex-like mechanism, simply set a flag in cache for an amount of
time that prevents any other task creation.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
044c1495a9 (backend) some refactor of indexer classes & modules
Rename FindDocumentIndexer as SearchIndexer
Rename FindDocumentSerializer as SearchDocumentSerializer
Rename package core.tasks.find as core.task.search
Remove logs on http errors in SearchIndexer
Factorise some code in search API view.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
6f282ec5d6 🔧(backend) setup Docs app dockers to work with Find
Add nginx with 'nginx' alias to the 'lasuite-net' network (keycloak calls)
Add celery-dev to the 'lasuite-net' network (Find API calls in jobs)
Set app-dev alias as 'impress' in the 'lasuite-net' network
Add indexer configuration in common settings

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
580d25b79f 🔧(backend) tool for valid fernet key used in OIDC token storage
Add bin/fernetkey that generates a key for the OIDC_STORE_REFRESH_TOKEN_KEY
setting.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
a48f61e583 (backend) Index deleted documents
Add SEARCH_INDEXER_COUNTDOWN as configurable setting.
Make the search backend creation simplier (only 'get_document_indexer' now).
Allow indexation of deleted documents.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
331a94ad2f (backend) Index partially empty documents
Only documents without title and content are ignored by indexer.
2025-12-16 22:10:03 +01:00
Fabre Florian
01c31ddd74 (backend) add fallback search & default ordering
Filter deleted documents from visited ones.
Set default ordering to the Find API search call (-updated_at)
BaseDocumentIndexer.search now returns a list of document ids instead of models.
Do not call the indexer in signals when SEARCH_INDEXER_CLASS is not defined
or properly configured.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
bf978b5376 (backend) refactor indexation signals and fix circular import issues
Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 22:10:03 +01:00
Fabre Florian
24460ffc3a (backend) improve search indexer service configuration
New SEARCH_INDEXER_CLASS setting to define the indexer service class.
Raise ImpoperlyConfigured errors instead of RuntimeError in index service.

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 21:48:23 +01:00
Fabre Florian
d721b97f68 (backend) add document search view
New API view that calls the indexed documents search view
(resource server) of app "Find".

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 21:48:23 +01:00
Fabre Florian
3228f65092 (backend) add unit test for the 'index' command
Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 21:48:23 +01:00
Fabre Florian
6ba473f858 🔧(compose) Add some ignore for docker-compose local overrides
Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 21:48:23 +01:00
Samuel Paccoud - DINUM
72238c1ab6 (backend) add async triggers to enable document indexation with find
On document content or permission changes, start a celery job that will call the
indexation API of the app "Find".

Signed-off-by: Fabre Florian <ffabre@hybird.org>
2025-12-16 21:48:23 +01:00
Samuel Paccoud - DINUM
1d9c2a8118 (backend) add document search indexer
Add indexer that loops across documents in the database, formats them
as json objects and indexes them in the remote "Find" mico-service.
2025-12-16 21:48:23 +01:00
Samuel Paccoud - DINUM
f4bdde7e59 (backend) add dummy content to demo documents
We need to content in our demo documents so that we can test
indexing.
2025-12-16 21:48:23 +01:00
Samuel Paccoud - DINUM
4dc3322b0d 🔧(compose) configure external network for communication with search
Search in Docs relies on an external project like "La Suite Find".
We need to declare a common external network in order to connect to
the search app and index our documents.
2025-12-16 21:48:23 +01:00
Anthony LC
23216d549e 🛂(backend) stop throttling collaboration servers
We observe some throttling pick here and there.
We observed that when the collaboration has a
problem, it is retrying to connect, leading to more
requests to the django backend. At one point, the
throttling is reached and the user would not
be able to use the application anymore.
Now when the request comes from a collaboration
server, we do not throttle it anymore.
2025-12-16 14:13:30 +01:00
Anthony LC
2f612dbc2f ♻️(frontend) improve accessibility CalloutBlock
The recent update of Blocknote brokes a test
because a element was not easily accessible anymore.
We improved the CalloutBlock to be able to
be closed when "escape" is pressed, we improve
the positionning of the EmojiPicker too.
2025-12-16 10:48:41 +01:00
Anthony LC
bbf834fb6e ♻️(frontend) isConnected when authenticated
WebSocketStatus.Connected does not mean
we are totally connected because authentication
can still be in progress and failed.
So we will use the event onAuthenticated to assert
that we are fully connected.
2025-12-16 10:48:41 +01:00
Anthony LC
4cf0e15406 ⬆️(dependencies) bump blocknote to 0.44.2
We bump the blocknote dependencies to version
0.44.2 to incorporate the latest features
and bug fixes.
It seems to fix an issue with Titap, when the text
was selected and the user clicked
on the Go Back button of the browser, the
application was crashing.
"[tiptap error]: The editor view is not available.
Cannot access view['dom']. The editor may not be
mounted yet."
2025-12-16 10:48:41 +01:00
Anthony LC
31bd475418 🐛(frontend) paste content with comments from another document
When pasting comments, the data-bn-thread-id
attribute is present in the clipboard data.
This indicates that the pasted content contains comments.
But if the content with comments comes from another
document, it will create orphaned comments that
are not linked to this document and create errors.
To avoid this, we refresh the threads to ensure
that only comments relevant to the current document
are displayed.
2025-12-15 17:17:21 +01:00
Sylvain Boissel
08fb191e6b 🌐(backend) internationalize demo
This allows the demo to generate user and filenames with other locales
than English, for all languages defined in the project's settings.
In particular, it allows the generation of accented names, which were
previously missing.
2025-12-15 12:43:57 +01:00
Sylvain Boissel
a49f3b6b32 📝(changelog) move entry in unreleased section
The changelog line was at the wrong place after rebase
2025-12-15 12:02:00 +01:00
Manuel Raynaud
bd9a3334db 🔧(helm) add user name in oidc scopes
The given_name and usual_name is not configured in the oidc scopes. When
a user connect to docs with the dev and feature configuration, we don't
have this informations.
2025-12-15 11:22:26 +01:00
Sylvain Boissel
96299f4b7f 🚸(backend) use unaccented full name for user search
We have the user full name through OIDC in the database, but the search only
used the email field.
This change allows to search for a user by their first and/or
last name (fix #929).
Given that user names are more likely than emails to include diacritics, it
unaccents both the query and the database entry for search (fix #1091).
It also unaccents for email so that internationalized domain names are
managed whether or not the accent is included in the search.
An unaccented gin index is added on users full_name an email fields.
Using a manual migration because a wrapper around unaccent is necessary
to make it IMMUTABLE (cf.
https://stackoverflow.com/questions/9063402/ )
2025-12-15 11:22:26 +01:00
renovate[bot]
52bd31c0d5 ⬆️(dependencies) update next to v15.5.9 [SECURITY] 2025-12-12 20:47:48 +00:00
renovate[bot]
35be4be158 ⬆️(dependencies) update next to v15.5.8 [SECURITY] 2025-12-12 04:07:18 +00:00
Anthony LC
05aa225aed ⬆️(dependencies) Bump mdast-util-to-hast
Bumps mdast-util-to-hast from 13.2.0 to 13.2.1.
- [Release notes](https://github.com/syntax-tree/mdast-util-to-hast/releases)

---
updated-dependencies:
- dependency-name: mdast-util-to-hast
  dependency-version: 13.2.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-11 12:09:03 +01:00
Manuel Raynaud
d65d0d1450 📝(changelog) move entry in unreleased section
The commit f5425f5 was created before release 4.1.0 but merged after and
the corresponding entry has not been move in the unreleased section.
2025-12-10 17:23:26 +01:00
Manuel Raynaud
b11d3acd01 📝(kubernetes) update doc with our dev-backend helm chart
We removed the usage of bitnami charts and created our own dev-backend
helm chart. We need to update the kubernetes document accordingly.
2025-12-10 17:23:13 +01:00
Manuel Raynaud
8091cbca23 (backend) allow to create a new user in a marketing system
We want to create a new user in a marketing system to create a dedicated
onboarding for each of them. The marketing service is implemented in the
django-lasuite library and it is possible to pick the backend we want
or implement a new one following the documentation on this library.
2025-12-10 16:30:00 +01:00
Anthony LC
12cc79b640 🔖(minor) release 4.1.0
Added:
- ️(frontend) export html

Changed:
- (frontend) improve accessibility:
  - (frontend) add skip to content button for keyboard
    accessibility
  - (frontend) fix toggle panel button a11y labels
- 🔒️(frontend) remove dangerouslySetInnerHTML from codebase
- ️(frontend) improve Comments feature

Fixed:
- 🐛(nginx) fix / location to handle new static pages
2025-12-10 11:50:14 +01:00
Anthony LC
af15e77713 🐛(frontend) keep editor mounted when resize window
When resizing the window and crossing the desktop
breakpoint, the editor was unmounted. It could
lead to loss of data if there were unsaved changes,
and tiptap crash if the toolbar was used while the
editor was unmounted.
It was caused by the ResizableLeftPanel component
which was rerendering the editor.
We now keep the editor mounted when resizing
the window, by keeping the ResizableLeftPanel
component rendered but setting its size to 0
and disabling the resize handle.
2025-12-10 11:50:14 +01:00
Anthony LC
99131dc917 🐛(frontend) check tiptap editor in dom
When zooming in and out quickly, the editor
instance may not be fully mounted, leading to
errors when accessing its document. This commit
adds checks to ensure the editor and its view
are mounted before attempting to access the
document, preventing potential runtime errors.
2025-12-10 11:50:14 +01:00
AntoLC
90651a8ea6 🌐(i18n) update translated strings
Update translated files with new translations
2025-12-09 12:20:34 +01:00
Anthony LC
9c575e397c 🔒️(frontend) remove dangerouslySetInnerHTML from codebase
dangerouslySetInnerHTML were introduced to quickly
render translated strings containing HTML,
but they can lead to security vulnerabilities
if not handled properly.
Better to use React components to ensure safety.
2025-12-09 11:34:25 +01:00
Anthony LC
a6b472aa51 ️(frontend) improve Comments feature
Improve the comments feature to reduce annoyance:
- gives focus on input when opening comment threads
- hide comment button when mobile view
- improve contrast of overline commented text
- remove thread if last comment deleted
- scroll to bottom thread when adding new comment
2025-12-09 11:17:42 +01:00
Anthony LC
9fcc221b33 💄(export) add style file to html export
We now include a CSS style file in the exported
ZIP archive. This file contains styles that
enhance the appearance of the exported HTML
document when viewed in a web browser to look
more like the original document.
2025-12-09 10:52:36 +01:00
Cyril
acdde81a3d (frontend) fix toggle panel button a11y with dynamic label
improves screen sr by updating label and state indication dynamically

Signed-off-by: Cyril <c.gromoff@gmail.com>
2025-12-09 09:57:12 +01:00
Cyril
9b03754f88 (e2e) add test for accessible html export from export modal
checks generated zip contains html and embedded media files

Signed-off-by: Cyril <c.gromoff@gmail.com>
2025-12-09 09:24:14 +01:00
Cyril
0805216cc6 (frontend) added accessible html export and moved download option
replaced “copy as html” with export modal option and full media zip export

Signed-off-by: Cyril <c.gromoff@gmail.com>
2025-12-09 09:24:10 +01:00
Cyril
5e398e8e79 (frontend) move html option to downloads section
makes the option less visible as it's not useful to most users

Signed-off-by: Cyril <c.gromoff@gmail.com>
2025-12-09 09:22:30 +01:00
renovate[bot]
00ae7fdd60 ⬆️(dependencies) update django to v5.2.9 [SECURITY]
upgrade to django 5.2.9
2025-12-08 14:36:21 +00:00
renovate[bot]
8036f16cc3 ⬆️(dependencies) update next to v15.5.7 [SECURITY] 2025-12-03 21:49:27 +00:00
Manuel Raynaud
54fe70d662 🐛(nginx) fix / location to handle new static pages
The / location is not trying the $uri/index.html file. We should try
this instad of $uri/ because when a new static page is added, we always
have this pattern.
2025-12-03 12:14:19 +01:00
Cyril
1e37007be9 (a11y) add skip to content button for keyboard accessibility
add SkipToContent component to meet RGAA skiplink requirement

Signed-off-by: Cyril <c.gromoff@gmail.com>

(frontend) add e2e test for skiplink and fix broken accessibility test

ensures skiplink behavior is tested and stabilizes a failing accessibility test

Signed-off-by: Cyril <c.gromoff@gmail.com>
2025-12-02 13:37:58 +01:00
Anthony LC
77df9783b7 🔖(major) release 4.0.0
Added:
-  Add comments feature to the editor
- (backend) Comments on text editor
- (frontend) link to create new doc

Changed:
- ️(sw) stop to cache external resources likes videos
- 💥(frontend) upgrade to ui-kit v2
- ️(frontend) improve perf on upload and table of contents
- (frontend) improve accessibility:
  - (frontend) improve share modal button accessibility
  - (frontend) improve screen reader support in DocShare modal

Fixed:
- 🐛(frontend) fix toolbar not activated when reader
- 🐛(frontend) preserve left panel width on window resize
- 🐛(frontend) prevent duplicate as first character in title
2025-12-02 10:01:48 +01:00
Anthony LC
350fe17918 🐛(sw) keep incremental versioning for IndexedDB
IndexDB need a integer versioning when upgrading
the database, it has to be incremental.
Before the fix, version 4.0.0 would give 400, when
3.10.0 would give 3100. That would cause an error
and the database would be destroyed then recreated.
We improve the way we compute the version number
to ensure it is always incremental, avoiding such
issues.
2025-12-02 10:01:48 +01:00