use-document.ts 4.4 KB

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