Preview.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. expandContentWidth?: boolean,
  13. onScroll?: (scrollTop: number) => void,
  14. }
  15. const Preview = React.forwardRef((props: Props, ref: RefObject<HTMLDivElement>): JSX.Element => {
  16. const {
  17. rendererOptions,
  18. markdown, pagePath,
  19. expandContentWidth,
  20. } = props;
  21. const fluidLayoutClass = expandContentWidth ? 'fluid-layout' : '';
  22. return (
  23. <div
  24. className={`${moduleClass} ${fluidLayoutClass} ${pagePath === '/Sidebar' ? 'preview-sidebar' : ''}`}
  25. ref={ref}
  26. onScroll={(event: SyntheticEvent<HTMLDivElement>) => {
  27. if (props.onScroll != null) {
  28. props.onScroll(event.currentTarget.scrollTop);
  29. }
  30. }}
  31. >
  32. { markdown != null && (
  33. <RevisionRenderer rendererOptions={rendererOptions} markdown={markdown}></RevisionRenderer>
  34. ) }
  35. </div>
  36. );
  37. });
  38. Preview.displayName = 'Preview';
  39. export default Preview;