Repository navigation
feat(widgets): a checklist run, a page of questions at a time - #1764
Closed
rubenvdlinde wants to merge 4 commits into
Closed
rubenvdlinde wants to merge 4 commits into
rubenvdlinde wants to merge 4 commits into
Conversation
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
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
October 17, 2026 10:11
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
Contributor
Quality Report — ConductionNL/nextcloud-vue @
|
| 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.
…-run-widget # Conflicts: # l10n/nl.json
Contributor
Quality Report — ConductionNL/nextcloud-vue @
|
| 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.
Contributor
Author
|
Landed in batch 8 via #1771. |
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.
What
A new
checklist-runwidget (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 insidedevice-frames(#1733). It is generic: nothing in it names an app or what is being inspected.questions: { register, schema, filter, orderField }), with the filter token-resolved (@objectId,@object.<field>,@workspace.<key>). Nothing is read while a token is unresolved.fieldsmaps text, type, options, required and help.yes_no,yes_no_naandchoice(the question'soptions) as radio buttons,numberas a number field,photoanswered with a photo, and anything else as a text field. An optional note per question.typeMapmaps an app's own type values onto these kinds (dossiq: yes_no_na, text, getal, meerkeuze, photo, meting), andchoiceValuessets the stored values for yes, no and n.a. (ja / nee / nvt).inspectionChecklistRun):questionsPathwithitemsKeyreads groups and their questions off the record, both sorted byorderField; the group name shows above its questions.answersPathwrites the changed answers of a page into an array on the record, keyed byanswerKey, with ONE update through the object API under the reader's rights.answerFieldssays where value / number / choice / note / photos / time go.recordPhotosField) and their ids go into the answer.pageSizequestions per page (default 1), "Question n of total" plus acaptiontemplate, and a progress bar. A required question holds the page and says so.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-resolvedcreatefields. Saving happens on Next or Previous. Alternatively asaveActionis dispatched per answer with{ questionId, value, note }; no photos are offered in that mode.finishActionand afinishedevent follow the last page.capture="environment", so a phone opens the camera), uploaded through the answer object's own file upload (uploadHeldFiles) and appended tophotosField. Photos already there are kept. No new storage.l10n/nl.json.No manifest schema change: widget
contentis 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.OpenSpec:
openspec/changes/checklist-run-widget.🤖 Generated with Claude Code