From 158be8a515b32d9967076c350cda2a457cde290f Mon Sep 17 00:00:00 2001 From: Braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Wed, 6 Apr 2022 11:50:45 +0200 Subject: [PATCH] feat: Assign default handle id and allow for actual loose connections * When set to loose allow connections from all handles, this requires ids on handles so a default will be set if none provided --- package/src/components/Edges/EdgeWrapper.vue | 27 +++++++++++++++----- package/src/components/Handle/Handle.vue | 8 +++--- package/src/composables/useHandle.ts | 3 ++- package/src/utils/edge.ts | 3 ++- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/package/src/components/Edges/EdgeWrapper.vue b/package/src/components/Edges/EdgeWrapper.vue index 0d7c4443..71f99e57 100644 --- a/package/src/components/Edges/EdgeWrapper.vue +++ b/package/src/components/Edges/EdgeWrapper.vue @@ -42,6 +42,7 @@ const handleEdgeUpdater = (event: MouseEvent, isSourceHandle: boolean) => { const handleId = (isSourceHandle ? edge.value.targetHandle : edge.value.sourceHandle) ?? '' store.hooks.edgeUpdateStart.trigger({ event, edge: edge.value }) + onMouseDown( event, handleId, @@ -58,15 +59,29 @@ const getClass = () => (edge.value.class instanceof Function ? edge.value.class( const getStyle = () => (edge.value.style instanceof Function ? edge.value.style(edge.value) : edge.value.style) // when connection type is loose we can define all handles as sources -const targetNodeHandles = computed(() => - store.connectionMode === ConnectionMode.Strict - ? edge.value.targetNode.handleBounds.target - : edge.value.targetNode.handleBounds.target ?? edge.value.targetNode.handleBounds.source, -) +const targetNodeHandles = computed(() => { + if (store.connectionMode === ConnectionMode.Strict) { + return edge.value.targetNode.handleBounds.target + } + + const targetBounds = edge.value.targetNode.handleBounds.target || [] + const sourceBounds = edge.value.targetNode.handleBounds.source || [] + return [...sourceBounds, ...targetBounds] +}) + +const sourceNodeHandles = computed(() => { + if (store.connectionMode === ConnectionMode.Strict) { + return edge.value.sourceNode.handleBounds.source + } + + const targetBounds = edge.value.sourceNode.handleBounds.target || [] + const sourceBounds = edge.value.sourceNode.handleBounds.source || [] + return [...sourceBounds, ...targetBounds] +}) const sourceHandle = controlledComputed( () => edge.value.sourceNode.handleBounds, - () => getHandle(edge.value.sourceNode.handleBounds.source, edge.value.sourceHandle), + () => getHandle(sourceNodeHandles.value, edge.value.sourceHandle), ) const targetHandle = computed(() => getHandle(targetNodeHandles.value, edge.value.targetHandle)) diff --git a/package/src/components/Handle/Handle.vue b/package/src/components/Handle/Handle.vue index 95b102a7..f973816e 100644 --- a/package/src/components/Handle/Handle.vue +++ b/package/src/components/Handle/Handle.vue @@ -13,11 +13,11 @@ const props = withDefaults(defineProps(), { const nodeId = inject(NodeId, '') +const handleId = props.id ?? `${nodeId}__handle-${props.position}` + const { onMouseDown, onClick } = useHandle() const onMouseDownHandler = (event: MouseEvent) => - onMouseDown(event, props.id ?? null, nodeId, props.type === 'target', props.isValidConnection, undefined, (connection) => - hooks.value.connect.trigger(connection), - ) + onMouseDown(event, handleId, nodeId, props.type === 'target', props.isValidConnection, undefined) const onClickHandler = (event: MouseEvent) => onClick(event, props.id ?? null, nodeId, props.type, props.isValidConnection)