"use client"; import { useCallback, useEffect, useRef, useState } from "react"; import { useRouter } from "next/navigation"; import { useTranslation } from "react-i18next"; import { SidebarShell } from "@/components/sidebar/SidebarShell"; import { LogoutButton } from "@/components/auth/LogoutButton"; import { AdminLink } from "@/components/auth/AdminLink"; import { ProfileLink } from "@/components/auth/ProfileLink"; import { useAppShell } from "@/context/AppShellContext"; import { deleteSession, listSessions, updateSessionTitle, type SessionSummary, } from "@/lib/session-api"; export default function UtilitySidebar() { const { t } = useTranslation(); const router = useRouter(); const { activeSessionId, setActiveSessionId } = useAppShell(); const [sessions, setSessions] = useState([]); const [loadingSessions, setLoadingSessions] = useState(false); const hasLoadedSessionsRef = useRef(false); const refreshSessions = useCallback(async () => { if (!hasLoadedSessionsRef.current) { setLoadingSessions(true); } try { setSessions(await listSessions(50, 0, { force: true })); hasLoadedSessionsRef.current = true; } catch (error) { console.error("Failed to load sessions", error); } finally { setLoadingSessions(false); } }, []); useEffect(() => { void refreshSessions(); }, [refreshSessions]); const handleSelectSession = useCallback( async (sessionId: string) => { setActiveSessionId(sessionId); router.push(`/home/${sessionId}`); }, [router, setActiveSessionId], ); const handleRenameSession = useCallback( async (sessionId: string, title: string) => { const updated = await updateSessionTitle(sessionId, title); setSessions((prev) => prev.map((session) => session.session_id === sessionId ? { ...session, title: updated.title, updated_at: updated.updated_at, } : session, ), ); }, [], ); const handleDeleteSession = useCallback( async (sessionId: string) => { if (!window.confirm(t("Delete this chat history?"))) return; await deleteSession(sessionId); setSessions((prev) => prev.filter((session) => session.session_id !== sessionId), ); if (activeSessionId === sessionId) { setActiveSessionId(null); } }, [activeSessionId, setActiveSessionId, t], ); return ( setActiveSessionId(null)} onSelectSession={handleSelectSession} onRenameSession={handleRenameSession} onDeleteSession={handleDeleteSession} footerSlot={(collapsed) => ( <> )} /> ); }