MarkDownSetting.jsx 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React, { Suspense } from 'react';
  2. import { Card, CardBody } from 'reactstrap';
  3. import PropTypes from 'prop-types';
  4. import { withTranslation } from 'react-i18next';
  5. import loggerFactory from '@alias/logger';
  6. import { withUnstatedContainers } from '../../UnstatedUtils';
  7. import { toastError } from '../../../util/apiNotification';
  8. import LineBreakForm from './LineBreakForm';
  9. import PresentationForm from './PresentationForm';
  10. import XssForm from './XssForm';
  11. import AdminMarkDownContainer from '../../../services/AdminMarkDownContainer';
  12. const logger = loggerFactory('growi:MarkDown');
  13. function MarkdownSetting(props) {
  14. return (
  15. <Suspense
  16. fallback={(
  17. <div className="row">
  18. <i className="fa fa-5x fa-spinner fa-pulse mx-auto text-muted"></i>
  19. </div>
  20. )}
  21. >
  22. <RenderMarkdownSettingWrapper />
  23. </Suspense>
  24. );
  25. }
  26. function RenderMarkdownSetting(props) {
  27. const { t, adminMarkDownContainer } = props;
  28. if (adminMarkDownContainer.state.isEnabledLinebreaks === adminMarkDownContainer.dummyIsEnabledLinebreaks) {
  29. throw new Promise(async() => {
  30. try {
  31. await adminMarkDownContainer.retrieveMarkdownData();
  32. }
  33. catch (err) {
  34. toastError(err);
  35. adminMarkDownContainer.setState({ retrieveError: err.message });
  36. logger.error(err);
  37. }
  38. });
  39. }
  40. return (
  41. <React.Fragment>
  42. {/* Line Break Setting */}
  43. <h2 className="admin-setting-header">{t('admin:markdown_setting.lineBreak_header')}</h2>
  44. <Card className="card well my-3">
  45. <CardBody className="px-0 py-2">{ t('admin:markdown_setting.lineBreak_desc') }</CardBody>
  46. </Card>
  47. <LineBreakForm />
  48. {/* Presentation Setting */}
  49. <h2 className="admin-setting-header">{ t('admin:markdown_setting.presentation_header') }</h2>
  50. <Card className="card well my-3">
  51. <CardBody className="px-0 py-2">{ t('admin:markdown_setting.presentation_desc') }</CardBody>
  52. </Card>
  53. <PresentationForm />
  54. {/* XSS Setting */}
  55. <h2 className="admin-setting-header">{ t('admin:markdown_setting.xss_header') }</h2>
  56. <Card className="card well my-3">
  57. <CardBody className="px-0 py-2">{ t('admin:markdown_setting.xss_desc') }</CardBody>
  58. </Card>
  59. <XssForm />
  60. </React.Fragment>
  61. );
  62. }
  63. const RenderMarkdownSettingWrapper = withUnstatedContainers(MarkdownSetting, [AdminMarkDownContainer]);
  64. RenderMarkdownSetting.propTypes = {
  65. t: PropTypes.func.isRequired, // i18next
  66. adminMarkDownContainer: PropTypes.instanceOf(AdminMarkDownContainer).isRequired,
  67. };
  68. export default withTranslation()(RenderMarkdownSettingWrapper);