| <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')} > | <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 && ( | 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 '> | <div className='flex space-x-2 '> |
| import ToolItem from './tool-item' | import ToolItem from './tool-item' | ||||
| import I18n from '@/context/i18n' | import I18n from '@/context/i18n' | ||||
| import { getLanguage } from '@/i18n/language' | import { getLanguage } from '@/i18n/language' | ||||
| import Confirm from '@/app/components/base/confirm' | |||||
| import AppIcon from '@/app/components/base/app-icon' | import AppIcon from '@/app/components/base/app-icon' | ||||
| import Button from '@/app/components/base/button' | import Button from '@/app/components/base/button' | ||||
| import Indicator from '@/app/components/header/indicator' | import Indicator from '@/app/components/header/indicator' | ||||
| // custom provider | // custom provider | ||||
| const [customCollection, setCustomCollection] = useState<CustomCollectionBackend | WorkflowToolProviderResponse | null>(null) | const [customCollection, setCustomCollection] = useState<CustomCollectionBackend | WorkflowToolProviderResponse | null>(null) | ||||
| const [isShowEditCollectionToolModal, setIsShowEditCustomCollectionModal] = useState(false) | const [isShowEditCollectionToolModal, setIsShowEditCustomCollectionModal] = useState(false) | ||||
| const [showConfirmDelete, setShowConfirmDelete] = useState(false) | |||||
| const [deleteAction, setDeleteAction] = useState(null) | |||||
| const doUpdateCustomToolCollection = async (data: CustomCollectionBackend) => { | const doUpdateCustomToolCollection = async (data: CustomCollectionBackend) => { | ||||
| await updateCustomCollection(data) | await updateCustomCollection(data) | ||||
| onRefreshData() | onRefreshData() | ||||
| }) | }) | ||||
| setIsShowEditWorkflowToolModal(false) | 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 | // ToolList | ||||
| const [toolList, setToolList] = useState<Tool[]>([]) | const [toolList, setToolList] = useState<Tool[]>([]) | ||||
| payload={customCollection} | payload={customCollection} | ||||
| onHide={() => setIsShowEditCustomCollectionModal(false)} | onHide={() => setIsShowEditCustomCollectionModal(false)} | ||||
| onEdit={doUpdateCustomToolCollection} | onEdit={doUpdateCustomToolCollection} | ||||
| onRemove={doRemoveCustomToolCollection} | |||||
| onRemove={onClickCustomToolDelete} | |||||
| /> | /> | ||||
| )} | )} | ||||
| {isShowEditWorkflowToolModal && ( | {isShowEditWorkflowToolModal && ( | ||||
| <WorkflowToolModal | <WorkflowToolModal | ||||
| payload={customCollection} | payload={customCollection} | ||||
| onHide={() => setIsShowEditWorkflowToolModal(false)} | onHide={() => setIsShowEditWorkflowToolModal(false)} | ||||
| onRemove={removeWorkflowToolProvider} | |||||
| onRemove={onClickWorkflowToolDelete} | |||||
| onSave={updateWorkflowToolProvider} | 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> | </div> | ||||
| ) | ) | ||||
| } | } |
| </div> | </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')} > | <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 && ( | {!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 '> | <div className='flex space-x-2 '> | ||||
| <Button onClick={onHide}>{t('common.operation.cancel')}</Button> | <Button onClick={onHide}>{t('common.operation.cancel')}</Button> |
| privacyPolicyPlaceholder: 'Bitte Datenschutzrichtlinie eingeben', | privacyPolicyPlaceholder: 'Bitte Datenschutzrichtlinie eingeben', | ||||
| customDisclaimer: 'Benutzer Haftungsausschluss', | customDisclaimer: 'Benutzer Haftungsausschluss', | ||||
| customDisclaimerPlaceholder: 'Bitte benutzerdefinierten Haftungsausschluss eingeben', | 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: { | test: { | ||||
| title: 'Test', | title: 'Test', |
| customDisclaimerPlaceholder: 'Please enter custom disclaimer', | customDisclaimerPlaceholder: 'Please enter custom disclaimer', | ||||
| confirmTitle: 'Confirm to save ?', | confirmTitle: 'Confirm to save ?', | ||||
| confirmTip: 'Apps using this tool will be affected', | 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: { | test: { | ||||
| title: 'Test', | title: 'Test', |
| privacyPolicyPlaceholder: 'Veuillez entrer la politique de confidentialité', | privacyPolicyPlaceholder: 'Veuillez entrer la politique de confidentialité', | ||||
| customDisclaimer: 'Clause de non-responsabilité personnalisée', | customDisclaimer: 'Clause de non-responsabilité personnalisée', | ||||
| customDisclaimerPlaceholder: 'Entrez le texte de la 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: { | test: { | ||||
| title: 'Test', | title: 'Test', |
| customDisclaimerPlaceholder: 'कस्टम अस्वीकरण दर्ज करें', | customDisclaimerPlaceholder: 'कस्टम अस्वीकरण दर्ज करें', | ||||
| confirmTitle: 'सहेजने की पुष्टि करें ?', | confirmTitle: 'सहेजने की पुष्टि करें ?', | ||||
| confirmTip: 'इस उपकरण का उपयोग करने वाले ऐप्स प्रभावित होंगे', | confirmTip: 'इस उपकरण का उपयोग करने वाले ऐप्स प्रभावित होंगे', | ||||
| deleteToolConfirmTitle: 'इस उपकरण को हटाएं?', | |||||
| deleteToolConfirmContent: 'इस उपकरण को हटाने से वापस नहीं आ सकता है। उपयोगकर्ता अब तक आपके उपकरण पर अन्तराल नहीं कर सकेंगे।', | |||||
| }, | }, | ||||
| test: { | test: { | ||||
| title: 'परीक्षण', | title: 'परीक्षण', |
| privacyPolicyPlaceholder: 'プライバシーポリシーを入力してください', | privacyPolicyPlaceholder: 'プライバシーポリシーを入力してください', | ||||
| customDisclaimer: 'カスタム免責事項', | customDisclaimer: 'カスタム免責事項', | ||||
| customDisclaimerPlaceholder: 'カスタム免責事項を入力してください', | customDisclaimerPlaceholder: 'カスタム免責事項を入力してください', | ||||
| deleteToolConfirmTitle: 'このツールを削除しますか?', | |||||
| deleteToolConfirmContent: 'ツールの削除は取り消しできません。ユーザーはもうあなたのツールにアクセスできません。', | |||||
| }, | }, | ||||
| test: { | test: { | ||||
| title: 'テスト', | title: 'テスト', |
| customDisclaimerPlaceholder: '사용자 정의 권리 포기 문구를 입력해주세요.', | customDisclaimerPlaceholder: '사용자 정의 권리 포기 문구를 입력해주세요.', | ||||
| confirmTitle: '저장하시겠습니까?', | confirmTitle: '저장하시겠습니까?', | ||||
| confirmTip: '이 도구를 사용하는 앱은 영향을 받습니다.', | confirmTip: '이 도구를 사용하는 앱은 영향을 받습니다.', | ||||
| deleteToolConfirmTitle: '이 도구를 삭제하시겠습니까?', | |||||
| deleteToolConfirmContent: '이 도구를 삭제하면 되돌릴 수 없습니다. 사용자는 더 이상 당신의 도구에 액세스할 수 없습니다.', | |||||
| }, | }, | ||||
| test: { | test: { | ||||
| title: '테스트', | title: '테스트', |
| privacyPolicyPlaceholder: 'Proszę wprowadzić politykę prywatności', | privacyPolicyPlaceholder: 'Proszę wprowadzić politykę prywatności', | ||||
| customDisclaimer: 'Oświadczenie niestandardowe', | customDisclaimer: 'Oświadczenie niestandardowe', | ||||
| customDisclaimerPlaceholder: 'Proszę wprowadzić 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: { | test: { | ||||
| title: 'Test', | title: 'Test', |
| privacyPolicyPlaceholder: 'Digite a política de privacidade', | privacyPolicyPlaceholder: 'Digite a política de privacidade', | ||||
| customDisclaimer: 'Aviso Personalizado', | customDisclaimer: 'Aviso Personalizado', | ||||
| customDisclaimerPlaceholder: 'Digite o 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: { | test: { | ||||
| title: 'Testar', | title: 'Testar', |
| }, | }, | ||||
| privacyPolicy: 'Politica de Confidențialitate', | privacyPolicy: 'Politica de Confidențialitate', | ||||
| privacyPolicyPlaceholder: 'Vă rugăm să introduceți 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: { | test: { | ||||
| title: 'Testează', | title: 'Testează', |
| privacyPolicyPlaceholder: 'Введіть політику конфіденційності', | privacyPolicyPlaceholder: 'Введіть політику конфіденційності', | ||||
| customDisclaimer: 'Власний відомості', | customDisclaimer: 'Власний відомості', | ||||
| customDisclaimerPlaceholder: 'Введіть власні відомості', | customDisclaimerPlaceholder: 'Введіть власні відомості', | ||||
| deleteToolConfirmTitle: 'Видалити цей інструмент?', | |||||
| deleteToolConfirmContent: 'Видалення інструменту є незворотнім. Користувачі більше не зможуть отримати доступ до вашого інструменту.', | |||||
| }, | }, | ||||
| test: { | test: { |
| privacyPolicyPlaceholder: 'Vui lòng nhập chính sách bảo mật', | privacyPolicyPlaceholder: 'Vui lòng nhập chính sách bảo mật', | ||||
| customDisclaimer: 'Tuyên bố Tùy chỉnh', | customDisclaimer: 'Tuyên bố Tùy chỉnh', | ||||
| customDisclaimerPlaceholder: 'Vui lòng nhập 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: { | test: { | ||||
| title: 'Kiểm tra', | title: 'Kiểm tra', |
| customDisclaimerPlaceholder: '请输入自定义免责声明', | customDisclaimerPlaceholder: '请输入自定义免责声明', | ||||
| confirmTitle: '确认保存?', | confirmTitle: '确认保存?', | ||||
| confirmTip: '发布新的工具版本可能会影响该工具已关联的应用', | confirmTip: '发布新的工具版本可能会影响该工具已关联的应用', | ||||
| deleteToolConfirmTitle: '删除这个工具?', | |||||
| deleteToolConfirmContent: '删除工具是不可逆的。用户将无法再访问您的工具。', | |||||
| }, | }, | ||||
| test: { | test: { | ||||
| title: '测试', | title: '测试', |
| privacyPolicyPlaceholder: '請輸入隱私協議', | privacyPolicyPlaceholder: '請輸入隱私協議', | ||||
| customDisclaimer: '自定義免責聲明', | customDisclaimer: '自定義免責聲明', | ||||
| customDisclaimerPlaceholder: '請輸入自定義免責聲明', | customDisclaimerPlaceholder: '請輸入自定義免責聲明', | ||||
| deleteToolConfirmTitle: '刪除這個工具?', | |||||
| deleteToolConfirmContent: '刪除工具是不可逆的。用戶將無法再訪問您的工具。', | |||||
| }, | }, | ||||
| test: { | test: { | ||||
| title: '測試', | title: '測試', |