'use client'; /** * Income Dashboard — Revenue trends, territory performance, and income sources. * * Displays: * - 3 KPI cards: gross income, net income, record count * - Line chart: income over time (monthly) * - Pie chart: income by territory * - Bar chart: income by media type * - Bar chart: income by source (PRO, DSP, sub-publisher) * - Grouped bar chart: gross vs net amounts by month * - Horizontal bar chart: top 10 Works by income * - DateRangeFilter at the top * * Requirements: 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8, 9.9 */ import { useIncomeData } from '@/lib/api/queries'; import { useTranslation } from '@/lib/hooks/useTranslation'; import { formatNumber } from '@/lib/utils/format'; import { useCurrencyFormatter, useCurrencyAxisFormatter } from '@/lib/hooks/useCurrencyFormatter'; import { chartColors } from '@/lib/constants/theme'; import DateRangeFilter from '@/components/dashboard/DateRangeFilter'; import KpiGrid from '@/components/dashboard/KpiGrid'; import KpiCard from '@/components/dashboard/KpiCard'; import ChartGrid from '@/components/dashboard/ChartGrid'; import ChartCard from '@/components/charts/ChartCard'; import LineChartWidget from '@/components/charts/LineChartWidget'; import PieChartWidget from '@/components/charts/PieChartWidget'; import BarChartWidget from '@/components/charts/BarChartWidget'; export default function IncomePage() { const { data, isLoading } = useIncomeData(); const t = useTranslation(); const fmtCurrency = useCurrencyFormatter(); const fmtAxis = useCurrencyAxisFormatter(); if (isLoading || !data) { return (
{t.dashboard.loading}