import { useState, useEffect, useCallback } from 'react'; import { api } from '../api'; const NAV_ITEMS = [ { id: 'chat', icon: 'πŸ’¬', label: 'Chat' }, ]; export default function Sidebar({ panel, onNavigate, connected, sessionId, onSessionChange }) { const [collapsed, setCollapsed] = useState(localStorage.getItem('agr_sidebar_collapsed') === 'true'); const [recentChats, setRecentChats] = useState([]); // Load recent chats from backend (cross-browser persistent) const loadSessions = useCallback(async () => { try { const data = await api.listSessions(); setRecentChats((data.sessions || []).map(s => ({ sessionId: s.id, title: s.title || s.id.slice(0, 8), time: s.updated_at || s.created_at, }))); } catch {} }, []); useEffect(() => { loadSessions(); }, [loadSessions]); // Refresh when ChatPanel signals a new message was sent useEffect(() => { const refresh = () => { loadSessions(); }; window.addEventListener('recent-chats-updated', refresh); return () => window.removeEventListener('recent-chats-updated', refresh); }, [loadSessions]); const toggle = () => { const next = !collapsed; setCollapsed(next); localStorage.setItem('agr_sidebar_collapsed', next); }; const openRecent = useCallback(async (chat) => { if (!chat.sessionId) return; onSessionChange(chat.sessionId); localStorage.setItem('agr_session_id', chat.sessionId); onNavigate('chat'); }, [onNavigate, onSessionChange]); const deleteRecent = async (e, idx) => { e.stopPropagation(); const chat = recentChats[idx]; if (!chat?.sessionId) return; try { await api.deleteSession(chat.sessionId); loadSessions(); } catch {} }; const clearAllRecent = async () => { if (!confirm('εˆ ι™€ε…¨ιƒ¨ζœ€θΏ‘ε―Ήθ―οΌŸζ­€ζ“δ½œδΈε―ζ’ε€γ€‚')) return; try { await api.deleteAllSessions(); setRecentChats([]); } catch {} }; return ( ); }