file-tree-modal-delete.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import React from 'react'
  2. import { Button, Modal } from 'react-bootstrap'
  3. import { useTranslation } from 'react-i18next'
  4. import AccessibleModal from '../../../../shared/components/accessible-modal'
  5. import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
  6. function FileTreeModalDelete() {
  7. const { t } = useTranslation()
  8. const {
  9. isDeleting,
  10. inFlight,
  11. finishDeleting,
  12. actionedEntities,
  13. cancel,
  14. error
  15. } = useFileTreeActionable()
  16. if (!isDeleting) return null // the modal will not be rendered; return early
  17. function handleHide() {
  18. cancel()
  19. }
  20. function handleDelete() {
  21. finishDeleting()
  22. }
  23. return (
  24. <AccessibleModal show onHide={handleHide}>
  25. <Modal.Header>
  26. <Modal.Title>{t('delete')}</Modal.Title>
  27. </Modal.Header>
  28. <Modal.Body>
  29. <p>{t('sure_you_want_to_delete')}</p>
  30. <ul>
  31. {actionedEntities.map(entity => (
  32. <li key={entity._id}>{entity.name}</li>
  33. ))}
  34. </ul>
  35. {error && (
  36. <div className="alert alert-danger file-tree-modal-alert">
  37. {t('generic_something_went_wrong')}
  38. </div>
  39. )}
  40. </Modal.Body>
  41. <Modal.Footer>
  42. {inFlight ? (
  43. <Button bsStyle="danger" disabled>
  44. {t('deleting')}…
  45. </Button>
  46. ) : (
  47. <>
  48. <Button onClick={handleHide}>{t('cancel')}</Button>
  49. <Button bsStyle="danger" onClick={handleDelete}>
  50. {t('delete')}
  51. </Button>
  52. </>
  53. )}
  54. </Modal.Footer>
  55. </AccessibleModal>
  56. )
  57. }
  58. export default FileTreeModalDelete