Spaces:
Configuration error
Configuration error
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) =>
|
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 |
-
|
49 |
|
50 |
if(flow){
|
51 |
-
flow.nodes.map((nds) => nds.data
|
52 |
-
flow.edges.map((eds) => eds.data
|
53 |
-
setNodes(
|
54 |
-
setEdges(
|
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 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
}
|
113 |
-
|
114 |
-
localStorage.setItem('
|
|
|
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 |
}
|