1
1
import { computed , defineComponent , getCurrentInstance , h , inject , provide , ref , resolveComponent , toRef } from 'vue'
2
2
import type { Connection , EdgeComponent , HandleType , MouseTouchEvent } from '../../types'
3
3
import { ConnectionMode , Position } from '../../types'
4
- import { useEdge , useEdgeHooks , useHandle , useVueFlow } from '../../composables'
4
+ import { useEdgeHooks , useHandle , useVueFlow } from '../../composables'
5
5
import { EdgeId , EdgeRef , Slots } from '../../context'
6
6
import {
7
7
ARIA_EDGE_DESC_KEY ,
@@ -43,9 +43,9 @@ const EdgeWrapper = defineComponent({
43
43
edgesFocusable,
44
44
} = useVueFlow ( )
45
45
46
- const { edge } = useEdge ( props . id )
46
+ const edge = computed ( ( ) => findEdge ( props . id ) ! )
47
47
48
- const hooks = useEdgeHooks ( edge , emits )
48
+ const hooks = useEdgeHooks ( edge . value , emits )
49
49
50
50
const slots = inject ( Slots )
51
51
@@ -63,27 +63,29 @@ const EdgeWrapper = defineComponent({
63
63
64
64
const edgeEl = ref < SVGElement | null > ( null )
65
65
66
- const isSelectable = toRef ( ( ) => ( typeof edge . selectable === 'undefined' ? elementsSelectable . value : edge . selectable ) )
66
+ const isSelectable = toRef ( ( ) =>
67
+ typeof edge . value . selectable === 'undefined' ? elementsSelectable . value : edge . value . selectable ,
68
+ )
67
69
68
- const isUpdatable = toRef ( ( ) => ( typeof edge . updatable === 'undefined' ? edgesUpdatable . value : edge . updatable ) )
70
+ const isUpdatable = toRef ( ( ) => ( typeof edge . value . updatable === 'undefined' ? edgesUpdatable . value : edge . value . updatable ) )
69
71
70
- const isFocusable = toRef ( ( ) => ( typeof edge . focusable === 'undefined' ? edgesFocusable . value : edge . focusable ) )
72
+ const isFocusable = toRef ( ( ) => ( typeof edge . value . focusable === 'undefined' ? edgesFocusable . value : edge . value . focusable ) )
71
73
72
74
provide ( EdgeId , props . id )
73
75
provide ( EdgeRef , edgeEl )
74
76
75
- const edgeClass = computed ( ( ) => ( edge . class instanceof Function ? edge . class ( edge ) : edge . class ) )
76
- const edgeStyle = computed ( ( ) => ( edge . style instanceof Function ? edge . style ( edge ) : edge . style ) )
77
+ const edgeClass = computed ( ( ) => ( edge . value . class instanceof Function ? edge . value . class ( edge . value ) : edge . value . class ) )
78
+ const edgeStyle = computed ( ( ) => ( edge . value . style instanceof Function ? edge . value . style ( edge . value ) : edge . value . style ) )
77
79
78
80
const edgeCmp = computed ( ( ) => {
79
- const name = edge . type || 'default'
81
+ const name = edge . value . type || 'default'
80
82
81
83
const slot = slots ?. [ `edge-${ name } ` ]
82
84
if ( slot ) {
83
85
return slot
84
86
}
85
87
86
- let edgeType = edge . template ?? getEdgeTypes . value [ name ]
88
+ let edgeType = edge . value . template ?? getEdgeTypes . value [ name ]
87
89
88
90
if ( typeof edgeType === 'string' ) {
89
91
if ( instance ) {
@@ -114,29 +116,29 @@ const EdgeWrapper = defineComponent({
114
116
} )
115
117
116
118
return ( ) => {
117
- const sourceNode = findNode ( edge . source )
118
- const targetNode = findNode ( edge . target )
119
- const pathOptions = 'pathOptions' in edge ? edge . pathOptions : { }
119
+ const sourceNode = findNode ( edge . value . source )
120
+ const targetNode = findNode ( edge . value . target )
121
+ const pathOptions = 'pathOptions' in edge . value ? edge . value . pathOptions : { }
120
122
121
123
if ( ! sourceNode && ! targetNode ) {
122
- emits . error ( new VueFlowError ( ErrorCode . EDGE_SOURCE_TARGET_MISSING , edge . id , edge . source , edge . target ) )
124
+ emits . error ( new VueFlowError ( ErrorCode . EDGE_SOURCE_TARGET_MISSING , edge . value . id , edge . value . source , edge . value . target ) )
123
125
124
126
return null
125
127
}
126
128
127
129
if ( ! sourceNode ) {
128
- emits . error ( new VueFlowError ( ErrorCode . EDGE_SOURCE_MISSING , edge . id , edge . source ) )
130
+ emits . error ( new VueFlowError ( ErrorCode . EDGE_SOURCE_MISSING , edge . value . id , edge . value . source ) )
129
131
130
132
return null
131
133
}
132
134
133
135
if ( ! targetNode ) {
134
- emits . error ( new VueFlowError ( ErrorCode . EDGE_TARGET_MISSING , edge . id , edge . target ) )
136
+ emits . error ( new VueFlowError ( ErrorCode . EDGE_TARGET_MISSING , edge . value . id , edge . value . target ) )
135
137
136
138
return null
137
139
}
138
140
139
- if ( ! edge || edge . hidden || sourceNode . hidden || targetNode . hidden ) {
141
+ if ( ! edge . value || edge . value . hidden || sourceNode . hidden || targetNode . hidden ) {
140
142
return null
141
143
}
142
144
@@ -147,7 +149,7 @@ const EdgeWrapper = defineComponent({
147
149
sourceNodeHandles = [ ...( sourceNode . handleBounds . source || [ ] ) , ...( sourceNode . handleBounds . target || [ ] ) ]
148
150
}
149
151
150
- const sourceHandle = getHandle ( sourceNodeHandles , edge . sourceHandle )
152
+ const sourceHandle = getHandle ( sourceNodeHandles , edge . value . sourceHandle )
151
153
152
154
let targetNodeHandles
153
155
if ( connectionMode . value === ConnectionMode . Strict ) {
@@ -156,7 +158,7 @@ const EdgeWrapper = defineComponent({
156
158
targetNodeHandles = [ ...( targetNode . handleBounds . target || [ ] ) , ...( targetNode . handleBounds . source || [ ] ) ]
157
159
}
158
160
159
- const targetHandle = getHandle ( targetNodeHandles , edge . targetHandle )
161
+ const targetHandle = getHandle ( targetNodeHandles , edge . value . targetHandle )
160
162
161
163
const sourcePosition = sourceHandle ? sourceHandle . position : Position . Bottom
162
164
@@ -171,10 +173,10 @@ const EdgeWrapper = defineComponent({
171
173
targetPosition ,
172
174
)
173
175
174
- edge . sourceX = sourceX
175
- edge . sourceY = sourceY
176
- edge . targetX = targetX
177
- edge . targetY = targetY
176
+ edge . value . sourceX = sourceX
177
+ edge . value . sourceY = sourceY
178
+ edge . value . targetX = targetX
179
+ edge . value . targetY = targetY
178
180
179
181
return h (
180
182
'g' ,
@@ -184,13 +186,13 @@ const EdgeWrapper = defineComponent({
184
186
'data-id' : props . id ,
185
187
'class' : [
186
188
'vue-flow__edge' ,
187
- `vue-flow__edge-${ edgeCmp . value === false ? 'default' : edge . type || 'default' } ` ,
189
+ `vue-flow__edge-${ edgeCmp . value === false ? 'default' : edge . value . type || 'default' } ` ,
188
190
noPanClassName . value ,
189
191
edgeClass . value ,
190
192
{
191
193
updating : mouseOver . value ,
192
- selected : edge . selected ,
193
- animated : edge . animated ,
194
+ selected : edge . value . selected ,
195
+ animated : edge . value . animated ,
194
196
inactive : ! isSelectable . value ,
195
197
} ,
196
198
] ,
@@ -202,7 +204,10 @@ const EdgeWrapper = defineComponent({
202
204
'onMouseleave' : onEdgeMouseLeave ,
203
205
'onKeyDown' : isFocusable . value ? onKeyDown : undefined ,
204
206
'tabIndex' : isFocusable . value ? 0 : undefined ,
205
- 'aria-label' : edge . ariaLabel === null ? undefined : edge . ariaLabel || `Edge from ${ edge . source } to ${ edge . target } ` ,
207
+ 'aria-label' :
208
+ edge . value . ariaLabel === null
209
+ ? undefined
210
+ : edge . value . ariaLabel || `Edge from ${ edge . value . source } to ${ edge . value . target } ` ,
206
211
'aria-describedby' : isFocusable . value ? `${ ARIA_EDGE_DESC_KEY } -${ vueFlowId } ` : undefined ,
207
212
'role' : isFocusable . value ? 'button' : 'img' ,
208
213
} ,
@@ -213,32 +218,32 @@ const EdgeWrapper = defineComponent({
213
218
id : props . id ,
214
219
sourceNode,
215
220
targetNode,
216
- source : edge . source ,
217
- target : edge . target ,
218
- type : edge . type ,
221
+ source : edge . value . source ,
222
+ target : edge . value . target ,
223
+ type : edge . value . type ,
219
224
updatable : isUpdatable . value ,
220
- selected : edge . selected ,
221
- animated : edge . animated ,
222
- label : edge . label ,
223
- labelStyle : edge . labelStyle ,
224
- labelShowBg : edge . labelShowBg ,
225
- labelBgStyle : edge . labelBgStyle ,
226
- labelBgPadding : edge . labelBgPadding ,
227
- labelBgBorderRadius : edge . labelBgBorderRadius ,
228
- data : edge . data ,
229
- events : { ...edge . events , ...hooks . on } ,
225
+ selected : edge . value . selected ,
226
+ animated : edge . value . animated ,
227
+ label : edge . value . label ,
228
+ labelStyle : edge . value . labelStyle ,
229
+ labelShowBg : edge . value . labelShowBg ,
230
+ labelBgStyle : edge . value . labelBgStyle ,
231
+ labelBgPadding : edge . value . labelBgPadding ,
232
+ labelBgBorderRadius : edge . value . labelBgBorderRadius ,
233
+ data : edge . value . data ,
234
+ events : { ...edge . value . events , ...hooks . on } ,
230
235
style : edgeStyle . value ,
231
- markerStart : `url('#${ getMarkerId ( edge . markerStart , vueFlowId ) } ')` ,
232
- markerEnd : `url('#${ getMarkerId ( edge . markerEnd , vueFlowId ) } ')` ,
236
+ markerStart : `url('#${ getMarkerId ( edge . value . markerStart , vueFlowId ) } ')` ,
237
+ markerEnd : `url('#${ getMarkerId ( edge . value . markerEnd , vueFlowId ) } ')` ,
233
238
sourcePosition,
234
239
targetPosition,
235
240
sourceX,
236
241
sourceY,
237
242
targetX,
238
243
targetY,
239
- sourceHandleId : edge . sourceHandle ,
240
- targetHandleId : edge . targetHandle ,
241
- interactionWidth : edge . interactionWidth ,
244
+ sourceHandleId : edge . value . sourceHandle ,
245
+ targetHandleId : edge . value . targetHandle ,
246
+ interactionWidth : edge . value . interactionWidth ,
242
247
...pathOptions ,
243
248
} ) ,
244
249
[
@@ -296,11 +301,11 @@ const EdgeWrapper = defineComponent({
296
301
}
297
302
298
303
function onEdgeUpdate ( event : MouseTouchEvent , connection : Connection ) {
299
- hooks . emit . update ( { event, edge, connection } )
304
+ hooks . emit . update ( { event, edge : edge . value , connection } )
300
305
}
301
306
302
307
function onEdgeUpdateEnd ( event : MouseTouchEvent ) {
303
- hooks . emit . updateEnd ( { event, edge } )
308
+ hooks . emit . updateEnd ( { event, edge : edge . value } )
304
309
updating . value = false
305
310
}
306
311
@@ -311,52 +316,52 @@ const EdgeWrapper = defineComponent({
311
316
312
317
updating . value = true
313
318
314
- nodeId . value = isSourceHandle ? edge . target : edge . source
315
- handleId . value = ( isSourceHandle ? edge . targetHandle : edge . sourceHandle ) ?? ''
319
+ nodeId . value = isSourceHandle ? edge . value . target : edge . value . source
320
+ handleId . value = ( isSourceHandle ? edge . value . targetHandle : edge . value . sourceHandle ) ?? ''
316
321
317
322
edgeUpdaterType . value = isSourceHandle ? 'target' : 'source'
318
323
319
- hooks . emit . updateStart ( { event, edge } )
324
+ hooks . emit . updateStart ( { event, edge : edge . value } )
320
325
321
326
handlePointerDown ( event )
322
327
}
323
328
324
329
function onEdgeClick ( event : MouseEvent ) {
325
- const data = { event, edge }
330
+ const data = { event, edge : edge . value }
326
331
327
332
if ( isSelectable . value ) {
328
333
nodesSelectionActive . value = false
329
334
330
- if ( edge . selected && multiSelectionActive . value ) {
331
- removeSelectedEdges ( [ edge ] )
335
+ if ( edge . value . selected && multiSelectionActive . value ) {
336
+ removeSelectedEdges ( [ edge . value ] )
332
337
333
338
edgeEl . value ?. blur ( )
334
339
} else {
335
- addSelectedEdges ( [ edge ] )
340
+ addSelectedEdges ( [ edge . value ] )
336
341
}
337
342
}
338
343
339
344
hooks . emit . click ( data )
340
345
}
341
346
342
347
function onEdgeContextMenu ( event : MouseEvent ) {
343
- hooks . emit . contextMenu ( { event, edge } )
348
+ hooks . emit . contextMenu ( { event, edge : edge . value } )
344
349
}
345
350
346
351
function onDoubleClick ( event : MouseEvent ) {
347
- hooks . emit . doubleClick ( { event, edge } )
352
+ hooks . emit . doubleClick ( { event, edge : edge . value } )
348
353
}
349
354
350
355
function onEdgeMouseEnter ( event : MouseEvent ) {
351
- hooks . emit . mouseEnter ( { event, edge } )
356
+ hooks . emit . mouseEnter ( { event, edge : edge . value } )
352
357
}
353
358
354
359
function onEdgeMouseMove ( event : MouseEvent ) {
355
- hooks . emit . mouseMove ( { event, edge } )
360
+ hooks . emit . mouseMove ( { event, edge : edge . value } )
356
361
}
357
362
358
363
function onEdgeMouseLeave ( event : MouseEvent ) {
359
- hooks . emit . mouseLeave ( { event, edge } )
364
+ hooks . emit . mouseLeave ( { event, edge : edge . value } )
360
365
}
361
366
362
367
function onEdgeUpdaterSourceMouseDown ( event : MouseEvent ) {
0 commit comments