zack commited on
Commit
85bb5e3
Β·
1 Parent(s): 7736a4b

πŸ› fix: update ReactFlowEnv.js with new node and edge logic

Browse files
frontend/src/components/ReactFlow/ReactFlowEnv.js CHANGED
@@ -36,29 +36,23 @@ export default function ReactEnviorment() {
36
  const reactFlowWrapper = useRef(null);
37
  const [tool, setTool] = useState(false)
38
 
39
- const deleteNodeContains = (id) =>{setNodes((nds) => nds.filter(n => !n.id.includes(`${id}-`) ))}
40
- const deleteEdge = useCallback((id) => setEdges((eds) => eds.filter(e => e.id !== id)), [setEdges])
41
- const deleteNode = useCallback((id) =>{
42
- setNodes(() => nodes.filter(n => n.id !== id ))
43
- }, [setNodes, nodes])
44
-
45
 
46
  useEffect(() => {
47
  const restore = () => {
48
- const flow = JSON.parse(localStorage.getItem('flowkey'));
49
 
50
  if(flow){
51
- flow.nodes.map((nds) => nds.data.delete = deleteNode)
52
- flow.edges.map((eds) => eds.data.delete = deleteEdge)
53
- setNodes(flow.nodes || [])
54
- setEdges(flow.edges || [])
55
- console.log(flow)
56
  }
57
  }
58
- restore()
59
- },[deleteNode, deleteEdge])
60
-
61
-
62
 
63
  const onNodesChange = useCallback(
64
  (changes) => setNodes((nds) => applyNodeChanges(changes, nds)),
@@ -72,12 +66,11 @@ export default function ReactEnviorment() {
72
 
73
  const onEdgeUpdate = useCallback(
74
  (oldEdge, newConnection) => setEdges((els) => updateEdge(oldEdge, newConnection, els)),
75
- []
76
  );
77
 
78
  const onConnect = useCallback(
79
  (params) => {
80
- console.log(params)
81
  setEdges((els) => addEdge({...params, type: "custom", animated : true, style : {stroke : "#00FF4A", strokeWidth : "6"}, markerEnd: {type: MarkerType.ArrowClosed, color : "#00FF4A"}, data : { delete : deleteEdge}}, els))
82
  fetch("http://localhost:2000/api/append/connection", {method : "POST", mode : 'cors', headers : { 'Content-Type' : 'application/json' }, body: JSON.stringify({"source": params.source, "target" : params.target})}).then( res => {
83
  console.log(res)
@@ -88,14 +81,11 @@ export default function ReactEnviorment() {
88
  [setEdges, deleteEdge]
89
  );
90
 
91
-
92
-
93
  const onDragOver = useCallback((event) => {
94
  event.preventDefault();
95
  event.dataTransfer.dropEffect = 'move';
96
  }, []);
97
 
98
-
99
  const onSave = useCallback(() => {
100
  if (reactFlowInstance) {
101
  const flow = reactFlowInstance.toObject();
@@ -104,14 +94,15 @@ export default function ReactEnviorment() {
104
  var labels = [];
105
  var colour = [];
106
  var emoji = [];
107
- for(let i = 0; i < flow.nodes.length; i++){
108
- if (!labels.includes(flow.nodes[i].data.label))
109
- colour.push(flow.nodes[i].data.colour)
110
- emoji.push(flow.nodes[i].data.emoji)
111
- labels.push(flow.nodes[i].data.label)
112
  }
113
- localStorage.setItem('colour',JSON.stringify(colour))
114
- localStorage.setItem('emoji', JSON.stringify(emoji))
 
115
  }
116
  }, [reactFlowInstance]);
117
 
@@ -123,8 +114,7 @@ export default function ReactEnviorment() {
123
  localStorage.removeItem('colour')
124
  localStorage.removeItem('emoji')
125
  }
126
- },[reactFlowInstance])
127
-
128
 
129
  const onDrop = useCallback(
130
  (event) => {
@@ -135,7 +125,6 @@ export default function ReactEnviorment() {
135
  const type = event.dataTransfer.getData('application/reactflow');
136
  const item = JSON.parse(event.dataTransfer.getData('application/item'));
137
  const style = JSON.parse(event.dataTransfer.getData('application/style'));
138
- // check if the dropped element is valid
139
  if (typeof type === 'undefined' || !type) {
140
  return;
141
  }
 
36
  const reactFlowWrapper = useRef(null);
37
  const [tool, setTool] = useState(false)
38
 
39
+ const deleteNodeContains = useCallback((id) => setNodes((nds) => nds.filter(n => !n.id.includes(`${id}-`))), [setNodes]);
40
+ const deleteEdge = useCallback((id) => setEdges((eds) => eds.filter(e => e.id !== id)), [setEdges]);
41
+ const deleteNode = useCallback((id) => setNodes((nds) => nds.filter(n => n.id !== id)), [setNodes]);
 
 
 
42
 
43
  useEffect(() => {
44
  const restore = () => {
45
+ const flow = JSON.parse(localStorage.getItem('flowkey'));
46
 
47
  if(flow){
48
+ const updatedNodes = flow.nodes.map((nds) => ({ ...nds, data: { ...nds.data, delete: deleteNode }}));
49
+ const updatedEdges = flow.edges.map((eds) => ({ ...eds, data: { ...eds.data, delete: deleteEdge }}));
50
+ setNodes(updatedNodes || []);
51
+ setEdges(updatedEdges || []);
 
52
  }
53
  }
54
+ restore();
55
+ },[deleteNode, deleteEdge]);
 
 
56
 
57
  const onNodesChange = useCallback(
58
  (changes) => setNodes((nds) => applyNodeChanges(changes, nds)),
 
66
 
67
  const onEdgeUpdate = useCallback(
68
  (oldEdge, newConnection) => setEdges((els) => updateEdge(oldEdge, newConnection, els)),
69
+ [setEdges]
70
  );
71
 
72
  const onConnect = useCallback(
73
  (params) => {
 
74
  setEdges((els) => addEdge({...params, type: "custom", animated : true, style : {stroke : "#00FF4A", strokeWidth : "6"}, markerEnd: {type: MarkerType.ArrowClosed, color : "#00FF4A"}, data : { delete : deleteEdge}}, els))
75
  fetch("http://localhost:2000/api/append/connection", {method : "POST", mode : 'cors', headers : { 'Content-Type' : 'application/json' }, body: JSON.stringify({"source": params.source, "target" : params.target})}).then( res => {
76
  console.log(res)
 
81
  [setEdges, deleteEdge]
82
  );
83
 
 
 
84
  const onDragOver = useCallback((event) => {
85
  event.preventDefault();
86
  event.dataTransfer.dropEffect = 'move';
87
  }, []);
88
 
 
89
  const onSave = useCallback(() => {
90
  if (reactFlowInstance) {
91
  const flow = reactFlowInstance.toObject();
 
94
  var labels = [];
95
  var colour = [];
96
  var emoji = [];
97
+ flow.nodes.forEach((node) => {
98
+ if (!labels.includes(node.data.label)) {
99
+ colour.push(node.data.colour);
100
+ emoji.push(node.data.emoji);
101
+ labels.push(node.data.label);
102
  }
103
+ });
104
+ localStorage.setItem('colour', JSON.stringify(colour));
105
+ localStorage.setItem('emoji', JSON.stringify(emoji));
106
  }
107
  }, [reactFlowInstance]);
108
 
 
114
  localStorage.removeItem('colour')
115
  localStorage.removeItem('emoji')
116
  }
117
+ },[reactFlowInstance]);
 
118
 
119
  const onDrop = useCallback(
120
  (event) => {
 
125
  const type = event.dataTransfer.getData('application/reactflow');
126
  const item = JSON.parse(event.dataTransfer.getData('application/item'));
127
  const style = JSON.parse(event.dataTransfer.getData('application/style'));
 
128
  if (typeof type === 'undefined' || !type) {
129
  return;
130
  }