ConfirmDeleteModal.tsx64 lines · main
1import { useEffect, useState } from 'react'
2import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal'
3
4import { STORAGE_ROW_TYPES } from '../Storage.constants'
5import { useStorageExplorerStateSnapshot } from '@/state/storage-explorer'
6
7export const ConfirmDeleteModal = () => {
8 const [deleting, setDeleting] = useState(false)
9 const { selectedItemsToDelete, deleteFolder, deleteFiles, setSelectedItemsToDelete } =
10 useStorageExplorerStateSnapshot()
11
12 const visible = selectedItemsToDelete.length > 0
13 const multipleFiles = selectedItemsToDelete.length > 1
14
15 const title = multipleFiles
16 ? `Confirm deletion of ${selectedItemsToDelete.length} items`
17 : selectedItemsToDelete.length === 1
18 ? `Confirm deletion of ${selectedItemsToDelete[0].name}`
19 : ``
20
21 const description = multipleFiles
22 ? `Are you sure you want to delete the selected ${selectedItemsToDelete.length} items?`
23 : selectedItemsToDelete.length === 1
24 ? `Are you sure you want to delete the selected ${selectedItemsToDelete[0].type.toLowerCase()}?`
25 : ``
26
27 const onDeleteSelectedFiles = async () => {
28 try {
29 setDeleting(true)
30 if (
31 selectedItemsToDelete.length === 1 &&
32 selectedItemsToDelete[0].type === STORAGE_ROW_TYPES.FOLDER
33 ) {
34 await deleteFolder(selectedItemsToDelete[0])
35 } else {
36 await deleteFiles({ files: selectedItemsToDelete })
37 }
38 } catch (err) {
39 } finally {
40 setDeleting(false)
41 }
42 }
43
44 useEffect(() => {
45 setDeleting(false)
46 }, [visible])
47
48 return (
49 <ConfirmationModal
50 size="medium"
51 visible={visible}
52 title={<span className="wrap-break-word">{title}</span>}
53 loading={deleting}
54 onCancel={() => setSelectedItemsToDelete([])}
55 onConfirm={onDeleteSelectedFiles}
56 variant="destructive"
57 alert={{
58 base: { variant: 'destructive' },
59 title: 'This action cannot be undone',
60 description,
61 }}
62 />
63 )
64}