diff --git a/frontend/src/components/CanvasArea.tsx b/frontend/src/components/CanvasArea.tsx index c46a585..e82be09 100644 --- a/frontend/src/components/CanvasArea.tsx +++ b/frontend/src/components/CanvasArea.tsx @@ -41,8 +41,11 @@ const CanvasArea: React.FC = ({ const pixiRendererRef = useRef(null); /** CAD-13-fix: Bereits in Pixi gespiegelte Bestands-Elemente (id -> Referenz). */ const pixiMirrorRef = useRef>(new Map()); - /** Bereits an onElementCreated gemeldete V2-Element-IDs (verhindert Doppelmeldung bei jedem onChanged-Frame). */ + /** CAD-14: Bereits an onElementCreated gemeldete V2-Element-IDs (verhindert Doppelmeldung bei jedem onChanged-Frame). */ const announcedV2Ids = useRef>(new Set()); + /** CAD-14: Frische Prop-Referenz gegen Stale-Closure (Dispatcher/onChanged sind einmalig registriert). */ + const onElementCreatedRef = useRef(onElementCreated); + onElementCreatedRef.current = onElementCreated; const spatialIndexRef = useRef(null); const layerManagerRef = useRef(null); const selectionEngineRef = useRef(null); @@ -92,6 +95,8 @@ const CanvasArea: React.FC = ({ (window as unknown as { __v2Debug: unknown }).__v2Debug = { renderer: pixi, info: () => pixiRendererRef.current?.getDebugInfo() ?? null, + docCount: () => v2Doc.getAllElements().length, + announcedCount: () => announcedV2Ids.current.size, }; }).catch((err) => { logger.warn('Pixi init failed — V2-Overlay deaktiviert:', err); @@ -146,7 +151,9 @@ const CanvasArea: React.FC = ({ for (const el of v2Doc.getAllElements()) { if (!announcedV2Ids.current.has(el.id)) { announcedV2Ids.current.add(el.id); - onElementCreated(el); + // CAD-14: ueber Ref — die eingefrorene Prop haette eine alte + // drawingId-Closure (still kein DB-Save nach Spaet-Mount). + onElementCreatedRef.current(el); } } syncPixi(); // Task C2: V2-Elemente in den PixiJS-Overlay-Renderer spiegeln @@ -322,6 +329,8 @@ const CanvasArea: React.FC = ({ } as never; for (const el of elements) { currentIds.add(el.id); + // CAD-14: V2-stämmige Elemente zeichnet syncPixi (v2Doc.onChanged) — + // hier NUR noch Aktualisierung des Spiegels, kein doppeltes drawElement. if (mirror.get(el.id) !== el) { mirror.set(el.id, el); const layer = layers.find((l) => l.id === el.layerId) ?? layerFallback;