import { Row, Grid, Text } from '@umami/react-zen'; import { format, startOfDay, addHours } from 'date-fns'; import { useLocale, useMessages, useWeeklyTrafficQuery } from '@/components/hooks'; import { LoadingPanel } from '@/components/common/LoadingPanel'; import { getDayOfWeekAsDate } from '@/lib/date'; import { Focusable, Tooltip, TooltipTrigger } from '@umami/react-zen'; export function WeeklyTraffic({ websiteId }: { websiteId: string }) { const { data, isLoading, error } = useWeeklyTrafficQuery(websiteId); const { dateLocale } = useLocale(); const { labels, formatMessage } = useMessages(); const { weekStartsOn } = dateLocale.options; const daysOfWeek = Array(7) .fill(weekStartsOn) .map((d, i) => (d + i) % 7); const [, max = 1] = data ? data.reduce((arr: number[], hours: number[], index: number) => { const min = Math.min(...hours); const max = Math.max(...hours); if (index === 0) { return [min, max]; } if (min < arr[0]) { arr[0] = min; } if (max > arr[1]) { arr[1] = max; } return arr; }, []) : []; return ( {data && ( <>   {Array(24) .fill(null) .map((_, i) => { const label = format(addHours(startOfDay(new Date()), i), 'haaa', { locale: dateLocale, }); return ( {label} ); })} {daysOfWeek.map((index: number) => { const day = data[index]; return ( {format(getDayOfWeekAsDate(index), 'EEE', { locale: dateLocale })} {day?.map((count: number, j) => { const pct = max ? count / max : 0; return ( {`${formatMessage( labels.visitors, )}: ${count}`} ); })} ); })} )} ); }