import { useEffect, useState } from 'react'; import { Link, useNavigate, useParams } from 'react-router-dom'; import { Archive, BarChart3, LogOut, MoreHorizontal, Pencil, Pin, PinOff, Plus, Search, Settings, ShieldCheck, Trash2, X } from 'lucide-react'; import * as DM from '@radix-ui/react-dropdown-menu'; import { useChat } from '@/stores/chat'; import { useAuth } from '@/stores/auth'; import { useUI } from '@/stores/ui'; import { Logo } from '@/components/ui/logo'; import { cn } from '@/lib/cn'; import { fmtDate } from '@/lib/format'; export function Sidebar({ onClose }: { onClose?: () => void }) { const { id } = useParams(); const nav = useNavigate(); const { conversations, loadConversations, updateConversation, deleteConversation } = useChat(); const user = useAuth((s) => s.user); const logout = useAuth((s) => s.logout); const { course, setSettings } = useUI(); const [q, setQ] = useState(''); const [renaming, setRenaming] = useState(null); const [draft, setDraft] = useState(''); useEffect(() => { const t = setTimeout(() => loadConversations(q || undefined).catch(() => undefined), q ? 250 : 0); return () => clearTimeout(t); }, [q, loadConversations]); const go = (path: string) => { nav(path); onClose?.(); }; const rename = async (cid: string) => { const title = draft.trim(); setRenaming(null); if (title) await updateConversation(cid, { title }); }; const remove = async (cid: string) => { if (!confirm('Supprimer définitivement cette conversation ?')) return; await deleteConversation(cid); if (id === cid) go('/'); }; return ( ); }