fix: drawing persistence bug — sync activeLayerId on project load + create default layer when none exist
This commit is contained in:
+27
-4
@@ -279,12 +279,30 @@ const CADEditor: React.FC<CADEditorProps> = ({ projectId, token, onNavigateBack
|
|||||||
if (data.elements.length > 0) setElements(data.elements);
|
if (data.elements.length > 0) setElements(data.elements);
|
||||||
if (data.layers.length > 0) setLayers(data.layers);
|
if (data.layers.length > 0) setLayers(data.layers);
|
||||||
if (data.blocks.length > 0) setBlocks(data.blocks);
|
if (data.blocks.length > 0) setBlocks(data.blocks);
|
||||||
// Save initial layers to backend if backend has none
|
// Ensure activeLayerId matches a real layer
|
||||||
if (data.layers.length === 0 && data.drawing) {
|
if (data.layers.length > 0) {
|
||||||
for (const layer of initialLayers) {
|
const hasActiveLayer = data.layers.some(l => l.id === 'layer-0');
|
||||||
createLayerTyped(token, data.drawing.id, layer).catch(() => {});
|
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');
|
setSavedStatus('gespeichert');
|
||||||
setDataLoaded(true);
|
setDataLoaded(true);
|
||||||
// Push initial data to Yjs CRDT after load
|
// 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])) {
|
if (mergedLayers.length !== layers.length || mergedLayers.some((ml, i) => ml !== layers[i])) {
|
||||||
setLayers(mergedLayers);
|
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
|
// Merge blocks: local-first, update changed from remote, append remote-only
|
||||||
|
|||||||
Reference in New Issue
Block a user