PutbackPageModal.jsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 PageContainer from '../services/PageContainer';
  9. import ApiErrorMessageList from './PageManagement/ApiErrorMessageList';
  10. const PutBackPageModal = (props) => {
  11. const {
  12. t, isOpen, onClose, pageContainer, path,
  13. } = props;
  14. const [errs, setErrs] = useState(null);
  15. const [isPutbackRecursively, setIsPutbackRecursively] = useState(true);
  16. function changeIsPutbackRecursivelyHandler() {
  17. setIsPutbackRecursively(!isPutbackRecursively);
  18. }
  19. async function putbackPage() {
  20. setErrs(null);
  21. try {
  22. const response = await pageContainer.revertRemove(isPutbackRecursively);
  23. const putbackPagePath = response.page.path;
  24. window.location.href = encodeURI(putbackPagePath);
  25. }
  26. catch (err) {
  27. setErrs(err);
  28. }
  29. }
  30. async function putbackPageButtonHandler() {
  31. putbackPage();
  32. }
  33. return (
  34. <Modal isOpen={isOpen} toggle={onClose} className="grw-create-page">
  35. <ModalHeader tag="h4" toggle={onClose} className="bg-info text-light">
  36. <i className="icon-action-undo mr-2" aria-hidden="true"></i> { t('modal_putback.label.Put Back Page') }
  37. </ModalHeader>
  38. <ModalBody>
  39. <div className="form-group">
  40. <label>{t('modal_putback.label.Put Back Page')}:</label><br />
  41. <code>{path}</code>
  42. </div>
  43. <div className="custom-control custom-checkbox custom-checkbox-warning">
  44. <input
  45. className="custom-control-input"
  46. id="cbPutBackRecursively"
  47. type="checkbox"
  48. checked={isPutbackRecursively}
  49. onChange={changeIsPutbackRecursivelyHandler}
  50. />
  51. <label htmlFor="cbPutBackRecursively" className="custom-control-label">
  52. { t('modal_putback.label.recursively') }
  53. </label>
  54. <p className="form-text text-muted mt-0">
  55. <code>{ path }</code>{ t('modal_putback.help.recursively') }
  56. </p>
  57. </div>
  58. </ModalBody>
  59. <ModalFooter>
  60. <ApiErrorMessageList errs={errs} />
  61. <button type="button" className="btn btn-info" onClick={putbackPageButtonHandler}>
  62. <i className="icon-action-undo mr-2" aria-hidden="true"></i> { t('Put Back') }
  63. </button>
  64. </ModalFooter>
  65. </Modal>
  66. );
  67. };
  68. /**
  69. * Wrapper component for using unstated
  70. */
  71. const PutBackPageModalWrapper = withUnstatedContainers(PutBackPageModal, [PageContainer]);
  72. PutBackPageModal.propTypes = {
  73. t: PropTypes.func.isRequired, // i18next
  74. pageContainer: PropTypes.instanceOf(PageContainer).isRequired,
  75. isOpen: PropTypes.bool.isRequired,
  76. onClose: PropTypes.func.isRequired,
  77. path: PropTypes.string.isRequired,
  78. };
  79. export default withTranslation()(PutBackPageModalWrapper);