From 39008f704d88eb9feff58306bd4cbf3120a4d2a8 Mon Sep 17 00:00:00 2001 From: kabu1204 Date: Sun, 20 Apr 2025 18:40:50 +0800 Subject: [PATCH] feat(ProviderSettings): move model provider to the top when toggled When the model provider is toggled (OFF to ON), it is moved to the top of the provider setting for convenience. The change is minimal. --- .../ProviderSettings/ProviderSetting.tsx | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx index 9be84e8f6c..335dbf9433 100644 --- a/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx +++ b/src/renderer/src/pages/settings/ProviderSettings/ProviderSetting.tsx @@ -5,7 +5,7 @@ import OAuthButton from '@renderer/components/OAuth/OAuthButton' import { isEmbeddingModel, isRerankModel } from '@renderer/config/models' import { PROVIDER_CONFIG } from '@renderer/config/providers' import { useTheme } from '@renderer/context/ThemeProvider' -import { useProvider } from '@renderer/hooks/useProvider' +import { useAllProviders, useProvider, useProviders } from '@renderer/hooks/useProvider' import i18n from '@renderer/i18n' import { isOpenAIProvider } from '@renderer/providers/AiProvider/ProviderFactory' import { checkApi, formatApiKeys } from '@renderer/services/ApiService' @@ -47,6 +47,8 @@ interface Props { const ProviderSetting: FC = ({ provider: _provider }) => { const { provider } = useProvider(_provider.id) + const allProviders = useAllProviders() + const { updateProviders } = useProviders() const [apiKey, setApiKey] = useState(provider.apiKey) const [apiHost, setApiHost] = useState(provider.apiHost) const [apiVersion, setApiVersion] = useState(provider.apiVersion) @@ -77,6 +79,21 @@ const ProviderSetting: FC = ({ provider: _provider }) => { [] ) + const moveProviderToTop = useCallback( + (providerId: string) => { + const reorderedProviders = [...allProviders] + const index = reorderedProviders.findIndex((p) => p.id === providerId) + + if (index !== -1) { + const updatedProvider = { ...reorderedProviders[index], enabled: true } + reorderedProviders.splice(index, 1) + reorderedProviders.unshift(updatedProvider) + updateProviders(reorderedProviders) + } + }, + [allProviders, updateProviders] + ) + const onUpdateApiKey = () => { if (apiKey !== provider.apiKey) { updateProvider({ ...provider, apiKey }) @@ -208,7 +225,7 @@ const ProviderSetting: FC = ({ provider: _provider }) => { const keys = apiKey .split(/(? k.trim()) - .map(k => k.replace(/\\,/g, ',')) + .map((k) => k.replace(/\\,/g, ',')) .filter((k) => k) const result = await ApiCheckPopup.show({ @@ -297,7 +314,12 @@ const ProviderSetting: FC = ({ provider: _provider }) => { updateProvider({ ...provider, apiKey, apiHost, enabled })} + onChange={(enabled) => { + updateProvider({ ...provider, apiKey, apiHost, enabled }) + if (enabled) { + moveProviderToTop(provider.id) + } + }} />