From 68d4b3d67e71c7b5f76b3b1053dce4a0c884be0b Mon Sep 17 00:00:00 2001 From: Supra4E8C Date: Sun, 22 Feb 2026 13:14:14 +0800 Subject: [PATCH] fix(claude): preserve cloak config on toggle --- src/pages/AiProvidersClaudeEditPage.tsx | 37 ++++++++++++++++++------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/pages/AiProvidersClaudeEditPage.tsx b/src/pages/AiProvidersClaudeEditPage.tsx index 31290f1..df12cd4 100644 --- a/src/pages/AiProvidersClaudeEditPage.tsx +++ b/src/pages/AiProvidersClaudeEditPage.tsx @@ -71,6 +71,7 @@ export function AiProvidersClaudeEditPage() { const swipeRef = useEdgeSwipeBack({ onBack: handleBack }); const [isTesting, setIsTesting] = useState(false); + const lastCloakConfigRef = useRef(null); useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { @@ -82,6 +83,11 @@ export function AiProvidersClaudeEditPage() { return () => window.removeEventListener('keydown', handleKeyDown); }, [handleBack]); + useEffect(() => { + if (!form.cloak) return; + lastCloakConfigRef.current = form.cloak; + }, [form.cloak]); + const canSave = !disableControls && !loading && !saving && !invalidIndexParam && !invalidIndex && !isTesting; @@ -460,16 +466,27 @@ export function AiProvidersClaudeEditPage() { - setForm((prev) => ({ - ...prev, - cloak: enabled - ? { - mode: (prev.cloak?.mode ?? 'auto').trim() || 'auto', - strictMode: prev.cloak?.strictMode ?? false, - sensitiveWords: prev.cloak?.sensitiveWords ?? [], - } - : undefined, - })) + setForm((prev) => { + if (!enabled) { + if (prev.cloak) { + lastCloakConfigRef.current = prev.cloak; + } + return { ...prev, cloak: undefined }; + } + + const restored = prev.cloak + ?? lastCloakConfigRef.current + ?? { mode: 'auto', strictMode: false, sensitiveWords: [] }; + const mode = String(restored.mode ?? 'auto').trim() || 'auto'; + return { + ...prev, + cloak: { + mode, + strictMode: restored.strictMode ?? false, + sensitiveWords: restored.sensitiveWords ?? [], + }, + }; + }) } disabled={saving || disableControls || isTesting} ariaLabel={t('ai_providers.claude_cloak_toggle_aria')}