Repository navigation
Conversation
The create dialog gets a menu editor. Every entry opens a view, a table or an external link, can carry an icon and can sit under the top-level entry above it, one level deep. - entries are reordered by dragging or with move buttons, and moved in and out of a parent with indent buttons, so the menu can be arranged with the keyboard - a parent moves together with its children; removing a parent moves its children to the top level Co-authored-by: Ruben van der Linde <ruben@conduction.nl> Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
- the menu only offers tables and views the user can manage, like the resource picker - rows with a missing label, target or a bad link are marked, and creating waits until all are valid - the list operations are pure functions in utils/menuItems.js, covered by a component spec - option labels are translated as one string, and the label is taken from the option's title - only the handle starts a drag, so text in the fields stays selectable - buttons and rows name their item for screen readers - a slower icon load no longer replaces a newer one - no CSS fallbacks, capitalised comments and JSDoc on every method Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
remko48
commented
Oct 13, 2026
- a new menu item no longer starts red: a row shows its errors once a field of it was left - the target error goes through the select's own helper text, so screen readers announce it - releasing the drag handle anywhere, or a cancelled pointer, makes the row plain again Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
- deleting an application retries on a retryable database error and removes the application row first, so on SQLite the transaction holds the write lock before it reads and no longer fails when another request writes meanwhile - Create application stays enabled: submitting shows every menu error and stops while the menu is invalid - the target error is shown in the error style, like the label and link errors Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
Assisted-by: ClaudeCode:claude-opus-5-5
A new application's menu starts with a "Dashboard" item for its start page. It can be renamed and given an icon, but not removed, moved or pointed elsewhere, and no item can be placed above it. It is sent as a page item without an id, which the server resolves to the new start page. A page item from the server passes through the editor as it is. Assisted-by: ClaudeCode:claude-opus-5-5
Assisted-by: ClaudeCode:claude-opus-5-5
This was referenced Oct 15, 2026
The dashboard item of a new application is an ordinary menu item: it can be renamed, moved, nested and removed, and other items can go above it. It keeps opening the start page; a menu sent without an item for the start page still gets one from the server on create. Refs nextcloud#3099 Assisted-by: ClaudeCode:claude-opus-5-5
Refs nextcloud#3099 Assisted-by: ClaudeCode:claude-opus-5-5
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.
The create application dialog gets a menu editor, so an application can be created with its menu in one go.
What changes
MenuItemsEditor: an ordered list of menu items. Each item has an icon, a label and what it opens: a view, a page with widgets, a table or an external link. Only tables and views the user can manage are offered, since the server adds them to the application as resources. Picking a view or table fills in an empty label.ApplicationIcon: shows a material icon by name, used for the menu item icons.menuItems.js: the list operations of the editor, and turning its list into the API payload, includingparentIndexfor nested items.CreateContext: sends the menu with the new application.main, not caused by this stack): the delete removes the application first, inside a transaction that is retried, so it holds the write lock before it reads. On SQLite a delete that read first failed at once when another request wrote meanwhile.Page target
Dashboard item is removable (nextcloud#3099)
The create dialog shows the dashboard item first. It is an ordinary item: you can rename it, give it an icon, move it, nest it and remove it, and other items can go above it. Only what it opens is fixed. The server stores the menu as submitted, so a removed dashboard item stays removed. It is sent as
{targetType: 'page', targetId: null, technicalName: 'dashboard', label}, and the server resolves it to the new start page. A page item from the API passes throughmenuItems.jsunchanged, without a validation error.Tests:
npm run test:component -- --spec cypress/component/menuItems.cy.js: 13 passing.playwright/e2e/context-menu.spec.ts: creates an application in the UI and checks that the dashboard item comes first, renames it and moves a link above it, that the saved menu is the link thenOverview -> page <start page id>, and that the application opens on its start page; a second test removes the item in the dialog and checks the saved menu is empty and the application still opens. 2 passed at 1600px.context.spec.tsandcontext-navigation.spec.ts: 8 passed. One test needs the CI timeout of 120 s on the local instance.The menu is not shown in the UI yet, so the check opens the start page by route. Prepared in the Conduction fork for porting upstream by @remko48. Prepared with Claude Code.
🖼️ Screenshots
🏁 Checklist
/backport to stableX.X🤖 AI (if applicable)