"use client"; import { useCallback, useEffect, useMemo, useState } from "react"; import Link from "next/link"; import { usePathname } from "next/navigation"; import SidebarItem from "@/components/shared/sidebar/SidebarItem"; import { Button } from "@/components/ui/button"; import { Collapsible, CollapsibleContent, CollapsibleTriggerTriangle, } from "@/components/ui/collapsible"; import { useTranslation } from "@/lib/i18n/client"; import { cn } from "@/lib/utils"; import { MoreHorizontal, Plus } from "lucide-react"; import type { ZBookmarkList } from "@karakeep/shared/types/lists"; import { augmentBookmarkListsWithInitialData, useBookmarkLists, } from "@karakeep/shared-react/hooks/lists"; import { ZBookmarkListTreeNode } from "@karakeep/shared/utils/listUtils"; import { CollapsibleBookmarkLists } from "../lists/CollapsibleBookmarkLists"; import { EditListModal } from "../lists/EditListModal"; import { ListOptions } from "../lists/ListOptions"; import { InvitationNotificationBadge } from "./InvitationNotificationBadge"; export default function AllLists({ initialData, }: { initialData: { lists: ZBookmarkList[] }; }) { const { t } = useTranslation(); const pathName = usePathname(); const isNodeOpen = useCallback( (node: ZBookmarkListTreeNode) => pathName.includes(node.item.id), [pathName], ); const [selectedListId, setSelectedListId] = useState(null); // Fetch live lists data const { data: listsData } = useBookmarkLists(undefined, { initialData: { lists: initialData.lists }, }); const lists = augmentBookmarkListsWithInitialData( listsData, initialData.lists, ); // Check if any shared list is currently being viewed const isViewingSharedList = useMemo(() => { return lists.data.some( (list) => list.userRole !== "owner" && pathName.includes(list.id), ); }, [lists.data, pathName]); // Check if there are any shared lists const hasSharedLists = useMemo(() => { return lists.data.some((list) => list.userRole !== "owner"); }, [lists.data]); const [sharedListsOpen, setSharedListsOpen] = useState(isViewingSharedList); // Auto-open shared lists if viewing one useEffect(() => { if (isViewingSharedList && !sharedListsOpen) { setSharedListsOpen(true); } }, [isViewingSharedList, sharedListsOpen]); return ( ); }