feat: add use api
This commit is contained in:
parent
ac36ea047c
commit
de0b22af9c
@ -241,6 +241,7 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
|
|||||||
showEditModal: showEditMetadataModal,
|
showEditModal: showEditMetadataModal,
|
||||||
hideEditModal: hideEditMetadataModal,
|
hideEditModal: hideEditMetadataModal,
|
||||||
datasetMetaData,
|
datasetMetaData,
|
||||||
|
handleAddMetaData,
|
||||||
handleDeleteMetaData,
|
handleDeleteMetaData,
|
||||||
builtInEnabled,
|
builtInEnabled,
|
||||||
setBuiltInEnabled,
|
setBuiltInEnabled,
|
||||||
@ -291,6 +292,7 @@ const Documents: FC<IDocumentsProps> = ({ datasetId }) => {
|
|||||||
onIsBuiltInEnabledChange={setBuiltInEnabled}
|
onIsBuiltInEnabledChange={setBuiltInEnabled}
|
||||||
onClose={hideEditMetadataModal}
|
onClose={hideEditMetadataModal}
|
||||||
onChange={() => { }}
|
onChange={() => { }}
|
||||||
|
onAdd={handleAddMetaData}
|
||||||
onRemove={handleDeleteMetaData}
|
onRemove={handleDeleteMetaData}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { useBoolean } from 'ahooks'
|
import { useBoolean } from 'ahooks'
|
||||||
import { useBuiltInMetaData, useDatasetMetaData, useDeleteMetaData, useUpdateBuiltInStatus } from '@/service/knowledge/use-metadata'
|
import { useBuiltInMetaData, useCreateMetaData, useDatasetMetaData, useDeleteMetaData, useUpdateBuiltInStatus } from '@/service/knowledge/use-metadata'
|
||||||
import type { DataSet } from '@/models/datasets'
|
import type { DataSet } from '@/models/datasets'
|
||||||
import { useCallback, useState } from 'react'
|
import { useCallback, useState } from 'react'
|
||||||
|
import type { BuiltInMetadataItem } from '../types'
|
||||||
|
|
||||||
const useEditDocumentMetadata = ({
|
const useEditDocumentMetadata = ({
|
||||||
datasetId,
|
datasetId,
|
||||||
@ -16,6 +17,12 @@ const useEditDocumentMetadata = ({
|
|||||||
}] = useBoolean(false)
|
}] = useBoolean(false)
|
||||||
|
|
||||||
const { data: datasetMetaData } = useDatasetMetaData(datasetId)
|
const { data: datasetMetaData } = useDatasetMetaData(datasetId)
|
||||||
|
|
||||||
|
const { mutate: doAddMetaData } = useCreateMetaData(datasetId)
|
||||||
|
const handleAddMetaData = useCallback((payload: BuiltInMetadataItem) => {
|
||||||
|
doAddMetaData(payload)
|
||||||
|
}, [doAddMetaData])
|
||||||
|
|
||||||
const { mutate: doDeleteMetaData } = useDeleteMetaData(datasetId)
|
const { mutate: doDeleteMetaData } = useDeleteMetaData(datasetId)
|
||||||
const handleDeleteMetaData = useCallback((metaDataId: string) => {
|
const handleDeleteMetaData = useCallback((metaDataId: string) => {
|
||||||
doDeleteMetaData(metaDataId)
|
doDeleteMetaData(metaDataId)
|
||||||
@ -29,6 +36,7 @@ const useEditDocumentMetadata = ({
|
|||||||
showEditModal,
|
showEditModal,
|
||||||
hideEditModal,
|
hideEditModal,
|
||||||
datasetMetaData: datasetMetaData?.data,
|
datasetMetaData: datasetMetaData?.data,
|
||||||
|
handleAddMetaData,
|
||||||
handleDeleteMetaData,
|
handleDeleteMetaData,
|
||||||
builtInMetaData: builtInMetaData?.fields,
|
builtInMetaData: builtInMetaData?.fields,
|
||||||
builtInEnabled,
|
builtInEnabled,
|
||||||
|
@ -12,12 +12,14 @@ import { useTranslation } from 'react-i18next'
|
|||||||
const i18nPrefix = 'dataset.metadata.createMetadata'
|
const i18nPrefix = 'dataset.metadata.createMetadata'
|
||||||
|
|
||||||
export type Props = {
|
export type Props = {
|
||||||
|
onClose?: () => void
|
||||||
onSave: (data: any) => void
|
onSave: (data: any) => void
|
||||||
hasBack?: boolean
|
hasBack?: boolean
|
||||||
onBack?: () => void
|
onBack?: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
const CreateContent: FC<Props> = ({
|
const CreateContent: FC<Props> = ({
|
||||||
|
onClose = () => { },
|
||||||
hasBack,
|
hasBack,
|
||||||
onBack,
|
onBack,
|
||||||
onSave,
|
onSave,
|
||||||
@ -43,7 +45,7 @@ const CreateContent: FC<Props> = ({
|
|||||||
return (
|
return (
|
||||||
<ModalLikeWrap
|
<ModalLikeWrap
|
||||||
title={t(`${i18nPrefix}.title`)}
|
title={t(`${i18nPrefix}.title`)}
|
||||||
onClose={() => { }}
|
onClose={onClose}
|
||||||
onConfirm={handleSave}
|
onConfirm={handleSave}
|
||||||
hideCloseBtn={hasBack}
|
hideCloseBtn={hasBack}
|
||||||
beforeHeader={hasBack && (
|
beforeHeader={hasBack && (
|
||||||
|
@ -1,23 +1,25 @@
|
|||||||
'use client'
|
'use client'
|
||||||
import type { FC } from 'react'
|
import type { FC } from 'react'
|
||||||
import React, { useState } from 'react'
|
import React from 'react'
|
||||||
import type { Props as CreateContentProps } from './create-content'
|
import type { Props as CreateContentProps } from './create-content'
|
||||||
import CreateContent from './create-content'
|
import CreateContent from './create-content'
|
||||||
import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '../../../base/portal-to-follow-elem'
|
import { PortalToFollowElem, PortalToFollowElemContent, PortalToFollowElemTrigger } from '../../../base/portal-to-follow-elem'
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
|
open: boolean
|
||||||
|
setOpen: (open: boolean) => void
|
||||||
onSave: (data: any) => void
|
onSave: (data: any) => void
|
||||||
trigger: React.ReactNode
|
trigger: React.ReactNode
|
||||||
popupLeft?: number
|
popupLeft?: number
|
||||||
} & CreateContentProps
|
} & CreateContentProps
|
||||||
|
|
||||||
const CreateMetadataModal: FC<Props> = ({
|
const CreateMetadataModal: FC<Props> = ({
|
||||||
|
open,
|
||||||
|
setOpen,
|
||||||
trigger,
|
trigger,
|
||||||
popupLeft = 20,
|
popupLeft = 20,
|
||||||
...createContentProps
|
...createContentProps
|
||||||
}) => {
|
}) => {
|
||||||
const [open, setOpen] = useState(false)
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PortalToFollowElem
|
<PortalToFollowElem
|
||||||
open={open}
|
open={open}
|
||||||
@ -34,7 +36,7 @@ const CreateMetadataModal: FC<Props> = ({
|
|||||||
{trigger}
|
{trigger}
|
||||||
</PortalToFollowElemTrigger>
|
</PortalToFollowElemTrigger>
|
||||||
<PortalToFollowElemContent className='z-[1000]'>
|
<PortalToFollowElemContent className='z-[1000]'>
|
||||||
<CreateContent {...createContentProps} />
|
<CreateContent {...createContentProps} onClose={() => setOpen(false)} />
|
||||||
</PortalToFollowElemContent>
|
</PortalToFollowElemContent>
|
||||||
</PortalToFollowElem >
|
</PortalToFollowElem >
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ type Props = {
|
|||||||
onIsBuiltInEnabledChange: (value: boolean) => void
|
onIsBuiltInEnabledChange: (value: boolean) => void
|
||||||
onClose: () => void
|
onClose: () => void
|
||||||
onChange: (data: MetadataItemWithValueLength[]) => void
|
onChange: (data: MetadataItemWithValueLength[]) => void
|
||||||
|
onAdd: (payload: BuiltInMetadataItem) => void
|
||||||
onRemove: (metaDataId: string) => void
|
onRemove: (metaDataId: string) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,8 +97,8 @@ const Item: FC<ItemProps> = ({
|
|||||||
<Confirm
|
<Confirm
|
||||||
isShow
|
isShow
|
||||||
type='warning'
|
type='warning'
|
||||||
title={'Confirm to delete'}
|
title={t('dataset.metadata.datasetMetadata.deleteTitle')}
|
||||||
content={`Are you sure you want to delete the metadata "${payload.name}"?`}
|
content={t('dataset.metadata.datasetMetadata.deleteContent', { name: payload.name })}
|
||||||
onConfirm={handleDelete}
|
onConfirm={handleDelete}
|
||||||
onCancel={hideDeleteConfirm}
|
onCancel={hideDeleteConfirm}
|
||||||
/>
|
/>
|
||||||
@ -114,6 +115,7 @@ const DatasetMetadataDrawer: FC<Props> = ({
|
|||||||
onIsBuiltInEnabledChange,
|
onIsBuiltInEnabledChange,
|
||||||
onClose,
|
onClose,
|
||||||
onChange,
|
onChange,
|
||||||
|
onAdd,
|
||||||
onRemove,
|
onRemove,
|
||||||
}) => {
|
}) => {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
@ -128,12 +130,15 @@ const DatasetMetadataDrawer: FC<Props> = ({
|
|||||||
}
|
}
|
||||||
}, [setCurrPayload, setIsShowRenameModal])
|
}, [setCurrPayload, setIsShowRenameModal])
|
||||||
|
|
||||||
const handleAdd = useCallback((data: MetadataItemWithValueLength) => {
|
const [open, setOpen] = useState(false)
|
||||||
const nextUserMetadata = produce(userMetadata, (draft) => {
|
const handleAdd = useCallback(async (data: MetadataItemWithValueLength) => {
|
||||||
draft.push(data)
|
await onAdd(data)
|
||||||
|
Toast.notify({
|
||||||
|
type: 'success',
|
||||||
|
message: t('common.api.success'),
|
||||||
})
|
})
|
||||||
onChange(nextUserMetadata)
|
setOpen(false)
|
||||||
}, [userMetadata, onChange])
|
}, [onAdd, t])
|
||||||
|
|
||||||
const handleRenamed = useCallback(() => {
|
const handleRenamed = useCallback(() => {
|
||||||
const nextUserMetadata = produce(userMetadata, (draft) => {
|
const nextUserMetadata = produce(userMetadata, (draft) => {
|
||||||
@ -167,10 +172,14 @@ const DatasetMetadataDrawer: FC<Props> = ({
|
|||||||
>
|
>
|
||||||
<div className='system-sm-regular text-text-tertiary'>{t(`${i18nPrefix}.description`)}</div>
|
<div className='system-sm-regular text-text-tertiary'>{t(`${i18nPrefix}.description`)}</div>
|
||||||
|
|
||||||
<CreateModal trigger={<Button variant='primary' className='mt-3'>
|
<CreateModal
|
||||||
<RiAddLine className='mr-1' />
|
open={open}
|
||||||
{t(`${i18nPrefix}.addMetaData`)}
|
setOpen={setOpen}
|
||||||
</Button>} hasBack onSave={handleAdd} />
|
trigger={<Button variant='primary' className='mt-3'>
|
||||||
|
<RiAddLine className='mr-1' />
|
||||||
|
{t(`${i18nPrefix}.addMetaData`)}
|
||||||
|
</Button>} hasBack onSave={handleAdd}
|
||||||
|
/>
|
||||||
|
|
||||||
<div className='mt-3 space-y-1'>
|
<div className='mt-3 space-y-1'>
|
||||||
{userMetadata.map(payload => (
|
{userMetadata.map(payload => (
|
||||||
|
@ -20,6 +20,7 @@ export type MetadataItemWithValue = MetadataItem & {
|
|||||||
export type MetadataItemWithValueLength = MetadataItem & {
|
export type MetadataItemWithValueLength = MetadataItem & {
|
||||||
use_count: number
|
use_count: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum UpdateType {
|
export enum UpdateType {
|
||||||
changeValue = 'changeValue',
|
changeValue = 'changeValue',
|
||||||
delete = 'delete',
|
delete = 'delete',
|
||||||
|
@ -200,6 +200,8 @@ const translation = {
|
|||||||
namePlaceholder: 'Metadata name',
|
namePlaceholder: 'Metadata name',
|
||||||
builtIn: 'Built-in',
|
builtIn: 'Built-in',
|
||||||
builtInDescription: 'Built-in metadata is automatically extracted and generated. It must be enabled before use and cannot be edited.',
|
builtInDescription: 'Built-in metadata is automatically extracted and generated. It must be enabled before use and cannot be edited.',
|
||||||
|
deleteTitle: 'Confirm to delete',
|
||||||
|
deleteContent: 'Are you sure you want to delete the metadata "{{name}}"',
|
||||||
},
|
},
|
||||||
documentMetadata: {
|
documentMetadata: {
|
||||||
metadataToolTip: 'Metadata serves as a critical filter that enhances the accuracy and relevance of information retrieval. You can modify and add metadata for this document here.',
|
metadataToolTip: 'Metadata serves as a critical filter that enhances the accuracy and relevance of information retrieval. You can modify and add metadata for this document here.',
|
||||||
|
@ -200,6 +200,8 @@ const translation = {
|
|||||||
namePlaceholder: '元数据名称',
|
namePlaceholder: '元数据名称',
|
||||||
builtIn: '内置',
|
builtIn: '内置',
|
||||||
builtInDescription: '内置元数据是系统预定义的元数据,您可以在此处查看和管理内置元数据。',
|
builtInDescription: '内置元数据是系统预定义的元数据,您可以在此处查看和管理内置元数据。',
|
||||||
|
deleteTitle: '确定删除',
|
||||||
|
deleteContent: '你确定要删除元数据 "{{name}}" 吗?',
|
||||||
},
|
},
|
||||||
documentMetadata: {
|
documentMetadata: {
|
||||||
metadataToolTip: '元数据是关于文档的数据,用于描述文档的属性。元数据可以帮助您更好地组织和管理文档。',
|
metadataToolTip: '元数据是关于文档的数据,用于描述文档的属性。元数据可以帮助您更好地组织和管理文档。',
|
||||||
|
@ -36,6 +36,21 @@ export const useInvalidDatasetMetaData = (datasetId: string) => {
|
|||||||
return useInvalid([NAME_SPACE, 'dataset', datasetId])
|
return useInvalid([NAME_SPACE, 'dataset', datasetId])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const useCreateMetaData = (datasetId: string) => {
|
||||||
|
const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)
|
||||||
|
return useMutation({
|
||||||
|
mutationFn: async (payload: BuiltInMetadataItem) => {
|
||||||
|
datasetMetaData.push({
|
||||||
|
id: `${Math.random()}`,
|
||||||
|
...payload,
|
||||||
|
use_count: 0,
|
||||||
|
})
|
||||||
|
await invalidDatasetMetaData()
|
||||||
|
return Promise.resolve(true)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const useDeleteMetaData = (datasetId: string) => {
|
export const useDeleteMetaData = (datasetId: string) => {
|
||||||
const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)
|
const invalidDatasetMetaData = useInvalidDatasetMetaData(datasetId)
|
||||||
return useMutation({
|
return useMutation({
|
||||||
|
Loading…
Reference in New Issue
Block a user