import { useMemo } from 'react'; import { Bell } from 'lucide-react'; import { parseISO, isPast, isToday, compareAsc } from 'date-fns'; import type { Reminder } from '@/types'; import { EmptyState } from '@/components/ui/empty-state'; import ReminderItem from './ReminderItem'; interface ReminderListProps { reminders: Reminder[]; onEdit: (reminder: Reminder) => void; onAdd: () => void; } interface ReminderGroup { key: string; label: string; reminders: Reminder[]; } function sortByRemindAt(a: Reminder, b: Reminder): number { if (!a.remind_at && !b.remind_at) return 0; if (!a.remind_at) return 1; if (!b.remind_at) return -1; return compareAsc(parseISO(a.remind_at), parseISO(b.remind_at)); } export default function ReminderList({ reminders, onEdit, onAdd }: ReminderListProps) { const groups = useMemo(() => { const overdue: Reminder[] = []; const today: Reminder[] = []; const upcoming: Reminder[] = []; const noDate: Reminder[] = []; const dismissed: Reminder[] = []; for (const reminder of reminders) { if (reminder.is_dismissed) { dismissed.push(reminder); continue; } if (!reminder.remind_at) { noDate.push(reminder); continue; } const date = parseISO(reminder.remind_at); if (isToday(date)) { today.push(reminder); } else if (isPast(date)) { overdue.push(reminder); } else { upcoming.push(reminder); } } overdue.sort(sortByRemindAt); today.sort(sortByRemindAt); upcoming.sort(sortByRemindAt); const result: ReminderGroup[] = []; if (overdue.length > 0) result.push({ key: 'overdue', label: 'Overdue', reminders: overdue }); if (today.length > 0) result.push({ key: 'today', label: 'Today', reminders: today }); if (upcoming.length > 0) result.push({ key: 'upcoming', label: 'Upcoming', reminders: upcoming }); if (noDate.length > 0) result.push({ key: 'no-date', label: 'No Date', reminders: noDate }); if (dismissed.length > 0) result.push({ key: 'dismissed', label: 'Dismissed', reminders: dismissed }); return result; }, [reminders]); if (reminders.length === 0) { return ( ); } if (groups.length === 1) { return (
{groups[0].reminders.map((reminder) => ( ))}
); } return (
{groups.map((group) => (

{group.label} ({group.reminders.length})

{group.reminders.map((reminder) => ( ))}
))}
); }