2
0
Эх сурвалжийг харах

add ShareLinkPageContents

Yuki Takei 3 жил өмнө
parent
commit
b16df412c2

+ 64 - 0
packages/app/src/components/ShareLink/ShareLinkPageContents.tsx

@@ -0,0 +1,64 @@
+import React, { useEffect } from 'react';
+
+import type { IPagePopulatedToShowRevision } from '@growi/core';
+import type { HtmlElementNode } from 'rehype-toc';
+
+import { useViewOptions } from '~/stores/renderer';
+import { useCurrentPageTocNode } from '~/stores/ui';
+import { registerGrowiFacade } from '~/utils/growi-facade';
+import loggerFactory from '~/utils/logger';
+
+import RevisionRenderer from '../Page/RevisionRenderer';
+
+
+const logger = loggerFactory('growi:Page');
+
+
+type Props = {
+  page?: IPagePopulatedToShowRevision,
+}
+
+export const ShareLinkPageContents = (props: Props): JSX.Element => {
+  const { page } = props;
+
+  const { mutate: mutateCurrentPageTocNode } = useCurrentPageTocNode();
+
+  const { data: rendererOptions, mutate: mutateRendererOptions } = useViewOptions((toc: HtmlElementNode) => {
+    mutateCurrentPageTocNode(toc);
+  });
+
+  // register to facade
+  useEffect(() => {
+    registerGrowiFacade({
+      markdownRenderer: {
+        optionsMutators: {
+          viewOptionsMutator: mutateRendererOptions,
+        },
+      },
+    });
+  }, [mutateRendererOptions]);
+
+
+  if (page == null || rendererOptions == null) {
+    const entries = Object.entries({
+      page, rendererOptions,
+    })
+      .map(([key, value]) => [key, value == null ? 'null' : undefined])
+      .filter(([, value]) => value != null);
+
+    logger.warn('Some of materials are missing.', Object.fromEntries(entries));
+
+    return <></>;
+  }
+
+  const { _id: revisionId, body: markdown } = page.revision;
+
+  return (
+    <>
+      { revisionId != null && (
+        <RevisionRenderer rendererOptions={rendererOptions} markdown={markdown} />
+      )}
+    </>
+  );
+
+};

+ 2 - 2
packages/app/src/pages/share/[[...path]].page.tsx

@@ -127,11 +127,11 @@ const SharedPage: NextPageWithLayout<Props> = (props: Props) => {
   //   : <></>;
   //   : <></>;
 
 
   const contents = (() => {
   const contents = (() => {
-    const PageContents = dynamic(() => import('~/components/Page/PageContents').then(mod => mod.PageContents), {
+    const ShareLinkPageContents = dynamic(() => import('~/components/ShareLink/ShareLinkPageContents').then(mod => mod.ShareLinkPageContents), {
       ssr: false,
       ssr: false,
       loading: () => ssrBody,
       loading: () => ssrBody,
     });
     });
-    return <PageContents />;
+    return <ShareLinkPageContents page={props.shareLinkRelatedPage} />;
   })();
   })();
 
 
   return (
   return (