PutbackPageModal.jsx 2.8 KB

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