StatCard.tsx 1,54 ko
Newer Older
Julien Furet's avatar
Julien Furet a validé
interface StatCardProps {
    label: string
    shortLabel: string
    icon: React.ComponentType<{ size?: number; style?: React.CSSProperties }>
    color: string
    total: number | null
    average: number | null
    formatValue: (value: number) => string
}

export default function StatCard({ label, shortLabel, icon: Icon, color, total, average, formatValue }: StatCardProps) {
    return (
        <div className="bg-[#212529] border border-[#3a3f44] rounded-lg p-5 flex flex-col gap-4 transition-all hover:border-[#55595e]">
            <div className="flex items-center justify-between">
                <span className="text-xs text-[#b0afaf] uppercase tracking-wide">{shortLabel}</span>
                <div className="h-8 w-8 rounded-lg flex items-center justify-center" style={{ backgroundColor: `${color}20` }}>
                    <Icon size={16} style={{ color }} />
                </div>
            </div>

            <div>
                <p className="text-xs text-[#b0afaf] mb-1">Total collecté</p>
                <p className="text-2xl font-bold" style={{ color }}>
                    {total !== null ? formatValue(total) : ''}
                </p>
            </div>

            <div className="border-t border-[#3a3f44] pt-3">
                <p className="text-xs text-[#b0afaf] mb-1">Moyenne par commune</p>
                <p className="text-lg font-semibold text-white">{average !== null ? formatValue(average) : ''}</p>
            </div>

            <p className="text-xs text-[#b0afaf] mt-auto">{label}</p>
        </div>
    )
}