import { Link, useNavigate, useRouterState } from '@tanstack/react-router' import { useLeftPanel } from '@/hooks/useLeftPanel' import { cn } from '@/lib/utils' import { IconLayoutSidebar, IconDots, IconCirclePlusFilled, IconSettingsFilled, IconTrash, IconStar, IconMessageFilled, IconAppsFilled, IconX, IconSearch, IconClipboardSmileFilled, } from '@tabler/icons-react' import { route } from '@/constants/routes' import ThreadList from './ThreadList' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { useThreads } from '@/hooks/useThreads' import { useTranslation } from 'react-i18next' import { useMemo, useState } from 'react' import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { toast } from 'sonner' import { DownloadManagement } from './DownloadManegement' const mainMenus = [ { title: 'common.newChat', icon: IconCirclePlusFilled, route: route.home, }, { title: 'Assistant', icon: IconClipboardSmileFilled, route: route.assistant, }, { title: 'common.hub', icon: IconAppsFilled, route: route.hub, }, { title: 'common.settings', icon: IconSettingsFilled, route: route.settings.general, }, ] const LeftPanel = () => { const { open, setLeftPanel } = useLeftPanel() const { t } = useTranslation() const navigate = useNavigate() const [searchTerm, setSearchTerm] = useState('') const currentPath = useRouterState({ select: (state) => state.location.pathname, }) const { deleteAllThreads, unstarAllThreads, getFilteredThreads, threads } = useThreads() const filteredThreads = useMemo(() => { return getFilteredThreads(searchTerm) // eslint-disable-next-line react-hooks/exhaustive-deps }, [getFilteredThreads, searchTerm, threads]) // Memoize categorized threads based on filteredThreads const favoritedThreads = useMemo(() => { return filteredThreads.filter((t) => t.isFavorite) }, [filteredThreads]) const unFavoritedThreads = useMemo(() => { return filteredThreads.filter((t) => !t.isFavorite) }, [filteredThreads]) const [openDropdown, setOpenDropdown] = useState(false) return ( ) } export default LeftPanel