import {
Avatar,
Card,
Grid,
GridCol,
Group,
Stack,
Text,
useMantineColorScheme,
} from "@mantine/core";
import {
IconCategory,
IconCurrencyDollar,
IconTrendingUp,
IconUsers,
} from "@tabler/icons-react";
interface KpiCardProps {
title: string;
value: string | number;
subtitle?: string;
icon: React.ReactNode;
color: string;
backgroundColor: string;
}
const KpiCard = ({
title,
value,
subtitle,
icon,
color,
backgroundColor,
}: KpiCardProps) => {
const { colorScheme } = useMantineColorScheme();
const dark = colorScheme === "dark";
const formatValue = (val: string | number) => {
if (typeof val === "number") {
if (val >= 1000000) {
return `${(val / 1000000).toFixed(1)}M`;
}
if (val >= 1000) {
return `${(val / 1000).toFixed(1)}K`;
}
return val.toLocaleString();
}
return val;
};
return (
{title}
{formatValue(value)}
{subtitle && (
{subtitle}
)}
{icon}
);
};
interface SummaryCardsProps {
data?: {
umkmAktif: number;
umkmTerdaftar: number;
omzet: number;
kategoriTerbanyak: { count: number; name: string };
};
}
export const SummaryCards = ({ data }: SummaryCardsProps) => {
const defaultData = {
umkmAktif: 45,
umkmTerdaftar: 68,
omzet: 48000000,
kategoriTerbanyak: { count: 34, name: "Kuliner" },
};
const displayData = data || defaultData;
const kpiData: KpiCardProps[] = [
{
title: "UMKM Aktif",
value: displayData.umkmAktif,
subtitle: "Beroperasi",
icon: ,
color: "white",
backgroundColor: "#1E3A5F",
},
{
title: "UMKM Terdaftar",
value: displayData.umkmTerdaftar,
subtitle: "Total registrasi",
icon: ,
color: "white",
backgroundColor: "#1E3A5F",
},
{
title: "Omzet",
value: displayData.omzet,
subtitle: "Omzet BUMDes per bulan",
icon: ,
color: "white",
backgroundColor: "#1E3A5F",
},
{
title: "UMKM Terbanyak",
value: displayData.kategoriTerbanyak.count,
subtitle: `Kategori ${displayData.kategoriTerbanyak.name}`,
icon: ,
color: "white",
backgroundColor: "#1E3A5F",
},
];
return (
{kpiData.map((kpi, index) => (
))}
);
};