Skip to content

feat(widgets): a checklist run, a page of questions at a time - #1764

Closed
rubenvdlinde wants to merge 4 commits into
developmentfrom
feat/checklist-run-widget
Closed

rubenvdlinde wants to merge 4 commits into
developmentfrom
feat/checklist-run-widget

Conversation

@rubenvdlinde

@rubenvdlinde rubenvdlinde commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

What

A new checklist-run widget (CnChecklistRunWidget): a checklist answered a page of questions at a time. Board DqInspectie draws it in the middle phone frame ("Vraag 7 van 24 · Brandveiligheid versie 3", Ja / Nee / Niet van toepassing, a photo for the question, Vorige / Volgende). It works in detail pages and dashboards, and inside device-frames (#1733). It is generic: nothing in it names an app or what is being inspected.

  • Questions: records of a register (questions: { register, schema, filter, orderField }), with the filter token-resolved (@objectId, @object.<field>, @workspace.<key>). Nothing is read while a token is unresolved. fields maps text, type, options, required and help.
  • Types: yes_no, yes_no_na and choice (the question's options) as radio buttons, number as a number field, photo answered with a photo, and anything else as a text field. An optional note per question. typeMap maps an app's own type values onto these kinds (dossiq: yes_no_na, text, getal, meerkeuze, photo, meting), and choiceValues sets the stored values for yes, no and n.a. (ja / nee / nvt).
  • Questions and answers inside the open record (dossiq's inspectionChecklistRun):
    • questionsPath with itemsKey reads groups and their questions off the record, both sorted by orderField; the group name shows above its questions.
    • answersPath writes the changed answers of a page into an array on the record, keyed by answerKey, with ONE update through the object API under the reader's rights.
    • answerFields says where value / number / choice / note / photos / time go.
    • Photos are uploaded to the record's own files (recordPhotosField) and their ids go into the answer.
  • Pages: pageSize questions per page (default 1), "Question n of total" plus a caption template, and a progress bar. A required question holds the page and says so.
  • Answers: one record per question through the OpenRegister object API (answers: { register, schema, filter, questionField, valueField, noteField, photosField, create }), under the reader's own rights. Existing answers prefill the form and are updated; new ones are created with the token-resolved create fields. Saving happens on Next or Previous. Alternatively a saveAction is dispatched per answer with { questionId, value, note }; no photos are offered in that mode. finishAction and a finished event follow the last page.
  • Photos: a native file input (capture="environment", so a phone opens the camera), uploaded through the answer object's own file upload (uploadHeldFiles) and appended to photosField. Photos already there are kept. No new storage.
  • Accessibility: each question is a fieldset with the question as its legend, native radios and a screen-reader "(required)". On each page focus moves to the position line and a polite live region announces it.
  • Translations: Dutch for the new strings in l10n/nl.json.

No manifest schema change: widget content is not typed per widget type.

Verified

  • tests/components/CnChecklistRunWidget.spec.js (10 tests). The widget is new, so the spec cannot pass without it; the 3 record-mode specs also fail against the first version of the widget.
  • l10n, widget-key, registry, catalog and packaging specs: 407 passed.
  • eslint, stylelint, check:jsdoc, check:docs and check:docs-mdx: all exit 0. Docs regenerated; check:docs-fresh exits 0.
  • Full jest, build and e2e are left to CI per the lane gate rules.

OpenSpec: openspec/changes/checklist-run-widget.

🤖 Generated with Claude Code

New `checklist-run` widget (CnChecklistRunWidget): questions listed from a
register with a token-resolved filter, shown pageSize at a time as
fieldsets with radio choices (yes_no, yes_no_na, choice) or a text field,
a note and photos. Answers are saved one record per question through the
object API under the reader's rights, or through an app saveAction;
photos go up through the answer object's own file upload. Focus and a
live region follow each page. Board DqInspectie; usable in device-frames.

Assisted-by: ClaudeCode:claude-opus-5-5
questionsPath (with itemsKey groups, both sorted by orderField) reads the
questions off the open record; answersPath writes the changed answers of a
page into an array on it, keyed by answerKey, with one update through the
object API. typeMap and choiceValues map an app's type and value names
onto the kinds (yes_no, yes_no_na, choice, number, photo, text). Photos go
to the record's own files and their references into the answer. The
separate-schema mode stays.

Assisted-by: ClaudeCode:claude-opus-5-5
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/nextcloud-vue @ b009e9e

Check PHP Vue Security License Tests
lint ⏭️
phpcs ⏭️
phpmd ⏭️
psalm ⏭️
phpstan ⏭️
phpmetrics ⏭️
eslint ✅
stylelint ✅
build ✅
test ✅
check-build ✅
check-vue3-compile ✅
check-public-safe ✅
check-journey-vocabulary ✅
check-docs ✅
check-docs-mdx ✅
check-jsdoc ✅
check-integration-parity ✅
check-peers ✅
check-docs-fresh ✅
check-a11y ✅
check-smoke ✅
composer ✅ ✅
npm ✅ ✅ 643/643
app:check-code ⏭️
info.xml ⏭️
REUSE ✅
lockfile sync ✅
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️
Hydra gates ⏭️

Quality workflow — 2026-10-17 10:24 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/nextcloud-vue @ 9d77cb0

Check PHP Vue Security License Tests
lint ⏭️
phpcs ⏭️
phpmd ⏭️
psalm ⏭️
phpstan ⏭️
phpmetrics ⏭️
eslint ✅
stylelint ✅
build ✅
test ✅
check-build ✅
check-vue3-compile ✅
check-public-safe ✅
check-journey-vocabulary ✅
check-docs ✅
check-docs-mdx ✅
check-jsdoc ✅
check-integration-parity ✅
check-peers ✅
check-docs-fresh ✅
check-a11y ✅
check-smoke ✅
composer ✅ ✅
npm ✅ ✅ 643/643
app:check-code ⏭️
info.xml ⏭️
REUSE ✅
lockfile sync ✅
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️
Hydra gates ⏭️

Quality workflow — 2026-10-17 10:47 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde

Copy link
Copy Markdown
Contributor Author

Landed in batch 8 via #1771.

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