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