Yuki Takei 1 год назад
Родитель
Сommit
5d3e2e5b3a

+ 9 - 6
apps/app/src/pages/[[...path]].page.tsx

@@ -45,7 +45,6 @@ import {
   useIsUploadAllFileAllowed, useIsUploadEnabled,
   useElasticsearchMaxBodyLengthToIndex,
   useIsLocalAccountRegistrationEnabled,
-  useIsRomUserAllowedToComment,
   useIsAiEnabled,
 } from '~/stores-universal/context';
 import { useEditingMarkdown } from '~/stores/editor';
@@ -474,24 +473,28 @@ async function injectPageData(context: GetServerSidePropsContext, props: Props):
   }
 
   const pageWithMeta = await pageService.findPageAndMetaDataByViewer(pageId, currentPathname, user, true); // includeEmpty = true, isSharedPage = false
-  const page = pageWithMeta?.data as unknown as PageDocument;
+  const { data: page, meta } = pageWithMeta ?? {};
 
   // add user to seen users
   if (page != null && user != null) {
     await page.seen(user);
   }
 
+  props.pageWithMeta = null;
+
   // populate & check if the revision is latest
-  let populated;
   if (page != null) {
     page.initLatestRevisionField(revisionId);
     props.isLatestRevision = page.isLatestRevision();
     const ssrMaxRevisionBodyLength = configManager.getConfig('app:ssrMaxRevisionBodyLength');
     props.skipSSR = await skipSSR(page, ssrMaxRevisionBodyLength);
-    populated = await page.populateDataToShowRevision(props.skipSSR); // shouldExcludeBody = skipSSR
-  }
+    const populatedPage = await page.populateDataToShowRevision(props.skipSSR); // shouldExcludeBody = skipSSR
 
-  props.pageWithMeta = populated;
+    props.pageWithMeta = {
+      data: populatedPage,
+      meta,
+    };
+  }
 }
 
 async function injectRoutingInformation(context: GetServerSidePropsContext, props: Props): Promise<void> {

+ 8 - 5
apps/app/src/pages/share/[[...path]].page.tsx

@@ -18,7 +18,7 @@ import type { CrowiRequest } from '~/interfaces/crowi-request';
 import { RegistrationMode } from '~/interfaces/registration-mode';
 import type { RendererConfig } from '~/interfaces/services/renderer';
 import type { IShareLinkHasId } from '~/interfaces/share-link';
-import type { PageDocument } from '~/server/models/page';
+import type { PageDocument, PageModel } from '~/server/models/page';
 import ShareLink from '~/server/models/share-link';
 import {
   useCurrentUser, useRendererConfig, useIsSearchPage, useCurrentPathname,
@@ -234,13 +234,16 @@ export const getServerSideProps: GetServerSideProps = async(context: GetServerSi
       props.shareLink = shareLink.toObject();
 
       // retrieve Page
-      const Page = crowi.model('Page');
+      const Page = crowi.model('Page') as PageModel;
       const relatedPage = await Page.findOne({ _id: getIdForRef(shareLink.relatedPage) });
       // determine whether skip SSR
       const ssrMaxRevisionBodyLength = crowi.configManager.getConfig('app:ssrMaxRevisionBodyLength');
-      props.skipSSR = await skipSSR(relatedPage, ssrMaxRevisionBodyLength);
-      // populate
-      props.shareLinkRelatedPage = await relatedPage.populateDataToShowRevision(props.skipSSR); // shouldExcludeBody = skipSSR
+
+      if (relatedPage != null) {
+        props.skipSSR = await skipSSR(relatedPage, ssrMaxRevisionBodyLength);
+        // populate
+        props.shareLinkRelatedPage = await relatedPage.populateDataToShowRevision(props.skipSSR); // shouldExcludeBody = skipSSR
+      }
     }
   }
   catch (err) {

+ 1 - 1
apps/app/src/server/models/page.ts

@@ -51,7 +51,7 @@ export interface PageDocument extends IPage, Document<Types.ObjectId> {
   [x:string]: any // for obsolete methods
   getLatestRevisionBodyLength(): Promise<number | null | undefined>
   calculateAndUpdateLatestRevisionBodyLength(this: PageDocument): Promise<void>
-  populateDataToShowRevision(shouldExcludeBody?: boolean): Promise<IPagePopulatedToShowRevision>
+  populateDataToShowRevision(shouldExcludeBody?: boolean): Promise<IPagePopulatedToShowRevision & PageDocument>
 }
 
 type TargetAndAncestorsResult = {