fix: element creation fails with empty layer_id (FOREIGN KEY constraint)

Three fixes:
1. interaction/index.ts: Add layerId to created element in confirmDraw()
2. CanvasArea.tsx: Sync layers to LayerManager via layerManagerRef
3. App.tsx: Fallback to activeLayerId in handleElementCreated if layerId missing

Root cause: LayerManager.activeLayerId was empty because layers were never
synced from React state to the interaction layer LayerManager. New elements
got layer_id="" which failed SQLite FOREIGN KEY constraint.

Also includes Yjs sync race condition fix from previous commit.
This commit is contained in:
2026-06-26 20:31:50 +02:00
parent bd8bedcfed
commit 7ad0e11873
3 changed files with 33 additions and 9 deletions
+8
View File
@@ -29,6 +29,7 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
const renderEngineRef = useRef<RenderEngine | null>(null);
const interactionRef = useRef<InteractionEngine | null>(null);
const spatialIndexRef = useRef<SpatialIndex | null>(null);
const layerManagerRef = useRef<LayerManager | null>(null);
useEffect(() => {
const canvas = canvasRef.current;
@@ -48,6 +49,7 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
renderEngineRef.current = renderEngine;
interactionRef.current = interaction;
spatialIndexRef.current = spatialIndex;
layerManagerRef.current = layerManager;
interaction.setCallbacks({
onElementCreated,
@@ -68,6 +70,7 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
renderEngineRef.current = null;
interactionRef.current = null;
spatialIndexRef.current = null;
layerManagerRef.current = null;
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
@@ -133,7 +136,12 @@ const CanvasArea: React.FC<CanvasAreaProps> = ({
// Sync layers to LayerManager + render
useEffect(() => {
const renderEngine = renderEngineRef.current;
const layerManager = layerManagerRef.current;
if (!renderEngine) return;
if (layerManager) {
layerManager.clear();
layers.forEach(l => layerManager.addLayer(l));
}
renderEngine.setLayers(layers);
renderEngine.render();
// eslint-disable-next-line react-hooks/exhaustive-deps