MarkDownSettingContents.tsx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import React, { useEffect } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import Card from 'reactstrap/es/Card';
  4. import CardBody from 'reactstrap/es/CardBody';
  5. import AdminMarkDownContainer from '~/client/services/AdminMarkDownContainer';
  6. import { toastError } from '~/client/util/toastr';
  7. import { toArrayIfNot } from '~/utils/array-utils';
  8. import loggerFactory from '~/utils/logger';
  9. import { withUnstatedContainers } from '../../UnstatedUtils';
  10. import IndentForm from './IndentForm';
  11. import LineBreakForm from './LineBreakForm';
  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('admin');
  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('markdown_settings.lineBreak_header')}</h2>
  37. <Card className="card well my-3">
  38. <CardBody className="px-0 py-2">{ t('markdown_settings.lineBreak_desc') }</CardBody>
  39. </Card>
  40. <LineBreakForm />
  41. {/* Indent Setting */}
  42. <h2 className="admin-setting-header">{t('markdown_settings.indent_header')}</h2>
  43. <Card className="card well my-3">
  44. <CardBody className="px-0 py-2">{t('markdown_settings.indent_desc') }</CardBody>
  45. </Card>
  46. <IndentForm />
  47. {/* XSS Setting */}
  48. <h2 className="admin-setting-header">{ t('markdown_settings.xss_header') }</h2>
  49. <Card className="card well my-3">
  50. <CardBody className="px-0 py-2">{ t('markdown_settings.xss_desc') }</CardBody>
  51. </Card>
  52. <XssForm />
  53. </div>
  54. );
  55. });
  56. MarkDownSettingContents.displayName = 'MarkDownSettingContents';
  57. const MarkdownSettingWithUnstatedContainer = withUnstatedContainers(MarkDownSettingContents, [AdminMarkDownContainer]);
  58. export default MarkdownSettingWithUnstatedContainer;