PutbackPageModal.jsx 2.9 KB

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