Add an ENV_OVERRIDE variable so docker-compose can load an
extra env file (e.g. common.e2e) on top of common.local.
This lets the e2e runner enable WOPI_CLIENTS=collabora
without touching the default dev config.
Remove platform suffix from snapshot file names by setting a
custom snapshotPathTemplate. This makes snapshots portable
across CI and local environments. Also lock the default
viewport to 1280x720 for consistent visual comparisons.
Verify that a docx file opens in the Collabora editor,
the canvas renders correctly via visual regression, and
clipboard copy-paste works within the iframe. The iframe
clipboard policy now uses wildcards to allow cross-origin
clipboard access needed by Collabora.
Deduplicate file upload and clipboard permission logic
into reusable helpers. This avoids repeating the same
filechooser and grantPermissions boilerplate across
multiple test files.
Collabora does not post messages when a file is renamed
so the frontend cannot reflect the change. Disabling
SupportsRename hides the rename option in the editor.
Setting WOPI_<CLIENT>_OPTIONS as a JSON env var to override
CheckFileInfo properties per client.
This is needed because Collabora does not send a
PostMessage on rename, so we disable SupportsRename
for it to hide the rename UI in the editor.
This feature could also be useful for any other uses as
as a open source feature.
Also cleans up leftover commented-out post_message_origin
code that was replaced by this approach.
Add client inside the WOPI discovery cache among the url.
It allows the possibility to grab the client name from the
CheckFileInfo in order to return customised parameters.
Especially needed for the renaming customization.
OnlyOffice sends a File_Rename PostMessage when a file
is renamed in the editor. We listen for it and propagate
the new name through the component tree so the preview
and explorer update without a full refresh.
Verify that copy link and redirect to parent folder
actions correctly emit posthog events. Introduce a
reusable posthog capture utility for e2e tests that
intercepts the config API and captures emitted events.
Track copy link and redirect to parent folder actions
in the share modal to measure sharing feature adoption.
Also tweak PostHog provider config for dev environment.
We want visibility on how users interact with items
(move, favorite, share access, invitations) to guide
product decisions. A posthog_capture utility centralizes
the settings guard and item metadata enrichment.
Cover background right-click (create menu) and item right-click
(action menu) with rename, delete and star flows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move item action menu items (share, rename, move, download, delete,
favorite) and their modals into a shared useItemActionMenuItems hook,
enabling reuse for the upcoming context menu feature.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move create folder/file menu items and modals into a shared
useCreateMenuItems hook, simplifying ExplorerTreeActions and
ExplorerTree by removing duplicated state and modal management.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Upgrade ui-kit to get ContextMenu and ContextMenuProvider components
needed for the right-click context menu feature.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
To not have to compute the download url, we decided to add a new
property url_permalink, this property will have the download action url
set in it when available.
The media url is subject to change if the file is renamed. If someone is
using it as a permalink, it will lose the ability to download the file.
We created a new download action, always returning a redirection to the
media url.
The new CSS and JS injection features needed documentation.
We merged the old theming doc into a broader customization
guide covering runtime CSS, JS injection, and footer config.
Verify that <link> and <script> tags are injected in the
DOM when FRONTEND_CSS_URL and FRONTEND_JS_URL config values
are set, and absent when they are not.
Allow runtime injection of custom CSS and JS assets via
environment variables. The config API endpoint exposes both
values so the frontend can use them to inject <link> and
<script> tags dynamically.
Ensures that when a user's session expires, they are
redirected to /401, can log back in, and are then sent
back to the page they were originally trying to access.
The OIDC_REDIRECT_ALLOWED_HOSTS setting expects host:port
values without the http:// scheme prefix. Including the
scheme caused redirect validation to fail silently.
The login button on the 401 page was redirecting back to /401
after authentication, causing an infinite redirect loop. We
now explicitly redirect to / so the home page can handle the
post-login navigation properly.
The redirect-after-login logic was inlined in the home page.
Extracting it into a dedicated hook improves reusability and
keeps the page component focused on rendering.
The external API resource server needs to create items
at root level (not only as children). We enable the
"create" action on the items endpoint so that external
clients can upload files to the root.
Add a "New" dropdown with options to create text documents,
spreadsheets and presentations from ODF templates. A modal
lets users name the file before creation. Also register ODF
mimetypes so icons display correctly for these file types.
Cover permission checks, valid/invalid extensions, missing title,
storage errors, duplicate title handling and correct mimetype
assignment for all three template types (odt, ods, odp).
Allow creating files from template (odt, ods, odp) through the
existing children/create endpoints. An optional `extension` field
on CreateItemSerializer triggers template-based file creation
instead of requiring a file upload. This avoids a separate
endpoint and keeps the API surface minimal.
When a file is created from a template, it has content from the start.
The PutFile operation needs to check the stored file size rather than
the request content length to correctly handle lock-free updates.
This ensures the empty file check works correctly for template-created
files.
When a tree node has no children, the expand arrow is absent.
Without this change, the test fails instead of silently
returning. The new failIfLeaf option lets callers choose
whether a leaf should throw. We had an issue with webkit that
was slower than the other navs failing to find the right arrow
after erasing all the starred items. The other navs should have
failed too on this, but were quicker to pick the right arrow
before it dissapears.
We verify that the useSyncUserLanguage hook correctly syncs
language in both directions: backend→frontend (user with a
language set gets the UI in that language) and
frontend→backend (new user with no language gets the browser
locale synced to the backend).
When the user already has a language set in the backend, we
now apply it to the browser on first load. This ensures the
frontend and WOPI editors use the same language as the one
stored in the user profile.