sabrebooking / sabrefrontend / src / pages / RoomDetail.jsx
RoomDetail.jsx
Raw
import Container from "react-bootstrap/esm/Container"
import RoomCarousel from "../components/RoomCarousel"
import Row from "react-bootstrap/esm/Row"
import Col from "react-bootstrap/esm/Col"
import Alert from '@mui/material/Alert';
import Button from '@mui/material/Button';
import SearchIcon from '@mui/icons-material/Search';
import AllEquipmentModal from "../components/AllEquipmentModal"
import AllFunctionsModal from "../components/AllFunctionsModal"
import SearchModal from "../components/SearchModal"
import LoginModal from "../components/LoginModal";
import { useEffect, useState } from "react"
import { useNavigate } from "react-router-dom";
import './RoomDetail.css'
import { useLocation } from "react-router-dom"
import { useSelector } from "react-redux";



export default function RoomDetail() {

    const location = useLocation();
    const navigateTo = useNavigate();
    const room_id = location.state?.room_id 
    const bookingDetails = location.state?.bookingDetails
    const [room, setRoom] = useState(null)
    const [openLogin, setOpenLogin] = useState(false);
    const [modalShow, setModalShow] = useState(false);
    const [show, setShow] = useState(false);
    const [equipmentModalShow, setEquipmentModalShow] = useState(false) 
    const loginStatus = useSelector(status => status.loginStatus);

    const handleClose = () => setShow(false);
    const handleShow = () => setShow(true);


    useEffect(() => {
        async function fetchRoom() {
            const response = await fetch(`http://127.0.0.1:8000/sabreapi/v1/room/${room_id}`);
            const roomData = await response.json();
            setRoom(roomData)
        }
        fetchRoom();
        
    }, []);
    

    const handleReserve = () => {
        if (loginStatus.isLoggedIn === true) {
            const stateBookingDetails = {token: loginStatus.loginToken, room:room.name, ...bookingDetails}
            navigateTo('/book', {state: stateBookingDetails})
        } else {
            setOpenLogin(true);
        }  
    }
    
    return (
        <div>
            <LoginModal open={openLogin} setOpenLogin={setOpenLogin} />
            <Container className="mt-3 d-flex justify-content-space-between align-items-center">
                <h1>{room?.name} </h1>   
            {!bookingDetails?.start_time && <Container>
                    <SearchModal show={show} handleClose={handleClose} />
                    <Alert severity="info" action={
          <Button color="inherit" size="small" startIcon={<SearchIcon />} onClick={handleShow}>
            Search
          </Button>

        }>NB. You cannot make a booking until you've entered your event details</Alert>
            </Container>}

            {bookingDetails?.start_time && <Button className="reserve-button" sx={{display: "flex", marginLeft:"53%"}} size="large" variant="contained" onClick={handleReserve}> Reserve Room! </Button>}

            </Container>
            <Container className="mt-5">
                <Row>
                    <Col>
                        <Row style={{borderLeft: "2px solid #DDDD"}}>
                            <h4>What this place offers</h4>
                        </Row>
                        <Container >
                            <ul className="room-list-styling">
                                
                                {room?.amenity.map((idx, amenity) => {if (amenity <= 4) return (

                                <li key={idx}>
                                    <Container className="mt-2 d-flex justify-content-center left-boarder" >
                                        <Container>{room.amenity[amenity]}</Container>
                                           
                                    </Container>
                                </li>
                                  )})}
                                
                            </ul>    
                        </Container>

                    </Col>
                    <Col>
                    <RoomCarousel /></Col>
                </Row>
                
            </Container>
            <Container className="mt-5 d-flex justify-content-center">
                    
    
            </Container>
            
            <Container className="mt-4">
                <Row>

                <Col xs={6} >
                        <Row>
                            <Container className="left-boarder">
                                <h4>Available Equipment</h4>
                            </Container> 
                        </Row>
                      
                            <Container  >
                            
                            <ul className="room-list-styling">
            {room?.equipment.map((idx, name) => {if (name <= 4) return (
            <li key={idx}>
                <Container className="mt-2 d-flex justify-content-center left-boarder" >
                    <Container>{room.equipment[name]}</Container>
                    
                </Container>
            </li>
  )})}
                            </ul>
                        </Container>

                        <Row>
                        <AllEquipmentModal equipment={room?.equipment} show={equipmentModalShow} onHide={() => setEquipmentModalShow(false)} />
                            
                            <div className="amenities-button" onClick={() => setEquipmentModalShow(true)}>
                               Show all equipment
                            </div> 
                            
                        </Row>

                    </Col>

                    <Col xs={6} ><Row>
                        <Container className="left-boarder"><h4>Room Functions</h4></Container>
                        
                    </Row>
                        <Container  >
                            
                            <ul className="room-list-styling">

                             {room?.functions.map((idx, ftn) =>{ if (ftn <= 4) return (
                                 <li key={idx}>
                                <Container className="mt-2 d-flex justify-content-center left-boarder">
                                    <Container>
                                       {room.functions[ftn]} 
                                    </Container>
                                </Container>
                                    
                              </li>
                             )}

                             )
                                }
                                
                            </ul>
                        </Container>

                        <Row>
                        <AllFunctionsModal equipment={room?.functions} show={modalShow} onHide={() => setModalShow(false)} />
                            
                            <div className="amenities-button" onClick={() => setModalShow(true)}>
                               Show all functions
                            </div> 
                            
                        </Row>
                    </Col>

                   
                </Row>
               
            </Container>

                

        </div>
    )
}