file-tree-modal-delete.js 1.6 KB

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