EmptyTrashModal.jsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 { withUnstatedContainers } from './UnstatedUtils';
  8. import SocketIoContainer from '~/client/services/SocketIoContainer';
  9. import AppContainer from '~/client/services/AppContainer';
  10. import ApiErrorMessageList from './PageManagement/ApiErrorMessageList';
  11. const EmptyTrashModal = (props) => {
  12. const {
  13. t, isOpen, onClose, appContainer, socketIoContainer,
  14. } = props;
  15. const [errs, setErrs] = useState(null);
  16. async function emptyTrash() {
  17. setErrs(null);
  18. try {
  19. await appContainer.apiv3Delete('/pages/empty-trash');
  20. window.location.reload();
  21. }
  22. catch (err) {
  23. setErrs(err);
  24. }
  25. }
  26. function emptyButtonHandler() {
  27. emptyTrash();
  28. }
  29. return (
  30. <Modal isOpen={isOpen} toggle={onClose} className="grw-create-page">
  31. <ModalHeader tag="h4" toggle={onClose} className="bg-danger text-light">
  32. { t('modal_empty.empty_the_trash')}
  33. </ModalHeader>
  34. <ModalBody>
  35. { t('modal_empty.notice')}
  36. </ModalBody>
  37. <ModalFooter>
  38. <ApiErrorMessageList errs={errs} />
  39. <button type="button" className="btn btn-danger" onClick={emptyButtonHandler}>
  40. <i className="icon-trash mr-2" aria-hidden="true"></i> Empty
  41. </button>
  42. </ModalFooter>
  43. </Modal>
  44. );
  45. };
  46. /**
  47. * Wrapper component for using unstated
  48. */
  49. const EmptyTrashModalWrapper = withUnstatedContainers(EmptyTrashModal, [AppContainer, SocketIoContainer]);
  50. EmptyTrashModal.propTypes = {
  51. t: PropTypes.func.isRequired, // i18next
  52. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  53. socketIoContainer: PropTypes.instanceOf(SocketIoContainer),
  54. isOpen: PropTypes.bool.isRequired,
  55. onClose: PropTypes.func.isRequired,
  56. };
  57. export default withTranslation()(EmptyTrashModalWrapper);