'use client'; import { useState, useEffect } from 'react'; import { useRouter } from 'next/navigation'; import { ThemeToggle } from '@/components/theme-toggle'; import { Menu, ChevronDown, BarChart, Database, GraduationCap, BookOpen, Award, LogOut, User, Users, BookOpenText } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Sheet, SheetContent, SheetTrigger } from '@/components/ui/sheet'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import Link from 'next/link'; import { useToast } from '@/components/ui/toast-provider'; interface UserData { id_user: number; username?: string; nip?: string; role_user: string; } const Navbar = () => { const [user, setUser] = useState(null); const [isVisible, setIsVisible] = useState(true); const [lastScrollY, setLastScrollY] = useState(0); const { showSuccess, showError } = useToast (); const router = useRouter(); // Check for existing user session on mount useEffect(() => { checkUserSession(); }, []); // Handle scroll behavior useEffect(() => { const controlNavbar = () => { if (typeof window !== 'undefined') { if (window.scrollY > lastScrollY && window.scrollY > 100) { // Scrolling down & past 100px setIsVisible(false); } else { // Scrolling up setIsVisible(true); } setLastScrollY(window.scrollY); } }; if (typeof window !== 'undefined') { window.addEventListener('scroll', controlNavbar); return () => { window.removeEventListener('scroll', controlNavbar); }; } }, [lastScrollY]); const checkUserSession = async () => { try { const response = await fetch('/api/auth/user'); console.log('Session check response:', response.status); if (response.ok) { const data = await response.json(); console.log('User data:', data); setUser(data.user); } else { console.log('No session found or session check failed'); } } catch (error) { console.error('Error checking session:', error); } }; const handleLoginSuccess = (userData: any) => { setUser(userData.user); }; const handleLogout = async () => { try { const response = await fetch('/api/auth/logout', { method: 'POST', }); if (response.ok) { setUser(null); showSuccess("Berhasil!", "Anda telah keluar dari sistem"); // Redirect to root page after successful logout - using window.location for hard redirect setTimeout(() => { window.location.href = '/'; }, 500); // Small delay to show toast notification } } catch (error) { console.error('Logout error:', error); showError("Gagal!", "Terjadi kesalahan saat logout"); } }; return (
{/* Logo */}
PODIF Logo PODIF
{/* Desktop Navigation - Centered */}
{/* Dashboard - Only for Ketua Jurusan */} {user && (user.role_user === 'ketuajurusan' || user.role_user === 'ketuaprodi') && ( <> Dashboard {/* Dashboard Mahasiswa Mahasiswa Status Kuliah Lulus Tepat Waktu Beasiswa Prestasi */} )} {/* Kelola Data Dropdown - Only for Admin */} {user && user.role_user === 'admin' && ( Mahasiswa Beasiswa Prestasi Dosen Mata Kuliah Nilai Mahasiswa Akun )}
{/* Right Side - Theme Toggle, User Menu, and Mobile Menu */}
{user && ( {user.username} Logout )} {/* Mobile Menu Button */}
); }; // Mobile Navigation Content Component interface MobileNavContentProps { user: UserData | null; onLogout: () => void; } const MobileNavContent = ({ user, onLogout }: MobileNavContentProps) => { return (

Dashboard PODIF

{user ? (

Menu Utama

{/* Dashboard - Only for Ketua Jurusan */} {(user.role_user === 'ketuajurusan' || user.role_user === 'ketuaprodi') && ( Dashboard )} {/*

Visualisasi

Mahasiswa Status Kuliah Lulus Tepat Waktu Beasiswa Prestasi
*/} {/* Kelola Data - Only for Admin */} {user.role_user === 'admin' && (

Kelola Data

Mahasiswa Beasiswa Prestasi Dosen Mata Kuliah Nilai Mahasiswa Akun
)}
{user.role_user === 'ketuajurusan' ? 'Ketua Jurusan' : 'Admin'}
) : null}
); }; export default Navbar;