|
'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 |
|
} |
|
|