"use client"; import { useEffect, useState } from "react"; import axios from "axios"; import { useRouter } from "next/navigation"; import { LogOut, CheckCircle, XCircle, Clock } from "lucide-react"; export default function AdminDashboard() { const router = useRouter(); const [admin, setAdmin] = useState(null); const [bookings, setBookings] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const token = localStorage.getItem("token"); const userData = localStorage.getItem("user"); if (!token || !userData) { router.push("/login"); return; } const userObj = JSON.parse(userData); // Tendang kalau bukan admin yang masuk if (userObj.role !== "admin") { router.push("/dashboard"); return; } setAdmin(userObj); fetchBookings(token); }, []); const fetchBookings = async (token: string) => { try { const response = await axios.get("http://localhost:8080/api/bookings", { headers: { Authorization: `Bearer ${token}` }, }); setBookings(response.data.data || []); } catch (error) { console.error("Gagal ambil data booking:", error); } finally { setLoading(false); } }; const handleUpdateStatus = async (bookingId: string, newStatus: string) => { const token = localStorage.getItem("token"); try { await axios.patch( `http://localhost:8080/api/bookings/${bookingId}`, { status: newStatus }, { headers: { Authorization: `Bearer ${token}` } } ); alert(`Booking berhasil di-${newStatus}!`); fetchBookings(token as string); // Refresh data setelah update } catch (error) { alert("Gagal mengubah status booking."); console.error(error); } }; const handleLogout = () => { localStorage.removeItem("token"); localStorage.removeItem("user"); router.push("/login"); }; if (loading) return
Memuat panel admin...
; return (
{/* Navbar Admin */} {/* Konten Utama */}

Manajemen Peminjaman Ruangan

{bookings.length === 0 ? ( ) : ( bookings.map((b) => ( )) )}
Ruangan Peminjam Waktu Keperluan Status Aksi
Belum ada pengajuan peminjaman.
{b.room?.name} ID User: {b.user_id.substring(0,8)}...
Mulai: {new Date(b.start_time).toLocaleString('id-ID')}
Selesai: {new Date(b.end_time).toLocaleString('id-ID')}
{b.purpose} {b.status} {b.status === 'Pending' ? (
) : (
- Selesai -
)}
); }