From 2a9f0932102ebb478c8021cc96ac2ba314d4443a Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 18 Sep 2025 12:07:36 +0800 Subject: [PATCH] refactor: improve UI layout for VS Code and common config options - Implement horizontal two-column layout for better space utilization - Convert VS Code config from button to checkbox pattern for consistency - Add automatic VS Code settings write on checkbox toggle - Fix layout stability issues with fixed height containers - Remove unnecessary wrapper functions for cleaner code - Adjust spacing and alignment for more compact design --- .../ProviderForm/CodexConfigEditor.tsx | 198 +++++++++--------- 1 file changed, 104 insertions(+), 94 deletions(-) diff --git a/src/components/ProviderForm/CodexConfigEditor.tsx b/src/components/ProviderForm/CodexConfigEditor.tsx index 4af5d33..1b332eb 100644 --- a/src/components/ProviderForm/CodexConfigEditor.tsx +++ b/src/components/ProviderForm/CodexConfigEditor.tsx @@ -30,7 +30,7 @@ const CodexConfigEditor: React.FC = ({ authError, }) => { const [isCommonConfigModalOpen, setIsCommonConfigModalOpen] = useState(false); - const [isWritingVscode, setIsWritingVscode] = useState(false); + const [writeVscodeConfig, setWriteVscodeConfig] = useState(false); const [vscodeError, setVscodeError] = useState(""); const [vscodeSuccess, setVscodeSuccess] = useState(""); @@ -48,6 +48,51 @@ const CodexConfigEditor: React.FC = ({ return () => window.clearTimeout(timer); }, [vscodeSuccess]); + // 监听 writeVscodeConfig 变化并执行写入 + useEffect(() => { + if (!writeVscodeConfig) return; + + const performWrite = async () => { + setVscodeError(""); + setVscodeSuccess(""); + + if (typeof window === "undefined" || !window.api?.writeVscodeSettings) { + setVscodeError("当前环境暂不支持写入 VS Code 配置"); + setWriteVscodeConfig(false); + return; + } + + const trimmed = configValue.trim(); + if (!trimmed) { + setVscodeError("请先填写 config.toml,再写入 VS Code 配置"); + setWriteVscodeConfig(false); + return; + } + + const baseUrl = extractBaseUrlFromToml(trimmed); + if (!baseUrl) { + setVscodeError("未在 config.toml 中找到 base_url 字段"); + setWriteVscodeConfig(false); + return; + } + + try { + const success = await window.api.writeVscodeSettings(baseUrl); + if (success) { + setVscodeSuccess("已写入 VS Code 配置"); + } else { + setVscodeError("写入 VS Code 配置失败,请稍后重试"); + setWriteVscodeConfig(false); + } + } catch (error) { + setVscodeError(`写入 VS Code 配置失败: ${String(error)}`); + setWriteVscodeConfig(false); + } + }; + + performWrite(); + }, [writeVscodeConfig, configValue]); + // 支持按下 ESC 关闭弹窗 useEffect(() => { if (!isCommonConfigModalOpen) return; @@ -66,54 +111,6 @@ const CodexConfigEditor: React.FC = ({ setIsCommonConfigModalOpen(false); }; - const handleAuthChange = (value: string) => { - onAuthChange(value); - }; - - const handleConfigChange = (value: string) => { - onConfigChange(value); - }; - - const handleCommonConfigSnippetChange = (value: string) => { - onCommonConfigSnippetChange(value); - }; - - const handleWriteVscodeConfig = async () => { - setVscodeError(""); - setVscodeSuccess(""); - - if (typeof window === "undefined" || !window.api?.writeVscodeSettings) { - setVscodeError("当前环境暂不支持写入 VS Code 配置"); - return; - } - - const trimmed = configValue.trim(); - if (!trimmed) { - setVscodeError("请先填写 config.toml,再写入 VS Code 配置"); - return; - } - - const baseUrl = extractBaseUrlFromToml(trimmed); - if (!baseUrl) { - setVscodeError("未在 config.toml 中找到 base_url 字段"); - return; - } - - setIsWritingVscode(true); - try { - const success = await window.api.writeVscodeSettings(baseUrl); - if (success) { - setVscodeSuccess("已写入 VS Code 配置"); - } else { - setVscodeError("写入 VS Code 配置失败,请稍后重试"); - } - } catch (error) { - setVscodeError(`写入 VS Code 配置失败: ${String(error)}`); - } finally { - setIsWritingVscode(false); - } - }; - return (
@@ -126,7 +123,7 @@ const CodexConfigEditor: React.FC = ({