import { useMemo } from 'react'; import { useStats } from '../../hooks/useStats'; import { formatMinutes } from '../../utils/time'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, } from 'recharts'; interface DailySummaryProps { from_date: string; to_date: string; day_start: string; day_end: string; } interface ChartDataItem { date: string; daySleep: number; nightSleep: number; total: number; } interface AvgStats { avgTotal: number; avgDay: number; avgNight: number; count: number; } const DailySummary: React.FC = ({ from_date, to_date, day_start, day_end }) => { const { dailySummary, isLoading } = useStats(from_date, to_date, day_start, day_end); const { chartData, avgStats } = useMemo<{ chartData: ChartDataItem[]; avgStats: AvgStats }>(() => { if (!dailySummary?.days) { return { chartData: [] as ChartDataItem[], avgStats: { avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 } }; } const data = dailySummary.days.map((day) => ({ date: day.date, daySleep: day.day_minutes / 60, nightSleep: day.night_minutes / 60, total: day.total_minutes / 60, })).reverse(); let averages = { avgTotal: 0, avgDay: 0, avgNight: 0, count: 0 }; if (data.length) { const totals = data.reduce( (acc, d) => ({ total: acc.total + d.total, day: acc.day + d.daySleep, night: acc.night + d.nightSleep, }), { total: 0, day: 0, night: 0 } ); const count = data.length; averages = { avgTotal: totals.total / count, avgDay: totals.day / count, avgNight: totals.night / count, count, }; } return { chartData: data, avgStats: averages }; }, [dailySummary]); if (isLoading) return
Loading summary...
; if (!chartData.length) { return
No data available for this period.
; } return (

Daily Summary

`${Math.round(value)}h`} tick={{ fontSize: 12 }} tickLine={false} /> [ formatMinutes(Math.round((value ?? 0) * 60)), name === 'daySleep' ? 'Day' : 'Night', ]} />
Avg Total
{formatMinutes(Math.round(avgStats.avgTotal * 60))}
Avg Day
{formatMinutes(Math.round(avgStats.avgDay * 60))}
Avg Night
{formatMinutes(Math.round(avgStats.avgNight * 60))}
); }; export default DailySummary;