import { useEffect, useState } from "react"; import toast from "react-hot-toast"; import { Boxes, CalendarCheck, ShieldCheck, Users } from "lucide-react"; import { getDashboardStats, getEquipment, getPendingReservations, getUsers } from "../api.js"; export default function AdminPanelPage({ activeUser }) { const [users, setUsers] = useState([]); const [equipment, setEquipment] = useState([]); const [pending, setPending] = useState([]); const [stats, setStats] = useState(null); useEffect(() => { if (activeUser.role !== "admin") { return; } Promise.all([ getUsers(), getEquipment(), getPendingReservations(), getDashboardStats(), ]) .then(([usersData, equipmentData, pendingData, statsData]) => { setUsers(usersData); setEquipment(equipmentData); setPending(pendingData); setStats(statsData); }) .catch((err) => toast.error(err.message)); }, [activeUser.role]); if (activeUser.role !== "admin") { return (
); } return (
{stats && (
)}
({ title: u.fullName, subtitle: `${u.username} · ${u.email}`, badge: u.role, }))} />
({ title: e.name, subtitle: `Stock quantity: ${e.stockQuantity}`, badge: "equipment", }))} />
({ title: `#${p.reservationId} · ${p.requesterName}`, subtitle: `${p.reservationDate} · ${p.startTime}-${p.endTime}`, badge: p.status, }))} />
); } function Hero({ eyebrow, title, subtitle }) { return (
{eyebrow}

{title}

{subtitle}

); } function SmallStat({ icon: Icon, label, value }) { return (
{label} {value}
); } function SectionTitle({ icon: Icon, title, subtitle }) { return (

{title}

{subtitle}

); } function MiniList({ items }) { if (!items.length) { return
No records available.
; } return (
{items.map((item, index) => (
{item.title} {item.subtitle}
))}
); } function Badge({ value }) { return {value}; }