diff --git a/skyvern-frontend/src/routes/workflows/editor/edges/EdgeWithAddButton.tsx b/skyvern-frontend/src/routes/workflows/editor/edges/EdgeWithAddButton.tsx index 545f10af..12974437 100644 --- a/skyvern-frontend/src/routes/workflows/editor/edges/EdgeWithAddButton.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/edges/EdgeWithAddButton.tsx @@ -56,6 +56,7 @@ function EdgeWithAddButton({ size="icon" className="h-4 w-4 rounded-full transition-all hover:scale-150" onClick={() => { + const disableLoop = Boolean(sourceNode?.parentId); setWorkflowPanelState({ active: true, content: "nodeLibrary", @@ -63,6 +64,7 @@ function EdgeWithAddButton({ previous: source, next: target, parent: sourceNode?.parentId, + disableLoop, }, }); }} diff --git a/skyvern-frontend/src/routes/workflows/editor/nodes/NodeAdderNode/NodeAdderNode.tsx b/skyvern-frontend/src/routes/workflows/editor/nodes/NodeAdderNode/NodeAdderNode.tsx index 92407c99..46131376 100644 --- a/skyvern-frontend/src/routes/workflows/editor/nodes/NodeAdderNode/NodeAdderNode.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/nodes/NodeAdderNode/NodeAdderNode.tsx @@ -27,6 +27,7 @@ function NodeAdderNode({ id, parentId }: NodeProps) { className="rounded-full bg-slate-50 p-2" onClick={() => { const previous = edges.find((edge) => edge.target === id)?.source; + const disableLoop = Boolean(parentId); setWorkflowPanelState({ active: true, content: "nodeLibrary", @@ -35,6 +36,7 @@ function NodeAdderNode({ id, parentId }: NodeProps) { next: id, parent: parentId, connectingEdgeType: "default", + disableLoop, }, }); }} diff --git a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx index 70f4e737..19ce984f 100644 --- a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowNodeLibraryPanel.tsx @@ -106,6 +106,9 @@ function WorkflowNodeLibraryPanel({ onNodeClick, first }: Props) {
{nodeLibraryItems.map((item) => { + if (workflowPanelData?.disableLoop && item.nodeType === "loop") { + return null; + } return (