| import React, { useCallback } from 'react'; | |
| import ReactFlow, { | |
| ReactFlowProvider, | |
| useNodesState, | |
| useEdgesState, | |
| useReactFlow, | |
| } from 'reactflow'; | |
| import { initialNodes, initialEdges } from './nodes-edges.js'; | |
| import 'reactflow/dist/style.css'; | |
| const getLayoutedElements = (nodes, edges) => { | |
| return { nodes, edges }; | |
| }; | |
| const LayoutFlow = () => { | |
| const { fitView } = useReactFlow(); | |
| const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes); | |
| const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges); | |
| const onLayout = useCallback(() => { | |
| const layouted = getLayoutedElements(nodes, edges); | |
| setNodes([...layouted.nodes]); | |
| setEdges([...layouted.edges]); | |
| window.requestAnimationFrame(() => { | |
| fitView(); | |
| }); | |
| }, [nodes, edges]); | |
| return ( | |
| <ReactFlow | |
| nodes={nodes} | |
| edges={edges} | |
| onNodesChange={onNodesChange} | |
| onEdgesChange={onEdgesChange} | |
| fitView | |
| /> | |
| ); | |
| }; | |
| export default function () { | |
| return ( | |
| <ReactFlowProvider> | |
| <LayoutFlow /> | |
| </ReactFlowProvider> | |
| ); | |
| } |