CreateTemplateModal.jsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React from 'react';
  2. import { pathUtils } from '@growi/core';
  3. import PropTypes from 'prop-types';
  4. import { useTranslation } from 'react-i18next';
  5. import { Modal, ModalHeader, ModalBody } from 'reactstrap';
  6. import urljoin from 'url-join';
  7. const CreateTemplateModal = (props) => {
  8. const { t } = useTranslation();
  9. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
  10. const { path } = props;
  11. const parentPath = pathUtils.addTrailingSlash(path);
  12. function generateUrl(label) {
  13. return encodeURI(urljoin(parentPath, label, '#edit'));
  14. }
  15. /**
  16. * @param {string} target Which hierarchy to create [children, decendants]
  17. */
  18. function renderTemplateCard(target, label) {
  19. return (
  20. <div className="card card-select-template">
  21. <div className="card-header">{ t(`template.${target}.label`) }</div>
  22. <div className="card-body">
  23. <p className="text-center"><code>{label}</code></p>
  24. <p className="form-text text-muted text-center"><small>{t(`template.${target}.desc`) }</small></p>
  25. </div>
  26. <div className="card-footer text-center">
  27. <a
  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} className="grw-create-page">
  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. t: PropTypes.func.isRequired, // i18next
  60. path: PropTypes.string.isRequired,
  61. isOpen: PropTypes.bool.isRequired,
  62. onClose: PropTypes.func.isRequired,
  63. };
  64. export default CreateTemplateModal;