import { useState } from "react"; import { motion } from "framer-motion"; import toast from "react-hot-toast"; import { DoorOpen, Search, SlidersHorizontal } from "lucide-react"; import { searchRooms } from "../api.js"; export default function SearchRoomsPage() { const [form, setForm] = useState({ reservationDate: "2026-07-20", startTime: "09:00", endTime: "10:00", minimumCapacity: 1, roomType: "", requiredEquipmentName: "", }); const [rooms, setRooms] = useState([]); const [searched, setSearched] = useState(false); const [loading, setLoading] = useState(false); function updateField(field, value) { setForm((prev) => ({ ...prev, [field]: value })); } async function submit(e) { e.preventDefault(); if (!form.reservationDate || !form.startTime || !form.endTime) { toast.error("Reservation date, start time and end time are required."); return; } if (form.endTime <= form.startTime) { toast.error("End time must be after start time."); return; } if (Number(form.minimumCapacity) < 1) { toast.error("Minimum capacity must be greater than 0."); return; } setLoading(true); setSearched(true); try { const result = await searchRooms({ ...form, minimumCapacity: Number(form.minimumCapacity), }); setRooms(result); toast.success(`${result.length} available rooms found`); } catch (err) { setRooms([]); toast.error(err.message); } finally { setLoading(false); } } return (
updateField("reservationDate", value)} /> updateField("startTime", value)} /> updateField("endTime", value)} /> updateField("minimumCapacity", value)} /> updateField("requiredEquipmentName", value)} />
{loading &&
Searching database...
} {!loading && searched && rooms.length === 0 && (
No available rooms found for the selected criteria.
)} {!loading && rooms.length > 0 && (
{rooms.map((room) => ( ))}
)} {!searched && !loading && (
Run a search to display available rooms.
)}
); } function RoomCard({ room }) { return (

{room.roomCode}

{room.buildingName}

Capacity {room.capacity}
{room.address}
); } function Hero({ eyebrow, title, subtitle }) { return (
{eyebrow}

{title}

{subtitle}

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

{title}

{subtitle}

); } function Input({ label, type = "text", value, placeholder = "", onChange }) { return ( ); } function Badge({ value }) { return {value}; }