Preview.tsx 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import React, {
  2. SyntheticEvent, RefObject,
  3. } from 'react';
  4. import type { RendererOptions } from '~/interfaces/renderer-options';
  5. import RevisionRenderer from '../Page/RevisionRenderer';
  6. import styles from './Preview.module.scss';
  7. const moduleClass = styles['page-editor-preview-body'];
  8. type Props = {
  9. rendererOptions: RendererOptions,
  10. markdown?: string,
  11. pagePath?: string | null,
  12. onScroll?: (scrollTop: number) => void,
  13. }
  14. const Preview = React.forwardRef((props: Props, ref: RefObject<HTMLDivElement>): JSX.Element => {
  15. const {
  16. rendererOptions,
  17. markdown, pagePath,
  18. } = props;
  19. return (
  20. <div
  21. className={`${moduleClass} ${pagePath === '/Sidebar' ? 'preview-sidebar' : ''}`}
  22. ref={ref}
  23. onScroll={(event: SyntheticEvent<HTMLDivElement>) => {
  24. if (props.onScroll != null) {
  25. props.onScroll(event.currentTarget.scrollTop);
  26. }
  27. }}
  28. >
  29. { markdown != null && (
  30. <RevisionRenderer rendererOptions={rendererOptions} markdown={markdown}></RevisionRenderer>
  31. ) }
  32. </div>
  33. );
  34. });
  35. Preview.displayName = 'Preview';
  36. export default Preview;