mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-05-30 01:55:17 +08:00
feat: knowledge used by app can still be removed (#5811)
This commit is contained in:
parent
0f8625cac2
commit
78d41a27cc
@ -10,7 +10,7 @@ import {
|
|||||||
} from '@remixicon/react'
|
} from '@remixicon/react'
|
||||||
import Confirm from '@/app/components/base/confirm'
|
import Confirm from '@/app/components/base/confirm'
|
||||||
import { ToastContext } from '@/app/components/base/toast'
|
import { ToastContext } from '@/app/components/base/toast'
|
||||||
import { deleteDataset } from '@/service/datasets'
|
import { checkIsUsedInApp, deleteDataset } from '@/service/datasets'
|
||||||
import type { DataSet } from '@/models/datasets'
|
import type { DataSet } from '@/models/datasets'
|
||||||
import Tooltip from '@/app/components/base/tooltip'
|
import Tooltip from '@/app/components/base/tooltip'
|
||||||
import { Folder } from '@/app/components/base/icons/src/vender/solid/files'
|
import { Folder } from '@/app/components/base/icons/src/vender/solid/files'
|
||||||
@ -36,6 +36,19 @@ const DatasetCard = ({
|
|||||||
|
|
||||||
const [showRenameModal, setShowRenameModal] = useState(false)
|
const [showRenameModal, setShowRenameModal] = useState(false)
|
||||||
const [showConfirmDelete, setShowConfirmDelete] = useState(false)
|
const [showConfirmDelete, setShowConfirmDelete] = useState(false)
|
||||||
|
const [confirmMessage, setConfirmMessage] = useState<string>('')
|
||||||
|
const detectIsUsedByApp = useCallback(async () => {
|
||||||
|
try {
|
||||||
|
const { is_using: isUsedByApp } = await checkIsUsedInApp(dataset.id)
|
||||||
|
setConfirmMessage(isUsedByApp ? t('dataset.datasetUsedByApp')! : t('dataset.deleteDatasetConfirmContent')!)
|
||||||
|
}
|
||||||
|
catch (e: any) {
|
||||||
|
const res = await e.json()
|
||||||
|
notify({ type: 'error', message: res?.message || 'Unknown error' })
|
||||||
|
}
|
||||||
|
|
||||||
|
setShowConfirmDelete(true)
|
||||||
|
}, [dataset.id, notify, t])
|
||||||
const onConfirmDelete = useCallback(async () => {
|
const onConfirmDelete = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
await deleteDataset(dataset.id)
|
await deleteDataset(dataset.id)
|
||||||
@ -44,10 +57,9 @@ const DatasetCard = ({
|
|||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
catch (e: any) {
|
catch (e: any) {
|
||||||
notify({ type: 'error', message: `${t('dataset.datasetDeleteFailed')}${'message' in e ? `: ${e.message}` : ''}` })
|
|
||||||
}
|
}
|
||||||
setShowConfirmDelete(false)
|
setShowConfirmDelete(false)
|
||||||
}, [dataset.id])
|
}, [dataset.id, notify, onSuccess, t])
|
||||||
|
|
||||||
const Operations = (props: HtmlContentProps) => {
|
const Operations = (props: HtmlContentProps) => {
|
||||||
const onMouseLeave = async () => {
|
const onMouseLeave = async () => {
|
||||||
@ -63,7 +75,7 @@ const DatasetCard = ({
|
|||||||
e.stopPropagation()
|
e.stopPropagation()
|
||||||
props.onClick?.()
|
props.onClick?.()
|
||||||
e.preventDefault()
|
e.preventDefault()
|
||||||
setShowConfirmDelete(true)
|
detectIsUsedByApp()
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<div className="relative w-full py-1" onMouseLeave={onMouseLeave}>
|
<div className="relative w-full py-1" onMouseLeave={onMouseLeave}>
|
||||||
@ -159,7 +171,7 @@ const DatasetCard = ({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className='!hidden group-hover:!flex shrink-0 mx-1 w-[1px] h-[14px] bg-gray-200'/>
|
<div className='!hidden group-hover:!flex shrink-0 mx-1 w-[1px] h-[14px] bg-gray-200' />
|
||||||
<div className='!hidden group-hover:!flex shrink-0'>
|
<div className='!hidden group-hover:!flex shrink-0'>
|
||||||
<CustomPopover
|
<CustomPopover
|
||||||
htmlContent={<Operations />}
|
htmlContent={<Operations />}
|
||||||
@ -194,7 +206,7 @@ const DatasetCard = ({
|
|||||||
{showConfirmDelete && (
|
{showConfirmDelete && (
|
||||||
<Confirm
|
<Confirm
|
||||||
title={t('dataset.deleteDatasetConfirmTitle')}
|
title={t('dataset.deleteDatasetConfirmTitle')}
|
||||||
content={t('dataset.deleteDatasetConfirmContent')}
|
content={confirmMessage}
|
||||||
isShow={showConfirmDelete}
|
isShow={showConfirmDelete}
|
||||||
onClose={() => setShowConfirmDelete(false)}
|
onClose={() => setShowConfirmDelete(false)}
|
||||||
onConfirm={onConfirmDelete}
|
onConfirm={onConfirmDelete}
|
||||||
|
@ -8,6 +8,7 @@ const translation = {
|
|||||||
deleteDatasetConfirmTitle: 'Delete this Knowledge?',
|
deleteDatasetConfirmTitle: 'Delete this Knowledge?',
|
||||||
deleteDatasetConfirmContent:
|
deleteDatasetConfirmContent:
|
||||||
'Deleting the Knowledge is irreversible. Users will no longer be able to access your Knowledge, and all prompt configurations and logs will be permanently deleted.',
|
'Deleting the Knowledge is irreversible. Users will no longer be able to access your Knowledge, and all prompt configurations and logs will be permanently deleted.',
|
||||||
|
datasetUsedByApp: 'The knowledge is being used by some apps. Apps will no longer be able to use this Knowledge, and all prompt configurations and logs will be permanently deleted.',
|
||||||
datasetDeleted: 'Knowledge deleted',
|
datasetDeleted: 'Knowledge deleted',
|
||||||
datasetDeleteFailed: 'Failed to delete Knowledge',
|
datasetDeleteFailed: 'Failed to delete Knowledge',
|
||||||
didYouKnow: 'Did you know?',
|
didYouKnow: 'Did you know?',
|
||||||
|
@ -8,6 +8,7 @@ const translation = {
|
|||||||
deleteDatasetConfirmTitle: '要删除知识库吗?',
|
deleteDatasetConfirmTitle: '要删除知识库吗?',
|
||||||
deleteDatasetConfirmContent:
|
deleteDatasetConfirmContent:
|
||||||
'删除知识库是不可逆的。用户将无法再访问您的知识库,所有的提示配置和日志将被永久删除。',
|
'删除知识库是不可逆的。用户将无法再访问您的知识库,所有的提示配置和日志将被永久删除。',
|
||||||
|
datasetUsedByApp: '某些应用正在使用该知识库。应用将无法再使用该知识库,所有的提示配置和日志将被永久删除。',
|
||||||
datasetDeleted: '知识库已删除',
|
datasetDeleted: '知识库已删除',
|
||||||
datasetDeleteFailed: '删除知识库失败',
|
datasetDeleteFailed: '删除知识库失败',
|
||||||
didYouKnow: '你知道吗?',
|
didYouKnow: '你知道吗?',
|
||||||
|
@ -72,6 +72,12 @@ export const createEmptyDataset: Fetcher<DataSet, { name: string }> = ({ name })
|
|||||||
return post<DataSet>('/datasets', { body: { name } })
|
return post<DataSet>('/datasets', { body: { name } })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const checkIsUsedInApp: Fetcher<{ is_using: boolean }, string> = (id) => {
|
||||||
|
return get<{ is_using: boolean }>(`/datasets/${id}/use-check`, {}, {
|
||||||
|
silent: true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export const deleteDataset: Fetcher<DataSet, string> = (datasetID) => {
|
export const deleteDataset: Fetcher<DataSet, string> = (datasetID) => {
|
||||||
return del<DataSet>(`/datasets/${datasetID}`)
|
return del<DataSet>(`/datasets/${datasetID}`)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user