PutbackPageModal.jsx 3.0 KB

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