import { AmountDisplay } from '@/components/ui/amount-display'; import { ChartConfig, ChartContainer } from '@/components/ui/chart'; import { ChangeDataPoint } from '@/lib/chart-calculations'; import { cn } from '@/lib/utils'; import { Bar, BarChart, Cell, ReferenceLine, Tooltip, XAxis, YAxis, } from 'recharts'; interface MoMChartProps { data: ChangeDataPoint[]; currencyCode: string; xAxisFormatter?: (value: string) => string; className?: string; } const chartConfig: ChartConfig = { change: { label: 'Change', color: 'var(--color-chart-1)', }, }; interface TooltipPayloadItem { payload?: { month?: string; value?: number; change?: number | null; }; } interface CustomTooltipProps { active?: boolean; payload?: TooltipPayloadItem[]; currencyCode: string; } function CustomTooltip({ active, payload, currencyCode }: CustomTooltipProps) { if (!active || !payload?.length) return null; const data = payload[0].payload; if (!data) return null; const change = data.change; return (
{data.month}
Change 0 && 'text-emerald-600', change !== null && change < 0 && 'text-red-600', )} >
); } export function MoMChart({ data, currencyCode, xAxisFormatter, className, }: MoMChartProps) { const chartData = data.map((point) => ({ ...point, displayValue: point.change, })); return ( { return new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short', }).format(value / 100); }} width={50} /> } cursor={{ fill: 'var(--color-muted)', opacity: 0.3 }} /> {chartData.map((entry, index) => { const value = entry.displayValue; let fill = 'var(--color-muted)'; if (value !== null) { fill = value >= 0 ? 'var(--color-chart-2)' : 'var(--color-chart-5)'; } return ; })} ); }