'use client'; import { useMemo } from 'react'; import { cn } from '@/lib/utils'; type RankChartItem = { label: string; value: number; }; type RankChartProps = { items: RankChartItem[]; color: string; valueFormatter?: (value: number) => string; emptyMessage?: string; className?: string; }; const defaultFormatter = (value: number) => { if (value >= 1000000) { return `${Number((value / 1000000).toFixed(2))}M`; } if (value >= 1000) { return `${Number((value / 1000).toFixed(2))}k`; } return value.toLocaleString('zh-CN'); }; export function RankChart({ items, color, valueFormatter = defaultFormatter, emptyMessage = '暂无分布数据', className, }: RankChartProps) { const maxValue = useMemo( () => Math.max(0, ...items.map((item) => item.value)), [items], ); if (items.length === 0) { return (
{emptyMessage}
); } return (
{items.map((item) => { const ratio = maxValue > 0 ? (item.value / maxValue) * 100 : 0; return (
{item.label}
{valueFormatter(item.value)}
); })}
); }