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]