'use client'; import { useEffect, useState } from 'react'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Loader2 } from "lucide-react"; interface MahasiswaStatistik { tahun_angkatan: number; total_mahasiswa: number; pria: number; wanita: number; } export default function TabelJumlahMahasiswa() { const [statistikData, setStatistikData] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { try { const statistikResponse = await fetch('/api/mahasiswa/statistik', { cache: 'no-store', }); if (!statistikResponse.ok) { throw new Error('Failed to fetch statistik data'); } const statistikData = await statistikResponse.json(); setStatistikData(statistikData); } catch (err) { setError(err instanceof Error ? err.message : 'Terjadi kesalahan'); console.error('Error fetching data:', err); } finally { setLoading(false); } }; fetchData(); }, []); // Hitung total keseluruhan const grandTotal = { total_mahasiswa: statistikData.reduce((sum, item) => sum + item.total_mahasiswa, 0), pria: statistikData.reduce((sum, item) => sum + item.pria, 0), wanita: statistikData.reduce((sum, item) => sum + item.wanita, 0), }; if (loading) { return (
Loading...
); } if (error) { return ( Error: {error} ); } return (
Tahun Angkatan Laki-laki Perempuan Total {statistikData.length === 0 ? ( Tidak ada data yang tersedia ) : ( <> {statistikData.map((item, index) => ( {item.tahun_angkatan}
{item.pria}
{item.wanita}
{item.total_mahasiswa}
))} {/* Total Row */} TOTAL
{grandTotal.pria}
{grandTotal.wanita}
{grandTotal.total_mahasiswa}
)}
); }