import { useMemo, useState } from 'react'; import { Link } from 'react-router'; import { Plus, MessageSquare, Trash2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/Card'; import { useSessions, useOpenCodeSessions } from 'widgets/ChatHistory'; type Filter = 'all' | 'claude' | 'opencode'; export const SessionList = () => { const [filter, setFilter] = useState('all'); const claude = useSessions(); const opencode = useOpenCodeSessions(); const merged = useMemo( () => [...claude.sessions, ...opencode.sessions].sort((a, b) => b.createdAt - a.createdAt), [claude.sessions, opencode.sessions], ); const filtered = filter === 'all' ? merged : merged.filter((s) => s.provider === filter); const handleDelete = (id: string, provider: 'claude' | 'opencode') => { if (provider === 'claude') claude.deleteSession(id); else opencode.deleteSession(id); }; return (
{/* Header */}

Sessions

{/* Radio filter */}
{(['all', 'claude', 'opencode'] as const).map((value) => ( ))}
{/* Session list */}
{filtered.length === 0 && (
No sessions yet. Start a new chat!
)} {filtered.map((session) => (
{session.title}
{new Date(session.createdAt).toLocaleDateString(undefined, { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', })} {session.provider === 'claude' ? 'Claude' : 'OpenCode'} {session.id.slice(0, 8)}
))}
); };