"use client"; import { RiLineChartLine } from "@remixicon/react"; import { Bar, BarChart, CartesianGrid, XAxis } from "recharts"; import { CardContent } from "@/components/ui/card"; import { type ChartConfig, ChartContainer, ChartTooltip, } from "@/components/ui/chart"; import { WidgetEmptyState } from "@/components/widget-empty-state"; import type { IncomeExpenseBalanceData } from "@/lib/dashboard/income-expense-balance"; type IncomeExpenseBalanceWidgetProps = { data: IncomeExpenseBalanceData; }; const chartConfig = { receita: { label: "Receita", color: "var(--chart-1)", }, despesa: { label: "Despesa", color: "var(--chart-2)", }, balanco: { label: "Balanço", color: "var(--chart-3)", }, } satisfies ChartConfig; export function IncomeExpenseBalanceWidget({ data, }: IncomeExpenseBalanceWidgetProps) { const chartData = data.months.map((month) => ({ month: month.monthLabel, receita: month.income, despesa: month.expense, balanco: month.balance, })); // Verifica se todos os valores são zero const isEmpty = chartData.every( (item) => item.receita === 0 && item.despesa === 0 && item.balanco === 0, ); if (isEmpty) { return ( } title="Nenhuma movimentação financeira no período" description="Registre receitas e despesas para visualizar o balanço mensal." /> ); } return ( { if (!active || !payload || payload.length === 0) { return null; } const formatCurrency = (value: number) => { return new Intl.NumberFormat("pt-BR", { style: "currency", currency: "BRL", minimumFractionDigits: 2, maximumFractionDigits: 2, }).format(value); }; return ( {payload.map((entry) => { const config = chartConfig[entry.dataKey as keyof typeof chartConfig]; const value = entry.value as number; return ( {config?.label}: {formatCurrency(value)} ); })} ); }} cursor={{ fill: "hsl(var(--muted))", opacity: 0.3 }} /> {chartConfig.receita.label} {chartConfig.despesa.label} {chartConfig.balanco.label} ); }