Repository navigation
refactor(files_sharing): migrate to Vue 3 - #66380
Merged
Merged
Conversation
31 of 32 tasks
susnux
marked this pull request as ready for review
November 5, 2026 18:23
susnux
requested review from
Altahrim,
GhassenKefi,
kristian-zendato,
pabzm,
salmart-dev and
skjnldsv
and removed request for
a team,
Altahrim and
salmart-dev
November 5, 2026 18:23
skjnldsv
reviewed
Nov 5, 2026
skjnldsv
approved these changes
Nov 5, 2026
skjnldsv
left a comment
Member
There was a problem hiding this comment.
Awesome! Looks good overall.
Regarding the now removed sharing APIs here is the search result.
I had a look at who still uses the old APIs. ShareSearch is fine since it doesn't render anything, but ShareTabSections and ExternalShareActions with Vue 2 components will stop showing up:
| App | API | |
|---|---|---|
| sharelisting | ShareTabSections.registerSection |
ours, Vue 2 |
| related_resources | ShareTabSections.registerSection |
ours, Vue 2 |
| nc-permalink | ShareTabSections.registerSection |
community |
| customizing-download-urls | ExternalShareActions.registerAction |
community, stale |
Groupfolders, e2ee, activity and files_downloadlimit are already on registerSidebarSection / registerSidebarAction, so they're fine.
Should we add this to the 36 upgrade guide, and maybe log a warning when a legacy section or action gets registered?
susnux
force-pushed
the
refactor/files-sharing-vue3
branch
from
November 5, 2026 22:04
ece0d0a to
6b59d73
Compare
pringelmann
approved these changes
Nov 6, 2026
All remaining entry points of the app are now built by the Vue 3 frontend. The changes are limited to what Vue 3 and @nextcloud/vue 9 require, components keep their Options API and template style. - Custom elements use defineCustomElement() instead of the web component wrapper, `t`/`n` are provided as global properties like Vue.prototype did before, and the other entries mount with createApp(). - `.sync`, `$set`/`$delete`, `$children` and `.native` are replaced by `v-model:`, plain assignments, template refs and plain listeners. Refs compare raw shares, as entries receive the reactive proxies. - The details tab no longer reassigns its `share` prop, which Vue 3 ignores, and emits the share created on the server instead. - The share update queue is marked raw, as p-queue's private fields break when accessed through a reactive proxy. - Renamed @nextcloud/vue 9 events and refs (`update:modelValue`, `triggerButton`) and the password field `visible` model are used. - moment is replaced by Intl based formatting, as for the other Vue 3 bundles, and the uploader comes from @nextcloud/files/upload. - Styles are no longer injected by the bundles, so the entries with styles are loaded with Util::addStyle(). Legacy share actions and sections registered with Vue 2 components by other apps can no longer be rendered, the web component based registerSidebarAction/registerSidebarSection APIs keep working. Pre-existing lint findings of the stricter Vue 3 config are moved to its suppressions baseline instead of restyling the templates. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
susnux
force-pushed
the
refactor/files-sharing-vue3
branch
from
November 6, 2026 15:32
4fd46e1 to
2133521
Compare
1 task done
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Why? To finally drop the duplicated build process.
All remaining entry points of the app are now built by the Vue 3 frontend.
The changes are limited to what Vue 3 and
@nextcloud/vue9 require, components keep their Options API and template style.defineCustomElement()instead of the web component wrapper..sync,$set/$delete,$childrenand.nativeare replaced byv-model:shareprop, which Vue 3 ignores, and emits the share created on the server instead.p-queueprivate fields break when accessed through a reactive proxy.@nextcloud/vue9 events and refs (update:modelValue,triggerButton) and the password fieldvisiblemodel are used.@nextcloud/files/upload.Legacy share actions and sections registered with Vue 2 components by other apps can no longer be rendered, the web component based
registerSidebarAction/registerSidebarSectionAPIs keep working.Checklist
3. to review, feature component)stable32)AI (if applicable)