"use client"; import { useEffect, useState } from "react"; import axios from "axios"; import { useRouter } from "next/navigation"; import { MapPin, Users, Calendar, X, Clock, FileText } from "lucide-react"; // Tipe Data interface Room { room_id: number; name: string; category: string; capacity: number; floor: string; status: string; } export default function Dashboard() { const router = useRouter(); const [user, setUser] = useState(null); const [rooms, setRooms] = useState([]); const [loading, setLoading] = useState(true); // --- STATE UNTUK MODAL BOOKING --- const [isModalOpen, setIsModalOpen] = useState(false); const [selectedRoom, setSelectedRoom] = useState(null); const [startTime, setStartTime] = useState(""); const [endTime, setEndTime] = useState(""); const [purpose, setPurpose] = useState(""); const [submitLoading, setSubmitLoading] = useState(false); // ---------------------------------- useEffect(() => { const token = localStorage.getItem("token"); const userData = localStorage.getItem("user"); if (!token || !userData) { router.push("/login"); return; } setUser(JSON.parse(userData)); fetchRooms(token); }, []); const fetchRooms = async (token: string) => { try { const response = await axios.get("http://localhost:8080/api/rooms", { headers: { Authorization: `Bearer ${token}` }, }); setRooms(response.data.data); } catch (error) { console.error("Error:", error); router.push("/login"); } finally { setLoading(false); } }; // --- BUKA MODAL --- const openBookingModal = (room: Room) => { setSelectedRoom(room); setIsModalOpen(true); // Reset form setStartTime(""); setEndTime(""); setPurpose(""); }; // --- SUBMIT BOOKING --- const handleBookingSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSubmitLoading(true); const token = localStorage.getItem("token"); try { const startISO = new Date(startTime).toISOString(); const endISO = new Date(endTime).toISOString(); await axios.post( "http://localhost:8080/api/bookings", { room_id: selectedRoom?.room_id, start_time: startISO, end_time: endISO, purpose: purpose, }, { headers: { Authorization: `Bearer ${token}` }, } ); alert("Booking Berhasil Diajukan! Menunggu persetujuan."); setIsModalOpen(false); // Tutup modal } catch (error: any) { const errorMsg = error.response?.data?.error || "Gagal melakukan booking."; alert("GAGAL: " + errorMsg); } finally { setSubmitLoading(false); } }; if (loading) return
Memuat data...
; return (
{/* Header Konten: Judul & Tombol Riwayat */}

Pilih Ruangan

{/* Grid Daftar Kelas */}
{rooms.map((room) => (
{room.status} {room.category}

{room.name}

{room.floor}
Kapasitas: {room.capacity}
))}
{/* --- MODAL POPUP FORMULIR --- */} {isModalOpen && selectedRoom && (
{/* Header Modal */}

Form Peminjaman

{/* Body Form */}

Ruangan: {selectedRoom.name}

{selectedRoom.floor}

setStartTime(e.target.value)} />
setEndTime(e.target.value)} />