diff --git a/frontend/src/components/network/NetworkCanvas.tsx b/frontend/src/components/network/NetworkCanvas.tsx index c52625db..2c6af6b1 100644 --- a/frontend/src/components/network/NetworkCanvas.tsx +++ b/frontend/src/components/network/NetworkCanvas.tsx @@ -20,8 +20,8 @@ interface NetworkCanvasProps { onNodesChange: OnNodesChange onEdgesChange: OnEdgesChange onConnect: OnConnect - onNodeSelect: (node: Node | null) => void - onEdgeSelect: (edge: Edge | null) => void + onNodeSelect: (nodeId: string | null) => void + onEdgeSelect: (edgeId: string | null) => void onDrop: (event: React.DragEvent) => void onDragOver: (event: React.DragEvent) => void } @@ -39,10 +39,10 @@ export function NetworkCanvas({ }: NetworkCanvasProps) { const handleSelectionChange = useCallback(({ nodes: selectedNodes, edges: selectedEdges }: { nodes: Node[]; edges: Edge[] }) => { if (selectedNodes.length === 1) { - onNodeSelect(selectedNodes[0]) + onNodeSelect(selectedNodes[0].id) onEdgeSelect(null) } else if (selectedEdges.length === 1) { - onEdgeSelect(selectedEdges[0]) + onEdgeSelect(selectedEdges[0].id) onNodeSelect(null) } else { onNodeSelect(null) diff --git a/frontend/src/pages/NetworkDiagrams/DiagramEditor.tsx b/frontend/src/pages/NetworkDiagrams/DiagramEditor.tsx index 9a7840fa..8abb6ffa 100644 --- a/frontend/src/pages/NetworkDiagrams/DiagramEditor.tsx +++ b/frontend/src/pages/NetworkDiagrams/DiagramEditor.tsx @@ -36,8 +36,11 @@ function DiagramEditorInner() { const [nodes, setNodes, onNodesChange] = useNodesState([]) const [edges, setEdges, onEdgesChange] = useEdgesState([]) - const [selectedNode, setSelectedNode] = useState(null) - const [selectedEdge, setSelectedEdge] = useState(null) + const [selectedNodeId, setSelectedNodeId] = useState(null) + const [selectedEdgeId, setSelectedEdgeId] = useState(null) + + const selectedNode = selectedNodeId ? nodes.find(n => n.id === selectedNodeId) ?? null : null + const selectedEdge = selectedEdgeId ? edges.find(e => e.id === selectedEdgeId) ?? null : null const [isDirty, setIsDirty] = useState(false) const [isSaving, setIsSaving] = useState(false) @@ -256,32 +259,19 @@ function DiagramEditorInner() { }, } })) - setSelectedEdge(prev => { - if (!prev || prev.id !== edgeId) return prev - return { - ...prev, - label: updates.label !== undefined ? (updates.label || undefined) : prev.label, - data: { - ...(prev.data || {}), - ...(updates.connectionType !== undefined ? { connectionType: updates.connectionType } : {}), - ...(updates.speed !== undefined ? { speed: updates.speed } : {}), - ...(updates.notes !== undefined ? { notes: updates.notes } : {}), - }, - } - }) setIsDirty(true) }, [setEdges]) const handleDeleteNode = useCallback((nodeId: string) => { setNodes(nds => nds.filter(n => n.id !== nodeId)) setEdges(eds => eds.filter(e => e.source !== nodeId && e.target !== nodeId)) - setSelectedNode(null) + setSelectedNodeId(null) setIsDirty(true) }, [setNodes, setEdges]) const handleDeleteEdge = useCallback((edgeId: string) => { setEdges(eds => eds.filter(e => e.id !== edgeId)) - setSelectedEdge(null) + setSelectedEdgeId(null) setIsDirty(true) }, [setEdges]) @@ -398,8 +388,8 @@ function DiagramEditorInner() { onNodesChange={handleNodesChange} onEdgesChange={handleEdgesChange} onConnect={onConnect} - onNodeSelect={setSelectedNode} - onEdgeSelect={setSelectedEdge} + onNodeSelect={setSelectedNodeId} + onEdgeSelect={setSelectedEdgeId} onDrop={onDrop} onDragOver={onDragOver} />