import { useEffect, useState } from 'react'; import { useStats } from '../../hooks/useStats'; import { formatMinutesAfter, getToday, getLocalOffsetFromReference } from '../../utils/time'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts'; interface WakeupBedtimeProps { from_date: string; to_date: string; wakeup_ref: string; bedtime_ref: string; } const BedtimePlot: React.FC = ({ from_date, to_date, wakeup_ref, bedtime_ref }) => { const { wakeupBedtime, isLoading } = useStats(from_date, to_date, '07:00', '20:00', wakeup_ref, bedtime_ref); const [chartData, setChartData] = useState<{ date: string; minutes: number; time: string }[]>([]); useEffect(() => { if (!wakeupBedtime?.days) { setChartData([]); return; } const data = wakeupBedtime.days.map((day) => { const daysAgo = Math.floor( (new Date(getToday()).getTime() - new Date(day.date).getTime()) / (1000 * 60 * 60 * 24) ); const offsetFromRef = day.bedtime_minutes !== null ? getLocalOffsetFromReference(day.bedtime_minutes, bedtime_ref) : 0; return { date: daysAgo === 0 ? 'Today' : `${daysAgo}d ago`, minutes: offsetFromRef, time: day.bedtime_minutes !== null ? formatMinutesAfter(offsetFromRef, bedtime_ref) : 'N/A', }; }).reverse(); setChartData(data); }, [wakeupBedtime, bedtime_ref]); if (isLoading) return
Loading plot...
; if (!chartData.length) { return
No data available for this period.
; } return (

Bedtime

formatMinutesAfter(value, bedtime_ref)} domain={['dataMin - 30', 'dataMax + 30']} /> [ value !== undefined ? formatMinutesAfter(value, bedtime_ref) : '', 'Bedtime', ] as any} labelFormatter={(label) => label} />
); }; export default BedtimePlot;