cc-haha/desktop/src/stores/providerStore.ts
程序员阿江(Relakkes) 609ddd0ff5 refactor: rewrite frontend provider types, API client, and store for preset system
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 11:28:36 +08:00

80 lines
2.0 KiB
TypeScript

// desktop/src/stores/providerStore.ts
import { create } from 'zustand'
import { providersApi } from '../api/providers'
import type {
SavedProvider,
CreateProviderInput,
UpdateProviderInput,
TestProviderConfigInput,
ProviderTestResult,
} from '../types/provider'
type ProviderStore = {
providers: SavedProvider[]
activeId: string | null
isLoading: boolean
fetchProviders: () => Promise<void>
createProvider: (input: CreateProviderInput) => Promise<SavedProvider>
updateProvider: (id: string, input: UpdateProviderInput) => Promise<SavedProvider>
deleteProvider: (id: string) => Promise<void>
activateProvider: (id: string) => Promise<void>
activateOfficial: () => Promise<void>
testProvider: (id: string) => Promise<ProviderTestResult>
testConfig: (input: TestProviderConfigInput) => Promise<ProviderTestResult>
}
export const useProviderStore = create<ProviderStore>((set, get) => ({
providers: [],
activeId: null,
isLoading: false,
fetchProviders: async () => {
set({ isLoading: true })
try {
const { providers, activeId } = await providersApi.list()
set({ providers, activeId, isLoading: false })
} catch {
set({ isLoading: false })
}
},
createProvider: async (input) => {
const { provider } = await providersApi.create(input)
await get().fetchProviders()
return provider
},
updateProvider: async (id, input) => {
const { provider } = await providersApi.update(id, input)
await get().fetchProviders()
return provider
},
deleteProvider: async (id) => {
await providersApi.delete(id)
await get().fetchProviders()
},
activateProvider: async (id) => {
await providersApi.activate(id)
await get().fetchProviders()
},
activateOfficial: async () => {
await providersApi.activateOfficial()
await get().fetchProviders()
},
testProvider: async (id) => {
const { result } = await providersApi.test(id)
return result
},
testConfig: async (input) => {
const { result } = await providersApi.testConfig(input)
return result
},
}))