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

Refresh child bookmark folder structure on sidebar

https://youtrack.weseek.co.jp/issue/GW-7912
- Remove useEffect to set selectedItem value
- Move setSelectedItem to toggleHandler
- Remove setSelectedItem execution from onMenuItemClickHandler
- Add mutation for parent folder
- Remove mutation dependencies in onMenuItemClickHandler
Mudana-Grune 3 лет назад
Родитель
Сommit
6f8a05e42f

+ 7 - 6
packages/app/src/components/Bookmarks/BookmarkFolderMenu.tsx

@@ -1,5 +1,5 @@
 import React, {
 import React, {
-  useCallback, useEffect, useState,
+  useCallback, useState,
 } from 'react';
 } from 'react';
 
 
 import { useTranslation } from 'next-i18next';
 import { useTranslation } from 'next-i18next';
@@ -32,15 +32,13 @@ const BookmarkFolderMenu = (props: Props): JSX.Element => {
   const { data: currentPage } = useSWRxCurrentPage();
   const { data: currentPage } = useSWRxCurrentPage();
   const { mutate: mutateBookmarkInfo } = useSWRBookmarkInfo(currentPage?._id);
   const { mutate: mutateBookmarkInfo } = useSWRBookmarkInfo(currentPage?._id);
 
 
+
   const onClickNewBookmarkFolder = useCallback(() => {
   const onClickNewBookmarkFolder = useCallback(() => {
     setIsCreateAction(true);
     setIsCreateAction(true);
   }, []);
   }, []);
 
 
   const toggleHandler = useCallback(() => {
   const toggleHandler = useCallback(() => {
     mutateBookmarkFolderData();
     mutateBookmarkFolderData();
-  }, [mutateBookmarkFolderData]);
-
-  useEffect(() => {
     bookmarkFolders?.forEach((bookmarkFolder) => {
     bookmarkFolders?.forEach((bookmarkFolder) => {
       bookmarkFolder.bookmarks.forEach((bookmark) => {
       bookmarkFolder.bookmarks.forEach((bookmark) => {
         if (bookmark.page._id === currentPage?._id) {
         if (bookmark.page._id === currentPage?._id) {
@@ -73,14 +71,17 @@ const BookmarkFolderMenu = (props: Props): JSX.Element => {
   const onMenuItemClickHandler = useCallback(async(itemId: string) => {
   const onMenuItemClickHandler = useCallback(async(itemId: string) => {
     try {
     try {
       await apiv3Post('/bookmark-folder/add-boookmark-to-folder', { pageId: currentPage?._id, folderId: itemId });
       await apiv3Post('/bookmark-folder/add-boookmark-to-folder', { pageId: currentPage?._id, folderId: itemId });
-      setSelectedItem(itemId);
+
       mutateBookmarkInfo();
       mutateBookmarkInfo();
       toastSuccess('Bookmark added to bookmark folder successfully');
       toastSuccess('Bookmark added to bookmark folder successfully');
     }
     }
     catch (err) {
     catch (err) {
       toastError(err);
       toastError(err);
     }
     }
-  }, [currentPage?._id, mutateBookmarkInfo]);
+
+    mutateBookmarkFolderData();
+    setSelectedItem(itemId);
+  }, [currentPage?._id, mutateBookmarkFolderData, mutateBookmarkInfo]);
 
 
   const renderBookmarkMenuItem = useCallback(() => {
   const renderBookmarkMenuItem = useCallback(() => {
     return (
     return (

+ 7 - 7
packages/app/src/components/Bookmarks/BookmarkFolderMenuItem.tsx

@@ -32,6 +32,7 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
   const [isOpen, setIsOpen] = useState(false);
   const [isOpen, setIsOpen] = useState(false);
   const [currentChildFolders, setCurrentChildFolders] = useState<BookmarkFolderItems[]>();
   const [currentChildFolders, setCurrentChildFolders] = useState<BookmarkFolderItems[]>();
   const { data: childFolders, mutate: mutateChildFolders } = useSWRxBookamrkFolderAndChild(item._id);
   const { data: childFolders, mutate: mutateChildFolders } = useSWRxBookamrkFolderAndChild(item._id);
+  const { mutate: mutateParentFolders } = useSWRxBookamrkFolderAndChild(item.parent);
   const [selectedItem, setSelectedItem] = useState<string | null>(null);
   const [selectedItem, setSelectedItem] = useState<string | null>(null);
   const [isCreateAction, setIsCreateAction] = useState<boolean>(false);
   const [isCreateAction, setIsCreateAction] = useState<boolean>(false);
   const { data: currentPage } = useSWRxCurrentPage();
   const { data: currentPage } = useSWRxCurrentPage();
@@ -54,11 +55,8 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
   useEffect(() => {
   useEffect(() => {
     if (isOpen && childFolders != null) {
     if (isOpen && childFolders != null) {
       mutateChildFolders();
       mutateChildFolders();
-
       setCurrentChildFolders(childFolders);
       setCurrentChildFolders(childFolders);
-
     }
     }
-
     currentChildFolders?.forEach((bookmarkFolder) => {
     currentChildFolders?.forEach((bookmarkFolder) => {
       bookmarkFolder.bookmarks.forEach((bookmark) => {
       bookmarkFolder.bookmarks.forEach((bookmark) => {
         if (bookmark.page._id === currentPage?._id) {
         if (bookmark.page._id === currentPage?._id) {
@@ -67,7 +65,7 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
       });
       });
     });
     });
 
 
-  }, [childFolders, currentChildFolders, currentPage?._id, isOpen, item._id, mutateChildFolders]);
+  }, [childFolders, currentChildFolders, currentPage?._id, isOpen, item, mutateChildFolders, mutateParentFolders]);
 
 
   const onClickNewBookmarkFolder = useCallback((e) => {
   const onClickNewBookmarkFolder = useCallback((e) => {
     e.stopPropagation();
     e.stopPropagation();
@@ -89,19 +87,21 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
 
 
   const onClickChildMenuItemHandler = useCallback(async(e, item) => {
   const onClickChildMenuItemHandler = useCallback(async(e, item) => {
     e.stopPropagation();
     e.stopPropagation();
-    setSelectedItem(item._id);
     mutateBookmarkInfo();
     mutateBookmarkInfo();
     onSelectedChild();
     onSelectedChild();
     try {
     try {
       await apiv3Post('/bookmark-folder/add-boookmark-to-folder', { pageId: currentPage?._id, folderId: item._id });
       await apiv3Post('/bookmark-folder/add-boookmark-to-folder', { pageId: currentPage?._id, folderId: item._id });
       toastSuccess('Bookmark added to bookmark folder successfully');
       toastSuccess('Bookmark added to bookmark folder successfully');
+      mutateParentFolders();
+      mutateChildFolders();
+      setSelectedItem(item._id);
     }
     }
     catch (err) {
     catch (err) {
       toastError(err);
       toastError(err);
     }
     }
 
 
-    mutateChildFolders();
-  }, [currentPage?._id, mutateBookmarkInfo, onSelectedChild, mutateChildFolders]);
+
+  }, [mutateBookmarkInfo, onSelectedChild, currentPage?._id]);
 
 
   const renderBookmarkSubMenuItem = useCallback(() => {
   const renderBookmarkSubMenuItem = useCallback(() => {
     return (
     return (