This repository was archived by the owner on May 29, 2026. It is now read-only.
feat(nav): manifest-driven CnAppNav — three-section menu + roadmap + org switcher preserved#1919
Merged
Merged
Conversation
…n model)
Replaces the hand-built MainMenu.vue (raw NcAppNavigation + per-item
NcAppNavigationItem) with manifest-driven CnAppNav fed by a new
src/manifest.json. The menu is now declared as data in three sections:
- main: AI Chat, Registers, Schemas, Templates, Search / views, Files, Agents
- footer: Documentation (-> openregister.conduction.nl), Features & roadmap
(pinned to the bottom via NcAppNavigationItem's native pinned prop)
- settings: Organisations, Applications, Data sources, Configurations, Entities,
Deleted, Audit Trails, Search Trails, Webhooks, AVG, Reports,
Endpoints (inside the NcAppNavigationSettings gear foldout)
The active-organisation switcher is preserved via CnAppNav's new
#primary-action slot (its label is live store state, so it can't be a
static manifest field). nav.includePersonalSettings is false — OR has no
per-user NcAppSettingsDialog and isn't wrapped in CnAppRoot.
Supporting changes:
- router/index.js: every route gets a name (CnAppNav navigates by named
route; existing path-based push() calls are unchanged).
- main.js: registers the navigation MDI icons by name so CnAppNav resolves
each menu item's icon against ICON_MAP.
DRAFT: depends on @conduction/nextcloud-vue#444 (the #primary-action
slot). Dep is temporarily ^1.0.0-beta.102; must bump to the version that
publishes the slot before merge, otherwise the org button is inert.
…y-action slot) beta.103 publishes the CnAppNav #primary-action slot (nextcloud-vue#444) that MainMenu.vue's active-organisation button depends on. Unblocks the manifest-driven nav conversion.
…driven-nav # Conflicts: # package-lock.json # package.json
…or beta.103 The development merge auto-kept this branch's stale vue (^2.6 || ^3.0) and vue-frag (^1.0.0) instead of development's ^2.7.16 / ^1.4.3. The stale vue spec mismatched overrides.vue (^2.7.16), tripping npm EOVERRIDE and leaving the lockfile out of sync (npm ci EUSAGE). Take development's values and regenerate the lockfile cleanly so npm ci installs beta.103.
…anifest OR's tests/validate-manifest.js crashed on the new src/manifest.json: ajv-formats@2 expects ajv@8 but a transitive ajv@6 resolves (addFormats reads undefined ajv.opts.code), and ajv@6 can't compile the draft-2020 schema. This path never ran before because OR had no manifest. Wrap addFormats + ajv.compile so any setup failure degrades to the existing structural lint instead of crashing the validate gate. Also add an empty 'pages': [] to the nav-only manifest (the structural lint requires a pages array; it's valid + clarifies intent) and a @param on handleNavigate.
Two files carried lint errors from an earlier coverage retrofit (also
red on development's own Code Quality):
- ObjectDetails.vue: NcLoadingIcon/BPagination/ExclamationThick/OpenInNew
were imported and used in the template but never registered in
components:{}, so no-unused-vars flagged the imports. Register them
(correct fix — the template references them).
- DashboardIndex.vue: the <script setup> block's ensureIntegrationRegistry()
call sat between the setup imports and the Options <script> imports, so
import/first flagged all 7 Options-block imports. Move the import + call
into the Options block after its imports; <script setup> keeps only the
template-exposed store imports.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
What
Converts OpenRegister's hand-built
MainMenu.vue(rawNcAppNavigation+ 21 hand-codedNcAppNavigationItems) to manifest-drivenCnAppNavfed by a newsrc/manifest.json. Brings OR onto the fleet three-section nav model (matching opencatalogi/openconnector) and adds the standard footer items.The menu is now data:
/features-roadmaproute)The active-organisation switcher (live store-driven label) is preserved via
CnAppNav's new#primary-actionslot — shipped in @conduction/nextcloud-vue 1.0.0-beta.103 (#444, merged).Supporting changes
router/index.js— every route now has aname(CnAppNav navigates by named route; existing path-basedpush()calls unchanged; pre-existing names preserved).main.js— registers the nav's MDI icons by name soCnAppNavresolves each item'siconagainstICON_MAP.nav.includePersonalSettings: false— OR has no per-userNcAppSettingsDialogand isn't wrapped inCnAppRoot.@conduction/nextcloud-vue→^1.0.0-beta.103; mergeddevelopment(which bumped@nextcloud/vue→^8.39.0).Verification
Built against the
#444code viauseLocalLib, deployed to the dev container, Playwright-verified:CnAppNavmounts; org-switcher shows the live org name ("Default Organisation") via the slot/registers, only that item active)/features-roadmapNotes
vueoverride-vs-dep mismatch makes a fullnpm installregen EOVERRIDE —npm ci(CI) installs from the lockfile without re-evaluating overrides.useNcFormBoxconsole error in the dev container traces to a staleopenregister-integration-global.js(not a webpack entry ondevelopment, not produced by this build) — orthogonal, absent from clean CI builds./features-roadmap) 404 server-side (SPA history-mode catch-all) — pre-existing, unrelated.🤖 Generated with Claude Code