@@ -22,12 +22,12 @@ import "@xyflow/react/dist/style.css";
22
22
import { v4 as uuidv4 } from "uuid" ;
23
23
24
24
import CustomEdge from "./_components/custom-edge" ;
25
- import { LabeledGroupNode } from "../components/labeled-group-node" ;
26
- import { CustomChildNode } from "../components/custom-child-node" ;
27
25
import { toast , Toaster } from "sonner" ;
28
26
import "./index.css" ;
29
27
import { useDnD } from "./context/drag-and-drop" ;
30
28
import { Sidebar } from "./_components/sidebar" ;
29
+ import { LabeledGroupNode } from "../components/labeled-group-node" ;
30
+ import { CustomChildNode } from "../components/custom-child-node" ;
31
31
32
32
const nodeTypes = {
33
33
LabeledGroupNode,
@@ -43,7 +43,23 @@ export default function Page() {
43
43
const [ nodes , setNodes ] = useNodesState ( [ ] ) ;
44
44
const [ edges , setEdges ] = useEdgesState ( [ ] ) ;
45
45
46
- // drag and drop providers setup
46
+ // Persistent indices using useRef
47
+ const stageIndex = useRef ( 1 ) ;
48
+ const processIndex = useRef ( 1 ) ;
49
+
50
+ const getStageIndex = useCallback ( ( ) => {
51
+ const currentIndex = stageIndex . current ;
52
+ stageIndex . current += 1 ;
53
+ return currentIndex ;
54
+ } , [ ] ) ;
55
+
56
+ const getProcessIndex = useCallback ( ( ) => {
57
+ const currentIndex = processIndex . current ;
58
+ processIndex . current += 1 ;
59
+ return currentIndex ;
60
+ } , [ ] ) ;
61
+
62
+ // Drag-and-drop providers setup
47
63
const { screenToFlowPosition } = useReactFlow ( ) ;
48
64
const [ type ] = useDnD ( ) ;
49
65
@@ -60,8 +76,6 @@ export default function Page() {
60
76
data : { label : "Dependent" } ,
61
77
} ;
62
78
63
- // const panOnDrag = [1, 2];
64
-
65
79
const onConnect = useCallback (
66
80
( params ) => {
67
81
// Prevent self-connections
@@ -84,8 +98,6 @@ export default function Page() {
84
98
[ setEdges ] ,
85
99
) ;
86
100
87
- // drag and drop functions
88
-
89
101
const onDragOver = useCallback ( ( event ) => {
90
102
event . preventDefault ( ) ;
91
103
event . dataTransfer . dropEffect = "move" ;
@@ -109,8 +121,12 @@ export default function Page() {
109
121
id : uuidv4 ( ) ,
110
122
type,
111
123
position,
112
- data : { label : `${ type } node` } ,
113
- /*measured: { width: 160, height: 20 }, // Default size for new node*/
124
+ data : {
125
+ label :
126
+ type === "LabeledGroupNode"
127
+ ? `Stage ${ getStageIndex ( ) } `
128
+ : `Process ${ getProcessIndex ( ) } ` ,
129
+ } ,
114
130
} ;
115
131
116
132
if ( type === "LabeledGroupNode" ) {
@@ -189,34 +205,14 @@ export default function Page() {
189
205
// Add the new node to the state
190
206
setNodes ( ( nds ) => nds . concat ( newNode ) ) ;
191
207
} ,
192
- [ screenToFlowPosition , type , nodes , setNodes ] ,
193
- ) ;
194
-
195
- const onNodesDelete = useCallback (
196
- ( deleted ) => {
197
- setEdges (
198
- deleted . reduce ( ( acc , node ) => {
199
- const incomers = getIncomers ( node , nodes , edges ) ;
200
- const outgoers = getOutgoers ( node , nodes , edges ) ;
201
- const connectedEdges = getConnectedEdges ( [ node ] , edges ) ;
202
-
203
- const remainingEdges = acc . filter (
204
- ( edge ) => ! connectedEdges . includes ( edge ) ,
205
- ) ;
206
-
207
- const createdEdges = incomers . flatMap ( ( { id : source } ) =>
208
- outgoers . map ( ( { id : target } ) => ( {
209
- id : `${ source } ->${ target } ` ,
210
- source,
211
- target,
212
- } ) ) ,
213
- ) ;
214
-
215
- return [ ...remainingEdges , ...createdEdges ] ;
216
- } , edges ) ,
217
- ) ;
218
- } ,
219
- [ nodes , edges ] ,
208
+ [
209
+ screenToFlowPosition ,
210
+ type ,
211
+ nodes ,
212
+ setNodes ,
213
+ getStageIndex ,
214
+ getProcessIndex ,
215
+ ] ,
220
216
) ;
221
217
222
218
return (
@@ -228,7 +224,6 @@ export default function Page() {
228
224
onNodesChange = { onNodesChange }
229
225
onEdgesChange = { onEdgesChange }
230
226
onConnect = { onConnect }
231
- onNodesDelete = { onNodesDelete }
232
227
defaultEdgeOptions = { defaultEdgeOptions }
233
228
onDrop = { onDrop }
234
229
onDragOver = { onDragOver }
0 commit comments