From e02c2b00c2530cc0b3646365d83fcfae36349a22 Mon Sep 17 00:00:00 2001 From: Leopoldadmin Date: Mon, 22 Jun 2026 21:10:55 +0000 Subject: [PATCH] Read layers from yjsDoc.layers with observers instead of separate useState --- frontend/src/components/SidePanel.tsx | 50 +++++++++++++++++---------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/frontend/src/components/SidePanel.tsx b/frontend/src/components/SidePanel.tsx index df342e5..0f1453b 100644 --- a/frontend/src/components/SidePanel.tsx +++ b/frontend/src/components/SidePanel.tsx @@ -5,10 +5,8 @@ import BlockLibrary from './BlockLibrary'; const SidePanel: React.FC = () => { const [activeTab, setActiveTab] = useState('blocks'); - const [layers, setLayers] = useState([ - { id: '1', name: 'Layer 1', visible: true, locked: false, color: '#000000', lineType: 'solid', transparency: 0, sortOrder: 0 } - ]); - const [activeLayer, setActiveLayer] = useState('1'); + const [layers, setLayers] = useState([]); + const [activeLayer, setActiveLayer] = useState(''); const canvasRef = useRef(null); const yjsDocRef = useRef(null); @@ -19,23 +17,39 @@ const SidePanel: React.FC = () => { { id: 'copilot', label: 'KI Copilot', icon: '🤖' }, ]; - // Initialize with a default layer if none exist + // Observe changes in yjsDoc.layers useEffect(() => { - if (layers.length === 0) { - const defaultLayer = { - id: '1', - name: 'Layer 1', - visible: true, - locked: false, - color: '#000000', - lineType: 'solid', - transparency: 0, - sortOrder: 0 + if (yjsDocRef.current) { + const yjsDoc = yjsDocRef.current; + + // Function to update layers from yjsDoc + const updateLayers = () => { + const layersArray = []; + yjsDoc.layers.forEach((layer, id) => { + layersArray.push({ ...layer, id }); + }); + setLayers(layersArray); + + // Set active layer if none is set or if current active layer doesn't exist + if (!activeLayer || !layersArray.some(layer => layer.id === activeLayer)) { + if (layersArray.length > 0) { + setActiveLayer(layersArray[0].id); + } + } + }; + + // Initial update + updateLayers(); + + // Observe changes + yjsDoc.layers.observe(updateLayers); + + // Cleanup observer on unmount + return () => { + yjsDoc.layers.unobserve(updateLayers); }; - setLayers([defaultLayer]); - setActiveLayer('1'); } - }, [layers.length]); + }, [activeLayer, yjsDocRef]); const renderContent = () => { switch (activeTab) {