Przeglądaj źródła

WIP: bugfix for empty page

Yuki Takei 6 miesięcy temu
rodzic
commit
e55a529618

+ 19 - 0
apps/app/src/pages/[[...path]]/page-data-props.ts

@@ -145,6 +145,25 @@ export async function getPageDataForInitial(
     // type assertion
     // type assertion
     assert(isIPageInfo(meta), 'meta should be IPageInfo when data is not null');
     assert(isIPageInfo(meta), 'meta should be IPageInfo when data is not null');
 
 
+    // Handle empty pages - return as not found to avoid serialization issues
+    if (page.isEmpty) {
+      return {
+        props: {
+          currentPathname,
+          isIdenticalPathPage: false,
+          pageWithMeta: {
+            data: null,
+            meta: {
+              isNotFound: true,
+              isForbidden: false,
+            },
+          } satisfies IDataWithMeta<null, IPageNotFoundInfo>,
+          skipSSR: false,
+          redirectFrom,
+        },
+      };
+    }
+
     // Add user to seen users
     // Add user to seen users
     if (user != null) {
     if (user != null) {
       await page.seen(user);
       await page.seen(user);

+ 14 - 3
apps/app/src/server/service/page/index.ts

@@ -416,10 +416,10 @@ class PageService implements IPageService {
 
 
     let page: HydratedDocument<PageDocument> | null;
     let page: HydratedDocument<PageDocument> | null;
     if (pageId != null) { // prioritized
     if (pageId != null) { // prioritized
-      page = await Page.findByIdAndViewer(pageId, user, null, includeEmpty);
+      page = await Page.findByIdAndViewer(pageId, user, null, true);
     }
     }
     else {
     else {
-      page = await Page.findByPathAndViewer(path, user, null, true, includeEmpty);
+      page = await Page.findByPathAndViewer(path, user, null, true, true);
     }
     }
 
 
     if (page == null) {
     if (page == null) {
@@ -430,7 +430,18 @@ class PageService implements IPageService {
         meta: {
         meta: {
           isNotFound: true,
           isNotFound: true,
           isForbidden,
           isForbidden,
-        },
+        } satisfies IPageNotFoundInfo,
+      };
+    }
+
+    if (page.isEmpty && !includeEmpty) {
+      const isVisible = await Page.countByIdAndViewer(page._id, user, null, true);
+      return {
+        data: null,
+        meta: {
+          isNotFound: true,
+          isForbidden: !isVisible,
+        } satisfies IPageNotFoundInfo,
       };
       };
     }
     }