MarkDownSettingContents.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import React, { useEffect } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import { Card, CardBody } from 'reactstrap';
  4. import AdminMarkDownContainer from '~/client/services/AdminMarkDownContainer';
  5. import { toastError } from '~/client/util/apiNotification';
  6. import { toArrayIfNot } from '~/utils/array-utils';
  7. import loggerFactory from '~/utils/logger';
  8. import { withUnstatedContainers } from '../../UnstatedUtils';
  9. import IndentForm from './IndentForm';
  10. import LineBreakForm from './LineBreakForm';
  11. import PresentationForm from './PresentationForm';
  12. import XssForm from './XssForm';
  13. const logger = loggerFactory('growi:MarkDown');
  14. type Props ={
  15. adminMarkDownContainer: AdminMarkDownContainer
  16. }
  17. const MarkDownSettingContents = React.memo((props: Props): JSX.Element => {
  18. const { t } = useTranslation();
  19. const { adminMarkDownContainer } = props;
  20. useEffect(() => {
  21. const fetchMarkdownData = async() => {
  22. await adminMarkDownContainer.retrieveMarkdownData();
  23. };
  24. try {
  25. fetchMarkdownData();
  26. }
  27. catch (err) {
  28. const errs = toArrayIfNot(err);
  29. toastError(errs);
  30. logger.error(errs);
  31. }
  32. }, [adminMarkDownContainer]);
  33. return (
  34. <div data-testid="admin-markdown">
  35. {/* Line Break Setting */}
  36. <h2 className="admin-setting-header">{t('admin:markdown_setting.lineBreak_header')}</h2>
  37. <Card className="card well my-3">
  38. <CardBody className="px-0 py-2">{ t('admin:markdown_setting.lineBreak_desc') }</CardBody>
  39. </Card>
  40. <LineBreakForm />
  41. {/* Indent Setting */}
  42. <h2 className="admin-setting-header">{t('admin:markdown_setting.indent_header')}</h2>
  43. <Card className="card well my-3">
  44. <CardBody className="px-0 py-2">{t('admin:markdown_setting.indent_desc') }</CardBody>
  45. </Card>
  46. <IndentForm />
  47. {/* Presentation Setting */}
  48. <h2 className="admin-setting-header">{ t('admin:markdown_setting.presentation_header') }</h2>
  49. <Card className="card well my-3">
  50. <CardBody className="px-0 py-2">{ t('admin:markdown_setting.presentation_desc') }</CardBody>
  51. </Card>
  52. <PresentationForm />
  53. {/* XSS Setting */}
  54. <h2 className="admin-setting-header">{ t('admin:markdown_setting.xss_header') }</h2>
  55. <Card className="card well my-3">
  56. <CardBody className="px-0 py-2">{ t('admin:markdown_setting.xss_desc') }</CardBody>
  57. </Card>
  58. <XssForm />
  59. </div>
  60. );
  61. });
  62. MarkDownSettingContents.displayName = 'MarkDownSettingContents';
  63. const MarkdownSettingWithUnstatedContainer = withUnstatedContainers(MarkDownSettingContents, [AdminMarkDownContainer]);
  64. export default MarkdownSettingWithUnstatedContainer;