Skip to content

feat(customization): PageBuilder pages grid + realm/app page selectors#168

Merged
windischb merged 1 commit into
developfrom
feat/page-builder-grid-selects
Jul 22, 2026
Merged

feat(customization): PageBuilder pages grid + realm/app page selectors#168
windischb merged 1 commit into
developfrom
feat/page-builder-grid-selects

Conversation

@windischb

Copy link
Copy Markdown
Contributor

What

UX refinement of the PageBuilder variant model (ADR-0001, follows #167) per field feedback. The variant library becomes realm-global and the surfaces get simpler:

  • Platform → Pages is now a data grid of all variants — columns Name / Type / Used By (count, with a hover of the exact consumers) / Updated, sortable + filterable like the other admin grids. Right-click (or the toolbar) creates a new Login / Logout / Forgot-password page; double-click edits; the context menu deletes.
  • Realm settings → Pages gains three selectors (login / logout / forgot) choosing the realm's live variant (Built-in / a variant).
  • Application → Settings → Pages becomes three selectors (Inherit realm / Built-in / a realm variant) instead of per-app variant management.

Model change

Applications no longer author their own variants — they only select from the realm library:

  • AppPageSlot drops its Variants list → just { InheritActive, ActiveVariantId → realm variant }.
  • Effective resolution resolves an App's selection against the realm library.
  • The realm list endpoint computes each variant's UsedByApps (drives the grid's Used By).
  • The per-App GET returns the realm variants as AvailableVariants; PUT /{slug}/active validates the id against the realm library.
  • Legacy per-App page schemas migrate by dropping to inherit (no longer representable). Realm legacy schemas still migrate to an active "Custom" variant.

The editor is realm-only now (Apps don't author). Built-in fallback + ?safemode=1 unchanged; everything stays behind Features.PageBuilder (default false).

Verification

  • 1,426 unit tests + 12 PageBuilder integration tests green (variant CRUD, activate/deactivate, legacy migration, app selects a realm variant, unknown-variant rejection, UsedByApps on the grid, local-authorize resolution).
  • Frontend type-check + production build green.
  • DevTools smoke: grid renders (columns, search, right-click create) → create variant → Realm settings → Pages selector activates it → grid Used By shows 1 → runtime renders → delete reverts to built-in.

🤖 Generated with Claude Code

Refine the ADR-0001 UX per field feedback: the variant library is now
realm-global and the surfaces are simpler.

- Platform -> Pages is a sortable/filterable data grid of all variants
  (name, type, Used By count with a hover of the exact consumers,
  updated). Right-click / toolbar creates a Login/Logout/Forgot page;
  double-click edits; context menu deletes.
- Realm settings gains a Pages tab with three selectors (login/logout/
  forgot) picking the realm's live variant (Built-in / a variant).
- Application settings -> Pages is three selectors (Inherit / Built-in /
  a realm variant) instead of per-app variant management.

Model change: Applications no longer author their own variants — they
only select from the realm library. AppPageSlot drops its Variants list
and keeps just { InheritActive, ActiveVariantId -> realm variant }.
Effective resolution resolves an App's selection against the realm
library; the realm list endpoint computes each variant's UsedByApps; the
per-App GET returns the realm variants as options and PUT active
validates the id against them. Legacy per-App page schemas migrate by
dropping to inherit (they can no longer be represented).

The editor is realm-only (Apps don't author). Built-in fallback and
?safemode=1 unchanged; everything stays behind Features.PageBuilder.

Verified: 1426 unit + 12 PageBuilder integration tests green; frontend
type-check + build green; DevTools smoke of grid create -> realm-settings
select activate -> Used By reflects it -> runtime render -> delete.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@windischb
windischb merged commit 4bd7d93 into develop Jul 22, 2026
8 checks passed
@windischb
windischb deleted the feat/page-builder-grid-selects branch July 22, 2026 09:46
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