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.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
|
||||
|
||||
Reference in New Issue
Block a user