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

Fix child count and recursive deletion

https://youtrack.weseek.co.jp/issue/GW-7905
- Update condition of load parent for rename and delete
- Update condition of delete root folder
- Update deleteFolderAndChildren method
- Update bookmarkFoldeId type parameter
Mudana-Grune 3 лет назад
Родитель
Сommit
84d3d7b4d9

+ 10 - 4
packages/app/src/components/Sidebar/Bookmarks/BookmarkFolderItem.tsx

@@ -65,12 +65,18 @@ const BookmarkFolderItem: FC<BookmarkFolderItemProps> = (props: BookmarkFolderIt
   }, [folderId, isOpen]);
   }, [folderId, isOpen]);
 
 
   const loadParent = useCallback(async() => {
   const loadParent = useCallback(async() => {
-    if (parent != null) {
-      mutateParentBookmarkFolder();
+    if (!isRenameAction) {
+      if (parent != null) {
+        await mutateParentBookmarkFolder();
+      }
+      // Reload root folder structure
+      setTargetFolder(null);
+    }
+    else {
+      await mutateParentBookmarkFolder();
     }
     }
-    setTargetFolder(null);
 
 
-  }, [mutateParentBookmarkFolder, parent]);
+  }, [isRenameAction, mutateParentBookmarkFolder, parent]);
 
 
   // Rename  for bookmark folder handler
   // Rename  for bookmark folder handler
   const onPressEnterHandlerForRename = useCallback(async(folderName: string) => {
   const onPressEnterHandlerForRename = useCallback(async(folderName: string) => {

+ 9 - 3
packages/app/src/server/models/bookmark-folder.ts

@@ -24,7 +24,7 @@ export interface BookmarkFolderModel extends Model<BookmarkFolderDocument>{
   createByParameters(params: IBookmarkFolder): BookmarkFolderDocument
   createByParameters(params: IBookmarkFolder): BookmarkFolderDocument
   findFolderAndChildren(user: Types.ObjectId | string, parentId?: Types.ObjectId | string): BookmarkFolderItems[]
   findFolderAndChildren(user: Types.ObjectId | string, parentId?: Types.ObjectId | string): BookmarkFolderItems[]
   findChildFolderById(parentBookmarkFolder: Types.ObjectId | string): Promise<BookmarkFolderDocument[]>
   findChildFolderById(parentBookmarkFolder: Types.ObjectId | string): Promise<BookmarkFolderDocument[]>
-  deleteFolderAndChildren(bookmarkFolderId: string): {deletedCount: number}
+  deleteFolderAndChildren(bookmarkFolderId: Types.ObjectId | string): {deletedCount: number}
   updateBookmarkFolder(bookmarkFolderId: string, name: string, parent: string): BookmarkFolderDocument | null
   updateBookmarkFolder(bookmarkFolderId: string, name: string, parent: string): BookmarkFolderDocument | null
 }
 }
 
 
@@ -88,8 +88,14 @@ bookmarkFolderSchema.statics.deleteFolderAndChildren = async function(boookmarkF
   const bookmarkFolder = await this.findByIdAndDelete(boookmarkFolderId);
   const bookmarkFolder = await this.findByIdAndDelete(boookmarkFolderId);
   let deletedCount = 0;
   let deletedCount = 0;
   if (bookmarkFolder != null) {
   if (bookmarkFolder != null) {
-    const childFolders = await this.deleteMany({ parent: bookmarkFolder?.id });
-    deletedCount = childFolders.deletedCount + 1;
+    // Delete all child recursively and update deleted count
+    const childFolders = await this.find({ parent: bookmarkFolder });
+    await Promise.all(childFolders.map(async(child) => {
+      const deletedChildFolder = await this.deleteFolderAndChildren(child._id);
+      deletedCount += deletedChildFolder.deletedCount;
+    }));
+    const deletedChild = await this.deleteMany({ parent: bookmarkFolder });
+    deletedCount += deletedChild.deletedCount + 1;
   }
   }
   return { deletedCount };
   return { deletedCount };
 };
 };