'use client'; import { useState, useEffect, useCallback } from 'react'; import { getChatHistory, type ChatMessage } from '@/lib/copilot'; interface ChatHistoryProps { onSelectSession: (sessionId: string) => void; onClose: () => void; } interface SessionGroup { sessionId: string; firstMessage: string; messageCount: number; lastActivity: string; } export function ChatHistory({ onSelectSession, onClose }: ChatHistoryProps) { const [sessions, setSessions] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const loadHistory = async () => { setLoading(true); setError(null); try { const result = await getChatHistory(1, 100); const sessionMap = new Map(); for (const msg of result.items) { const existing = sessionMap.get(msg.session_id) || []; existing.push(msg); sessionMap.set(msg.session_id, existing); } const groups: SessionGroup[] = []; for (const [sessionId, msgs] of sessionMap) { const userMsg = msgs.find((m) => m.role === 'user'); groups.push({ sessionId, firstMessage: userMsg?.content || 'Unbekannt', messageCount: msgs.length, lastActivity: msgs[msgs.length - 1]?.created_at || '', }); } groups.sort((a, b) => b.lastActivity.localeCompare(a.lastActivity)); setSessions(groups); } catch (err) { setError(err instanceof Error ? err.message : 'Verlauf konnte nicht geladen werden'); } finally { setLoading(false); } }; loadHistory(); }, []); const handleSelect = useCallback((sessionId: string) => { onSelectSession(sessionId); }, [onSelectSession]); return (

Konversationen

{loading &&

Wird geladen...

} {error &&

{error}

} {!loading && !error && sessions.length === 0 && (

Keine Konversationen vorhanden.

)} {!loading && !error && sessions.length > 0 && (
    {sessions.map((session) => (
  • ))}
)}
); }