import { trpc } from "@/providers/trpc"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Badge } from "@/components/ui/badge"; import { Users, MapPin, ClipboardList, TrendingUp, Clock, CheckCircle, } from "lucide-react"; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, PieChart, Pie, Cell, } from "recharts"; const COLORS = ["#4f46e5", "#10b981", "#f59e0b", "#ef4444", "#8b5cf6"]; export default function Dashboard() { const { data: stats, isLoading: statsLoading } = trpc.dashboard.stats.useQuery(); const { data: activities, isLoading: actLoading } = trpc.dashboard.activities.useQuery({ limit: 10 }); const statCards = [ { title: "Total Penerima", value: stats?.totalRecipients ?? 0, icon: Users, subtitle: `${stats?.activeRecipients ?? 0} aktif`, color: "text-indigo-600", bg: "bg-indigo-50", }, { title: "Penerima Aktif", value: stats?.activeRecipients ?? 0, icon: CheckCircle, subtitle: `${stats?.pendingRecipients ?? 0} menunggu verifikasi`, color: "text-emerald-600", bg: "bg-emerald-50", }, { title: "Rumah Ibadah", value: stats?.totalPlaces ?? 0, icon: MapPin, subtitle: `${stats?.activePlaces ?? 0} aktif`, color: "text-amber-600", bg: "bg-amber-50", }, { title: "Distribusi Bantuan", value: stats?.totalDistributions ?? 0, icon: ClipboardList, subtitle: `Rp ${((stats?.totalAidAmount ?? 0) / 1000000).toFixed(1)}M total`, color: "text-violet-600", bg: "bg-violet-50", }, ]; return (
Ringkasan data pemetaan kemiskinan dan distribusi bantuan
{card.title}
{statsLoading ? ({card.value}
)}{card.subtitle}
| Aksi | Entitas | Detail | Waktu |
|---|---|---|---|
|
|
{act.entityType.replace(/_/g, " ")} | {act.details} | {act.createdAt ? new Date(act.createdAt).toLocaleDateString("id-ID", { day: "numeric", month: "short", year: "numeric", hour: "2-digit", minute: "2-digit", }) : "-"} |