| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- import {
- useMutation,
- useQuery,
- } from '@tanstack/react-query'
- import { del, get, patch } from '../base'
- import { useInvalid } from '../use-base'
- import type { MetadataType, SortType } from '../datasets'
- import { pauseDocIndexing, resumeDocIndexing } from '../datasets'
- import type { DocumentDetailResponse, DocumentListResponse, UpdateDocumentBatchParams } from '@/models/datasets'
- import { DocumentActionType } from '@/models/datasets'
- import type { CommonResponse } from '@/models/common'
- // Download document with authentication (sends Authorization header)
- import Toast from '@/app/components/base/toast'
-
- const NAME_SPACE = 'knowledge/document'
-
- export const useDocumentListKey = [NAME_SPACE, 'documentList']
- export const useDocumentList = (payload: {
- datasetId: string
- query: {
- keyword: string
- page: number
- limit: number
- sort?: SortType
- },
- refetchInterval?: number | false
- }) => {
- const { query, datasetId, refetchInterval } = payload
- const { keyword, page, limit, sort } = query
- return useQuery<DocumentListResponse>({
- queryKey: [...useDocumentListKey, datasetId, keyword, page, limit, sort],
- queryFn: () => get<DocumentListResponse>(`/datasets/${datasetId}/documents`, {
- params: query,
- }),
- refetchInterval,
- })
- }
-
- export const useInvalidDocumentList = (datasetId?: string) => {
- return useInvalid(datasetId ? [...useDocumentListKey, datasetId] : useDocumentListKey)
- }
-
- const useAutoDisabledDocumentKey = [NAME_SPACE, 'autoDisabledDocument']
- export const useAutoDisabledDocuments = (datasetId: string) => {
- return useQuery({
- queryKey: [...useAutoDisabledDocumentKey, datasetId],
- queryFn: () => get<{ document_ids: string[] }>(`/datasets/${datasetId}/auto-disable-logs`),
- })
- }
-
- export const useInvalidDisabledDocument = () => {
- return useInvalid(useAutoDisabledDocumentKey)
- }
-
- const toBatchDocumentsIdParams = (documentIds: string[] | string) => {
- const ids = Array.isArray(documentIds) ? documentIds : [documentIds]
- return ids.map(id => `document_id=${id}`).join('&')
- }
-
- export const useDocumentBatchAction = (action: DocumentActionType) => {
- return useMutation({
- mutationFn: ({ datasetId, documentIds, documentId }: UpdateDocumentBatchParams) => {
- return patch<CommonResponse>(`/datasets/${datasetId}/documents/status/${action}/batch?${toBatchDocumentsIdParams(documentId || documentIds!)}`)
- },
- })
- }
-
- export const useDocumentEnable = () => {
- return useDocumentBatchAction(DocumentActionType.enable)
- }
-
- export const useDocumentDisable = () => {
- return useDocumentBatchAction(DocumentActionType.disable)
- }
-
- export const useDocumentArchive = () => {
- return useDocumentBatchAction(DocumentActionType.archive)
- }
-
- export const useDocumentUnArchive = () => {
- return useDocumentBatchAction(DocumentActionType.unArchive)
- }
-
- export const useDocumentDelete = () => {
- return useMutation({
- mutationFn: ({ datasetId, documentIds, documentId }: UpdateDocumentBatchParams) => {
- return del<CommonResponse>(`/datasets/${datasetId}/documents?${toBatchDocumentsIdParams(documentId || documentIds!)}`)
- },
- })
- }
-
- export const useSyncDocument = () => {
- return useMutation({
- mutationFn: ({ datasetId, documentId }: UpdateDocumentBatchParams) => {
- return get<CommonResponse>(`/datasets/${datasetId}/documents/${documentId}/notion/sync`)
- },
- })
- }
-
- // Download document with authentication (sends Authorization header)
- export const useDocumentDownload = () => {
- return useMutation({
- mutationFn: async ({ datasetId, documentId }: { datasetId: string; documentId: string }) => {
- // The get helper automatically adds the Authorization header from localStorage
- return get<CommonResponse>(`/datasets/${datasetId}/documents/${documentId}/upload-file`)
- },
- onError: (error: any) => {
- // Show a toast notification if download fails
- const message = error?.message || 'Download failed.'
- Toast.notify({ type: 'error', message })
- },
- })
- }
-
- export const useSyncWebsite = () => {
- return useMutation({
- mutationFn: ({ datasetId, documentId }: UpdateDocumentBatchParams) => {
- return get<CommonResponse>(`/datasets/${datasetId}/documents/${documentId}/website-sync`)
- },
- })
- }
-
- const useDocumentDetailKey = [NAME_SPACE, 'documentDetail', 'withoutMetaData']
- export const useDocumentDetail = (payload: {
- datasetId: string
- documentId: string
- params: { metadata: MetadataType }
- }) => {
- const { datasetId, documentId, params } = payload
- return useQuery<DocumentDetailResponse>({
- queryKey: [...useDocumentDetailKey, 'withoutMetaData', datasetId, documentId],
- queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }),
- })
- }
-
- export const useDocumentMetadata = (payload: {
- datasetId: string
- documentId: string
- params: { metadata: MetadataType }
- }) => {
- const { datasetId, documentId, params } = payload
- return useQuery<DocumentDetailResponse>({
- queryKey: [...useDocumentDetailKey, 'onlyMetaData', datasetId, documentId],
- queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }),
- })
- }
-
- export const useInvalidDocumentDetailKey = () => {
- return useInvalid(useDocumentDetailKey)
- }
-
- export const useDocumentPause = () => {
- return useMutation({
- mutationFn: ({ datasetId, documentId }: UpdateDocumentBatchParams) => {
- if (!datasetId || !documentId)
- throw new Error('datasetId and documentId are required')
- return pauseDocIndexing({ datasetId, documentId }) as Promise<CommonResponse>
- },
- })
- }
-
- export const useDocumentResume = () => {
- return useMutation({
- mutationFn: ({ datasetId, documentId }: UpdateDocumentBatchParams) => {
- if (!datasetId || !documentId)
- throw new Error('datasetId and documentId are required')
- return resumeDocIndexing({ datasetId, documentId }) as Promise<CommonResponse>
- },
- })
- }
|