diff --git a/webview-ui/src/components/settings/AutoApproveSettings.tsx b/webview-ui/src/components/settings/AutoApproveSettings.tsx index 40e1658f5f..b461ca3735 100644 --- a/webview-ui/src/components/settings/AutoApproveSettings.tsx +++ b/webview-ui/src/components/settings/AutoApproveSettings.tsx @@ -19,6 +19,7 @@ import { useAutoApprovalState } from "@/hooks/useAutoApprovalState" import { useAutoApprovalToggles } from "@/hooks/useAutoApprovalToggles" type AutoApproveSettingsProps = HTMLAttributes & { + autoApprovalEnabled?: boolean alwaysAllowReadOnly?: boolean alwaysAllowReadOnlyOutsideWorkspace?: boolean alwaysAllowWrite?: boolean @@ -35,6 +36,7 @@ type AutoApproveSettingsProps = HTMLAttributes & { allowedMaxCost?: number | undefined deniedCommands?: string[] setCachedStateField: SetCachedStateField< + | "autoApprovalEnabled" | "alwaysAllowReadOnly" | "alwaysAllowReadOnlyOutsideWorkspace" | "alwaysAllowWrite" @@ -54,6 +56,7 @@ type AutoApproveSettingsProps = HTMLAttributes & { } export const AutoApproveSettings = ({ + autoApprovalEnabled, alwaysAllowReadOnly, alwaysAllowReadOnlyOutsideWorkspace, alwaysAllowWrite, @@ -75,10 +78,11 @@ export const AutoApproveSettings = ({ const { t } = useAppTranslation() const [commandInput, setCommandInput] = useState("") const [deniedCommandInput, setDeniedCommandInput] = useState("") - const { autoApprovalEnabled, setAutoApprovalEnabled } = useExtensionState() + const { setAutoApprovalEnabled } = useExtensionState() const toggles = useAutoApprovalToggles() + // Use the prop value (from cached state) for display, but still use context for timer effects const { effectiveAutoApprovalEnabled } = useAutoApprovalState(toggles, autoApprovalEnabled) const handleAddCommand = () => { @@ -118,8 +122,10 @@ export const AutoApproveSettings = ({ aria-label={t("settings:autoApprove.toggleAriaLabel")} onChange={() => { const newValue = !(autoApprovalEnabled ?? false) + // Update cached state for Save button activation + setCachedStateField("autoApprovalEnabled", newValue) + // Also update context state for immediate timer effect (hybrid approach) setAutoApprovalEnabled(newValue) - vscode.postMessage({ type: "autoApprovalEnabled", bool: newValue }) }}> {t("settings:autoApprove.enabled")} diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index f86c86e0ec..61221fed6c 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -146,6 +146,7 @@ const SettingsView = forwardRef(({ onDone, t const [cachedState, setCachedState] = useState(() => extensionState) const { + autoApprovalEnabled, alwaysAllowReadOnly, alwaysAllowReadOnlyOutsideWorkspace, allowedCommands, @@ -350,6 +351,7 @@ const SettingsView = forwardRef(({ onDone, t vscode.postMessage({ type: "updateSettings", updatedSettings: { + autoApprovalEnabled: autoApprovalEnabled ?? false, language, alwaysAllowReadOnly: alwaysAllowReadOnly ?? undefined, alwaysAllowReadOnlyOutsideWorkspace: alwaysAllowReadOnlyOutsideWorkspace ?? undefined, @@ -766,6 +768,7 @@ const SettingsView = forwardRef(({ onDone, t {/* Auto-Approve Section */} {renderTab === "autoApprove" && (