Files
dify/web/context/external-knowledge-api-context.tsx
Stephen Zhou a84c2d36a3 style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

58 lines
1.7 KiB
TypeScript

'use client'
import type { FC, ReactNode } from 'react'
import type { ExternalAPIItem, ExternalAPIListResponse } from '@/models/datasets'
import { createContext, use, useCallback, useMemo } from 'react'
import { useExternalKnowledgeApiList } from '@/service/knowledge/use-dataset'
type ExternalKnowledgeApiContextType = {
externalKnowledgeApiList: ExternalAPIItem[]
mutateExternalKnowledgeApis: () => Promise<ExternalAPIListResponse | undefined>
isLoading: boolean
}
const ExternalKnowledgeApiContext = createContext<ExternalKnowledgeApiContextType | undefined>(
undefined,
)
type ExternalKnowledgeApiProviderProps = {
children: ReactNode
enabled?: boolean
}
export const ExternalKnowledgeApiProvider: FC<ExternalKnowledgeApiProviderProps> = ({
children,
enabled = true,
}) => {
const { data, refetch, isLoading } = useExternalKnowledgeApiList({ enabled })
const mutateExternalKnowledgeApis = useCallback(() => {
if (!enabled) return Promise.resolve(undefined)
return refetch().then((res) => res.data)
}, [enabled, refetch])
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 = use(ExternalKnowledgeApiContext)
if (context === undefined)
throw new Error('useExternalKnowledgeApi must be used within a ExternalKnowledgeApiProvider')
return context
}