Skip to content

[stack] refactor(core): finalize migration to Vue 3 - #64998

Open
susnux wants to merge 4 commits into
worktree-core-vue3-4from
worktree-core-vue3-5
Open

susnux wants to merge 4 commits into
worktree-core-vue3-4from
worktree-core-vue3-5

Conversation

@susnux

@susnux susnux commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Last part of the stack, do not merge alone.

This migrates the unified search to Vue 3, moves all remaining entry points and cleans up legacy build.

Checklist

AI (if applicable)

  • The content of this PR was partly or fully generated using AI

susnux added 4 commits October 1, 2026 00:50
The unified search, the legacy unified search and the menus of the public
pages are built by the Vue 3 toolchain as well, so core is no longer part
of the legacy build: its entries, lint and test scope are removed
there, and the list that split core between the two toolchains is gone.
The symlink stays, as legacy apps still import from core. All core specs
run with the Vue 3 test setup.

Every place that loads one of these scripts now also loads the stylesheet
of the same name.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Assisted-by: ClaudeCode:claude-opus-5-5
The external share entry renders its menu entry and dialog as two roots
now instead of through vue-frag, and hands the attributes of the menu on
to the entry. The dialog reports when it closes, so the entry can open it
again and a spawned dialog is cleaned up.

The menus take the place of their placeholders like the header menus, as
their root carries the id of the placeholder. A primary action with a link
is a link for assistive technologies now, so the page object accepts both.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Assisted-by: ClaudeCode:claude-opus-5-5
The external filter store is a typed setup store. Its pinia instance is
active from the start, so `OCA.UnifiedSearch.registerFilterAction` keeps
working for apps that register a filter before the search is mounted.

The search view and the small result components use `<script setup>`, and
the events that Vue 2 forced into kebab-case are camelCase again. The
people filter and the custom date range follow the popover and modal of
nextcloud-vue 9 through v-model, as their show and hide events are gone.

The specs use the Vue 3 test utils: stubs expose what the view calls on
its children, and the selected row is compared against the raw focus trap.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Assisted-by: ClaudeCode:claude-opus-5-5
The legacy unified search uses `<script setup>`: the results, cursors and
limits per provider are plain reactive records, so `$set` and `$delete` are
gone, and the results forward their native events to the list instead of
re-emitting them. The keyboard listener is removed again when the search
unmounts, and requests are cancelled through an AbortController.

The search field is focused when the menu opens, a frame after
nextcloud-vue 9 reports it as opened: its content is not visible, and
thus not focusable, before.

Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Assisted-by: ClaudeCode:claude-opus-5-5
@susnux
susnux added this pull request to stack #64996 October 1, 2026 16:21
@susnux
susnux requested review from a team as code owners October 1, 2026 16:21
@susnux
susnux requested review from Altahrim, icewind1991, kristian-zendato, salmart-dev, skjnldsv and sorbaugh and removed request for a team October 1, 2026 16:21
@susnux susnux added 3. to review Waiting for reviews technical debt 🧱 🤔🚀 ♻️ refactor Refactor code (not a bug fix, not a feature just refactoring) labels Oct 1, 2026
@susnux susnux added this to the Nextcloud 36 milestone Oct 1, 2026
@susnux susnux mentioned this pull request Oct 1, 2026
29 of 32 tasks

This branch has not been deployed

No deployments
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 ♻️ refactor Refactor code (not a bug fix, not a feature just refactoring) technical debt 🧱 🤔🚀

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants