diff --git a/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx b/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx index 65a4c1b0dd..eb3afafc0e 100644 --- a/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx +++ b/app/w/[id]/components/workflow-block/components/sub-block/components/condition-input.tsx @@ -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 + }} />
diff --git a/app/w/[id]/components/workflow-block/workflow-block.tsx b/app/w/[id]/components/workflow-block/workflow-block.tsx index 482091a916..d617fb05eb 100644 --- a/app/w/[id]/components/workflow-block/workflow-block.tsx +++ b/app/w/[id]/components/workflow-block/workflow-block.tsx @@ -191,6 +191,7 @@ export function WorkflowBlock({ id, data, selected }: NodeProps connection.source !== id} /> {/* Block Header */} @@ -284,6 +285,7 @@ export function WorkflowBlock({ id, data, selected }: NodeProps connection.target !== id} /> )} diff --git a/stores/workflow/store.ts b/stores/workflow/store.ts index 883e7a7188..d39efc30dc 100644 --- a/stores/workflow/store.ts +++ b/stores/workflow/store.ts @@ -186,6 +186,20 @@ export const useWorkflowStore = create()( }, 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,