|
@@ -21,17 +21,18 @@ import BookmarkFolderNameInput from './BookmarkFolderNameInput';
|
|
|
|
|
|
|
|
type Props ={
|
|
type Props ={
|
|
|
item: BookmarkFolderItems
|
|
item: BookmarkFolderItems
|
|
|
- isSelected: boolean
|
|
|
|
|
onSelectedChild: () => void
|
|
onSelectedChild: () => void
|
|
|
|
|
+ isSelected: boolean
|
|
|
}
|
|
}
|
|
|
const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
|
|
const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
|
|
|
const {
|
|
const {
|
|
|
- item, isSelected,
|
|
|
|
|
|
|
+ item, isSelected, onSelectedChild,
|
|
|
} = props;
|
|
} = props;
|
|
|
const { t } = useTranslation();
|
|
const { t } = useTranslation();
|
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
const [isOpen, setIsOpen] = useState(false);
|
|
|
|
|
+ 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();
|
|
@@ -50,11 +51,13 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
|
|
|
|
|
|
|
|
}, [item, mutateChildFolders, t]);
|
|
}, [item, mutateChildFolders, t]);
|
|
|
|
|
|
|
|
|
|
+
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
- if (isOpen) {
|
|
|
|
|
|
|
+ if (isOpen && childFolders != null) {
|
|
|
mutateChildFolders();
|
|
mutateChildFolders();
|
|
|
|
|
+ setCurrentChildFolders(childFolders);
|
|
|
}
|
|
}
|
|
|
- childFolders?.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) {
|
|
|
setSelectedItem(bookmarkFolder._id);
|
|
setSelectedItem(bookmarkFolder._id);
|
|
@@ -62,7 +65,7 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
|
|
|
});
|
|
});
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- }, [childFolders, currentPage?._id, isOpen, mutateChildFolders]);
|
|
|
|
|
|
|
+ }, [childFolders, currentChildFolders, currentPage?._id, isOpen, item, mutateChildFolders, mutateParentFolders]);
|
|
|
|
|
|
|
|
const onClickNewBookmarkFolder = useCallback((e) => {
|
|
const onClickNewBookmarkFolder = useCallback((e) => {
|
|
|
e.stopPropagation();
|
|
e.stopPropagation();
|
|
@@ -84,16 +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();
|
|
|
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);
|
|
|
}
|
|
}
|
|
|
- }, [currentPage, mutateBookmarkInfo]);
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ }, [mutateBookmarkInfo, onSelectedChild, currentPage?._id, mutateParentFolders, mutateChildFolders]);
|
|
|
|
|
|
|
|
const renderBookmarkSubMenuItem = useCallback(() => {
|
|
const renderBookmarkSubMenuItem = useCallback(() => {
|
|
|
return (
|
|
return (
|
|
@@ -114,9 +122,9 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
|
|
|
</DropdownItem>
|
|
</DropdownItem>
|
|
|
)}
|
|
)}
|
|
|
|
|
|
|
|
- { childFolders && childFolders?.length > 0 && (<DropdownItem divider />)}
|
|
|
|
|
|
|
+ { currentChildFolders && currentChildFolders?.length > 0 && (<DropdownItem divider />)}
|
|
|
|
|
|
|
|
- {childFolders?.map(child => (
|
|
|
|
|
|
|
+ {currentChildFolders?.map(child => (
|
|
|
<div key={child._id} >
|
|
<div key={child._id} >
|
|
|
|
|
|
|
|
<div
|
|
<div
|
|
@@ -125,8 +133,8 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
|
|
|
onClick={e => onClickChildMenuItemHandler(e, child)}>
|
|
onClick={e => onClickChildMenuItemHandler(e, child)}>
|
|
|
<BookmarkFolderMenuItem
|
|
<BookmarkFolderMenuItem
|
|
|
onSelectedChild={() => setSelectedItem(null)}
|
|
onSelectedChild={() => setSelectedItem(null)}
|
|
|
- isSelected={selectedItem === child._id}
|
|
|
|
|
item={child}
|
|
item={child}
|
|
|
|
|
+ isSelected={selectedItem === child._id}
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
@@ -135,7 +143,7 @@ const BookmarkFolderMenuItem = (props: Props):JSX.Element => {
|
|
|
)}
|
|
)}
|
|
|
</>
|
|
</>
|
|
|
);
|
|
);
|
|
|
- }, [childFolders, isCreateAction, onClickChildMenuItemHandler, onClickNewBookmarkFolder, onPressEnterHandlerForCreate, selectedItem, t]);
|
|
|
|
|
|
|
+ }, [childFolders, currentChildFolders, isCreateAction, onClickChildMenuItemHandler, onClickNewBookmarkFolder, onPressEnterHandlerForCreate, selectedItem, t]);
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
<UncontrolledDropdown
|
|
<UncontrolledDropdown
|