'use client'; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { useTheme } from "next-themes"; import { useToast } from "@/components/ui/toast-provider"; interface UserData { id_user: number; username?: string; nip?: string; role_user: string; } export default function HomePage() { const { theme } = useTheme(); const router = useRouter(); const { showSuccess, showError } = useToast(); const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); const [showLoginDialog, setShowLoginDialog] = useState(false); // Check for existing user session on mount useEffect(() => { checkUserSession(); }, []); const checkUserSession = async () => { try { const response = await fetch('/api/auth/user'); if (response.ok) { const data = await response.json(); setUser(data.user); // Redirect based on user role if (data.user.role_user === 'ketuajurusan') { router.push('/dashboard'); } else if (data.user.role_user === 'admin') { router.push('/keloladata/mahasiswa'); } } else { // No user session, show login dialog setShowLoginDialog(true); } } catch (error) { console.error('Error checking session:', error); setShowLoginDialog(true); } finally { setIsLoading(false); } }; const handleLoginSuccess = (userData: any) => { setUser(userData.user); setShowLoginDialog(false); // Redirect based on user role if (userData.user.role_user === 'ketuajurusan') { showSuccess("Berhasil!", "Selamat datang, Ketua Jurusan!"); router.push('/dashboard'); } else if (userData.user.role_user === 'admin') { showSuccess("Berhasil!", "Selamat datang, Admin!"); router.push('/keloladata/mahasiswa'); } }; if (isLoading) { return (

Memuat...

); } return (
{/* Background decorative elements */}
{/* Header */}

Portal Data Informatika

{showLoginDialog && ( )}
); } // Auto-opening login dialog component interface AutoLoginDialogProps { onLoginSuccess: (userData: any) => void; } function AutoLoginDialog({ onLoginSuccess }: AutoLoginDialogProps) { const { showSuccess, showError } = useToast(); const [isLoading, setIsLoading] = useState(false); const [activeTab, setActiveTab] = useState("ketua"); // Ketua Jurusan form state const [ketuaForm, setKetuaForm] = useState({ nip: "", password: "", }); // Admin form state const [adminForm, setAdminForm] = useState({ username: "", password: "", }); const handleKetuaLogin = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); try { const response = await fetch("/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ nip: ketuaForm.nip, password: ketuaForm.password, role: "ketuajurusan", }), }); const data = await response.json(); if (response.ok) { onLoginSuccess(data); setKetuaForm({ nip: "", password: "" }); } else { showError("Gagal!", data.message || "NIP atau password salah"); } } catch (error) { showError("Gagal!", "Terjadi kesalahan saat login"); } finally { setIsLoading(false); } }; const handleAdminLogin = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); try { const response = await fetch("/api/auth/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ username: adminForm.username, password: adminForm.password, role: "admin", }), }); const data = await response.json(); if (response.ok) { onLoginSuccess(data); setAdminForm({ username: "", password: "" }); } else { showError("Gagal!", data.message || "Username atau password salah"); } } catch (error) { showError("Gagal!", "Terjadi kesalahan saat login"); } finally { setIsLoading(false); } }; return (
{/* Subtle glow effect */}

Login ke PODIF

Silakan login untuk melanjutkan

{/* Tab buttons */}
{/* Ketua Jurusan form */} {activeTab === "ketua" && (
setKetuaForm({ ...ketuaForm, nip: e.target.value })} required className="w-full px-3 py-2 bg-slate-700/50 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200" />
setKetuaForm({ ...ketuaForm, password: e.target.value })} required className="w-full px-3 py-2 bg-slate-700/50 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200" />
)} {/* Admin form */} {activeTab === "admin" && (
setAdminForm({ ...adminForm, username: e.target.value })} required className="w-full px-3 py-2 bg-slate-700/50 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200" />
setAdminForm({ ...adminForm, password: e.target.value })} required className="w-full px-3 py-2 bg-slate-700/50 border border-slate-600 rounded-lg text-white placeholder-slate-400 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200" />
)}
); }