ShareLinkPageContents.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import React, { useEffect } from 'react';
  2. import type { IPagePopulatedToShowRevision } from '@growi/core';
  3. import { useViewOptions } from '~/stores/renderer';
  4. import { registerGrowiFacade } from '~/utils/growi-facade';
  5. import loggerFactory from '~/utils/logger';
  6. import RevisionRenderer from '../Page/RevisionRenderer';
  7. const logger = loggerFactory('growi:Page');
  8. export type ShareLinkPageContentsProps = {
  9. page?: IPagePopulatedToShowRevision,
  10. }
  11. export const ShareLinkPageContents = (props: ShareLinkPageContentsProps): JSX.Element => {
  12. const { page } = props;
  13. const { data: rendererOptions, mutate: mutateRendererOptions } = useViewOptions();
  14. // register to facade
  15. useEffect(() => {
  16. registerGrowiFacade({
  17. markdownRenderer: {
  18. optionsMutators: {
  19. viewOptionsMutator: mutateRendererOptions,
  20. },
  21. },
  22. });
  23. }, [mutateRendererOptions]);
  24. if (page == null || rendererOptions == null) {
  25. const entries = Object.entries({
  26. page, rendererOptions,
  27. })
  28. .map(([key, value]) => [key, value == null ? 'null' : undefined])
  29. .filter(([, value]) => value != null);
  30. logger.warn('Some of materials are missing.', Object.fromEntries(entries));
  31. return <></>;
  32. }
  33. const { _id: revisionId, body: markdown } = page.revision;
  34. return (
  35. <>
  36. { revisionId != null && (
  37. <RevisionRenderer rendererOptions={rendererOptions} markdown={markdown} />
  38. )}
  39. </>
  40. );
  41. };