import apiFetch from "@/lib/apiFetch"; import { Card, Flex, Grid, Group, Stack, Text } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { IconFileCertificate, IconMessageReport, IconUsers, } from "@tabler/icons-react"; import useSWR from "swr"; export default function DashboardCountData() { const { data, mutate, isLoading } = useSWR("/", () => apiFetch.api.dashboard.count.get(), ); useShallowEffect(() => { mutate(); }, []); return ( } label="Pengaduan Hari Ini" value={String(data?.data?.pengaduan?.today)} change={String(data?.data?.pengaduan?.kenaikan) + "%"} color={"gray"} /> } label="Pengajuan Surat Hari Ini" value={String(data?.data?.pelayanan?.today)} change={String(data?.data?.pelayanan?.kenaikan) + "%"} color="gray" /> } label="Warga" value={String(data?.data?.warga)} color="blue" /> ); } function MetricCard({ icon, label, value, change, color, }: { icon: React.ReactNode; label: string; value: string; change?: string; color: string; }) { return ( (e.currentTarget.style.boxShadow = "0 0 10px rgba(0,255,200,0.2)") } onMouseLeave={(e) => (e.currentTarget.style.boxShadow = "none")} > {icon} {label} {value} {change && ( {change} )} ); }