From 0dcf6ec69fed6facc9aa1b3f9f0ff052cb5f0b4c Mon Sep 17 00:00:00 2001 From: Adam Gough Date: Fri, 15 Aug 2025 13:29:29 -0700 Subject: [PATCH 01/13] added logic to remove blocks from subflows --- .../components/action-bar/action-bar.tsx | 32 +++++++++++++- .../[workspaceId]/w/[workflowId]/utils.ts | 3 ++ .../[workspaceId]/w/[workflowId]/workflow.tsx | 42 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/action-bar/action-bar.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/action-bar/action-bar.tsx index c3d1e608a7e..24f5ee47cf6 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/action-bar/action-bar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/workflow-block/components/action-bar/action-bar.tsx @@ -1,4 +1,4 @@ -import { ArrowLeftRight, ArrowUpDown, Circle, CircleOff, Copy, Trash2 } from 'lucide-react' +import { ArrowLeftRight, ArrowUpDown, Circle, CircleOff, Copy, LogOut, Trash2 } from 'lucide-react' import { Button } from '@/components/ui/button' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip' import { cn } from '@/lib/utils' @@ -23,6 +23,10 @@ export function ActionBar({ blockId, blockType, disabled = false }: ActionBarPro const horizontalHandles = useWorkflowStore( (state) => state.blocks[blockId]?.horizontalHandles ?? false ) + const parentId = useWorkflowStore((state) => state.blocks[blockId]?.data?.parentId) + const parentType = useWorkflowStore((state) => + parentId ? state.blocks[parentId]?.type : undefined + ) const userPermissions = useUserPermissionsContext() const isStarterBlock = blockType === 'starter' @@ -102,6 +106,32 @@ export function ActionBar({ blockId, blockType, disabled = false }: ActionBarPro )} + {/* Remove from subflow - only show when inside loop/parallel */} + {!isStarterBlock && parentId && (parentType === 'loop' || parentType === 'parallel') && ( + + + + + + {getTooltipMessage('Remove from subflow')} + + + )} + - )} - - {/* Parallel Start Block */} -
- - - -
- - - {/* Input handle on left middle */} - - - {/* Output handle on right middle */} - - - {/* Parallel Configuration Badges */} - - - - - ) -}) - -ParallelNodeComponent.displayName = 'ParallelNodeComponent' diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/subflows/loop/loop-node.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/subflows/subflow-node.tsx similarity index 75% rename from apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/subflows/loop/loop-node.tsx rename to apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/subflows/subflow-node.tsx index ffe413d1951..c7eed78e9a3 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/subflows/loop/loop-node.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/subflows/subflow-node.tsx @@ -10,56 +10,49 @@ import { IterationBadges } from '@/app/workspace/[workspaceId]/w/[workflowId]/co import { useCurrentWorkflow } from '@/app/workspace/[workspaceId]/w/[workflowId]/hooks' import { useCollaborativeWorkflow } from '@/hooks/use-collaborative-workflow' -// Add these styles to your existing global CSS file or create a separate CSS module -const LoopNodeStyles: React.FC = () => { +const SubflowNodeStyles: React.FC = () => { return (