fix(drawing): Zeichnung liess sich nicht wieder oeffnen
Anlegen und bearbeiten ging, beim zweiten Öffnen blieb das Zeichenbrett leer.
Die erste Fassung schrieb den appState roh mit JSON.stringify heraus. Darin
steckt `collaborators`, und das ist eine Map. JSON kennt keine Maps; es wurde
`{}` daraus. Beim Laden bekam Excalidraw ein leeres Objekt, wo es eine Map
erwartet, und brach ab. Beim ersten Öffnen fiel das nicht auf – da war noch
nichts gespeichert.
Jetzt über die Werkzeuge des Pakets: serializeAsJSON schreibt nur, was eine
Zeichnung ausmacht, restore setzt beim Laden zusammen, was fehlt. Selbst zu
prüfen hiesse, Excalidraws Feldliste nachzubauen und bei jeder Fassung
nachzuziehen.
Eine Sache erledigt restore allerdings nicht – nachgemessen, nicht angenommen:
Ein bereits verunglücktes collaborators: {} reicht es unverändert durch; die
Map entsteht nur, wenn das Feld ganz fehlt. Neue Dateien haben es nicht mehr,
aber die aus jener Stunde wären dauerhaft kaputt geblieben. Deshalb wird es
beim Laden zusätzlich entfernt – Marcs bereits angelegte Zeichnungen öffnen
damit wieder.
Fünf Tests in drawing.test.ts, darunter einer, der festhält, dass restore
allein nicht reicht. Zwei Stolpersteine dabei, in vite.config.ts vermerkt:
Excalidraw importiert roughjs/bin/rough ohne Endung (Nodes Auflösung verlangt
sie, der Bündler nicht) und fasst beim Laden ein Canvas an, das jsdom nicht
hat.
Geprüft: tsc sauber, 53 Vitest-Tests, Zeichnungs-Selbsttest 12/12.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6fc157bc07
commit
2e1eaf9cbf
4 files changed
+166
-21
No files matched your search
+32
@@ -1634,9 +1634,41 @@ ist, muss sie koennen, was Dateien koennen.
|
||||
- [x] Zeichnung im Gruppenordner
|
||||
- [x] Excalifont wird vom eigenen Server ausgeliefert
|
||||
|
||||
### Beim zweiten Oeffnen blieb es leer (29.09.2026)
|
||||
|
||||
Eine Zeichnung liess sich anlegen und bearbeiten – **beim zweiten Oeffnen**
|
||||
blieb das Zeichenbrett leer.
|
||||
|
||||
Ursache: Die erste Fassung schrieb den `appState` roh mit `JSON.stringify`
|
||||
heraus. Darin steckt `collaborators`, und das ist eine `Map`. JSON kennt keine
|
||||
Maps; es wurde `{}` daraus. Beim Laden bekam Excalidraw ein leeres Objekt, wo
|
||||
es eine Map erwartet, und brach ab. Beim **ersten** Oeffnen fiel es nicht auf –
|
||||
da war noch nichts gespeichert.
|
||||
|
||||
Behoben mit den Werkzeugen des Pakets: `serializeAsJSON` schreibt nur, was eine
|
||||
Zeichnung ausmacht, `restore` setzt beim Laden zusammen, was fehlt. Selbst zu
|
||||
pruefen hiesse, Excalidraws Feldliste nachzubauen und bei jeder Fassung
|
||||
nachzuziehen.
|
||||
|
||||
**Eine Sache erledigt `restore` allerdings nicht** – nachgemessen, nicht
|
||||
angenommen: Ein bereits verungluecktes `collaborators: {}` reicht es
|
||||
**unveraendert durch**; die Map entsteht nur, wenn das Feld ganz fehlt. Neue
|
||||
Dateien haben es nicht mehr, aber die aus jener Stunde waeren dauerhaft kaputt
|
||||
gewesen. Deshalb wird es beim Laden zusaetzlich entfernt.
|
||||
|
||||
- [x] Fuenf Tests in `drawing.test.ts` (jsdom), darunter einer, der genau
|
||||
festhaelt, dass `restore` allein nicht reicht.
|
||||
|
||||
> **Zwei Stolpersteine beim Testen**, beide in `vite.config.ts` vermerkt:
|
||||
> Excalidraw importiert `roughjs/bin/rough` ohne Endung – Nodes Aufloesung
|
||||
> verlangt sie, der Buendler nicht. Deshalb laeuft es unter
|
||||
> `server.deps.inline`. Und es fasst beim Laden ein Canvas an, das jsdom nicht
|
||||
> hat; ein Platzhalter im Test genuegt.
|
||||
|
||||
### Von Hand zu pruefen
|
||||
|
||||
- [ ] `+ Drawing` legt eine Zeichnung an und oeffnet sie 🔎
|
||||
- [ ] Zeichnung schliessen und **erneut oeffnen** -> der Inhalt ist da 🔎
|
||||
- [ ] Zeichnen, Rechteck, Text darin, Pfeil andocken – Block verschieben, der
|
||||
Pfeil folgt (das ist der Mindmap-Fall)
|
||||
- [ ] Die Schrift sieht handgezeichnet aus, nicht nach Arial
|
||||
|
||||
Reference in new issue
Block a user