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

Merge branch 'feat/fire-resume-rename-operation-from-front' into feat/show-draw-attention-icon-for-broken-path

yohei0125 3 лет назад
Родитель
Сommit
c3d37d7845

+ 3 - 1
packages/app/resource/locales/en_US/translation.json

@@ -1113,6 +1113,8 @@
     "footprints": "Footprints"
   },
   "page_operation":{
-    "paths_recovered": "Paths recovered successfully"
+    "paths_recovered": "Paths recovered successfully",
+    "path_recovery_failed":"Path recovery failed",
+    "forbidden_user": "The operation is forbidden for this user"
   }
 }

+ 3 - 1
packages/app/resource/locales/ja_JP/translation.json

@@ -1106,6 +1106,8 @@
     "footprints": "足跡"
   },
   "page_operation":{
-    "paths_recovered": "パスを修復しました"
+    "paths_recovered": "パスを修復しました",
+    "path_recovery_failed":"パスを修復できませんでした",
+    "forbidden_user": "操作権限がありません"
   }
 }

+ 3 - 1
packages/app/resource/locales/zh_CN/translation.json

@@ -1116,6 +1116,8 @@
     "footprints": "脚印"
   },
   "page_operation":{
-    "paths_recovered": "成功恢复了页面路径"
+    "paths_recovered": "成功恢复了页面路径",
+    "path_recovery_failed":"路径恢复失败",
+    "forbidden_user": "该操作对该用户来说是被禁止的"
   }
 }

+ 1 - 6
packages/app/src/client/services/page-operation.ts

@@ -66,10 +66,5 @@ export const exportAsMarkdown = (pageId: string, revisionId: string, format: str
  * send request to fix broken paths caused by unexpected events such as server shutdown while renaming page paths
  */
 export const resumeRenameOperation = async(pageId: string): Promise<void> => {
-  try {
-    await apiv3Post('/pages/resume-rename', { pageId });
-  }
-  catch (err) {
-    throw err;
-  }
+  await apiv3Post('/pages/resume-rename', { pageId });
 };

+ 4 - 1
packages/app/src/components/Common/Dropdown/PageItemControl.tsx

@@ -133,6 +133,9 @@ const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.E
     const showDeviderBeforeAdditionalMenuItems = (forceHideMenuItems?.length ?? 0) < 3;
     const showDeviderBeforeDelete = AdditionalMenuItems != null || showDeviderBeforeAdditionalMenuItems;
 
+    // PathRecovery
+    const shouldFixPath = operationProcessData?.Rename != null ? operationProcessData?.Rename.isProcessable : false;
+
     contents = (
       <>
         { !isEnableActions && (
@@ -197,7 +200,7 @@ const PageItemControlDropdownMenu = React.memo((props: DropdownMenuProps): JSX.E
         ) }
 
         {/* PathRecovery */}
-        { !forceHideMenuItems?.includes(MenuItemType.PATH_RECOVERY) && isEnableActions && operationProcessData?.Rename != null && (
+        { !forceHideMenuItems?.includes(MenuItemType.PATH_RECOVERY) && isEnableActions && shouldFixPath && (
           <DropdownItem
             onClick={pathRecoveryItemClickedHandler}
             className="grw-page-control-dropdown-item"

+ 6 - 9
packages/app/src/components/Sidebar/PageTree/Item.tsx

@@ -372,26 +372,23 @@ const Item: FC<ItemProps> = (props: ItemProps) => {
     return null;
   };
 
+  /**
+   * Users do not need to know if all pages have been renamed.
+   * Make resuming rename operation appears to be working fine to allow users for a seamless operation.
+   */
   const pathRecoveryMenuItemClickHandler = async(pageId: string): Promise<void> => {
     try {
       setRenaming(true);
       await resumeRenameOperation(pageId);
 
-      mutateChildren();
-
       if (onRenamed != null) {
         onRenamed();
       }
 
       toastSuccess(t('page_operation.paths_recovered'));
     }
-    catch (err) {
-      toastError(err);
-    }
-    finally {
-      setTimeout(() => {
-        setRenaming(false);
-      }, 1000);
+    catch (e) {
+      toastError(t('page_operation.path_recovery_failed'));
     }
   };
 

+ 4 - 2
packages/app/src/server/routes/apiv3/pages.js

@@ -565,7 +565,9 @@ module.exports = (crowi) => {
     // The user has permission to resume rename operation if page is returned.
     const page = await Page.findByIdAndViewer(pageId, user, null, true);
     if (page == null) {
-      return res.apiv3Err(new ErrorV3('The operation is forbidden for this user.'), 403);
+      const msg = 'page_operation.forbidden_user';
+      const code = 'forbidden-user';
+      return res.apiv3Err(new ErrorV3(msg, code), 403);
     }
 
     try {
@@ -573,7 +575,7 @@ module.exports = (crowi) => {
     }
     catch (err) {
       logger.error(err);
-      return res.apiv3Err(new ErrorV3(`Failed to resume rename operation. ${err}`), 500);
+      return res.apiv3Err(err, 500);
     }
     return res.apiv3();
   });