mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 20:48:58 +08:00
chore: add a secondary confirmation dialog when the user delete the tool (#5634)
This commit is contained in:
parent
e1a72e0e2b
commit
89a7c70730
@ -302,7 +302,7 @@ const EditCustomCollectionModal: FC<Props> = ({
|
||||
<div className={cn(isEdit ? 'justify-between' : 'justify-end', 'mt-2 shrink-0 flex py-4 px-6 rounded-b-[10px] bg-gray-50 border-t border-black/5')} >
|
||||
{
|
||||
isEdit && (
|
||||
<Button onClick={onRemove}>{t('common.operation.remove')}</Button>
|
||||
<Button onClick={onRemove} className='text-red-500 border-red-50 hover:border-red-500'>{t('common.operation.delete')}</Button>
|
||||
)
|
||||
}
|
||||
<div className='flex space-x-2 '>
|
||||
|
@ -8,6 +8,7 @@ import type { Collection, CustomCollectionBackend, Tool, WorkflowToolProviderReq
|
||||
import ToolItem from './tool-item'
|
||||
import I18n from '@/context/i18n'
|
||||
import { getLanguage } from '@/i18n/language'
|
||||
import Confirm from '@/app/components/base/confirm'
|
||||
import AppIcon from '@/app/components/base/app-icon'
|
||||
import Button from '@/app/components/base/button'
|
||||
import Indicator from '@/app/components/header/indicator'
|
||||
@ -83,6 +84,8 @@ const ProviderDetail = ({
|
||||
// custom provider
|
||||
const [customCollection, setCustomCollection] = useState<CustomCollectionBackend | WorkflowToolProviderResponse | null>(null)
|
||||
const [isShowEditCollectionToolModal, setIsShowEditCustomCollectionModal] = useState(false)
|
||||
const [showConfirmDelete, setShowConfirmDelete] = useState(false)
|
||||
const [deleteAction, setDeleteAction] = useState(null)
|
||||
const doUpdateCustomToolCollection = async (data: CustomCollectionBackend) => {
|
||||
await updateCustomCollection(data)
|
||||
onRefreshData()
|
||||
@ -158,6 +161,23 @@ const ProviderDetail = ({
|
||||
})
|
||||
setIsShowEditWorkflowToolModal(false)
|
||||
}
|
||||
const onClickCustomToolDelete = () => {
|
||||
setDeleteAction('customTool')
|
||||
setShowConfirmDelete(true)
|
||||
}
|
||||
const onClickWorkflowToolDelete = () => {
|
||||
setDeleteAction('workflowTool')
|
||||
setShowConfirmDelete(true)
|
||||
}
|
||||
const handleConfirmDelete = () => {
|
||||
if (deleteAction === 'customTool')
|
||||
doRemoveCustomToolCollection()
|
||||
|
||||
else if (deleteAction === 'workflowTool')
|
||||
removeWorkflowToolProvider()
|
||||
|
||||
setShowConfirmDelete(false)
|
||||
}
|
||||
|
||||
// ToolList
|
||||
const [toolList, setToolList] = useState<Tool[]>([])
|
||||
@ -330,17 +350,27 @@ const ProviderDetail = ({
|
||||
payload={customCollection}
|
||||
onHide={() => setIsShowEditCustomCollectionModal(false)}
|
||||
onEdit={doUpdateCustomToolCollection}
|
||||
onRemove={doRemoveCustomToolCollection}
|
||||
onRemove={onClickCustomToolDelete}
|
||||
/>
|
||||
)}
|
||||
{isShowEditWorkflowToolModal && (
|
||||
<WorkflowToolModal
|
||||
payload={customCollection}
|
||||
onHide={() => setIsShowEditWorkflowToolModal(false)}
|
||||
onRemove={removeWorkflowToolProvider}
|
||||
onRemove={onClickWorkflowToolDelete}
|
||||
onSave={updateWorkflowToolProvider}
|
||||
/>
|
||||
)}
|
||||
{showConfirmDelete && (
|
||||
<Confirm
|
||||
title={t('tools.createTool.deleteToolConfirmTitle')}
|
||||
content={t('tools.createTool.deleteToolConfirmContent')}
|
||||
isShow={showConfirmDelete}
|
||||
onClose={() => setShowConfirmDelete(false)}
|
||||
onConfirm={handleConfirmDelete}
|
||||
onCancel={() => setShowConfirmDelete(false)}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
@ -244,7 +244,7 @@ const WorkflowToolAsModal: FC<Props> = ({
|
||||
</div>
|
||||
<div className={cn((!isAdd && onRemove) ? 'justify-between' : 'justify-end', 'mt-2 shrink-0 flex py-4 px-6 rounded-b-[10px] bg-gray-50 border-t border-black/5')} >
|
||||
{!isAdd && onRemove && (
|
||||
<Button onClick={onRemove}>{t('common.operation.remove')}</Button>
|
||||
<Button onClick={onRemove} className='text-red-500 border-red-50 hover:border-red-500'>{t('common.operation.delete')}</Button>
|
||||
)}
|
||||
<div className='flex space-x-2 '>
|
||||
<Button onClick={onHide}>{t('common.operation.cancel')}</Button>
|
||||
|
@ -73,6 +73,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: 'Bitte Datenschutzrichtlinie eingeben',
|
||||
customDisclaimer: 'Benutzer Haftungsausschluss',
|
||||
customDisclaimerPlaceholder: 'Bitte benutzerdefinierten Haftungsausschluss eingeben',
|
||||
deleteToolConfirmTitle: 'Löschen Sie dieses Werkzeug?',
|
||||
deleteToolConfirmContent: 'Das Löschen des Werkzeugs ist irreversibel. Benutzer können Ihr Werkzeug nicht mehr verwenden.',
|
||||
},
|
||||
test: {
|
||||
title: 'Test',
|
||||
|
@ -105,6 +105,8 @@ const translation = {
|
||||
customDisclaimerPlaceholder: 'Please enter custom disclaimer',
|
||||
confirmTitle: 'Confirm to save ?',
|
||||
confirmTip: 'Apps using this tool will be affected',
|
||||
deleteToolConfirmTitle: 'Delete this Tool?',
|
||||
deleteToolConfirmContent: 'Deleting the Tool is irreversible. Users will no longer be able to access your Tool.',
|
||||
},
|
||||
test: {
|
||||
title: 'Test',
|
||||
|
@ -73,6 +73,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: 'Veuillez entrer la politique de confidentialité',
|
||||
customDisclaimer: 'Clause de non-responsabilité personnalisée',
|
||||
customDisclaimerPlaceholder: 'Entrez le texte de la clause de non-responsabilité personnalisée',
|
||||
deleteToolConfirmTitle: 'Supprimer cet outil ?',
|
||||
deleteToolConfirmContent: 'La suppression de l\'outil est irréversible. Les utilisateurs ne pourront plus accéder à votre outil.',
|
||||
},
|
||||
test: {
|
||||
title: 'Test',
|
||||
|
@ -108,6 +108,8 @@ const translation = {
|
||||
customDisclaimerPlaceholder: 'कस्टम अस्वीकरण दर्ज करें',
|
||||
confirmTitle: 'सहेजने की पुष्टि करें ?',
|
||||
confirmTip: 'इस उपकरण का उपयोग करने वाले ऐप्स प्रभावित होंगे',
|
||||
deleteToolConfirmTitle: 'इस उपकरण को हटाएं?',
|
||||
deleteToolConfirmContent: 'इस उपकरण को हटाने से वापस नहीं आ सकता है। उपयोगकर्ता अब तक आपके उपकरण पर अन्तराल नहीं कर सकेंगे।',
|
||||
},
|
||||
test: {
|
||||
title: 'परीक्षण',
|
||||
|
@ -73,6 +73,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: 'プライバシーポリシーを入力してください',
|
||||
customDisclaimer: 'カスタム免責事項',
|
||||
customDisclaimerPlaceholder: 'カスタム免責事項を入力してください',
|
||||
deleteToolConfirmTitle: 'このツールを削除しますか?',
|
||||
deleteToolConfirmContent: 'ツールの削除は取り消しできません。ユーザーはもうあなたのツールにアクセスできません。',
|
||||
},
|
||||
test: {
|
||||
title: 'テスト',
|
||||
|
@ -105,6 +105,8 @@ const translation = {
|
||||
customDisclaimerPlaceholder: '사용자 정의 권리 포기 문구를 입력해주세요.',
|
||||
confirmTitle: '저장하시겠습니까?',
|
||||
confirmTip: '이 도구를 사용하는 앱은 영향을 받습니다.',
|
||||
deleteToolConfirmTitle: '이 도구를 삭제하시겠습니까?',
|
||||
deleteToolConfirmContent: '이 도구를 삭제하면 되돌릴 수 없습니다. 사용자는 더 이상 당신의 도구에 액세스할 수 없습니다.',
|
||||
},
|
||||
test: {
|
||||
title: '테스트',
|
||||
|
@ -75,6 +75,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: 'Proszę wprowadzić politykę prywatności',
|
||||
customDisclaimer: 'Oświadczenie niestandardowe',
|
||||
customDisclaimerPlaceholder: 'Proszę wprowadzić oświadczenie niestandardowe',
|
||||
deleteToolConfirmTitle: 'Skasuj ten przyrząd?',
|
||||
deleteToolConfirmContent: 'Usunięcie narzędzia jest nieodwracalne. Użytkownicy nie będą mieli już dostępu do Twojego narzędzia.',
|
||||
},
|
||||
test: {
|
||||
title: 'Test',
|
||||
|
@ -73,6 +73,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: 'Digite a política de privacidade',
|
||||
customDisclaimer: 'Aviso Personalizado',
|
||||
customDisclaimerPlaceholder: 'Digite o aviso personalizado',
|
||||
deleteToolConfirmTitle: 'Excluir esta ferramenta?',
|
||||
deleteToolConfirmContent: 'Excluir a ferramenta é irreversível. Os usuários não poderão mais acessar sua ferramenta.',
|
||||
},
|
||||
test: {
|
||||
title: 'Testar',
|
||||
|
@ -71,6 +71,8 @@ const translation = {
|
||||
},
|
||||
privacyPolicy: 'Politica de Confidențialitate',
|
||||
privacyPolicyPlaceholder: 'Vă rugăm să introduceți politica de confidențialitate',
|
||||
deleteToolConfirmTitle: 'Ștergeți această unealtă?',
|
||||
deleteToolConfirmContent: ' Ștergerea uneltă este irreversibilă. Utilizatorii nu vor mai putea accesa uneltă dvs.',
|
||||
},
|
||||
test: {
|
||||
title: 'Testează',
|
||||
|
@ -72,6 +72,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: 'Введіть політику конфіденційності',
|
||||
customDisclaimer: 'Власний відомості',
|
||||
customDisclaimerPlaceholder: 'Введіть власні відомості',
|
||||
deleteToolConfirmTitle: 'Видалити цей інструмент?',
|
||||
deleteToolConfirmContent: 'Видалення інструменту є незворотнім. Користувачі більше не зможуть отримати доступ до вашого інструменту.',
|
||||
},
|
||||
|
||||
test: {
|
||||
|
@ -73,6 +73,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: 'Vui lòng nhập chính sách bảo mật',
|
||||
customDisclaimer: 'Tuyên bố Tùy chỉnh',
|
||||
customDisclaimerPlaceholder: 'Vui lòng nhập tuyên bố tùy chỉnh',
|
||||
deleteToolConfirmTitle: 'Xóa công cụ này?',
|
||||
deleteToolConfirmContent: 'Xóa công cụ là không thể hồi tơi. Người dùng sẽ không thể truy cập lại công cụ của bạn.',
|
||||
},
|
||||
test: {
|
||||
title: 'Kiểm tra',
|
||||
|
@ -105,6 +105,8 @@ const translation = {
|
||||
customDisclaimerPlaceholder: '请输入自定义免责声明',
|
||||
confirmTitle: '确认保存?',
|
||||
confirmTip: '发布新的工具版本可能会影响该工具已关联的应用',
|
||||
deleteToolConfirmTitle: '删除这个工具?',
|
||||
deleteToolConfirmContent: '删除工具是不可逆的。用户将无法再访问您的工具。',
|
||||
},
|
||||
test: {
|
||||
title: '测试',
|
||||
|
@ -73,6 +73,8 @@ const translation = {
|
||||
privacyPolicyPlaceholder: '請輸入隱私協議',
|
||||
customDisclaimer: '自定義免責聲明',
|
||||
customDisclaimerPlaceholder: '請輸入自定義免責聲明',
|
||||
deleteToolConfirmTitle: '刪除這個工具?',
|
||||
deleteToolConfirmContent: '刪除工具是不可逆的。用戶將無法再訪問您的工具。',
|
||||
},
|
||||
test: {
|
||||
title: '測試',
|
||||
|
Loading…
x
Reference in New Issue
Block a user