CreateTemplateModal.jsx 2.2 KB

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