Просмотр исходного кода

update use on template button clicked

ryoji-s 2 лет назад
Родитель
Сommit
b037acb327

+ 15 - 9
apps/app/src/client/services/use-on-template-button-clicked.ts

@@ -1,11 +1,13 @@
 import { useCallback, useState } from 'react';
 import { useCallback, useState } from 'react';
 
 
+import { isCreatablePage } from '@growi/core/dist/utils/page-path-utils';
 import { useRouter } from 'next/router';
 import { useRouter } from 'next/router';
 
 
 import { createPage, exist } from '~/client/services/page-operation';
 import { createPage, exist } from '~/client/services/page-operation';
 import { LabelType } from '~/interfaces/template';
 import { LabelType } from '~/interfaces/template';
 
 
 export const useOnTemplateButtonClicked = (
 export const useOnTemplateButtonClicked = (
+    isLoading?: boolean,
     currentPagePath?: string,
     currentPagePath?: string,
 ): {
 ): {
   onClickHandler: (label: LabelType) => Promise<void>,
   onClickHandler: (label: LabelType) => Promise<void>,
@@ -15,23 +17,27 @@ export const useOnTemplateButtonClicked = (
   const [isPageCreating, setIsPageCreating] = useState(false);
   const [isPageCreating, setIsPageCreating] = useState(false);
 
 
   const onClickHandler = useCallback(async(label: LabelType) => {
   const onClickHandler = useCallback(async(label: LabelType) => {
+    if (isLoading) return;
+
     try {
     try {
       setIsPageCreating(true);
       setIsPageCreating(true);
 
 
-      const path = currentPagePath == null || currentPagePath === '/'
+      const targetPath = currentPagePath == null || currentPagePath === '/'
         ? `/${label}`
         ? `/${label}`
         : `${currentPagePath}/${label}`;
         : `${currentPagePath}/${label}`;
 
 
-      const params = {
-        isSlackEnabled: false,
-        slackChannels: '',
-        grant: 4,
-      // grant: currentPage?.grant || 1,
-      // grantUserGroupId: currentPage?.grantedGroup?._id,
-      };
+      const path = isCreatablePage(targetPath) ? targetPath : `/${label}`;
 
 
       const res = await exist(JSON.stringify([path]));
       const res = await exist(JSON.stringify([path]));
       if (!res.pages[path]) {
       if (!res.pages[path]) {
+        const params = {
+          isSlackEnabled: false,
+          slackChannels: '',
+          grant: 4,
+        // grant: currentPage?.grant || 1,
+        // grantUserGroupId: currentPage?.grantedGroup?._id,
+        };
+
         await createPage(path, '', params);
         await createPage(path, '', params);
       }
       }
 
 
@@ -43,7 +49,7 @@ export const useOnTemplateButtonClicked = (
     finally {
     finally {
       setIsPageCreating(false);
       setIsPageCreating(false);
     }
     }
-  }, [currentPagePath, router]);
+  }, [currentPagePath, isLoading, router]);
 
 
   return { onClickHandler, isPageCreating };
   return { onClickHandler, isPageCreating };
 };
 };

+ 1 - 1
apps/app/src/components/CreateTemplateModal.tsx

@@ -55,7 +55,7 @@ export const CreateTemplateModal: React.FC<CreateTemplateModalProps> = ({
 }) => {
 }) => {
   const { t } = useTranslation();
   const { t } = useTranslation();
 
 
-  const { onClickHandler: onClickTemplateButton, isPageCreating } = useOnTemplateButtonClicked(path);
+  const { onClickHandler: onClickTemplateButton, isPageCreating } = useOnTemplateButtonClicked(undefined, path);
 
 
   const onClickTemplateButtonHandler = useCallback(async(label: LabelType) => {
   const onClickTemplateButtonHandler = useCallback(async(label: LabelType) => {
     try {
     try {

+ 1 - 1
apps/app/src/components/Sidebar/PageCreateButton/PageCreateButton.tsx

@@ -26,7 +26,7 @@ export const PageCreateButton = React.memo((): JSX.Element => {
 
 
   const { onClickHandler: onClickNewButton, isPageCreating: isNewPageCreating } = useOnNewButtonClicked(isLoading, currentPage);
   const { onClickHandler: onClickNewButton, isPageCreating: isNewPageCreating } = useOnNewButtonClicked(isLoading, currentPage);
   const { onClickHandler: onClickTodaysButton, isPageCreating: isTodaysPageCreating } = useOnTodaysButtonClicked(todaysPath, currentUser);
   const { onClickHandler: onClickTodaysButton, isPageCreating: isTodaysPageCreating } = useOnTodaysButtonClicked(todaysPath, currentUser);
-  const { onClickHandler: onClickTemplateButton, isPageCreating: isTemplatePageCreating } = useOnTemplateButtonClicked(currentPage?.path);
+  const { onClickHandler: onClickTemplateButton, isPageCreating: isTemplatePageCreating } = useOnTemplateButtonClicked(isLoading, currentPage?.path);
 
 
   const onClickTemplateButtonHandler = useCallback(async(label: LabelType) => {
   const onClickTemplateButtonHandler = useCallback(async(label: LabelType) => {
     try {
     try {