use-document.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import {
  2. useMutation,
  3. useQuery,
  4. } from '@tanstack/react-query'
  5. import { del, get, patch } from '../base'
  6. import { useInvalid } from '../use-base'
  7. import type { MetadataType, SortType } from '../datasets'
  8. import type { DocumentDetailResponse, DocumentListResponse, UpdateDocumentBatchParams } from '@/models/datasets'
  9. import { DocumentActionType } from '@/models/datasets'
  10. import type { CommonResponse } from '@/models/common'
  11. const NAME_SPACE = 'knowledge/document'
  12. export const useDocumentListKey = [NAME_SPACE, 'documentList']
  13. export const useDocumentList = (payload: {
  14. datasetId: string
  15. query: {
  16. keyword: string
  17. page: number
  18. limit: number
  19. sort?: SortType
  20. status: any
  21. },
  22. refetchInterval?: number | false
  23. }) => {
  24. const { query, datasetId, refetchInterval } = payload
  25. const { keyword, page, limit, sort, status } = query
  26. return useQuery<DocumentListResponse>({
  27. queryKey: [...useDocumentListKey, datasetId, keyword, page, limit, sort, status],
  28. queryFn: () => get<DocumentListResponse>(`/datasets/${datasetId}/documents`, {
  29. params: query,
  30. }),
  31. refetchInterval,
  32. })
  33. }
  34. export const useInvalidDocumentList = (datasetId?: string) => {
  35. return useInvalid(datasetId ? [...useDocumentListKey, datasetId] : useDocumentListKey)
  36. }
  37. const useAutoDisabledDocumentKey = [NAME_SPACE, 'autoDisabledDocument']
  38. export const useAutoDisabledDocuments = (datasetId: string) => {
  39. return useQuery({
  40. queryKey: [...useAutoDisabledDocumentKey, datasetId],
  41. queryFn: () => get<{ document_ids: string[] }>(`/datasets/${datasetId}/auto-disable-logs`),
  42. })
  43. }
  44. export const useInvalidDisabledDocument = () => {
  45. return useInvalid(useAutoDisabledDocumentKey)
  46. }
  47. const toBatchDocumentsIdParams = (documentIds: string[] | string) => {
  48. const ids = Array.isArray(documentIds) ? documentIds : [documentIds]
  49. return ids.map(id => `document_id=${id}`).join('&')
  50. }
  51. export const useDocumentBatchAction = (action: DocumentActionType) => {
  52. return useMutation({
  53. mutationFn: ({ datasetId, documentIds, documentId }: UpdateDocumentBatchParams) => {
  54. return patch<CommonResponse>(`/datasets/${datasetId}/documents/status/${action}/batch?${toBatchDocumentsIdParams(documentId || documentIds!)}`)
  55. },
  56. })
  57. }
  58. export const useDocumentCheckFail = () => {
  59. return useDocumentBatchAction(DocumentActionType.check_fail)
  60. }
  61. export const useDocumentEnable = () => {
  62. return useDocumentBatchAction(DocumentActionType.enable)
  63. }
  64. export const useDocumentDisable = () => {
  65. return useDocumentBatchAction(DocumentActionType.disable)
  66. }
  67. export const useDocumentArchive = () => {
  68. return useDocumentBatchAction(DocumentActionType.archive)
  69. }
  70. export const useDocumentUnArchive = () => {
  71. return useDocumentBatchAction(DocumentActionType.unArchive)
  72. }
  73. export const useDocumentDelete = () => {
  74. return useMutation({
  75. mutationFn: ({ datasetId, documentIds, documentId }: UpdateDocumentBatchParams) => {
  76. return del<CommonResponse>(`/datasets/${datasetId}/documents?${toBatchDocumentsIdParams(documentId || documentIds!)}`)
  77. },
  78. })
  79. }
  80. export const useSyncDocument = () => {
  81. return useMutation({
  82. mutationFn: ({ datasetId, documentId }: UpdateDocumentBatchParams) => {
  83. return get<CommonResponse>(`/datasets/${datasetId}/documents/${documentId}/notion/sync`)
  84. },
  85. })
  86. }
  87. export const useSyncWebsite = () => {
  88. return useMutation({
  89. mutationFn: ({ datasetId, documentId }: UpdateDocumentBatchParams) => {
  90. return get<CommonResponse>(`/datasets/${datasetId}/documents/${documentId}/website-sync`)
  91. },
  92. })
  93. }
  94. const useDocumentDetailKey = [NAME_SPACE, 'documentDetail', 'withoutMetaData']
  95. export const useDocumentDetail = (payload: {
  96. datasetId: string
  97. documentId: string
  98. params: { metadata: MetadataType }
  99. }) => {
  100. const { datasetId, documentId, params } = payload
  101. return useQuery<DocumentDetailResponse>({
  102. queryKey: [...useDocumentDetailKey, 'withoutMetaData', datasetId, documentId],
  103. queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }),
  104. })
  105. }
  106. export const useDocumentMetadata = (payload: {
  107. datasetId: string
  108. documentId: string
  109. params: { metadata: MetadataType }
  110. }) => {
  111. const { datasetId, documentId, params } = payload
  112. return useQuery<DocumentDetailResponse>({
  113. queryKey: [...useDocumentDetailKey, 'onlyMetaData', datasetId, documentId],
  114. queryFn: () => get<DocumentDetailResponse>(`/datasets/${datasetId}/documents/${documentId}`, { params }),
  115. })
  116. }
  117. export const useInvalidDocumentDetailKey = () => {
  118. return useInvalid(useDocumentDetailKey)
  119. }