"use client" import { Mail, Calendar, RefreshCw } from "lucide-react" import { cn } from "@/lib/utils" import { useThrottle } from "@/hooks/use-throttle" import { Button } from "@/components/ui/button" interface Message { id: string from_address?: string to_address?: string subject: string received_at?: number sent_at?: number } interface SharedMessageListProps { messages: Message[] selectedMessageId?: string | null onMessageSelect: (messageId: string) => void onLoadMore?: () => void onRefresh?: () => void loading?: boolean loadingMore?: boolean refreshing?: boolean hasMore?: boolean total?: number t: { received: string noMessages: string messageCount: string loading: string loadingMore: string } } export function SharedMessageList({ messages, selectedMessageId, onMessageSelect, onLoadMore, onRefresh, loading = false, loadingMore = false, refreshing = false, hasMore = false, total = 0, t, }: SharedMessageListProps) { const handleScroll = useThrottle((e: React.UIEvent) => { if (loadingMore || !hasMore || !onLoadMore) return const { scrollHeight, scrollTop, clientHeight } = e.currentTarget const threshold = clientHeight * 1.5 const remainingScroll = scrollHeight - scrollTop if (remainingScroll <= threshold) { onLoadMore() } }, 200) return (
{total > 0 ? `${total} ${t.messageCount}` : t.noMessages}
{loading ? (
{t.loading}
) : messages.length > 0 ? (
{messages.map((message) => (
onMessageSelect(message.id)} className={cn( "p-3 hover:bg-primary/5 cursor-pointer", selectedMessageId === message.id && "bg-primary/10" )} >

{message.subject}

{message.from_address || message.to_address || ""} {new Date( message.received_at || message.sent_at || 0 ).toLocaleString()}
))} {loadingMore && (
{t.loadingMore}
)}
) : (
{t.noMessages}
)}
) }