Skip to content

feat(grid): add schema-driven widget forms and the table or view widget - #3081

Open
remko48 wants to merge 6 commits into
feat/noid/grid-widget-canvasfrom
feat/noid/grid-widget-forms
Open

remko48 wants to merge 6 commits into
feat/noid/grid-widget-canvasfrom
feat/noid/grid-widget-forms

Conversation

@remko48

@remko48 remko48 commented Oct 12, 2026

Copy link
Copy Markdown

The dialog to add or configure a widget, and the widget that shows a table or view inside a grid.

What changes

  • SchemaForm: renders the content form of a widget from the schema the server sends (text, long text, whole number, switch, choice, color, table/view picker). A new widget type needs a schema on the server and a component that renders it, not a new dialog. The table/view picker offers the user's loaded tables and views, without grid views.
  • AddWidget dialog: pick a type, set the title and whether it is shown, then fill in the content form. Missing required fields and invalid numbers block saving. Configuring an existing widget opens it with its own content, and its type cannot be changed.
  • DataWidget: shows the rows of the chosen table or view with the existing table components, loading columns, rows and relations through the normal API. A widget the server marked broken says its table or view no longer exists and is not loaded; a failed load says so too.
  • GridWidget: a widget of a type the server does not know can still be shown and removed, but not configured.

🖼️ Screenshots

No visible change yet, since the dialog opens from the grid view page in the next PR.

🏁 Checklist

  • ⛑️ Tests (unit and/or integration) are included or not needed
  • 🔙 Backport requests are created or not needed: /backport to stableX.X
  • 📅 Milestone is set
  • 🌸 PR title is meaningful (if it should be in the changelog: is it meaningful to users?)

🤖 AI (if applicable)

  • The content of this PR was partly or fully generated using AI

remko48 and others added 4 commits October 12, 2026 15:09
The form to add or configure a widget is rendered from the schema the
server defines for its type, so a new widget type needs a schema and a
renderer rather than its own dialog. The data widget shows the rows of
a table or view inside a grid.

Co-authored-by: Ruben van der Linde <ruben@conduction.nl>
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Remko <remko@conduction.nl>
…get is empty

- configuring a widget no longer resets its content to the defaults of the
  type picked before; only a type the user picks starts from defaults, and
  a widget of an unknown type is neither configured nor converted
- a data widget whose target the server marked broken says it no longer
  exists instead of loading it, a failed load has its own message, and the
  prompt to pick a target only shows while editing
- an empty widget title stays empty, the card shows the type name in the
  viewer's language
- the dialog loads the widget types itself and imports the helpers from
  gridLayout.js
- integer fields refuse fractions, booleans render as a switch, the colour
  swatch is empty for the theme colour and the view label is translatable

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Remko <remko@conduction.nl>
- an invalid number in the widget form now blocks saving instead of keeping
  the last valid value
- the dialog fills the form before it renders when the widget types are
  already loaded
- the view label in the target picker is no longer HTML-escaped
- the theme colour swatch has a max-contrast border, field data-cy names are
  camelCase, and every method has JSDoc

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Remko <remko@conduction.nl>
Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Remko <remko@conduction.nl>
@remko48
remko48 requested review from blizzz and enjeck as code owners October 12, 2026 14:57
@remko48
remko48 added this pull request to stack #3080 October 12, 2026 15:00
@remko48
remko48 force-pushed the feat/noid/grid-widget-forms branch from a7b54a4 to 5c1ac35 Compare October 12, 2026 15:37
Signed-off-by: Remko <remko@conduction.nl>
Signed-off-by: Remko <remko@conduction.nl>
Assisted-by: ClaudeCode:claude-opus-5-5
@remko48
remko48 force-pushed the feat/noid/grid-widget-forms branch from 5c1ac35 to 6dc871c Compare October 14, 2026 09:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants