diff --git a/packages/core/src/components/Handle/Handle.vue b/packages/core/src/components/Handle/Handle.vue index 338f5b01..b67835c4 100644 --- a/packages/core/src/components/Handle/Handle.vue +++ b/packages/core/src/components/Handle/Handle.vue @@ -27,7 +27,10 @@ const { onMouseDown, onClick } = useHandle({ const isConnectable = computed(() => { if (isString(connectable) && connectable === 'single') { - return !connectedEdges.value.some((edge) => edge[type.value] === nodeId && edge[`${type.value}Handle`] === handleId) + return !connectedEdges.value.some((edge) => { + const handle = edge[`${type.value}Handle`] + return edge[type.value] === nodeId && !!handle ? edge[`${type.value}Handle`] === handleId : true + }) } else if (isFunction(connectable)) { return connectable(node, connectedEdges.value) } diff --git a/packages/core/src/types/handle.ts b/packages/core/src/types/handle.ts index 55bad53b..2376f491 100644 --- a/packages/core/src/types/handle.ts +++ b/packages/core/src/types/handle.ts @@ -22,7 +22,13 @@ export type ValidConnectionFunc = ( elements: { edges: GraphEdge[]; sourceNode: GraphNode; targetNode: GraphNode }, ) => boolean -/** set to true to allow unlimited connections, single for only one connection or use a cb function to determine connect-ability */ +/** + * set to true to allow unlimited connections, + * single for only one connection + * or use a cb function to determine connect-ability + * + * if set to single and the handle already has more than one connection, it will act the same as setting it to false + */ export type HandleConnectable = boolean | 'single' | ((node: GraphNode, connectedEdges: GraphEdge[]) => boolean) export interface HandleProps {