Preview.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import type { CSSProperties } from 'react';
  2. import { useSlidesByFrontmatter } from '@growi/presentation/dist/services';
  3. import type { RendererOptions } from '~/interfaces/renderer-options';
  4. import { useIsEnabledMarp } from '~/stores/context';
  5. import RevisionRenderer from '../../components-universal/PageView/RevisionRenderer';
  6. import { SlideRenderer } from '../Page/SlideRenderer';
  7. import styles from './Preview.module.scss';
  8. const moduleClass = styles['page-editor-preview-body'] ?? '';
  9. type Props = {
  10. rendererOptions: RendererOptions,
  11. markdown?: string,
  12. pagePath?: string | null,
  13. expandContentWidth?: boolean,
  14. style?: CSSProperties,
  15. onScroll?: (scrollTop: number) => void,
  16. }
  17. const Preview = (props: Props): JSX.Element => {
  18. const {
  19. rendererOptions,
  20. markdown, pagePath, style,
  21. expandContentWidth,
  22. } = props;
  23. const { data: isEnabledMarp } = useIsEnabledMarp();
  24. const isSlide = useSlidesByFrontmatter(markdown, isEnabledMarp);
  25. const fluidLayoutClass = expandContentWidth ? 'fluid-layout' : '';
  26. return (
  27. <div
  28. data-testid="page-editor-preview-body"
  29. className={`${moduleClass} ${fluidLayoutClass} ${pagePath === '/Sidebar' ? 'preview-sidebar' : ''}`}
  30. style={style}
  31. >
  32. { markdown != null
  33. && (
  34. isSlide != null
  35. ? <SlideRenderer marp={isSlide.marp} markdown={markdown} />
  36. : <RevisionRenderer rendererOptions={rendererOptions} markdown={markdown}></RevisionRenderer>
  37. )
  38. }
  39. </div>
  40. );
  41. };
  42. export default Preview;