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.
This commit is contained in:
kabu1204 2025-04-20 18:40:50 +08:00 committed by 亢奋猫
parent bf628e5e57
commit 39008f704d

View File

@ -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<Props> = ({ 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<Props> = ({ 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<Props> = ({ provider: _provider }) => {
const keys = apiKey
.split(/(?<!\\),/)
.map((k) => 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<Props> = ({ provider: _provider }) => {
<Switch
value={provider.enabled}
key={provider.id}
onChange={(enabled) => updateProvider({ ...provider, apiKey, apiHost, enabled })}
onChange={(enabled) => {
updateProvider({ ...provider, apiKey, apiHost, enabled })
if (enabled) {
moveProviderToTop(provider.id)
}
}}
/>
</SettingTitle>
<Divider style={{ width: '100%', margin: '10px 0' }} />