use-document.ts 4.1 KB

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