diff --git a/src/pages/AiProvidersPage.tsx b/src/pages/AiProvidersPage.tsx index 1f5e35f..8dfba35 100644 --- a/src/pages/AiProvidersPage.tsx +++ b/src/pages/AiProvidersPage.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { useNavigate } from 'react-router-dom'; import { @@ -31,15 +31,27 @@ export function AiProvidersPage() { const fetchConfig = useConfigStore((state) => state.fetchConfig); const updateConfigValue = useConfigStore((state) => state.updateConfigValue); const clearCache = useConfigStore((state) => state.clearCache); + const isCacheValid = useConfigStore((state) => state.isCacheValid); - const [loading, setLoading] = useState(true); + const hasMounted = useRef(false); + const [loading, setLoading] = useState(() => !isCacheValid()); const [error, setError] = useState(''); - const [geminiKeys, setGeminiKeys] = useState([]); - const [codexConfigs, setCodexConfigs] = useState([]); - const [claudeConfigs, setClaudeConfigs] = useState([]); - const [vertexConfigs, setVertexConfigs] = useState([]); - const [openaiProviders, setOpenaiProviders] = useState([]); + const [geminiKeys, setGeminiKeys] = useState( + () => config?.geminiApiKeys || [] + ); + const [codexConfigs, setCodexConfigs] = useState( + () => config?.codexApiKeys || [] + ); + const [claudeConfigs, setClaudeConfigs] = useState( + () => config?.claudeApiKeys || [] + ); + const [vertexConfigs, setVertexConfigs] = useState( + () => config?.vertexApiKeys || [] + ); + const [openaiProviders, setOpenaiProviders] = useState( + () => config?.openaiCompatibility || [] + ); const [configSwitchingKey, setConfigSwitchingKey] = useState(null); @@ -55,7 +67,10 @@ export function AiProvidersPage() { }; const loadConfigs = useCallback(async () => { - setLoading(true); + const hasValidCache = isCacheValid(); + if (!hasValidCache) { + setLoading(true); + } setError(''); try { const [configResult, vertexResult, ampcodeResult] = await Promise.allSettled([ @@ -91,9 +106,11 @@ export function AiProvidersPage() { } finally { setLoading(false); } - }, [clearCache, fetchConfig, t, updateConfigValue]); + }, [clearCache, fetchConfig, isCacheValid, t, updateConfigValue]); useEffect(() => { + if (hasMounted.current) return; + hasMounted.current = true; loadConfigs(); loadKeyStats(); }, [loadConfigs, loadKeyStats]);