فهرست منبع

feat: add share link related page registration

Shun Miyazawa 4 ماه پیش
والد
کامیت
a6c9943d2c

+ 1 - 0
apps/app/src/pages/general-page/superjson/index.ts

@@ -1 +1,2 @@
 export { registerPageToShowRevisionWithMeta } from './page-to-show-revision-with-meta';
+export { registerShareLinkRelatedPage } from './share-link-related-page';

+ 29 - 0
apps/app/src/pages/general-page/superjson/share-link-related-page.ts

@@ -0,0 +1,29 @@
+import type { IPagePopulatedToShowRevision } from '@growi/core/dist/interfaces';
+import superjson from 'superjson';
+
+import type { PageDocument } from '~/server/models/page';
+
+type IShareLinkRelatedPage = IPagePopulatedToShowRevision & PageDocument;
+
+let isRegistered = false;
+
+export const registerShareLinkRelatedPage = (): void => {
+  if (isRegistered) return;
+
+  superjson.registerCustom<IShareLinkRelatedPage, string>(
+    {
+      isApplicable: (v): v is IShareLinkRelatedPage => {
+        return v != null && (v as PageDocument).toObject != null;
+      },
+      serialize: (v) => {
+        return superjson.stringify(v.toObject());
+      },
+      deserialize: (v) => {
+        return superjson.parse(v);
+      },
+    },
+    'IShareLinkRelatedPageTransformer',
+  );
+
+  isRegistered = true;
+};

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

@@ -26,13 +26,13 @@ import {
 import type { NextPageWithLayout } from '../../_app.page';
 import { useInitialCSRFetch } from '../../general-page';
 import { useHydrateGeneralPageConfigurationAtoms } from '../../general-page/hydrate';
-import { registerPageToShowRevisionWithMeta } from '../../general-page/superjson';
+import { registerShareLinkRelatedPage } from '../../general-page/superjson';
 import { NEXT_JS_ROUTING_PAGE } from './consts';
 import { getServerSidePropsForInitial } from './server-side-props';
 import type { InitialProps } from './types';
 
 // call superjson custom register
-registerPageToShowRevisionWithMeta();
+registerShareLinkRelatedPage();
 
 const GrowiContextualSubNavigation = dynamic(
   // biome-ignore lint/style/noRestrictedImports: no-problem dynamic import