diff --git a/webview-ui/src/components/chat/AutoApproveMenu.tsx b/webview-ui/src/components/chat/AutoApproveMenu.tsx index e60156b7a3..6fc20a2b27 100644 --- a/webview-ui/src/components/chat/AutoApproveMenu.tsx +++ b/webview-ui/src/components/chat/AutoApproveMenu.tsx @@ -51,9 +51,14 @@ const ACTION_METADATA: { const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { const { autoApprovalSettings } = useExtensionState() const [isExpanded, setIsExpanded] = useState(false) + const [isHoveringCollapsibleSection, setIsHoveringCollapsibleSection] = useState(false) // Careful not to use partials to mutate since spread operator only does shallow copy + const enabledActions = ACTION_METADATA.filter((action) => autoApprovalSettings.actions[action.id]) + const enabledActionsList = enabledActions.map((action) => action.shortName).join(", ") + const hasEnabledActions = enabledActions.length > 0 + const updateEnabled = useCallback( (enabled: boolean) => { vscode.postMessage({ @@ -69,14 +74,22 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { const updateAction = useCallback( (actionId: keyof AutoApprovalSettings["actions"], value: boolean) => { + // Calculate what the new actions state will be + const newActions = { + ...autoApprovalSettings.actions, + [actionId]: value, + } + + // Check if this will result in any enabled actions + const willHaveEnabledActions = Object.values(newActions).some(Boolean) + vscode.postMessage({ type: "autoApprovalSettings", autoApprovalSettings: { ...autoApprovalSettings, - actions: { - ...autoApprovalSettings.actions, - [actionId]: value, - }, + actions: newActions, + // If no actions will be enabled, ensure the main toggle is off + enabled: willHaveEnabledActions ? autoApprovalSettings.enabled : false, }, }) }, @@ -109,9 +122,6 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { [autoApprovalSettings], ) - const enabledActions = ACTION_METADATA.filter((action) => autoApprovalSettings.actions[action.id]) - const enabledActionsList = enabledActions.map((action) => action.shortName).join(", ") - return (