Fix: edge connection logic (self-connect and duplicate connections)

This commit is contained in:
Emir Karabeg
2025-02-13 14:46:02 -08:00
parent 9ad71b88b5
commit 08cd1d6ae9
3 changed files with 21 additions and 0 deletions

View File

@@ -440,6 +440,11 @@ export function ConditionInput({ blockId, subBlockId, isConnecting }: ConditionI
}}
isConnectableStart={true}
isConnectableEnd={false}
isValidConnection={(connection) => {
const sourceNodeId = connection.source?.split('-')[0]
const targetNodeId = connection.target?.split('-')[0]
return sourceNodeId !== targetNodeId
}}
/>
<div className="flex items-center gap-1">
<Tooltip>

View File

@@ -191,6 +191,7 @@ export function WorkflowBlock({ id, data, selected }: NodeProps<WorkflowBlockPro
data-handleid="target"
isConnectableStart={false}
isConnectableEnd={true}
isValidConnection={(connection) => connection.source !== id}
/>
{/* Block Header */}
@@ -284,6 +285,7 @@ export function WorkflowBlock({ id, data, selected }: NodeProps<WorkflowBlockPro
data-handleid="source"
isConnectableStart={true}
isConnectableEnd={false}
isValidConnection={(connection) => connection.target !== id}
/>
)}
</Card>

View File

@@ -186,6 +186,20 @@ export const useWorkflowStore = create<WorkflowStoreWithHistory>()(
},
addEdge: (edge: Edge) => {
// Check for duplicate connections
const isDuplicate = get().edges.some(
(existingEdge) =>
existingEdge.source === edge.source &&
existingEdge.target === edge.target &&
existingEdge.sourceHandle === edge.sourceHandle &&
existingEdge.targetHandle === edge.targetHandle
)
// If it's a duplicate connection, return early without adding the edge
if (isDuplicate) {
return
}
const newEdge = {
id: edge.id || crypto.randomUUID(),
source: edge.source,