"use client" import { useCallback, useEffect, useRef, useState } from "react" import { ChevronsDownUp, ChevronsUpDown, Crosshair, EllipsisVertical, } from "lucide-react" import { useTranslations } from "next-intl" import { useSidebarContext } from "@/contexts/sidebar-context" import { SidebarConversationList, type SidebarConversationListHandle, } from "@/components/conversations/sidebar-conversation-list" import { Button } from "@/components/ui/button" import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuLabel, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { useIsMobile } from "@/hooks/use-mobile" import { loadShowCompleted, loadSortMode, saveShowCompleted, saveSortMode, type SidebarSortMode, } from "@/lib/sidebar-view-mode-storage" export function Sidebar() { const t = useTranslations("Folder.sidebar") const { isOpen, toggle } = useSidebarContext() const isMobile = useIsMobile() const listRef = useRef(null) const [showCompleted, setShowCompleted] = useState(false) const [sortMode, setSortMode] = useState("created") const [allExpanded, setAllExpanded] = useState(true) useEffect(() => { // Hydrate from localStorage after mount to keep SSR/CSR markup consistent. // eslint-disable-next-line react-hooks/set-state-in-effect setShowCompleted(loadShowCompleted()) setSortMode(loadSortMode()) }, []) const handleSetShowCompleted = useCallback((value: boolean) => { setShowCompleted(value) saveShowCompleted(value) }, []) const handleSetSortMode = useCallback((value: string) => { const mode: SidebarSortMode = value === "updated" ? "updated" : "created" setSortMode(mode) saveSortMode(mode) }, []) const handleToggleExpandAll = useCallback(() => { if (allExpanded) { listRef.current?.collapseAll() setAllExpanded(false) } else { listRef.current?.expandAll() setAllExpanded(true) } }, [allExpanded]) if (!isOpen) return null return ( ) }