Yuki Takei 3 лет назад
Родитель
Сommit
0c2556beea

+ 13 - 1
packages/app/src/components/Page.tsx

@@ -22,6 +22,7 @@ import { useViewOptions } from '~/stores/renderer';
 import {
 import {
   useEditorMode, useIsMobile,
   useEditorMode, useIsMobile,
 } from '~/stores/ui';
 } from '~/stores/ui';
+import { registerGrowiFacade } from '~/utils/growi-facade';
 import loggerFactory from '~/utils/logger';
 import loggerFactory from '~/utils/logger';
 
 
 import RevisionRenderer from './Page/RevisionRenderer';
 import RevisionRenderer from './Page/RevisionRenderer';
@@ -216,12 +217,23 @@ export const Page = (props) => {
   const { data: slackChannelsData } = useSWRxSlackChannels(currentPage?.path);
   const { data: slackChannelsData } = useSWRxSlackChannels(currentPage?.path);
   const { data: isSlackEnabled } = useIsSlackEnabled();
   const { data: isSlackEnabled } = useIsSlackEnabled();
   const { data: pageTags } = usePageTagsForEditors(null); // TODO: pass pageId
   const { data: pageTags } = usePageTagsForEditors(null); // TODO: pass pageId
-  const { data: rendererOptions } = useViewOptions(storeTocNodeHandler);
+  const { data: rendererOptions, mutate: mutateRendererOptions } = useViewOptions(storeTocNodeHandler);
   const { mutate: mutateIsEnabledUnsavedWarning } = useIsEnabledUnsavedWarning();
   const { mutate: mutateIsEnabledUnsavedWarning } = useIsEnabledUnsavedWarning();
   const { mutate: mutateCurrentPageTocNode } = useCurrentPageTocNode();
   const { mutate: mutateCurrentPageTocNode } = useCurrentPageTocNode();
 
 
   const pageRef = useRef(null);
   const pageRef = useRef(null);
 
 
+  // register to facade
+  useEffect(() => {
+    registerGrowiFacade({
+      markdownRenderer: {
+        optionsMutators: {
+          viewOptionsMutator: mutateRendererOptions,
+        },
+      },
+    });
+  }, [mutateRendererOptions]);
+
   useEffect(() => {
   useEffect(() => {
     mutateCurrentPageTocNode(tocRef.current);
     mutateCurrentPageTocNode(tocRef.current);
   // eslint-disable-next-line react-hooks/exhaustive-deps
   // eslint-disable-next-line react-hooks/exhaustive-deps

+ 1 - 0
packages/app/src/services/renderer/renderer.tsx

@@ -489,6 +489,7 @@ if (isClient()) {
   registerGrowiFacade({
   registerGrowiFacade({
     markdownRenderer: {
     markdownRenderer: {
       optionsGenerators: {
       optionsGenerators: {
+        generateViewOptions,
         generatePreviewOptions,
         generatePreviewOptions,
       },
       },
     },
     },

+ 5 - 1
packages/app/src/stores/renderer.tsx

@@ -53,7 +53,11 @@ export const useViewOptions = (storeTocNodeHandler: (toc: HtmlElementNode) => vo
 
 
   return useSWRImmutable<RendererOptions, Error>(
   return useSWRImmutable<RendererOptions, Error>(
     key,
     key,
-    (rendererId, currentPagePath, rendererConfig) => generateViewOptions(currentPagePath, rendererConfig, storeTocNodeHandler),
+    (rendererId, currentPagePath, rendererConfig) => {
+      // determine options generator
+      const optionsGenerator = getGrowiFacade().markdownRenderer?.optionsGenerators?.customGenerateViewOptions ?? generateViewOptions;
+      return optionsGenerator(currentPagePath, rendererConfig, storeTocNodeHandler);
+    },
     {
     {
       fallbackData: isAllDataValid ? generateViewOptions(currentPagePath, rendererConfig, storeTocNodeHandler) : undefined,
       fallbackData: isAllDataValid ? generateViewOptions(currentPagePath, rendererConfig, storeTocNodeHandler) : undefined,
     },
     },

+ 2 - 0
packages/core/src/interfaces/growi-facade.ts

@@ -1,6 +1,8 @@
 export type GrowiFacade = {
 export type GrowiFacade = {
   markdownRenderer?: {
   markdownRenderer?: {
     optionsGenerators?: {
     optionsGenerators?: {
+      generateViewOptions?: any;
+      customGenerateViewOptions?: any;
       generatePreviewOptions?: any;
       generatePreviewOptions?: any;
       customGeneratePreviewOptions?: any;
       customGeneratePreviewOptions?: any;
     },
     },