diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx index 7c044c5a4..1154d44a4 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/action-bar/action-bar.tsx @@ -85,25 +85,33 @@ export const ActionBar = memo( ) }, [blockId, addNotification, collaborativeBatchAddBlocks, setPendingSelection]) - const { isEnabled, horizontalHandles, parentId, parentType, isLocked, isParentLocked } = - useWorkflowStore( - useCallback( - (state) => { - const block = state.blocks[blockId] - const parentId = block?.data?.parentId - const parentBlock = parentId ? state.blocks[parentId] : undefined - return { - isEnabled: block?.enabled ?? true, - horizontalHandles: block?.horizontalHandles ?? false, - parentId, - parentType: parentBlock?.type, - isLocked: block?.locked ?? false, - isParentLocked: parentBlock?.locked ?? false, - } - }, - [blockId] - ) + const { + isEnabled, + horizontalHandles, + parentId, + parentType, + isLocked, + isParentLocked, + isParentDisabled, + } = useWorkflowStore( + useCallback( + (state) => { + const block = state.blocks[blockId] + const parentId = block?.data?.parentId + const parentBlock = parentId ? state.blocks[parentId] : undefined + return { + isEnabled: block?.enabled ?? true, + horizontalHandles: block?.horizontalHandles ?? false, + parentId, + parentType: parentBlock?.type, + isLocked: block?.locked ?? false, + isParentLocked: parentBlock?.locked ?? false, + isParentDisabled: parentBlock ? !parentBlock.enabled : false, + } + }, + [blockId] ) + ) const { activeWorkflowId } = useWorkflowRegistry() const { isExecuting, getLastExecutionSnapshot } = useExecutionStore() @@ -200,12 +208,16 @@ export const ActionBar = memo( variant='ghost' onClick={(e) => { e.stopPropagation() - if (!disabled && !isLocked && !isParentLocked) { + // Can't enable if parent is disabled (must enable parent first) + const cantEnable = !isEnabled && isParentDisabled + if (!disabled && !isLocked && !isParentLocked && !cantEnable) { collaborativeBatchToggleBlockEnabled([blockId]) } }} className={ACTION_BUTTON_STYLES} - disabled={disabled || isLocked || isParentLocked} + disabled={ + disabled || isLocked || isParentLocked || (!isEnabled && isParentDisabled) + } > {isEnabled ? : } @@ -213,7 +225,9 @@ export const ActionBar = memo( {isLocked || isParentLocked ? 'Block is locked' - : getTooltipMessage(isEnabled ? 'Disable Block' : 'Enable Block')} + : !isEnabled && isParentDisabled + ? 'Parent container is disabled' + : getTooltipMessage(isEnabled ? 'Disable Block' : 'Enable Block')} )} diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/block-menu/block-menu.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/block-menu/block-menu.tsx index e8c5861b8..1bddaad2c 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/block-menu/block-menu.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/block-menu/block-menu.tsx @@ -22,6 +22,7 @@ export interface BlockInfo { parentType?: string locked?: boolean isParentLocked?: boolean + isParentDisabled?: boolean } /** @@ -101,6 +102,8 @@ export function BlockMenu({ const allUnlocked = selectedBlocks.every((b) => !b.locked) // Can't unlock blocks that have locked parents const hasBlockWithLockedParent = selectedBlocks.some((b) => b.locked && b.isParentLocked) + // Can't enable blocks that have disabled parents + const hasBlockWithDisabledParent = selectedBlocks.some((b) => !b.enabled && b.isParentDisabled) const hasSingletonBlock = selectedBlocks.some( (b) => @@ -186,13 +189,15 @@ export function BlockMenu({ {!allNoteBlocks && } {!allNoteBlocks && ( { - onToggleEnabled() - onClose() + if (!disableEdit && !hasBlockWithDisabledParent) { + onToggleEnabled() + onClose() + } }} > - {getToggleEnabledLabel()} + {hasBlockWithDisabledParent ? 'Parent is disabled' : getToggleEnabledLabel()} )} {!allNoteBlocks && !isSubflow && ( diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-canvas-context-menu.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-canvas-context-menu.ts index c95e97563..13a9968e7 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-canvas-context-menu.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/hooks/use-canvas-context-menu.ts @@ -42,6 +42,7 @@ export function useCanvasContextMenu({ blocks, getNodes, setNodes }: UseCanvasCo parentType, locked: block?.locked ?? false, isParentLocked: parentBlock?.locked ?? false, + isParentDisabled: parentBlock ? !parentBlock.enabled : false, } }), [blocks]