import { LinkButton } from '@/components/LinkButton' import { PostPreview } from '@/components/PostPreview' import type { BlockEventSummary, PostData } from '@/types' interface EventCardProps { event: BlockEventSummary post?: PostData | null } const STATUS_STYLE: Record = { 'in-progress': 'border-sky-500/50 bg-sky-500/10 text-sky-600 dark:text-sky-400', partial: 'border-amber-500/50 bg-amber-500/10 text-amber-600 dark:text-amber-400', complete: 'border-green-500/50 bg-green-500/10 text-green-600 dark:text-green-400', undone: 'border-violet-500/50 bg-violet-500/10 text-violet-600 dark:text-violet-400', empty: 'border-border bg-muted text-[var(--fo-text3)]', } const STATUS_LABEL: Record = { 'in-progress': 'In Progress', partial: 'Partial', complete: 'Complete', undone: 'Undone', empty: 'Empty', } function formatDateTime(iso: string): string { try { return new Date(iso).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit', }) } catch { return '' } } export function EventCard({ event, post }: EventCardProps) { const { rkey, record } = event const { stats, blockedDids, blockedRkeys, failedDids, pendingDids, createdAt, sourcePostUrl } = record const total = stats?.total ?? blockedDids.length + failedDids.length + pendingDids.length const completed = stats?.completed ?? blockedDids.length const failed = stats?.failed ?? failedDids.length const pending = pendingDids.length const isUndone = !!record.undoneAt || (total > 0 && completed === 0 && failed === 0 && pending === 0 && blockedRkeys.length === 0) const status = isUndone ? 'undone' : pending > 0 ? 'in-progress' : failed > 0 ? 'partial' : completed > 0 ? 'complete' : 'empty' return (
{/* Post preview + status badge */}
{post ? ( ) : (
{sourcePostUrl ? ( {sourcePostUrl} ) : ( Post unavailable )}
)}
{STATUS_LABEL[status]}
{/* Date */} {createdAt && (

{formatDateTime(createdAt)}

)}
{/* Stats + action row */}
{isUndone ? ( ↩ {(record.blockedDids?.length || total).toLocaleString()} previously blocked ) : ( <> ✓ {completed.toLocaleString()} {failed > 0 && ✗ {failed.toLocaleString()}} {pending > 0 && ⋯ {pending.toLocaleString()}} {completed === 0 && failed === 0 && pending === 0 && ( No blocks recorded )} )}
View details
) }