fix: drawing persistence bug — sync activeLayerId on project load + create default layer when none exist

This commit is contained in:
A0 Orchestrator
2026-07-01 14:23:44 +02:00
parent b503f75fe2
commit 405e55e818
+27 -4
View File
@@ -279,12 +279,30 @@ const CADEditor: React.FC<CADEditorProps> = ({ 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<CADEditorProps> = ({ 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