'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { useToast } from '@/components/ui/use-toast'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { User, Trophy, Award } from 'lucide-react'; import { useTheme } from 'next-themes'; interface PrestasiMahasiswa { nama_prestasi: string; jenis_prestasi: string; tingkat_prestasi: string; peringkat: string; tanggal_prestasi: string; } interface BeasiswaMahasiswa { nama_beasiswa: string; sumber_beasiswa: string; jenis_beasiswa: string; beasiswa_status: string; } interface MahasiswaProfile { // Data Mahasiswa nama: string; nim: string; tahun_angkatan: string; jk: 'Pria' | 'Wanita'; jenis_pendaftaran: string; ipk: number | null; agama: string; kabupaten: string; provinsi: string; // Status Mahasiswa status_kuliah: string; semester: string; // Prestasi Mahasiswa prestasi: PrestasiMahasiswa[]; // Beasiswa Mahasiswa beasiswa: BeasiswaMahasiswa[]; } export default function ProfilePage() { const [profile, setProfile] = useState(null); const [loading, setLoading] = useState(true); const { toast } = useToast(); const router = useRouter(); const { theme } = useTheme(); useEffect(() => { const fetchProfile = async () => { try { console.log('Fetching profile data...'); const response = await fetch('/api/mahasiswa/profile'); console.log('Profile response status:', response.status); if (response.status === 401) { toast({ variant: "destructive", title: "Akses Ditolak", description: "Silakan login terlebih dahulu untuk mengakses halaman ini.", }); router.push('/'); return; } if (!response.ok) { const errorData = await response.json(); throw new Error(errorData.error || 'Failed to fetch profile data'); } const data = await response.json(); console.log('Profile data received:', data); setProfile(data); } catch (error) { console.error('Error fetching profile:', error); toast({ variant: "destructive", title: "Error", description: error instanceof Error ? error.message : "Gagal memuat data profil. Silakan coba lagi nanti.", }); } finally { setLoading(false); } }; fetchProfile(); }, [toast, router]); if (loading) { return (
{[...Array(3)].map((_, i) => (
{[...Array(8)].map((_, j) => (
))}
))}
); } if (!profile) { return (
Profil Mahasiswa
Data profil tidak tersedia
); } // Format IPK value const formatIPK = (ipk: number | null): string => { if (ipk === null || ipk === undefined) return '-'; return Number(ipk).toFixed(2); }; // Get first prestasi or create empty object const firstPrestasi = profile.prestasi.length > 0 ? profile.prestasi[0] : { nama_prestasi: '-', jenis_prestasi: '-', tingkat_prestasi: '-', peringkat: '-', tanggal_prestasi: '-' }; // Get first beasiswa or create empty object const firstBeasiswa = profile.beasiswa.length > 0 ? profile.beasiswa[0] : { nama_beasiswa: '-', sumber_beasiswa: '-', jenis_beasiswa: '-', beasiswa_status: '-' }; return (
{/* Data Mahasiswa */}
Data Mahasiswa
Nama Lengkap
{profile.nama}
NIM
{profile.nim}
Status Kuliah
{profile.status_kuliah}
Semester
{profile.semester}
Tahun Angkatan
{profile.tahun_angkatan}
Jenis Kelamin
{profile.jk}
Jenis Pendaftaran
{profile.jenis_pendaftaran}
IPK
{formatIPK(profile.ipk)}
Agama
{profile.agama}
Kabupaten
{profile.kabupaten}
Provinsi
{profile.provinsi}
{/* Prestasi Mahasiswa */}
Prestasi Mahasiswa
Nama Prestasi
{firstPrestasi.nama_prestasi}
Jenis Prestasi
{firstPrestasi.jenis_prestasi}
Tingkat Prestasi
{firstPrestasi.tingkat_prestasi}
Peringkat
{firstPrestasi.peringkat}
Tanggal Prestasi
{firstPrestasi.tanggal_prestasi}
{/* Beasiswa Mahasiswa */}
Beasiswa Mahasiswa
Nama Beasiswa
{firstBeasiswa.nama_beasiswa}
Sumber Beasiswa
{firstBeasiswa.sumber_beasiswa}
Jenis Beasiswa
{firstBeasiswa.jenis_beasiswa}
Status Beasiswa
{firstBeasiswa.beasiswa_status}
); }