Skip to content

Commit 6338a9d

Browse files
committed
fix(core,nodes,edges): allow pointer events if mouse evt listeners exist (#1618)
* fix(core,nodes): allow node pointer events if listener(s) exist Signed-off-by: braks <[email protected]> * fix(core,edges): allow edge pointer events if listener(s) exist Signed-off-by: braks <[email protected]> * chore(changeset): add Signed-off-by: braks <[email protected]> --------- Signed-off-by: braks <[email protected]>
1 parent a1bfef8 commit 6338a9d

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

.changeset/twelve-rules-exist.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@vue-flow/core": patch
3+
---
4+
5+
Allow node/edge pointer events if mouse event listeners (like `nodeClick` or `edgeClick`) exists.

packages/core/src/components/Edges/EdgeWrapper.ts

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ const EdgeWrapper = defineComponent({
4141
elementsSelectable,
4242
edgesUpdatable,
4343
edgesFocusable,
44+
hooks,
4445
} = useVueFlow()
4546

4647
const edge = computed(() => findEdge(props.id)!)
4748

48-
const hooks = useEdgeHooks(edge.value, emits)
49+
const { emit, on } = useEdgeHooks(edge.value, emits)
4950

5051
const slots = inject(Slots)
5152

@@ -188,7 +189,7 @@ const EdgeWrapper = defineComponent({
188189
updating: mouseOver.value,
189190
selected: edge.value.selected,
190191
animated: edge.value.animated,
191-
inactive: !isSelectable.value,
192+
inactive: !isSelectable.value && !hooks.value.edgeClick.hasListeners(),
192193
},
193194
],
194195
'onClick': onEdgeClick,
@@ -226,7 +227,7 @@ const EdgeWrapper = defineComponent({
226227
labelBgPadding: edge.value.labelBgPadding,
227228
labelBgBorderRadius: edge.value.labelBgBorderRadius,
228229
data: edge.value.data,
229-
events: { ...edge.value.events, ...hooks.on },
230+
events: { ...edge.value.events, ...on },
230231
style: edgeStyle.value,
231232
markerStart: `url('#${getMarkerId(edge.value.markerStart, vueFlowId)}')`,
232233
markerEnd: `url('#${getMarkerId(edge.value.markerEnd, vueFlowId)}')`,
@@ -296,11 +297,11 @@ const EdgeWrapper = defineComponent({
296297
}
297298

298299
function onEdgeUpdate(event: MouseTouchEvent, connection: Connection) {
299-
hooks.emit.update({ event, edge: edge.value, connection })
300+
emit.update({ event, edge: edge.value, connection })
300301
}
301302

302303
function onEdgeUpdateEnd(event: MouseTouchEvent) {
303-
hooks.emit.updateEnd({ event, edge: edge.value })
304+
emit.updateEnd({ event, edge: edge.value })
304305
updating.value = false
305306
}
306307

@@ -316,7 +317,7 @@ const EdgeWrapper = defineComponent({
316317

317318
edgeUpdaterType.value = isSourceHandle ? 'target' : 'source'
318319

319-
hooks.emit.updateStart({ event, edge: edge.value })
320+
emit.updateStart({ event, edge: edge.value })
320321

321322
handlePointerDown(event)
322323
}
@@ -336,27 +337,27 @@ const EdgeWrapper = defineComponent({
336337
}
337338
}
338339

339-
hooks.emit.click(data)
340+
emit.click(data)
340341
}
341342

342343
function onEdgeContextMenu(event: MouseEvent) {
343-
hooks.emit.contextMenu({ event, edge: edge.value })
344+
emit.contextMenu({ event, edge: edge.value })
344345
}
345346

346347
function onDoubleClick(event: MouseEvent) {
347-
hooks.emit.doubleClick({ event, edge: edge.value })
348+
emit.doubleClick({ event, edge: edge.value })
348349
}
349350

350351
function onEdgeMouseEnter(event: MouseEvent) {
351-
hooks.emit.mouseEnter({ event, edge: edge.value })
352+
emit.mouseEnter({ event, edge: edge.value })
352353
}
353354

354355
function onEdgeMouseMove(event: MouseEvent) {
355-
hooks.emit.mouseMove({ event, edge: edge.value })
356+
emit.mouseMove({ event, edge: edge.value })
356357
}
357358

358359
function onEdgeMouseLeave(event: MouseEvent) {
359-
hooks.emit.mouseLeave({ event, edge: edge.value })
360+
emit.mouseLeave({ event, edge: edge.value })
360361
}
361362

362363
function onEdgeUpdaterSourceMouseDown(event: MouseEvent) {

packages/core/src/components/Nodes/NodeWrapper.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ const NodeWrapper = defineComponent({
6060
elementsSelectable,
6161
nodesConnectable,
6262
nodesFocusable,
63+
hooks,
6364
} = useVueFlow()
6465

6566
const nodeElement = ref<HTMLDivElement | null>(null)
@@ -74,6 +75,8 @@ const NodeWrapper = defineComponent({
7475

7576
const { node, parentNode } = useNode(props.id)
7677

78+
const { emit, on } = useNodeHooks(node, emits)
79+
7780
const isDraggable = toRef(() => (typeof node.draggable === 'undefined' ? nodesDraggable.value : node.draggable))
7881

7982
const isSelectable = toRef(() => (typeof node.selectable === 'undefined' ? elementsSelectable.value : node.selectable))
@@ -82,6 +85,17 @@ const NodeWrapper = defineComponent({
8285

8386
const isFocusable = toRef(() => (typeof node.focusable === 'undefined' ? nodesFocusable.value : node.focusable))
8487

88+
const hasPointerEvents = toRef(
89+
() =>
90+
isSelectable.value ||
91+
isDraggable.value ||
92+
hooks.value.nodeClick.hasListeners() ||
93+
hooks.value.nodeDoubleClick.hasListeners() ||
94+
hooks.value.nodeMouseEnter.hasListeners() ||
95+
hooks.value.nodeMouseMove.hasListeners() ||
96+
hooks.value.nodeMouseLeave.hasListeners(),
97+
)
98+
8599
const isInit = toRef(() => !!node.dimensions.width && !!node.dimensions.height)
86100

87101
const nodeCmp = computed(() => {
@@ -112,8 +126,6 @@ const NodeWrapper = defineComponent({
112126
return false
113127
})
114128

115-
const { emit, on } = useNodeHooks(node, emits)
116-
117129
const dragging = useDrag({
118130
id: props.id,
119131
el: nodeElement,
@@ -266,7 +278,7 @@ const NodeWrapper = defineComponent({
266278
visibility: isInit.value ? 'visible' : 'hidden',
267279
zIndex: node.computedPosition.z ?? zIndex.value,
268280
transform: `translate(${node.computedPosition.x}px,${node.computedPosition.y}px)`,
269-
pointerEvents: isSelectable.value || isDraggable.value ? 'all' : 'none',
281+
pointerEvents: hasPointerEvents.value ? 'all' : 'none',
270282
...getStyle.value,
271283
},
272284
'tabIndex': isFocusable.value ? 0 : undefined,

0 commit comments

Comments
 (0)