|
|
import React, { useCallback } from 'react'; |
|
|
import ReactFlow, { |
|
|
addEdge, |
|
|
MiniMap, |
|
|
Controls, |
|
|
Background, |
|
|
useNodesState, |
|
|
useEdgesState, |
|
|
} from 'reactflow'; |
|
|
|
|
|
import { nodes as initialNodes, edges as initialEdges } from './initial-elements'; |
|
|
import CustomNode from './CustomNode'; |
|
|
|
|
|
import 'reactflow/dist/style.css'; |
|
|
import './overview.css'; |
|
|
|
|
|
const nodeTypes = { |
|
|
custom: CustomNode, |
|
|
}; |
|
|
|
|
|
const minimapStyle = { |
|
|
height: 120, |
|
|
}; |
|
|
|
|
|
const onInit = (reactFlowInstance) => console.log('flow loaded:', reactFlowInstance); |
|
|
|
|
|
const OverviewFlow = () => { |
|
|
const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); |
|
|
const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); |
|
|
const onConnect = useCallback((params) => setEdges((eds) => addEdge(params, eds)), []); |
|
|
|
|
|
|
|
|
|
|
|
const edgesWithUpdatedTypes = edges.map((edge) => { |
|
|
if (edge.sourceHandle) { |
|
|
const edgeType = nodes.find((node) => node.type === 'custom').data.selects[edge.sourceHandle]; |
|
|
edge.type = edgeType; |
|
|
} |
|
|
|
|
|
return edge; |
|
|
}); |
|
|
|
|
|
return ( |
|
|
<ReactFlow |
|
|
nodes={nodes} |
|
|
edges={edgesWithUpdatedTypes} |
|
|
onNodesChange={onNodesChange} |
|
|
onEdgesChange={onEdgesChange} |
|
|
onConnect={onConnect} |
|
|
onInit={onInit} |
|
|
fitView |
|
|
attributionPosition="top-right" |
|
|
nodeTypes={nodeTypes} |
|
|
> |
|
|
<MiniMap style={minimapStyle} zoomable pannable /> |
|
|
<Controls /> |
|
|
<Background color="#aaa" gap={16} /> |
|
|
</ReactFlow> |
|
|
); |
|
|
}; |
|
|
|
|
|
export default OverviewFlow; |
|
|
|