CreateTemplateModal.jsx 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import { pathUtils } from '@growi/core';
  3. import { useTranslation } from 'next-i18next';
  4. import PropTypes from 'prop-types';
  5. import { Modal, ModalHeader, ModalBody } from 'reactstrap';
  6. import urljoin from 'url-join';
  7. const CreateTemplateModal = (props) => {
  8. const { t } = useTranslation();
  9. const { path } = props;
  10. const parentPath = pathUtils.addTrailingSlash(path);
  11. function generateUrl(label) {
  12. return encodeURI(urljoin(parentPath, label, '#edit'));
  13. }
  14. /**
  15. * @param {string} target Which hierarchy to create [children, decendants]
  16. */
  17. function renderTemplateCard(target, label) {
  18. return (
  19. <div className="card card-select-template">
  20. <div className="card-header">{ t(`template.${target}.label`) }</div>
  21. <div className="card-body">
  22. <p className="text-center"><code>{label}</code></p>
  23. <p className="form-text text-muted text-center"><small>{t(`template.${target}.desc`) }</small></p>
  24. </div>
  25. <div className="card-footer text-center">
  26. <a
  27. data-testid={`template-button-${target}`}
  28. href={generateUrl(label)}
  29. className="btn btn-sm btn-primary"
  30. id={`template-button-${target}`}
  31. >
  32. { t('Edit') }
  33. </a>
  34. </div>
  35. </div>
  36. );
  37. }
  38. return (
  39. <Modal isOpen={props.isOpen} toggle={props.onClose} data-testid="page-template-modal">
  40. <ModalHeader tag="h4" toggle={props.onClose} className="bg-primary text-light">
  41. {t('template.modal_label.Create/Edit Template Page')}
  42. </ModalHeader>
  43. <ModalBody>
  44. <div className="form-group">
  45. <label className="mb-4">
  46. <code>{parentPath}</code><br />
  47. { t('template.modal_label.Create template under') }
  48. </label>
  49. <div className="card-deck">
  50. {renderTemplateCard('children', '_template')}
  51. {renderTemplateCard('decendants', '__template')}
  52. </div>
  53. </div>
  54. </ModalBody>
  55. </Modal>
  56. );
  57. };
  58. CreateTemplateModal.propTypes = {
  59. path: PropTypes.string.isRequired,
  60. isOpen: PropTypes.bool.isRequired,
  61. onClose: PropTypes.func.isRequired,
  62. };
  63. export default CreateTemplateModal;