Skip to content

fix(sidebar): render the manifest page's sidebar alongside our own - #3103

Merged
rubenvdlinde merged 2 commits into
developmentfrom
fix/sidebar-renders-manifest-component
Aug 30, 2026
Merged

fix(sidebar): render the manifest page's sidebar alongside our own#3103
rubenvdlinde merged 2 commits into
developmentfrom
fix/sidebar-renders-manifest-component

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

What broke

pages[].sidebarComponent never rendered in this app. The manifest declared it, registry.js registered the component, and it was present in the bundle. Nothing warned, nothing errored, and no sidebar appeared.

The cause is a slot mechanic. CnAppRoot renders the resolved component as the #sidebar slot's fallback, and Vue only uses a fallback when the slot is absent. This app fills that slot with its own rail, so it silently suppressed the manifest's sidebar.

Nine fleet apps fill the slot and all nine lost their ADR-110 flow sidebar. The five that do not fill it rendered it correctly the whole time, which is what identified the cause rather than guesswork.

Why the app could not fix this alone

Slot content compiles in the parent's scope, and inject resolves up the component chain. An app shell mounting CnAppRoot cannot reach the holder CnPageRenderer provides beneath it. Conditionally dropping the slot does not help either, since the fallback only returns when the slot is absent entirely.

So the fix went into the library first: nextcloud-vue#857 passes the resolved component to the slot, released as 2.24.3.

What this does

  • Bumps @conduction/nextcloud-vue to ^2.24.3
  • Renders both in the #sidebar slot: this app's own rail, and whatever the routed manifest page declares

Verified

npm ci and npm run build exit 0. Confirmed in a browser against the dev instance on filinq: /apps/filinq/flows/<id> renders the flow rail (Flow, Steps, Runs, Version, Publish, trigger list) beside the canvas, with the app's own sidebar still mounting.

This app fills CnAppRoot's `#sidebar` slot, and Vue only renders a slot's
fallback when the slot is ABSENT. So filling it suppressed
`pages[].sidebarComponent` silently: no warning, no error, no sidebar. The
ADR-110 flow sidebar was declared in the manifest, registered in registry.js
and present in the bundle, and still never rendered.

Nine apps in the fleet fill this slot and all nine were affected. The five that
do not fill it rendered the flow sidebar correctly, which is what identified
the cause.

CnAppRoot now passes the resolved component to the slot (nextcloud-vue#857), so
this renders both: our own rail, and whatever the routed manifest page asks
for.

Verified: npm run build exits 0.
…bar slot prop

2.24.3 is the release that passes the resolved `pages[].sidebarComponent` into
CnAppRoot's `#sidebar` slot. Without it the App.vue change in this branch is a
no-op, because the slot prop it reads does not exist yet.

Verified on filinq in the browser against the dev instance: the flow rail
(Flow, Steps, Runs, Version, Publish, the trigger list) now renders next to the
canvas, and the app's own sidebar still mounts alongside it.
@rubenvdlinde
rubenvdlinde merged commit e740333 into development Aug 30, 2026
37 of 38 checks passed
@rubenvdlinde
rubenvdlinde deleted the fix/sidebar-renders-manifest-component branch August 30, 2026 11:13
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openregister @ 29598be

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-specs
test-l10n
test-l10n-parity
format
check-schema-l10n
check-l10n-js
composer ✅ 174/174
npm ✅ 547/547
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright 🚨 NO VERDICT — enabled but never ran
Hydra gates

Quality workflow — 2026-08-30 11:45 UTC

Download the full PDF report from the workflow artifacts.

rubenvdlinde added a commit that referenced this pull request Aug 30, 2026
E2E went red on development with

  strict mode violation: locator('.cn-flow-sidebar') resolved to 2 elements
  Error: the flow sidebar did not render — the controls are unreachable again

#3103 fixed the real problem: CnAppRoot only offered the manifest's
`sidebarComponent` as the DEFAULT content of its #sidebar slot, and this
app fills that slot, so the manifest key was live config that rendered
nothing. #3103 passes the component through as a slot prop instead, so
App.vue can render it.

What it did not do is remove the workaround that existed BECAUSE the
manifest key rendered nothing — a hardcoded <FlowDetailSidebar> in
SideBars.vue, whose own comment explains it was there for exactly that
reason. With the manifest route working, both rendered.

So this deletes the workaround, not the fix. The manifest is now the
single source of truth for a page's sidebar, and the comment left behind
says so, because adding a route here for a page that declares
`sidebarComponent` will duplicate it again.

The unused import and components entry go with it — a registration left
behind after its template use is removed is the next reader's puzzle.

src/App.vue is Prettier-formatted here too; the same one-file fix is in
#3107, and whichever lands first makes the other a no-op.

Verified: eslint exits 0, webpack build compiles, npm run format exits 0.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant