ConfirmDeleteModal.tsx 1.9 KB

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