diff --git a/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue b/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue index f8c8ed7a88..13bfcf9c75 100644 --- a/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue +++ b/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue @@ -1,13 +1,12 @@ @@ -230,6 +338,7 @@ onUnmounted(() => { @connect="onConnect" @connect-end="onConnectEnd" @pane-click="onClickPane" + @contextmenu="onOpenContextMenu" > diff --git a/packages/editor-ui/src/components/canvas/elements/nodes/CanvasNode.vue b/packages/editor-ui/src/components/canvas/elements/nodes/CanvasNode.vue index e3cf9829b3..fc201c281b 100644 --- a/packages/editor-ui/src/components/canvas/elements/nodes/CanvasNode.vue +++ b/packages/editor-ui/src/components/canvas/elements/nodes/CanvasNode.vue @@ -8,6 +8,7 @@ import CanvasNodeRenderer from '@/components/canvas/elements/nodes/CanvasNodeRen import HandleRenderer from '@/components/canvas/elements/handles/HandleRenderer.vue'; import { useNodeConnections } from '@/composables/useNodeConnections'; import { CanvasNodeKey } from '@/constants'; +import { useContextMenu } from '@/composables/useContextMenu'; import { Position } from '@vue-flow/core'; import type { XYPosition, NodeProps } from '@vue-flow/core'; @@ -17,12 +18,14 @@ const emit = defineEmits<{ select: [id: string, selected: boolean]; toggle: [id: string]; activate: [id: string]; + 'open:contextmenu': [id: string, event: MouseEvent, source: 'node-button' | 'node-right-click']; update: [id: string, parameters: Record]; move: [id: string, position: XYPosition]; }>(); const props = defineProps>(); const nodeTypesStore = useNodeTypesStore(); +const contextMenu = useContextMenu(); const inputs = computed(() => props.data.inputs); const outputs = computed(() => props.data.outputs); @@ -110,6 +113,13 @@ function onActivate() { emit('activate', props.id); } +function onOpenContextMenuFromToolbar(event: MouseEvent) { + emit('open:contextmenu', props.id, event, 'node-button'); +} + +function onOpenContextMenuFromNode(event: MouseEvent) { + emit('open:contextmenu', props.id, event, 'node-right-click'); +} function onUpdate(parameters: Record) { emit('update', props.id, parameters); } @@ -135,6 +145,11 @@ provide(CanvasNodeKey, { nodeType, }); +const showToolbar = computed(() => { + const target = contextMenu.target.value; + return contextMenu.isOpen && target?.source === 'node-button' && target.nodeId === id.value; +}); + /** * Lifecycle */ @@ -148,7 +163,10 @@ watch(