Skip to content

feat(grid): show and edit grid views on their own page - #3082

Open
remko48 wants to merge 8 commits into
feat/noid/grid-widget-formsfrom
feat/noid/grid-view-page
Open

remko48 wants to merge 8 commits into
feat/noid/grid-widget-formsfrom
feat/noid/grid-view-page

Conversation

@remko48

@remko48 remko48 commented Oct 12, 2026

Copy link
Copy Markdown

A grid view now opens as a page: its widgets on the grid, with an edit mode to add, configure, move, resize and remove widgets.

What changes

  • GridView page: "Edit page" works on a copy of the grid; "Save" sends the whole grid in one update and "Cancel" throws the copy away. The server validates the grid on save (see the earlier backend PR). Leaving the page or switching views with unsaved changes asks first, and the browser warns before the tab is closed or reloaded.
  • GridViewSettings dialog: create a grid view (title, emoji, description) or edit those fields on an existing one. It takes no technical name, since a grid view is named by its id. Editing a grid view from its menu opens this dialog instead of the table view settings.
  • /view/{id} shows the grid page for a grid view; only users who can manage the view see the edit button.
  • Navigation: grid views get their own "Grid views" section with a create button, and are left out of the table and shared view lists. A grid view without an emoji gets its own icon, and actions that only make sense for rows (row count, duplicate, import) are hidden for them.
  • Store: insertStandaloneView creates a view through POST /api/2/views. Reloading the tables no longer drops shared views and grid views from the store.
  • Tests: a Playwright spec covers creating a grid view, adding and configuring widgets, editing its title and the unsaved-changes prompt.

🖼️ Screenshots

🏚️ Before 🏡 After
|

🏁 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
A grid view opens as a page of widgets. In edit mode widgets are added,
configured, moved and removed, and the whole grid is saved at once. A
dialog creates a grid view or edits its title, description and technical
name.

- grid views are kept out of the table view lists in the navigation
- views without a table survive a reload of the tables in the store

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

- the grid view dialog no longer sends a technical name, which the server
  refuses for a view without a table, and only sends the fields the create
  endpoint takes; its fields are labelled and Submit is disabled while saving
- grid views get their own list in the navigation, with an action to create
  one, so the create flow has an entry point
- leaving a grid page with unsaved changes asks first, and the browser warns
  before closing the tab
- loading the tables keeps shared views and grid views but drops views of
  tables that are gone again
- the grid page imports the layout helpers from gridLayout.js, disables move
  steps that cannot apply and hides them on a narrow canvas
- a Playwright spec covers creating, editing, configuring and saving a page

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Remko <remko@conduction.nl>
…instance

The draft, the stored grid, the unsaved-changes check and the discard
confirmation live in setup(), so the route guards use them directly and the
options API reads the same state, without getCurrentInstance().

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:59
@remko48
remko48 added this pull request to stack #3080 October 12, 2026 15:00
@remko48
remko48 force-pushed the feat/noid/grid-view-page branch from 387d9c3 to 6237e08 Compare October 12, 2026 15:37
Signed-off-by: Remko <remko@conduction.nl>
…type select in the e2e test

- the grid views list now follows the applications, which the Cypress
  helper for creating an application addresses as the second list
- the Playwright spec opens the widget type select from its indicator, like
  the other specs do, instead of clicking the component root

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Remko <remko@conduction.nl>
…test

Escape only reaches the type select, which keeps the focus after a pick, so the dialog stayed open.

Assisted-by: ClaudeCode:claude-opus-5-5
Signed-off-by: Remko <remko@conduction.nl>
@remko48
remko48 force-pushed the feat/noid/grid-view-page branch from 3667d54 to 3e165a0 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