import React from 'react'; import { Medication, Dose, DoseStatus } from '../../types'; import { ClockIcon, CheckCircleIcon, XCircleIcon, InfoIcon, getMedicationIcon, ZzzIcon, } from '../icons/Icons'; interface DoseCardProps { dose: Dose & { takenAt?: string }; medication: Medication; status: DoseStatus; onToggleDose: (doseId: string) => void; onSnooze: (doseId: string) => void; snoozedUntil?: Date; } const statusStyles = { [DoseStatus.UPCOMING]: { bg: 'bg-white dark:bg-slate-800', icon: , text: 'text-slate-500 dark:text-slate-400', button: 'border-indigo-600 text-indigo-600 hover:bg-indigo-600 hover:text-white dark:text-indigo-400 dark:border-indigo-400 dark:hover:bg-indigo-400 dark:hover:text-white', buttonText: 'Take', ring: 'hover:ring-indigo-300 dark:hover:ring-indigo-500', }, [DoseStatus.TAKEN]: { bg: 'bg-green-50 dark:bg-green-900/20', icon: ( ), text: 'text-green-700 dark:text-green-400', button: 'border-green-500 text-green-500 hover:bg-green-500 hover:text-white dark:text-green-400 dark:border-green-400 dark:hover:bg-green-400 dark:hover:text-slate-900', buttonText: 'Untake', ring: '', }, [DoseStatus.MISSED]: { bg: 'bg-red-50 dark:bg-red-900/20', icon: , text: 'text-red-700 dark:text-red-400', button: 'border-red-500 text-red-500 hover:bg-red-500 hover:text-white dark:text-red-400 dark:border-red-400 dark:hover:bg-red-400 dark:hover:text-slate-900', buttonText: 'Take Now', ring: '', }, [DoseStatus.SNOOZED]: { bg: 'bg-amber-50 dark:bg-amber-900/20', icon: , text: 'text-amber-700 dark:text-amber-400', button: 'border-indigo-600 text-indigo-600 hover:bg-indigo-600 hover:text-white dark:text-indigo-400 dark:border-indigo-400 dark:hover:bg-indigo-400 dark:hover:text-white', buttonText: 'Take', ring: '', }, }; const DoseCard: React.FC = ({ dose, medication, status, onToggleDose, onSnooze, snoozedUntil, }) => { const styles = statusStyles[status]; const timeString = dose.scheduledTime.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', }); const takenTimeString = dose.takenAt ? new Date(dose.takenAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', }) : ''; const snoozedTimeString = snoozedUntil ? snoozedUntil.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', }) : ''; const MedicationIcon = getMedicationIcon(medication.icon); return (
  • {medication.name}

    {medication.dosage}

    {styles.icon}
    {timeString}
    {status === DoseStatus.SNOOZED && (

    Snoozed until {snoozedTimeString}

    )} {status === DoseStatus.TAKEN && (

    Taken at {takenTimeString}

    )} {medication.notes && (

    {medication.notes}

    )}
    {status === DoseStatus.UPCOMING && ( )}
  • ); }; export default DoseCard;