Skip to content

feat(manifest): convert Voorstellen list page to declarative type:index#429

Merged
rubenvdlinde merged 1 commit into
developmentfrom
feat/voorstellen-manifest-index
May 12, 2026
Merged

feat(manifest): convert Voorstellen list page to declarative type:index#429
rubenvdlinde merged 1 commit into
developmentfrom
feat/voorstellen-manifest-index

Conversation

@rubenvdlinde
Copy link
Copy Markdown
Contributor

Voorstellen was a type:"custom" page backed by VoorstelList.vue — a hand-rolled table with filter-tabs, computed columns (step-progress, waiting actor, days-in-step) and a parafering-reminder row action. With @conduction/nextcloud-vue@1.0.0-beta.38's columns[].formatter, columns[].widget and actions[].handler (registry-fn dispatch), all of that is now declarative.

What changed

  • package.json@conduction/nextcloud-vue ^1.0.0-beta.29^1.0.0-beta.38.
  • src/services/formatters.js (new) — cell-formatter registry: voorstelType / voorstelStatus (also rendered via widget:"badge") / voorstelStepProgress / voorstelWaitingActor / voorstelDaysInStep, pure (value, row) => string fns ported from VoorstelList.vue. (Separate from mapFormatters.js — the type:"map" registry.)
  • src/main.js / src/App.vue — import + clone formatters, pass to App, forward :formatters to <CnAppRoot> (→ cnFormatters).
  • src/manifest.jsonVoorstellentype:"index" on voorstel: columns onderwerp / type (fmt) / status (fmt + badge) / Stap (fmt) / Wacht op (fmt) / Dagen in stap (fmt) / steller; actions:[{ id:"reminder", handler:"voorstelReminder" }]; sidebar:{ enabled:true, showMetadata:true }.
  • src/customComponents.js — drop VoorstellenView; add voorstelReminder (function entry — CnIndexPage dispatches the reminder action to it with { actionId, item }, replacing the bespoke sendReminder()).
  • Delete src/views/voorstellen/VoorstelList.vue (~373 lines). VoorstelDetail stays type:"custom" (parafeerroute multi-step approver flow).

Rework note (accepted)

The old active / afgerond / alle filter-tabs aren't carried over — the page shows all voorstellen with the index search box. A base filter on the index config (a planned nc-vue follow-up) would restore the "actief by default" view; a status sidebar facet gives ad-hoc filtering once the schema marks status facetable.

Verify

npm run build compiles (benign warnings only); npm run lint 0 errors; manifest parses, no dup page ids. Browser verification pending on this PR (the dev-container procest is on a different branch / lib version).

…:index

`Voorstellen` was a `type:"custom"` page backed by VoorstelList.vue — a
hand-rolled table with filter-tabs, computed columns (step-progress, waiting
actor, days-in-step) and a parafering-reminder row action. With
@conduction/nextcloud-vue beta.38's `columns[].formatter`, `columns[].widget`
and `actions[].handler` (the registry-fn dispatch path), all of that is now
declarative:

- package.json: @conduction/nextcloud-vue ^1.0.0-beta.29 → ^1.0.0-beta.38.
- src/services/formatters.js (new): the cell-formatter registry —
  voorstelType / voorstelStatus (also rendered via `widget:"badge"`) /
  voorstelStepProgress / voorstelWaitingActor / voorstelDaysInStep, all pure
  `(value, row) => string` fns ported from VoorstelList.vue. (Separate from
  mapFormatters.js, which is the `type:"map"` registry.)
- src/main.js / src/App.vue: import + clone `formatters`, pass it to App and
  forward `:formatters` to `<CnAppRoot>` (provided to CnDataTable/CnCellRenderer
  as `cnFormatters`).
- src/manifest.json: `Voorstellen` → `type:"index"` on `voorstel` —
  columns onderwerp / type (fmt) / status (fmt + badge) / Stap (fmt) /
  Wacht op (fmt) / Dagen in stap (fmt) / steller; `actions: [{ id:"reminder",
  handler:"voorstelReminder" }]`; `sidebar:{ enabled:true, showMetadata:true }`.
- src/customComponents.js: drop `VoorstellenView`; add `voorstelReminder` (a
  function entry — CnIndexPage dispatches the `reminder` action to it with
  `{ actionId, item }`, replacing the bespoke `sendReminder()` from the
  deleted view).
- Delete src/views/voorstellen/VoorstelList.vue (~373 lines). VoorstelDetail
  stays `type:"custom"` (the parafeerroute multi-step approver flow).

Rework note (accepted): the old active/afgerond/alle filter-tabs aren't carried
over — the page now shows all voorstellen with the index search box; a base
filter on the `index` config (a planned nc-vue follow-up) would restore the
"actief by default" view, or a `status` facet on the sidebar gives ad-hoc
filtering once the schema marks `status` facetable.

Build: webpack compiles (benign warnings only); `npm run lint` 0 errors;
manifest parses + no dup page ids. Browser verification pending on this PR
(the dev-container procest is on a different branch / lib version).
@github-actions
Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/procest @ edb6634

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm ✅ 420/420
PHPUnit
Newman ⏭️
Playwright

Coverage: 0% (0/81 statements)

Spec coverage: 4% (19 tests / 456 specs)


Quality workflow — 2026-05-12 19:39 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde rubenvdlinde merged commit 2dea17a into development May 12, 2026
24 of 25 checks passed
@rubenvdlinde rubenvdlinde deleted the feat/voorstellen-manifest-index branch May 12, 2026 22:17
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