| | 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; |
| |
|