import React, { useState, useEffect, useRef } from 'react'; import { Medication, Frequency } from '../../types'; import { medicationIcons } from '../icons/Icons'; interface EditMedicationModalProps { isOpen: boolean; onClose: () => void; medication: Medication | null; onUpdate: (medication: Medication) => Promise; } const EditMedicationModal: React.FC = ({ isOpen, onClose, medication, onUpdate, }) => { const [name, setName] = useState(''); const [dosage, setDosage] = useState(''); const [frequency, setFrequency] = useState(Frequency.Daily); const [hoursBetween, setHoursBetween] = useState(8); const [startTime, setStartTime] = useState('09:00'); const [notes, setNotes] = useState(''); const [icon, setIcon] = useState('pill'); const [isSaving, setIsSaving] = useState(false); const modalRef = useRef(null); const nameInputRef = useRef(null); useEffect(() => { if (medication) { setName(medication.name); setDosage(medication.dosage); setFrequency(medication.frequency); setHoursBetween(medication.hoursBetween || 8); setStartTime(medication.startTime); setNotes(medication.notes || ''); setIcon(medication.icon || 'pill'); setIsSaving(false); } if (isOpen) { setTimeout(() => nameInputRef.current?.focus(), 100); } }, [medication, isOpen]); useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape' && !isSaving) onClose(); }; if (isOpen) { window.addEventListener('keydown', handleKeyDown); } return () => window.removeEventListener('keydown', handleKeyDown); }, [isOpen, onClose, isSaving]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!medication || !name || !dosage || !startTime || isSaving) { return; } setIsSaving(true); try { await onUpdate({ ...medication, name, dosage, frequency, hoursBetween: frequency === Frequency.EveryXHours ? hoursBetween : undefined, startTime, notes, icon, }); } catch (error) { console.error('Failed to update medication', error); alert('There was an error updating your medication. Please try again.'); setIsSaving(false); } }; if (!isOpen) return null; return (

Edit Medication

setName(e.target.value)} required ref={nameInputRef} className='mt-1 block w-full px-3 py-2 border border-slate-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm bg-white dark:bg-slate-700 dark:border-slate-600 dark:placeholder-slate-400 dark:text-white' />
setDosage(e.target.value)} required className='mt-1 block w-full px-3 py-2 border border-slate-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm bg-white dark:bg-slate-700 dark:border-slate-600 dark:placeholder-slate-400 dark:text-white' />
{frequency === Frequency.EveryXHours && (
setHoursBetween(parseInt(e.target.value, 10))} min='1' max='23' className='mt-1 block w-full px-3 py-2 border border-slate-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm bg-white dark:bg-slate-700 dark:border-slate-600 dark:placeholder-slate-400 dark:text-white' />
)}
setStartTime(e.target.value)} required className='mt-1 block w-full px-3 py-2 border border-slate-300 rounded-md shadow-sm focus:outline-none focus:ring-indigo-500 focus:border-indigo-500 sm:text-sm bg-white dark:bg-slate-700 dark:border-slate-600 dark:placeholder-slate-400 dark:text-white' />
{Object.entries(medicationIcons).map(([key, IconComponent]) => ( ))}
); }; const Spinner = () => ( ); export default EditMedicationModal;