'use client' import { useMemo } from 'react' import { useTranslations } from 'next-intl' import { PieChart, Pie, Cell, Tooltip, ResponsiveContainer } from 'recharts' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { formatCurrency } from '@/lib/utils' interface KPIExpenseMixChartProps { composition: { class4: number class5: number class6: number class7: number } } const SEGMENT_COLORS = [ 'hsl(var(--chart-1))', 'hsl(var(--chart-3))', 'hsl(var(--chart-2))', 'hsl(var(--chart-4))', ] export function KPIExpenseMixChart({ composition }: KPIExpenseMixChartProps) { const t = useTranslations('kpi') const { class4, class5, class6, class7 } = composition const chartData = useMemo( () => [ { name: t('expense_mix_class4'), value: class4 }, { name: t('expense_mix_class5'), value: class5 }, { name: t('expense_mix_class6'), value: class6 }, { name: t('expense_mix_class7'), value: class7 }, ].filter((s) => s.value > 0), [class4, class5, class6, class7, t] ) const total = class4 + class5 + class6 + class7 const totalCompact = new Intl.NumberFormat('sv-SE', { notation: 'compact', maximumFractionDigits: 1, }).format(total) + ' kr' return ( {t('expense_mix_title')} {chartData.length === 0 ? (
{t('expense_mix_empty')}
) : (
{chartData.map((_, index) => ( ))} [formatCurrency(Number(value)), '']} contentStyle={{ fontSize: '12px', borderRadius: '8px', border: '1px solid hsl(var(--border))', backgroundColor: 'hsl(var(--card))', }} />
{t('expense_mix_total')} {totalCompact}
{chartData.map((seg, i) => (
{seg.name}
))}
)}
) }