feat: GridStackLayout showcase view #10

Merged
pitfriedrich merged 1 commits from ai/issue-7-gridstack-demo into main 2026-07-25 20:14:30 +00:00
Collaborator

Closes #7

Was drin ist

  • Neue View GridStackView (@Route("gridstack")): Showcase für GridStackLayout mit vier Standard-Widgets (Linien-, Balken-, Kreisdiagramm-Card plus Bedienhinweis), Buttons zum Hinzufügen/Entfernen von Widgets zur Laufzeit, Reset-Button für das Layout und einer Statuszeile bei Layout-Änderungen. Das Layout wird über den vorhandenen setStorageKey-Mechanismus im Browser persistiert.
  • SideNavItem in MainLayout (Icon fa-table-cells-large), plus neue Fa-Einträge (GRID, ADD, REMOVE, RESET).
  • Übersetzungen für de/en/es (nav.gridstack, page.gridstack, gridstack.*, card.gridstackHint).
  • .dialect-muted in styles.css für die Statuszeile (nutzt vorhandene --dialect-*-Tokens).

Nebenbefund: Bug in GridStackLayout.add(Component)

Ein einzelnes grid.add(item) löste auf die Nicht-Varargs-Überladung add(Component) auf; diese delegierte per add(item) wieder an sich selbst → StackOverflowError. Aufgefallen beim Test des "Widget hinzufügen"-Buttons. Die Methode hängt das Item jetzt direkt über die Element-API an und reicht ein bereits fertiges GridStackItem unverpackt durch.

Tests

Erste Testquellen im Repo (src/test war leer): GridStackViewTest auf Basis von browserless-test-spring — prüft Widget-Anzahl der Startansicht sowie Add-/Remove-Buttons.

mvn test  →  Tests run: 3, Failures: 0, Errors: 0

Zusätzlich manuell verifiziert: App startet fehlerfrei, /gridstack liefert HTTP 200.

Hinweis: ./mvnw hat CRLF-Zeilenenden und ist unter Linux nicht direkt ausführbar — für den Build wurde die Maven-Distribution aus ~/.m2/wrapper/dists genutzt. Nicht angefasst, da Build-Config.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PYAcKoXKPN3rJ7nBroKZkc

Closes #7 ## Was drin ist - **Neue View `GridStackView`** (`@Route("gridstack")`): Showcase für `GridStackLayout` mit vier Standard-Widgets (Linien-, Balken-, Kreisdiagramm-Card plus Bedienhinweis), Buttons zum Hinzufügen/Entfernen von Widgets zur Laufzeit, Reset-Button für das Layout und einer Statuszeile bei Layout-Änderungen. Das Layout wird über den vorhandenen `setStorageKey`-Mechanismus im Browser persistiert. - **SideNavItem** in `MainLayout` (Icon `fa-table-cells-large`), plus neue `Fa`-Einträge (`GRID`, `ADD`, `REMOVE`, `RESET`). - **Übersetzungen** für de/en/es (`nav.gridstack`, `page.gridstack`, `gridstack.*`, `card.gridstackHint`). - **`.dialect-muted`** in `styles.css` für die Statuszeile (nutzt vorhandene `--dialect-*`-Tokens). ## Nebenbefund: Bug in `GridStackLayout.add(Component)` Ein einzelnes `grid.add(item)` löste auf die Nicht-Varargs-Überladung `add(Component)` auf; diese delegierte per `add(item)` wieder an sich selbst → `StackOverflowError`. Aufgefallen beim Test des "Widget hinzufügen"-Buttons. Die Methode hängt das Item jetzt direkt über die Element-API an und reicht ein bereits fertiges `GridStackItem` unverpackt durch. ## Tests Erste Testquellen im Repo (`src/test` war leer): `GridStackViewTest` auf Basis von `browserless-test-spring` — prüft Widget-Anzahl der Startansicht sowie Add-/Remove-Buttons. ``` mvn test → Tests run: 3, Failures: 0, Errors: 0 ``` Zusätzlich manuell verifiziert: App startet fehlerfrei, `/gridstack` liefert HTTP 200. Hinweis: `./mvnw` hat CRLF-Zeilenenden und ist unter Linux nicht direkt ausführbar — für den Build wurde die Maven-Distribution aus `~/.m2/wrapper/dists` genutzt. Nicht angefasst, da Build-Config. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01PYAcKoXKPN3rJ7nBroKZkc
claude-bot added 1 commit 2026-07-25 20:12:29 +00:00
fix: add GridStackLayout showcase view (#7)
CI / build-and-test (pull_request) Successful in 1m13s
17396466a9
Adds a /gridstack route demonstrating GridStackLayout: four default
widgets (line/bar/pie chart cards plus a usage hint), buttons to add and
remove widgets at runtime, a reset-layout button and a layout-change
status line. Layout is persisted per browser via the existing
localStorage support. The view gets its own SideNavItem in MainLayout
and full de/en/es translations.

Fixes an infinite recursion in GridStackLayout.add(Component): a
single-argument add(item) resolves to that overload rather than the
varargs one, so its delegation to add(item) called itself. It now
appends through the element API and passes a GridStackItem through
unwrapped.

Adds the first test sources (browserless UI tests) covering the view's
widget count and the add/remove buttons.

Closes #7

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PYAcKoXKPN3rJ7nBroKZkc
pitfriedrich merged commit 6bd81ff561 into main 2026-07-25 20:14:30 +00:00
pitfriedrich deleted branch ai/issue-7-gridstack-demo 2026-07-25 20:14:31 +00:00
Sign in to join this conversation.