fix: restore saved gridstack layout faithfully (#13) #15
Reference in New Issue
Block a user
Delete Branch "ai/issue-13-persist-layout"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #13
Das Layout wurde bereits in
localStoragegespeichert, beim Wiederbetreten der Route aber nicht zuverlässig so wiederhergestellt, wie es verlassen wurde. Drei Ursachen:1. Wiederherstellung Element für Element (
grid-stack.ts)restore()hat die gespeicherten Knoten einzeln pergrid.update()gesetzt. Ein später gesetztes Widget konnte mit einem bereits platzierten kollidieren und es von seiner gespeicherten Position wegschieben — zurückgeschoben wurde es nie. Jetztgrid.load(nodes, false): sortiert die Knoten, nimmt sie vor dem Neuplatzieren aus der Engine und läuft in einem Batch.addRemove = false, weil Flow besitzt, welche Kinder existieren.2. Größe 1 ging verloren (
grid-stack.ts,GridStackLayout.java)gridstacks
save()lässtw/hweg, wenn sie1sind. Die manuelle Wiederherstellung reichte sie alsundefinedweiter, und der Server las sie als0und schrieb ein nulldimensioniertes Widget auf das Item zurück.load()setzt gridstacks eigene Defaults wieder ein;onLayoutChangeliest ein fehlendesw/hjetzt als1.3. Ausstehender Save beim Verlassen der Route verworfen (
grid-stack.ts)Drag/Resize direkt gefolgt von einer Navigation hat das Element innerhalb des 150-ms-Debounce abgehängt — der ausstehende Save ging verloren.
disconnectedCallback()schreibt ihn jetzt zuerst nachlocalStorage(ohne Server-Benachrichtigung, die View verschwindet ohnehin).Test
./mvnw test→ 3/3 grün (GridStackViewTest)npx tsc --noEmit→ sauber🤖 Generated with Claude Code
https://claude.ai/code/session_01Ue9ZtWUBQF4SuSHpzZ3zwq
Alles ok
@@ -125,4 +143,1 @@for (const node of nodes) {if (!node.id) continue;const el = this.querySelector(`:scope > [gs-id="${node.id}"]`) as HTMLElement | null;Excellent fix 👍