"use client"; import * as React from "react"; import { useQuery } from "@tanstack/react-query"; import type { ActivitySeries } from "@/types/analytics"; import { ResponsiveContainer, AreaChart, Area, XAxis, YAxis, Tooltip, CartesianGrid, Legend, } from "recharts"; async function fetchActivity( from?: string, to?: string, interval: "day" | "week" | "month" = "day", ): Promise { const url = new URL("/api/analytics/activity", window.location.origin); if (from) url.searchParams.set("from", from); if (to) url.searchParams.set("to", to); url.searchParams.set("interval", interval); const res = await fetch(url.toString(), { cache: "no-store" }); if (!res.ok) { const payload = await res.json().catch(() => ({})); throw new Error(payload?.message || `Failed to load activity (${res.status})`); } return (await res.json()) as ActivitySeries; } export function ActivityChart() { const q = useQuery({ queryKey: ["analytics", "activity", "day"], queryFn: () => fetchActivity(undefined, undefined, "day"), }); const data = q.data?.points.map((p) => ({ date: p.date.slice(0, 10), uploaded: p.uploaded ?? 0, modified: p.modified ?? 0, })) ?? []; return (
Activity
{q.isLoading ? (
Loading…
) : data.length === 0 ? (
No data
) : ( )}
); }