diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index dedda34..e057106 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -279,12 +279,30 @@ const CADEditor: React.FC = ({ projectId, token, onNavigateBack if (data.elements.length > 0) setElements(data.elements); if (data.layers.length > 0) setLayers(data.layers); if (data.blocks.length > 0) setBlocks(data.blocks); - // Save initial layers to backend if backend has none - if (data.layers.length === 0 && data.drawing) { - for (const layer of initialLayers) { - createLayerTyped(token, data.drawing.id, layer).catch(() => {}); + // Ensure activeLayerId matches a real layer + if (data.layers.length > 0) { + const hasActiveLayer = data.layers.some(l => l.id === 'layer-0'); + if (!hasActiveLayer) { + setActiveLayerId(data.layers[0].id); } } + // Create default layer if backend has none + if (data.layers.length === 0 && data.drawing) { + const defaultLayer: CADLayer = { + id: 'layer-0', + name: 'Layer 0', + visible: true, + locked: false, + color: '#ffffff', + lineType: 'solid', + transparency: 0, + sortOrder: 0, + parentId: null, + }; + createLayerTyped(token, data.drawing.id, defaultLayer).catch(() => {}); + setLayers([defaultLayer]); + setActiveLayerId('layer-0'); + } setSavedStatus('gespeichert'); setDataLoaded(true); // Push initial data to Yjs CRDT after load @@ -356,6 +374,11 @@ const CADEditor: React.FC = ({ projectId, token, onNavigateBack if (mergedLayers.length !== layers.length || mergedLayers.some((ml, i) => ml !== layers[i])) { setLayers(mergedLayers); } + // Ensure activeLayerId matches a real layer after collab merge + const hasActiveInMerged = mergedLayers.some(l => l.id === activeLayerId); + if (!hasActiveInMerged && mergedLayers.length > 0) { + setActiveLayerId(mergedLayers[0].id); + } } // Merge blocks: local-first, update changed from remote, append remote-only