EmptyTrashModal.jsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React, { useState } from 'react';
  2. import PropTypes from 'prop-types';
  3. import {
  4. Modal, ModalHeader, ModalBody, ModalFooter,
  5. } from 'reactstrap';
  6. import { withTranslation } from 'react-i18next';
  7. import { createSubscribedElement } from './UnstatedUtils';
  8. import AppContainer from '../services/AppContainer';
  9. import ApiErrorMessage from './PageManagement/ApiErrorMessage';
  10. const EmptyTrashModal = (props) => {
  11. const {
  12. t, isOpen, onClose, appContainer,
  13. } = props;
  14. const [errorCode, setErrorCode] = useState(null);
  15. const [errorMessage, setErrorMessage] = useState(null);
  16. async function emptyTrash() {
  17. setErrorCode(null);
  18. setErrorMessage(null);
  19. try {
  20. await appContainer.apiv3Delete('/pages/empty-trash');
  21. window.location.reload();
  22. }
  23. catch (err) {
  24. setErrorCode(err.code);
  25. setErrorMessage(err.message);
  26. }
  27. }
  28. function emptyButtonHandler() {
  29. emptyTrash();
  30. }
  31. return (
  32. <Modal isOpen={isOpen} toggle={onClose} className="grw-create-page">
  33. <ModalHeader tag="h4" toggle={onClose} className="bg-danger text-light">
  34. { t('modal_empty.empty_the_trash')}
  35. </ModalHeader>
  36. <ModalBody>
  37. { t('modal_empty.notice')}
  38. </ModalBody>
  39. <ModalFooter>
  40. <ApiErrorMessage errorCode={errorCode} errorMessage={errorMessage} />
  41. <button type="button" className="btn btn-danger" onClick={emptyButtonHandler}>
  42. <i className="icon-trash mr-2" aria-hidden="true"></i>Empty
  43. </button>
  44. </ModalFooter>
  45. </Modal>
  46. );
  47. };
  48. /**
  49. * Wrapper component for using unstated
  50. */
  51. const EmptyTrashModalWrapper = (props) => {
  52. return createSubscribedElement(EmptyTrashModal, props, [AppContainer]);
  53. };
  54. EmptyTrashModal.propTypes = {
  55. t: PropTypes.func.isRequired, // i18next
  56. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  57. isOpen: PropTypes.bool.isRequired,
  58. onClose: PropTypes.func.isRequired,
  59. onClickEmptyBtn: PropTypes.func.isRequired,
  60. };
  61. export default withTranslation()(EmptyTrashModalWrapper);