"use client"; import { useState, useEffect } from "react"; import axios from "axios"; import { ShieldCheck, Check, X } from "lucide-react"; export default function ApprovalsPage() { const [activeTab, setActiveTab] = useState("Pending"); const [bookings, setBookings] = useState([]); // 1. FUNGSI UNTUK MENGAMBIL DATA ASLI DARI DATABASE const fetchBookings = async () => { try { const token = localStorage.getItem("token"); // Mengambil dari fungsi GetAllBookings di backend const res = await axios.get("http://localhost:8080/api/bookings", { headers: { Authorization: `Bearer ${token}` } }); setBookings(res.data.data); } catch (err: any) { console.error("Gagal mengambil data peminjaman:", err); } }; useEffect(() => { fetchBookings(); }, []); // 2. FUNGSI UNTUK MENGUBAH STATUS (APPROVE / REJECT) const updateStatus = async (bookingId: string, newStatus: string) => { try { const token = localStorage.getItem("token"); // Mengirim UUID booking_id ke backend Golang await axios.put( `http://localhost:8080/api/bookings/${bookingId}/status`, { status: newStatus }, { headers: { Authorization: `Bearer ${token}` } } ); alert(`Peminjaman berhasil di-${newStatus}!`); fetchBookings(); // Refresh tabel setelah update } catch (err: any) { console.error("Gagal update status:", err.response?.data || err.message); alert("Error: " + (err.response?.data?.error || "Gagal mengubah status")); } }; const filteredBookings = bookings.filter(b => b.status === activeTab); return (

Manajemen Persetujuan

Kelola permohonan peminjaman ruangan S-CLASS.

{/* TABS */}
{["Pending", "Approved", "Rejected"].map((tab) => ( ))}
{/* TABEL */}
{filteredBookings.map((b) => ( // Pastikan key menggunakan booking_id (UUID) {/* Gunakan huruf KECIL: b.user dan b.room sesuai JSON dari Golang */} {/* Menampilkan Waktu Mulai sampai Waktu Selesai */} ))} {filteredBookings.length === 0 && ( )}
Peminjam Ruangan Tanggal & Waktu Keperluan Status / Aksi
{b.user?.full_name || "Tanpa Nama"} {b.room?.name || "Ruangan Tidak Diketahui"}
{new Date(b.start_time).toLocaleTimeString('id-ID', {hour: '2-digit', minute:'2-digit'})} - {new Date(b.end_time).toLocaleTimeString('id-ID', {hour: '2-digit', minute:'2-digit'})}
{new Date(b.start_time).toLocaleDateString('id-ID')}
{b.purpose} {b.status === "Pending" ? (
{/* 3. TOMBOL SETUJUI & TOLAK YANG SUDAH BERFUNGSI */}
) : (
{b.status} {/* Menampilkan Redeem Code jika sudah Approved */} {b.status === 'Approved' && b.redeem_code && ( Code: {b.redeem_code} )}
)}
Tidak ada data di kategori ini.
); }