use-edit-dataset-metadata.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { useBoolean } from 'ahooks'
  2. import { useBuiltInMetaDataFields, useCreateMetaData, useDatasetMetaData, useDeleteMetaData, useRenameMeta, useUpdateBuiltInStatus } from '@/service/knowledge/use-metadata'
  3. import type { DataSet } from '@/models/datasets'
  4. import { useCallback, useEffect, useState } from 'react'
  5. import { type BuiltInMetadataItem, type MetadataItemWithValueLength, isShowManageMetadataLocalStorageKey } from '../types'
  6. import useCheckMetadataName from './use-check-metadata-name'
  7. import Toast from '@/app/components/base/toast'
  8. import { useTranslation } from 'react-i18next'
  9. const useEditDatasetMetadata = ({
  10. datasetId,
  11. // dataset,
  12. onUpdateDocList,
  13. }: {
  14. datasetId: string,
  15. dataset?: DataSet,
  16. onUpdateDocList: () => void
  17. }) => {
  18. const { t } = useTranslation()
  19. const [isShowEditModal, {
  20. setTrue: showEditModal,
  21. setFalse: hideEditModal,
  22. }] = useBoolean(false)
  23. useEffect(() => {
  24. const isShowManageMetadata = localStorage.getItem(isShowManageMetadataLocalStorageKey)
  25. if (isShowManageMetadata) {
  26. showEditModal()
  27. localStorage.removeItem(isShowManageMetadataLocalStorageKey)
  28. }
  29. // eslint-disable-next-line react-hooks/exhaustive-deps
  30. }, [])
  31. const { data: datasetMetaData } = useDatasetMetaData(datasetId)
  32. const { mutate: doAddMetaData } = useCreateMetaData(datasetId)
  33. const { checkName } = useCheckMetadataName()
  34. const handleAddMetaData = useCallback(async (payload: BuiltInMetadataItem) => {
  35. const errorMsg = checkName(payload.name).errorMsg
  36. if (errorMsg) {
  37. Toast.notify({
  38. message: errorMsg,
  39. type: 'error',
  40. })
  41. return Promise.reject(new Error(errorMsg))
  42. }
  43. await doAddMetaData(payload)
  44. }, [checkName, doAddMetaData])
  45. const { mutate: doRenameMetaData } = useRenameMeta(datasetId)
  46. const handleRename = useCallback(async (payload: MetadataItemWithValueLength) => {
  47. const errorMsg = checkName(payload.name).errorMsg
  48. if (errorMsg) {
  49. Toast.notify({
  50. message: errorMsg,
  51. type: 'error',
  52. })
  53. return Promise.reject(new Error(errorMsg))
  54. }
  55. await doRenameMetaData(payload)
  56. onUpdateDocList()
  57. }, [checkName, doRenameMetaData, onUpdateDocList])
  58. const { mutateAsync: doDeleteMetaData } = useDeleteMetaData(datasetId)
  59. const handleDeleteMetaData = useCallback(async (metaDataId: string) => {
  60. await doDeleteMetaData(metaDataId)
  61. onUpdateDocList()
  62. }, [doDeleteMetaData, onUpdateDocList])
  63. const [builtInEnabled, setBuiltInEnabled] = useState(datasetMetaData?.built_in_field_enabled)
  64. useEffect(() => { // wait for api response to set the right value
  65. setBuiltInEnabled(datasetMetaData?.built_in_field_enabled)
  66. }, [datasetMetaData])
  67. const { mutateAsync: toggleBuiltInStatus } = useUpdateBuiltInStatus(datasetId)
  68. const { data: builtInMetaData } = useBuiltInMetaDataFields()
  69. return {
  70. isShowEditModal,
  71. showEditModal,
  72. hideEditModal,
  73. datasetMetaData: datasetMetaData?.doc_metadata,
  74. handleAddMetaData,
  75. handleRename,
  76. handleDeleteMetaData,
  77. builtInMetaData: builtInMetaData?.fields,
  78. builtInEnabled,
  79. setBuiltInEnabled: async (enable: boolean) => {
  80. await toggleBuiltInStatus(enable)
  81. setBuiltInEnabled(enable)
  82. Toast.notify({
  83. message: t('common.actionMsg.modifiedSuccessfully'),
  84. type: 'success',
  85. })
  86. },
  87. }
  88. }
  89. export default useEditDatasetMetadata