'use client' import { createContext, useContext, useMemo } from 'react' import type { FC, ReactNode } from 'react' import useSWR from 'swr' import type { ExternalAPIItem, ExternalAPIListResponse } from '@/models/datasets' import { fetchExternalAPIList } from '@/service/datasets' type ExternalKnowledgeApiContextType = { externalKnowledgeApiList: ExternalAPIItem[] mutateExternalKnowledgeApis: () => Promise<ExternalAPIListResponse | undefined> isLoading: boolean } const ExternalKnowledgeApiContext = createContext<ExternalKnowledgeApiContextType | undefined>(undefined) export type ExternalKnowledgeApiProviderProps = { children: ReactNode } export const ExternalKnowledgeApiProvider: FC<ExternalKnowledgeApiProviderProps> = ({ children }) => { const { data, mutate: mutateExternalKnowledgeApis, isLoading } = useSWR<ExternalAPIListResponse>( { url: '/datasets/external-knowledge-api' }, fetchExternalAPIList, ) const contextValue = useMemo<ExternalKnowledgeApiContextType>(() => ({ externalKnowledgeApiList: data?.data || [], mutateExternalKnowledgeApis, isLoading, }), [data, mutateExternalKnowledgeApis, isLoading]) return ( <ExternalKnowledgeApiContext.Provider value={contextValue}> {children} </ExternalKnowledgeApiContext.Provider> ) } export const useExternalKnowledgeApi = () => { const context = useContext(ExternalKnowledgeApiContext) if (context === undefined) throw new Error('useExternalKnowledgeApi must be used within a ExternalKnowledgeApiProvider') return context }