"use client"; import { useMemo } from "react"; import { useLocale } from "next-intl"; import { Area, AreaChart, CartesianGrid, Line, XAxis, YAxis } from "recharts"; import { ChartNoAxesCombined } from "lucide-react"; import { buildCreditsActivitySeries, calculateUsageActivityDomain, formatCredits, prioritizeRecentCreditTransactions, } from "@/lib/credits-activity"; import type { DashboardSnapshot } from "@/hooks/use-dashboard-snapshot"; import { ChartContainer, ChartLegend, ChartLegendContent, ChartTooltip, ChartTooltipContent, type ChartConfig, } from "@/components/ui/chart"; const chartConfig = { usage: { label: "Verbrauch", color: "hsl(var(--primary))", }, activity: { label: "Aktivität", color: "hsl(var(--accent-foreground))", }, available: { label: "Verfügbar", color: "hsl(var(--muted-foreground))", }, } satisfies ChartConfig; type CreditsActivityChartProps = { balance?: DashboardSnapshot["balance"]; recentTransactions?: DashboardSnapshot["recentTransactions"]; }; export function CreditsActivityChart({ balance, recentTransactions }: CreditsActivityChartProps) { const locale = useLocale(); const chartData = useMemo(() => { if (balance === undefined || recentTransactions === undefined) { return []; } const prioritized = prioritizeRecentCreditTransactions(recentTransactions, 40); return buildCreditsActivitySeries(prioritized, balance.available, locale, 7); }, [balance, recentTransactions, locale]); const usageDomain = useMemo( () => calculateUsageActivityDomain(chartData), [chartData], ); if (balance === undefined || recentTransactions === undefined) { return (
); } if (chartData.length === 0) { return (
Credits Verlauf

Noch keine verbrauchsrelevante Aktivität vorhanden.

); } return (
Credits Verlauf
Verfügbar: {formatCredits(balance.available, locale)}
formatCredits(Number(value), locale)} /> } /> } />
); }