import { useState, useEffect } from 'react'; import { History, RefreshCw, ChevronDown, Smile, Frown, Filter } from 'lucide-react'; import { useHistory } from '../hooks/useHistory'; import type { HistoryItem } from '../types'; import { formatConfidence, formatRelativeTime, truncateText } from '../utils/formatters'; type SentimentFilter = 'all' | 'POSITIVE' | 'NEGATIVE'; interface HistoryListProps { refreshTrigger?: number; } const HistoryList = ({ refreshTrigger }: HistoryListProps) => { const { history, total, isLoading, error, refresh, loadMore } = useHistory(10); const [filter, setFilter] = useState('all'); const [expandedId, setExpandedId] = useState(null); // Refresh when trigger changes useEffect(() => { if (refreshTrigger) { refresh(); } }, [refreshTrigger, refresh]); const filteredHistory = filter === 'all' ? history : history.filter(item => item.sentiment === filter); const handleItemClick = (id: number) => { setExpandedId(expandedId === id ? null : id); }; if (error) { return (

{error}

); } return (
{/* Header */}

Recent Analyses

{total > 0 && ( {total} )}
{/* Filter */}
{/* Refresh Button */}
{/* List */}
{filteredHistory.length === 0 ? (

No analysis history yet

Analyze your first text above!

) : ( filteredHistory.map((item: HistoryItem) => ( handleItemClick(item.id)} /> )) )}
{/* Load More */} {history.length < total && (
)}
); }; interface HistoryItemRowProps { item: HistoryItem; isExpanded: boolean; onClick: () => void; } const HistoryItemRow = ({ item, isExpanded, onClick }: HistoryItemRowProps) => { const isPositive = item.sentiment === 'POSITIVE'; return (
{/* Sentiment Icon */}
{isPositive ? ( ) : ( )}
{/* Content */}

{isExpanded ? item.text : truncateText(item.text, 60)}

{item.sentiment} {formatConfidence(item.confidence)} {formatRelativeTime(item.created_at)}
); }; export default HistoryList;