Skip to content

feat(page-layouts): a maker can lay out a case page per case type - #1023

Merged
rubenvdlinde merged 9 commits into
developmentfrom
feat/case-page-layout-editor
Oct 2, 2026
Merged

rubenvdlinde merged 9 commits into
developmentfrom
feat/case-page-layout-editor

Conversation

@rubenvdlinde

@rubenvdlinde rubenvdlinde commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Change case-page-layout-per-case-type (not archived: two tasks are owed by sibling repos). A maker can now author a page layout per case type in the detail-page editor: the tabs and their kinds and order, a widget grid with four widths, display conditions and a high-contrast mark per widget, the header fields, the task-list columns and search fields, and the document upload fields with their visibility and default. The layout is saved as a pageLayout object and served by the buildiq-page-layout leaf.

What this PR adds on top of what development already has (schema, leaf, applies-to panel):

  • PageLayoutBodyEditor.vue inside AppliesToPanel.vue (tasks 6.1 to 6.6). Tabs are reordered with Up and Down buttons instead of dragging, so a keyboard and a screen reader can do it (WCAG 2.5.7); the design is corrected in tasks.md. Save stays disabled while a hidden upload field has no default; the server refuses it as well.
  • A save warns when a leaf tab names a leaf id no installed app offers (task 2.2): PageLayoutAuthoringService::save() now reads the ids from OpenRegister's IntegrationRegistry::listIds() and stays silent when the registry is absent.
  • Three seed layouts for dossiq/case in the demo dataset (schema-wide, bouwvergunning, evenementenvergunning), each validated against the pageLayout fragment.
  • English and Dutch strings, docs/elements/case-type-layouts.md, and tests/e2e/page-layout-editor.spec.ts (API level).

Rows: form-layout-per-type and form-screen-override stay building. Their remaining half is a nextcloud-vue change (runtime-detail-layout: CnDetailPage merges the leaf's answer over its manifest config, task 3.2) and a hand-off to dossiq for its task list and upload dialog (task 8.5). Both are drafted for Ruben, not filed.

Also in this PR, from the hermiq lane: ai-in-app-assistant and ai-record-summary are set built with a reference to hermiq's archived change 2026-10-01-agents-bound-to-their-app (hermiq development d3cac1131), after reading hermiq's development.

Tests (written by the previous lane; green on this head):

  • 2.2: PHPUnit PageLayoutAuthoringServiceTest::testASaveWarnsOnALeafTheRegistryDoesNotKnow.
  • 6.1 to 6.6: Vitest tests/components/PageLayoutBodyEditor.spec.js, tests/components/AppliesToPanel.spec.js.

Inherited, not fixed here: the vendored hydra-gates in composer check:strict fail gate-101 on the five buildiq schemas that carry reasoned no-demo skips since #853; CI's required gate run (hydra-gates@main) honours the reasons.

Live check: open an app's detail-page editor, Applies to: schema case, type property caseType, value bouwvergunning; add a widget tab with two widgets of width Small and Large, add a condition status is not empty, add an upload field confidentiality hidden with default intern, save as Published. GET /apps/buildiq/api/page-layouts lists it; the leaf buildiq-page-layout for a bouwvergunning case returns the tabs in order.

Verification on this head (base development f05abe1, which the branch contains): composer check:strict: lint, phpcs, phpmd, psalm, phpstan green, PHPUnit OK (1329 tests); its vendored gates fail gate-101 (inherited, above) and gate-16 on seven untagged editor helpers, which the last commit tags. CI's gate run (hydra-gates@main, full scope, --require-full-coverage) on the final head: all 85 applicable gates passed, exit 0. npm lint 0 (warnings only), stylelint 0, format 0, vitest 0 (1700 tests), test:l10n 0, check:l10n-js 0, check:schema-l10n 0, check:manifest 0, check:gitignore 0, check:nc-floor 0. parity_verify --strict: census only. No local production build; CI's Frontend Build answers that.

🤖 Generated with Claude Code

…-layout-editor

# Conflicts:
#	l10n/en.js
#	l10n/en.json
#	l10n/nl.js
#	l10n/nl.json
…hermiq

Both rows are owned by ConductionNL/hermiq and were built there in the
change archived as 2026-10-01-agents-bound-to-their-app (hermiq
development d3cac1131). Set them built here with that reference.
Seven editor helpers had no @SPEC tag, which the spec-coverage gate counts
as new untraced methods.
@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/buildiq @ a81674e

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
test-l10n ✅
check-gitignore ✅
check-nc-floor ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
composer ✅ ✅ 106/106
npm ✅ ✅ 752/752
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ❌
Newman ✅
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ✅

Quality workflow — 2026-10-01 23:03 UTC

Download the full PDF report from the workflow artifacts.

…-layout-editor

# Conflicts:
#	l10n/en.js
#	l10n/en.json
#	l10n/nl.js
#	l10n/nl.json
Covers the four null paths of knownLeafIds() (not resolvable, no
listIds(), throws, answers no list) that CI's coverage guard read as
new code without tests.
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/buildiq @ 0d5911b

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
test-l10n ✅
check-gitignore ✅
check-nc-floor ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
composer ✅ ✅ 109/109
npm ✅ ✅ 742/742
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅
Newman ✅
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ✅

Quality workflow — 2026-10-02 08:03 UTC

Download the full PDF report from the workflow artifacts.

…-layout-editor

# Conflicts:
#	l10n/en.js
#	l10n/en.json
#	l10n/nl.js
#	l10n/nl.json
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/buildiq @ d18b20c

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
test-l10n ✅
check-gitignore ✅
check-nc-floor ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
composer ✅ ✅ 109/109
npm ✅ ✅ 742/742
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅
Newman ✅
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ✅

Quality workflow — 2026-10-02 11:58 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit aa7b486 into development Oct 2, 2026
47 checks passed
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