'use client'; import { useState, useEffect } from "react"; import StatistikMahasiswaChart from "@/components/charts/StatistikMahasiswaChart"; import StatistikPerAngkatanChart from "@/components/charts/StatistikPerAngkatanChart"; import JenisPendaftaranChart from "@/components/charts/JenisPendaftaranChart"; import AsalDaerahChart from "@/components/charts/AsalDaerahChart"; import IPKChart from "@/components/charts/IPKChart"; import FilterTahunAngkatan from "@/components/FilterTahunAngkatan"; import JenisPendaftaranPerAngkatanChart from "@/components/charts/JenisPendaftaranPerAngkatanChart"; import AsalDaerahPerAngkatanChart from "@/components/charts/AsalDaerahPerAngkatanChart"; import StatusMahasiswaChart from "@/components/charts/StatusMahasiswaChart"; import KelompokKeahlianStatusChart from "@/components/chartsDashboard/kkdashboardchart"; import KelompokKeahlianLulusTepatPieChart from "@/components/chartsDashboard/kkdashboardtepatpiechart"; import KelompokKeahlianPieChartPerAngkatan from "@/components/chartsDashboard/kkdashboardpiechartperangkatan"; import StatusMahasiswaPieChartPerangkatan from "@/components/chartsDashboard/StatusMahasiswaPieChartPerangkatan"; import MasaStudiLulusChart from "@/components/chartsDashboard/masastudiluluschart"; import TerancamDOChart from "@/components/chartsDashboard/TerancamDOChart"; import NamaBeasiswaChart from "@/components/chartsDashboard/NamaBeasiswaDashChart"; import NamaBeasiswaDashPieChartPerangkatan from "@/components/chartsDashboard/NamaBeasiswaDashPieChartPerangkatan"; import TingkatPrestasiChart from "@/components/chartsDashboard/TingkatPrestasiDashChart"; import ProvinsiMahasiswaChart from "@/components/chartsDashboard/ProvinsiMahasiswaPieChart"; import TingkatPrestasiPieChartDash from "@/components/chartsDashboard/TingkatPrestasiPieChartDash"; import LulusTepatWaktuChart from "@/components/charts/LulusTepatWaktuChart"; import BimbinganDosenChart from "@/components/charts/BimbinganDosenChart"; import BimbinganDosenPerAngkatanChart from "@/components/charts/BimbinganDosenPerAngkatanChart"; import DistribusiIPKChart from "@/components/chartsDashboard/DistribusiIPKChart"; import DistribusiIPKChartPerangkatan from "@/components/chartsDashboard/DistribusiIPKChartPerangkatan"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { ChevronDown, Navigation, ArrowUp } from "lucide-react"; import DashboardStats, { DashboardStatsSkeleton } from "@/components/dashboard/DashboardStats"; interface MahasiswaTotal { total_mahasiswa: number; mahasiswa_aktif: number; total_lulus: number; pria_lulus: number; wanita_lulus: number; total_berprestasi: number; prestasi_akademik: number; prestasi_non_akademik: number; total_mahasiswa_aktif_lulus: number; total_mahasiswa_beasiswa: number; total_mahasiswa_beasiswa_pemerintah: number; total_mahasiswa_beasiswa_non_pemerintah: number; } export default function TotalMahasiswaPage() { const [selectedYear, setSelectedYear] = useState("all"); const [dropdownOpen, setDropdownOpen] = useState(false); const [showBackToTop, setShowBackToTop] = useState(false); const [mahasiswaData, setMahasiswaData] = useState(null); const [loading, setLoading] = useState(true); // Fetch mahasiswa data based on selected year useEffect(() => { const fetchMahasiswaData = async () => { setLoading(true); try { const url = selectedYear === "all" ? '/api/mahasiswa/total' : `/api/mahasiswa/total?tahun_angkatan=${selectedYear}`; const response = await fetch(url); if (!response.ok) { throw new Error('Failed to fetch data'); } const data = await response.json(); setMahasiswaData(data); } catch (error) { console.error('Error fetching mahasiswa data:', error); setMahasiswaData(null); } finally { setLoading(false); } }; fetchMahasiswaData(); }, [selectedYear]); // Handle scroll event to show/hide back to top button useEffect(() => { const handleScroll = () => { const scrollTop = window.pageYOffset || document.documentElement.scrollTop; setShowBackToTop(scrollTop > 300); // Show button after scrolling 300px }; window.addEventListener('scroll', handleScroll); return () => window.removeEventListener('scroll', handleScroll); }, []); // Function to scroll to top smoothly const scrollToTop = () => { window.scrollTo({ top: 0, behavior: 'smooth' }); }; // Function to scroll to section smoothly const scrollToSection = (sectionId: string) => { // Close dropdown first setDropdownOpen(false); // Use requestAnimationFrame to ensure smooth operation requestAnimationFrame(() => { setTimeout(() => { const element = document.getElementById(sectionId); if (element) { element.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' }); } }, 200); }); }; // Navigation menu items for all data const allDataNavItems = [ { id: 'overview', label: 'Jumlah & Status Mahasiswa' }, { id: 'academic', label: 'IPK & Jenis Pendaftaran' }, { id: 'study-duration', label: 'Kelulusan Tepat Waktu & Masa Studi' }, { id: 'expertise', label: 'Kelompok Keahlian' }, { id: 'scholarship', label: 'Beasiswa & Prestasi' }, { id: 'demographics', label: 'Asal Kabupaten & Provinsi' }, { id: 'bimbingan-dosen', label: 'Bimbingan Dosen' } ]; // Navigation menu items for per year data const perYearNavItems = [ { id: 'overview-year', label: 'Jumlah & Status per Angkatan' }, { id: 'status-year', label: 'Jenis Pendaftaran & Kelompok Keahlian' }, { id: 'achievement-year', label: 'Beasiswa & Prestasi per Angkatan' }, { id: 'academic-year', label: 'Distribusi IPK per Angkatan' }, { id: 'demographics-year', label: 'Asal Kabupaten per Angkatan' }, { id: 'bimbingan-dosen-year', label: 'Bimbingan Dosen' } ]; return (

Dashboard Mahasiswa

Visualisasi Data Akademik Mahasiswa Informatika Universitas Tanjungpura

{/* Dashboard Stats Cards */} {loading ? ( ) : mahasiswaData ? ( ) : (

Gagal memuat data statistik mahasiswa

)}
{/* Quick Navigation Dropdown */} {(selectedYear === "all" ? allDataNavItems : perYearNavItems).map((item) => ( { e.preventDefault(); scrollToSection(item.id); }} className="cursor-pointer" > {item.label} ))}
{selectedYear === "all" ? (
{/* Overview Section */}
{/* Academic Performance Section */}
{/* Study Duration Section */}
{/* Expertise & Achievement Section */}
{/* Scholarship & Achievement Section */}
{/* Demographics Section */}
) : (
{/* Overview Section */}
{/* Status Section */}
{/* Distribusi IPK Section */}
{/* Demographics Section */}
)} {/* Back to Top Button */} {showBackToTop && ( )}
); }