import { Edit, Trash, Clock, CheckCircle } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { format } from 'date-fns'; import { parseDateForDisplay } from '@/lib/dateUtils'; import type { TimelineEvent } from '@/types/timeline'; interface TimelineEventCardProps { event: TimelineEvent; onEdit?: (event: TimelineEvent) => void; onDelete?: (eventId: string) => void; canEdit: boolean; canDelete: boolean; isPending?: boolean; } // ⚠️ IMPORTANT: Use parseDateForDisplay to prevent timezone shifts // YYYY-MM-DD strings must be interpreted as local dates, not UTC const formatEventDate = (date: string, precision: string = 'day') => { const dateObj = parseDateForDisplay(date); switch (precision) { case 'year': return format(dateObj, 'yyyy'); case 'month': return format(dateObj, 'MMMM yyyy'); case 'day': default: return format(dateObj, 'MMMM d, yyyy'); } }; const getEventTypeLabel = (type: string): string => { return type.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1) ).join(' '); }; export function TimelineEventCard({ event, onEdit, onDelete, canEdit, canDelete, isPending = false }: TimelineEventCardProps) { return (
{getEventTypeLabel(event.event_type)} {isPending && ( Pending Approval )} {!isPending && ( Approved )}

{event.title}

{formatEventDate(event.event_date, event.event_date_precision)}

{event.description && (

{event.description}

)} {(event.from_value || event.to_value) && (
{event.from_value && From: {event.from_value}} {event.from_value && event.to_value && } {event.to_value && To: {event.to_value}}
)}
{(canEdit || canDelete) && (
{canEdit && ( )} {canDelete && ( )}
)}
); }