ruv commited on
Commit
b8cc9bf
·
verified ·
1 Parent(s): 722f902

Update src/App.js

Browse files
Files changed (1) hide show
  1. src/App.js +32 -80
src/App.js CHANGED
@@ -1,97 +1,49 @@
1
- import React, { useState, useRef, useCallback } from 'react';
2
  import ReactFlow, {
3
  ReactFlowProvider,
4
- addEdge,
5
  useNodesState,
6
  useEdgesState,
7
- Controls,
8
  } from 'reactflow';
9
- import 'reactflow/dist/style.css';
10
-
11
- import Sidebar from './Sidebar';
12
 
13
- import './index.css';
14
-
15
- const initialNodes = [
16
- {
17
- id: '1',
18
- type: 'input',
19
- data: { label: 'input node' },
20
- position: { x: 250, y: 5 },
21
- },
22
- ];
23
 
24
- let id = 0;
25
- const getId = () => `dndnode_${id++}`;
 
26
 
27
- const DnDFlow = () => {
28
- const reactFlowWrapper = useRef(null);
29
  const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);
30
- const [edges, setEdges, onEdgesChange] = useEdgesState([]);
31
- const [reactFlowInstance, setReactFlowInstance] = useState(null);
32
-
33
- const onConnect = useCallback(
34
- (params) => setEdges((eds) => addEdge(params, eds)),
35
- [],
36
- );
37
 
38
- const onDragOver = useCallback((event) => {
39
- event.preventDefault();
40
- event.dataTransfer.dropEffect = 'move';
41
- }, []);
42
 
43
- const onDrop = useCallback(
44
- (event) => {
45
- event.preventDefault();
46
 
47
- const type = event.dataTransfer.getData('application/reactflow');
48
-
49
- // check if the dropped element is valid
50
- if (typeof type === 'undefined' || !type) {
51
- return;
52
- }
53
-
54
- // reactFlowInstance.project was renamed to reactFlowInstance.screenToFlowPosition
55
- // and you don't need to subtract the reactFlowBounds.left/top anymore
56
- // details: https://reactflow.dev/whats-new/2023-11-10
57
- const position = reactFlowInstance.screenToFlowPosition({
58
- x: event.clientX,
59
- y: event.clientY,
60
- });
61
- const newNode = {
62
- id: getId(),
63
- type,
64
- position,
65
- data: { label: `${type} node` },
66
- };
67
-
68
- setNodes((nds) => nds.concat(newNode));
69
- },
70
- [reactFlowInstance],
71
- );
72
 
73
  return (
74
- <div className="dndflow">
75
- <ReactFlowProvider>
76
- <div className="reactflow-wrapper" ref={reactFlowWrapper}>
77
- <ReactFlow
78
- nodes={nodes}
79
- edges={edges}
80
- onNodesChange={onNodesChange}
81
- onEdgesChange={onEdgesChange}
82
- onConnect={onConnect}
83
- onInit={setReactFlowInstance}
84
- onDrop={onDrop}
85
- onDragOver={onDragOver}
86
- fitView
87
- >
88
- <Controls />
89
- </ReactFlow>
90
- </div>
91
- <Sidebar />
92
- </ReactFlowProvider>
93
- </div>
94
  );
95
  };
96
 
97
- export default DnDFlow;
 
 
 
 
 
 
 
1
+ import React, { useCallback } from 'react';
2
  import ReactFlow, {
3
  ReactFlowProvider,
 
4
  useNodesState,
5
  useEdgesState,
6
+ useReactFlow,
7
  } from 'reactflow';
 
 
 
8
 
9
+ import { initialNodes, initialEdges } from './nodes-edges.js';
10
+ import 'reactflow/dist/style.css';
 
 
 
 
 
 
 
 
11
 
12
+ const getLayoutedElements = (nodes, edges) => {
13
+ return { nodes, edges };
14
+ };
15
 
16
+ const LayoutFlow = () => {
17
+ const { fitView } = useReactFlow();
18
  const [nodes, setNodes, onNodesChange] = useNodesState(initialNodes);
19
+ const [edges, setEdges, onEdgesChange] = useEdgesState(initialEdges);
 
 
 
 
 
 
20
 
21
+ const onLayout = useCallback(() => {
22
+ const layouted = getLayoutedElements(nodes, edges);
 
 
23
 
24
+ setNodes([...layouted.nodes]);
25
+ setEdges([...layouted.edges]);
 
26
 
27
+ window.requestAnimationFrame(() => {
28
+ fitView();
29
+ });
30
+ }, [nodes, edges]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  return (
33
+ <ReactFlow
34
+ nodes={nodes}
35
+ edges={edges}
36
+ onNodesChange={onNodesChange}
37
+ onEdgesChange={onEdgesChange}
38
+ fitView
39
+ />
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  );
41
  };
42
 
43
+ export default function () {
44
+ return (
45
+ <ReactFlowProvider>
46
+ <LayoutFlow />
47
+ </ReactFlowProvider>
48
+ );
49
+ }