Browse Source

134173 hand over current page tags info

soumaeda 2 years ago
parent
commit
c3c0c05c0a

+ 7 - 3
apps/app/src/client/services/page-operation.ts

@@ -102,12 +102,13 @@ export const createPage = async(pagePath: string, markdown: string, tmpParams: O
 };
 };
 
 
 // TODO: define return type
 // TODO: define return type
-const updatePage = async(pageId: string, revisionId: string, markdown: string, tmpParams: OptionsToSave) => {
+const updatePage = async(pageId: string, revisionId: string, markdown: string, tmpParams: OptionsToSave, pageTags: string[]) => {
   // clone
   // clone
   const params = Object.assign(tmpParams, {
   const params = Object.assign(tmpParams, {
     page_id: pageId,
     page_id: pageId,
     revision_id: revisionId,
     revision_id: revisionId,
     body: markdown,
     body: markdown,
+    tags: pageTags,
   });
   });
 
 
   const res: any = await apiPost('/pages.update', params);
   const res: any = await apiPost('/pages.update', params);
@@ -121,6 +122,7 @@ type PageInfo= {
   path: string,
   path: string,
   pageId: Nullable<string>,
   pageId: Nullable<string>,
   revisionId: Nullable<string>,
   revisionId: Nullable<string>,
+  pageTags: string[],
 }
 }
 
 
 type SaveOrUpdateFunction = (markdown: string, pageInfo: PageInfo, optionsToSave?: OptionsToSave) => any;
 type SaveOrUpdateFunction = (markdown: string, pageInfo: PageInfo, optionsToSave?: OptionsToSave) => any;
@@ -132,7 +134,9 @@ export const useSaveOrUpdate = (): SaveOrUpdateFunction => {
   /* eslint-enable react-hooks/rules-of-hooks */
   /* eslint-enable react-hooks/rules-of-hooks */
 
 
   return useCallback(async(markdown: string, pageInfo: PageInfo, optionsToSave?: OptionsToSave) => {
   return useCallback(async(markdown: string, pageInfo: PageInfo, optionsToSave?: OptionsToSave) => {
-    const { path, pageId, revisionId } = pageInfo;
+    const {
+      path, pageId, revisionId, pageTags,
+    } = pageInfo;
 
 
     const options: OptionsToSave = Object.assign({}, optionsToSave);
     const options: OptionsToSave = Object.assign({}, optionsToSave);
 
 
@@ -145,7 +149,7 @@ export const useSaveOrUpdate = (): SaveOrUpdateFunction => {
         const msg = '\'revisionId\' is required to update page';
         const msg = '\'revisionId\' is required to update page';
         throw new Error(msg);
         throw new Error(msg);
       }
       }
-      res = await updatePage(pageId, revisionId, markdown, options);
+      res = await updatePage(pageId, revisionId, markdown, options, pageTags);
     }
     }
 
 
     mutateIsEnabledUnsavedWarning(false);
     mutateIsEnabledUnsavedWarning(false);

+ 5 - 2
apps/app/src/components/PageEditor/PageEditor.tsx

@@ -100,6 +100,7 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
   const { data: grantData } = useSelectedGrant();
   const { data: grantData } = useSelectedGrant();
   const { data: pageTags, sync: syncTagsInfoForEditor } = usePageTagsForEditors(pageId);
   const { data: pageTags, sync: syncTagsInfoForEditor } = usePageTagsForEditors(pageId);
   const { mutate: mutateTagsInfo } = useSWRxTagsInfo(pageId);
   const { mutate: mutateTagsInfo } = useSWRxTagsInfo(pageId);
+  const { data: tagsInfoData } = useSWRxTagsInfo(pageId);
   const { data: editingMarkdown, mutate: mutateEditingMarkdown } = useEditingMarkdown();
   const { data: editingMarkdown, mutate: mutateEditingMarkdown } = useEditingMarkdown();
   const { data: isEnabledAttachTitleHeader } = useIsEnabledAttachTitleHeader();
   const { data: isEnabledAttachTitleHeader } = useIsEnabledAttachTitleHeader();
   const { data: templateBodyData } = useTemplateBodyData();
   const { data: templateBodyData } = useTemplateBodyData();
@@ -227,7 +228,7 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
 
 
 
 
   const save = useCallback(async(opts?: {slackChannels: string, overwriteScopesOfDescendants?: boolean}): Promise<IPageHasId | null> => {
   const save = useCallback(async(opts?: {slackChannels: string, overwriteScopesOfDescendants?: boolean}): Promise<IPageHasId | null> => {
-    if (currentPathname == null || optionsToSave == null) {
+    if (currentPathname == null || optionsToSave == null || tagsInfoData == null) {
       logger.error('Some materials to save are invalid', { grantData, isSlackEnabled, currentPathname });
       logger.error('Some materials to save are invalid', { grantData, isSlackEnabled, currentPathname });
       throw new Error('Some materials to save are invalid');
       throw new Error('Some materials to save are invalid');
     }
     }
@@ -239,7 +240,9 @@ export const PageEditor = React.memo((props: Props): JSX.Element => {
 
 
       const { page } = await saveOrUpdate(
       const { page } = await saveOrUpdate(
         codeMirrorEditor?.getDoc() ?? '',
         codeMirrorEditor?.getDoc() ?? '',
-        { pageId, path: currentPagePath || currentPathname, revisionId: currentRevisionId },
+        {
+          pageId, path: currentPagePath || currentPathname, revisionId: currentRevisionId, pageTags: tagsInfoData.tags,
+        },
         options,
         options,
       );
       );
 
 

+ 1 - 1
apps/app/src/server/routes/page.js

@@ -455,7 +455,7 @@ module.exports = function(crowi, app) {
     const overwriteScopesOfDescendants = req.body.overwriteScopesOfDescendants || null;
     const overwriteScopesOfDescendants = req.body.overwriteScopesOfDescendants || null;
     const isSlackEnabled = !!req.body.isSlackEnabled; // cast to boolean
     const isSlackEnabled = !!req.body.isSlackEnabled; // cast to boolean
     const slackChannels = req.body.slackChannels || null;
     const slackChannels = req.body.slackChannels || null;
-    const pageTags = req.body.pageTags || undefined;
+    const pageTags = req.body.tags || undefined;
 
 
     if (pageId === null || pageBody === null || revisionId === null) {
     if (pageId === null || pageBody === null || revisionId === null) {
       return res.json(ApiResponse.error('page_id, body and revision_id are required.'));
       return res.json(ApiResponse.error('page_id, body and revision_id are required.'));