// Schedule & Intake Log — slot-based, collapsed by default const { TODAY_INTAKE: INTAKE_SEED, MED: MED_S, REGIMENS: REGS_S } = window.MESHI; const SchedulePage = () => { const [intake, setIntake] = useState(INTAKE_SEED); const [day, setDay] = useState(5); const [expanded, setExpanded] = useState(null); // slot time const weekDays = ['Mon 13', 'Tue 14', 'Wed 15', 'Thu 16', 'Fri 17', 'Sat 18', 'Sun 19']; const adherence = [1.0, 1.0, 1.0, 0.88, 1.0, 0.50, 0.0]; const toggle = (id) => setIntake(intake.map(i => i.id === id ? { ...i, status: i.status === 'taken' ? 'upcoming' : 'taken', takenAt: '21:04' } : i)); const markSlot = (time) => setIntake(intake.map(i => i.scheduled === time ? { ...i, status: 'taken', takenAt: time } : i)); // Group by scheduled time const slots = [ { time: '08:00', label: 'Morning', icon: 'sun' }, { time: '21:00', label: 'Evening', icon: 'moon' }, ].map(s => { const items = intake.filter(i => i.scheduled === s.time); const done = items.filter(i => i.status === 'taken').length; return { ...s, items, done, total: items.length, complete: done === items.length && items.length > 0 }; }); const totalDone = intake.filter(i => i.status === 'taken').length; return (
{/* Week strip — adherence heatmap */}
This week
{Math.round(adherence.reduce((a,b)=>a+b,0)/adherence.length*100)}% adherence
{weekDays.map((d, i) => { const isToday = i === day; const a = adherence[i]; return ( ); })}
Saturday, April 18
{totalDone} of {intake.length} doses · 18:30 now
{slots.map(slot => { const isOpen = expanded === slot.time; const now = 18.5; const slotHr = parseInt(slot.time); const status = slot.complete ? 'done' : slotHr < now ? 'overdue' : 'upcoming'; return (
}
{isOpen && (
{slot.items.map(i => { const m = MED_S[i.medId]; return ( ); })}
)}
); })}
Tap a slot to see individual medicines. Off-schedule doses logged separately.
Active regimens
{REGS_S.length} configured
{REGS_S.map(r => (
Aeri's {r.name}
{r.time} · {r.freq}
Active
{r.items.map(it => { const m = MED_S[it.medId]; return ( {m.name} ); })}
))}
); }; window.SchedulePage = SchedulePage;