Underground-Digital/Workflow-Engine
0
1'use client'2 3import { createContext, useContext, useMemo } from 'react'4import type { FC, ReactNode } from 'react'5import useSWR from 'swr'6import type { ExternalAPIItem, ExternalAPIListResponse } from '@/models/datasets'7import { fetchExternalAPIList } from '@/service/datasets'8 9type ExternalKnowledgeApiContextType = {10 externalKnowledgeApiList: ExternalAPIItem[]11 mutateExternalKnowledgeApis: () => Promise<ExternalAPIListResponse | undefined>12 isLoading: boolean13}14 15const ExternalKnowledgeApiContext = createContext<ExternalKnowledgeApiContextType | undefined>(undefined)16 17export type ExternalKnowledgeApiProviderProps = {18 children: ReactNode19}20 21export const ExternalKnowledgeApiProvider: FC<ExternalKnowledgeApiProviderProps> = ({ children }) => {22 const { data, mutate: mutateExternalKnowledgeApis, isLoading } = useSWR<ExternalAPIListResponse>(23 { url: '/datasets/external-knowledge-api' },24 fetchExternalAPIList,25 )26 27 const contextValue = useMemo<ExternalKnowledgeApiContextType>(() => ({28 externalKnowledgeApiList: data?.data || [],29 mutateExternalKnowledgeApis,30 isLoading,31 }), [data, mutateExternalKnowledgeApis, isLoading])32 33 return (34 <ExternalKnowledgeApiContext.Provider value={contextValue}>35 {children}36 </ExternalKnowledgeApiContext.Provider>37 )38}39 40export const useExternalKnowledgeApi = () => {41 const context = useContext(ExternalKnowledgeApiContext)42 if (context === undefined)43 throw new Error('useExternalKnowledgeApi must be used within a ExternalKnowledgeApiProvider')44 45 return context46}47 