import type { HourlyBucket } from "../../../shared/api/client"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "../../../shared/ui"; interface ActivityChartProps { hourly: HourlyBucket[]; loading: boolean; } export function ActivityChart({ hourly, loading }: ActivityChartProps) { if (loading && !hourly?.length) { return ; } if (!hourly?.length) { return ; } const data = hourly.map((b) => { const utcHour = parseInt(b.hour.slice(11, 13), 10); const jakartaHour = (utcHour + 7) % 24; return { hour: `${String(jakartaHour).padStart(2, "0")}:00`, clean: b.clean, warned: 0, flagged: b.flagged, error: b.error, total: b.count, }; }); return ( Aktivitas per Jam Distribusi pesan per jam berdasarkan status moderasi.
Clean Warned Flagged Error
{data.map((bucket) => { const total = Math.max(bucket.total, 1); const clean = bucket.clean / total; const warned = bucket.warned / total; const flagged = bucket.flagged / total; const error = bucket.error / total; return (
{bucket.hour} {bucket.total} pesan
); })}
); } function LoadingBox() { return ( Memuat data... ); } function EmptyBox({ text }: { text: string }) { return ( {text} ); }