import { useQuery } from '../lib/hooks'; import { num } from '../lib/format'; import { Banner, Card, EmptyRow, Loading, PageHead, TableWrap, Tiles } from '../components/ui'; import type { ViewsReport } from '../api/types'; function change(today: number, previous: number): string { if (previous === 0) return today > 0 ? 'new this week' : 'no change'; const amount = Math.round(((today - previous) / previous) * 100); return `${amount > 0 ? '+' : ''}${amount}% vs last week`; } export function ViewsPage() { const { data, error, loading } = useQuery('/admin/api/views', { pollMs: 60_000 }); const daily = data?.daily ?? []; const hourly = data?.hourly ?? []; return ( <> {loading ? : ( <> {daily.length === 0 ? No home-screen visits yet. : daily.map((row) => )}
DayVisitsViewers
{row.label}{num(row.visits)}{num(row.viewers)}
{hourly.length === 0 ? No home-screen visits yet today. : hourly.map((row) => )}
HourVisitsViewers
{row.label}{num(row.visits)}{num(row.viewers)}
)} ); }