Skip to content

[stable35] feat(files_sharing): unified sharing sidebar and dialog - #64114

Merged
skjnldsv merged 7 commits into
stable35from
backport/62593/stable35
Sep 8, 2026
Merged

skjnldsv merged 7 commits into
stable35from
backport/62593/stable35

Conversation

@backportbot

@backportbot backportbot Bot commented Sep 8, 2026 •

Copy link
Copy Markdown

Backport of #62593

Warning, This backport's changes differ from the original and might be incomplete ⚠️

Todo

  • Review and resolve any conflicts
  • Review and verify the backported changes
  • Amend HEAD commit to remove the line stating to skip CI

Learn more about backports at https://docs.nextcloud.com/server/stable/go.php?to=developer-backports.

Replace the share editor in the files sidebar with the unified sharing UI: one
flat list of shares ordered by permission, where a share with several recipients
renders as an expandable group showing each recipient's own permission, and
destructive actions live in the overflow menu.

Creating and editing a share opens the Vue 3 dialog from `@nextcloud/sharing`.
The sidebar is still Vue 2, so the dialog is reached through an `OCA.Sharing`
bridge that the Vue 3 entry point registers; once files_sharing is Vue 3 the
bridge can go and the library be imported directly.

The new components are written as `<script setup lang="ts">`, which Vue 2.7
supports and other components of this app already use, so they will not need
rewriting for Vue 3.

The whole thing stays behind `sharing.unified_api_enable`, which is off by
default and is now documented in the config sample. Enabling it is left to a
follow-up.

Signed-off-by: Barthelemy Briand <barthelemy.briand@nextcloud.com>
Assisted-by: ClaudeCode:claude-opus-4-8
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
Every write endpoint allowed one call per one to five seconds, which the sharing
dialog exceeds on its own: it creates a draft when it opens, adds a recipient
per pick, and fans a preset change out over one request per permission. Size the
limits per minute from those flows instead, keep the tighter one on regenerating
a token, and add the missing limit on the per-recipient permission endpoint.

Signed-off-by: Barthelemy Briand <barthelemy.briand@nextcloud.com>
Assisted-by: ClaudeCode:claude-opus-4-8
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
files_sharing is symlinked into the Vue 3 frontend for its bridge entry point,
which also handed its Vue 2 sources to that project's lint and test configs. The
Vue 3 lint config rejects the hyphenated event listeners Vue 2 requires, so
following it broke the share editor, and its Vitest project picked the Vue 2
specs up a second time. Exclude the app from both; the legacy frontend already
covers it with the rules that match the code.

Sharing specs also move to their own serial Playwright project: which sidebar
the sharing tab renders is instance-wide state, so the unified specs and the
share editor specs cannot run beside each other.

Finally, ignore the worker teardown error Vitest raises when a worker still has
console output in flight as it shuts down. It fails a run in which every test
passed, and which files trip it only depends on how they are spread over the
workers.

Signed-off-by: Barthelemy Briand <barthelemy.briand@nextcloud.com>
Assisted-by: ClaudeCode:claude-opus-4-8
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
Unit tests for the share list, its refresh and its delete guards, and a case
pinning the API to off by default.

End to end, 34 tests over opening the sidebar, listing and grouping, the row
actions, and creating and editing shares, including the destructive paths where
a confirmation is declined. On top of those, whole journeys: sharing with a
group and then granting one person more than the group, a link beside an invited
share, abandoning the dialog, and narrowing a single recipient.

The specs turn the API on for their worker, while the share editor specs keep it
off. Recipients cannot list the shares addressed to them through the API yet, so
the tests assert what the share owner sees. The rate limiter is left on so the
specs also stand as the check that its limits are livable.

Signed-off-by: Barthelemy Briand <barthelemy.briand@nextcloud.com>
Assisted-by: ClaudeCode:claude-opus-4-8
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
@backportbot backportbot Bot added enhancement 3. to review Waiting for reviews feature: sharing AI assisted team: Files Code maintained by 📁 Files team labels Sep 8, 2026
@backportbot backportbot Bot added this to the Nextcloud 35.0.1 milestone Sep 8, 2026
susnux and others added 2 commits September 8, 2026 09:18
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
The backport carried the bump in package.json but not the lock, which still
resolved 0.4.0 and made `npm ci` refuse the tree. The nested 0.4.0 copies stay
for @nextcloud/dialogs and @nextcloud/vue, which ask for that major.

Signed-off-by: Barthelemy Briand <barthelemy.briand@nextcloud.com>
Assisted-by: ClaudeCode:claude-opus-4-8
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
@skjnldsv
skjnldsv force-pushed the backport/62593/stable35 branch from b7e653c to 525324d Compare September 8, 2026 07:25
@skjnldsv
skjnldsv marked this pull request as ready for review September 8, 2026 07:36
@skjnldsv
skjnldsv requested review from a team as code owners September 8, 2026 07:36
@skjnldsv
skjnldsv requested review from CarlSchwan, kristian-zendato, leftybournes, salmart-dev and sorbaugh and removed request for a team September 8, 2026 07:36
@skjnldsv

skjnldsv commented Sep 8, 2026

Copy link
Copy Markdown
Member

/compile

Signed-off-by: nextcloud-command <nextcloud-command@users.noreply.github.com>
@skjnldsv
skjnldsv merged commit a7c8bf1 into stable35 Sep 8, 2026
167 of 175 checks passed
@skjnldsv
skjnldsv deleted the backport/62593/stable35 branch September 8, 2026 08:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

3. to review Waiting for reviews AI assisted enhancement feature: sharing team: Files Code maintained by 📁 Files team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants