sabrebooking / sabrefrontend / src / pages / OrderSummaryPage.jsx
OrderSummaryPage.jsx
Raw
import { Container, TextField } from "@mui/material";
import Col from "react-bootstrap/esm/Col";
import Row from "react-bootstrap/esm/Row";
import TextWithBorder from "../components/TextWithBorder";
import Button from 'react-bootstrap/Button';
import { useLocation, useNavigate } from "react-router-dom";
import { useState } from "react";


// Order Summary Subheadings Component
function SummarySubheading ({title}) {
    return (
    <Col style={{display:"flex", justifyContent:"center"}}>
        <h5>{title}</h5>
    </Col>
    
    )
}

// Order Summary Row Component
function OrderSummaryRow ({FoodItem}) {
    const titleColStyle = {
        display:"flex", justifyContent:"center"
    }
    console.log(FoodItem, " food item")
    return (
    <Row style={{marginBottom:"0.2em"}}> 
        <Col  style={{display:"flex", justifyContent:"center", flexDirection:"column"}}>
                <h6> {FoodItem.title} </h6>
                <p> {FoodItem.meal_description}</p>
        </Col>
        <Col style={titleColStyle}> <h6> {`$${FoodItem.price}`} </h6> </Col>
        <Col style={titleColStyle}> <h6> {`${FoodItem.amount}`} </h6></Col>
        <Col style={titleColStyle}> <h6> {`$${FoodItem.total_price}`} </h6> </Col>
        
    </Row>
)
}

export default function OrderSummary() {
    const [barRequirements, setBarRequirements] = useState('')
    const [specialDietaryRequirements, setSpecialDietaryRequirements] = useState('')
    const location = useLocation()
    const navigateTo = useNavigate() 
    const meals = location.state?.mealData
    console.log(location.state?.bookingDetails, "room details obj")
    const roomName = location.state?.bookingDetails.room_name
    const eventDuration = location.state?.bookingDetails.event_duration
    const roomPrice = eventDuration == "half-day" ? 15 : 20
    var total = [...meals].reduce((acc, meal)=> acc + meal.total_price, 0);
    total += roomPrice

    const handleBarRequirements = (event) => {
        setBarRequirements(event.target.value)
    }

    const handleDietaryRequirements = (event) => {
        setSpecialDietaryRequirements(event.target.value)
    }

    const HandleSubmit = () => {
        const cateringInfor = {
            "meal": [...meals],
            "bar_requirements": barRequirements,
            "special_dietary_requirements": specialDietaryRequirements,
            "user_token": location.state?.token,
            "total_fee": total,
            "booking_id": location.state?.bookingDetails.booking_id
        }
        console.log(cateringInfor, "meals to be sent")
        
        const requestOptions = {
            method: "POST",
            headers: {"Content-Type":"application/json"},
            body: JSON.stringify(cateringInfor)
        }

        async function sendCateringInfo() {
            const response = await fetch("http://127.0.0.1:8000/sabreapi/v1/catering/", requestOptions);
        }

        sendCateringInfo()
        navigateTo("/feedback")
    }

    return (
        <>
        {/* Order Summary Main Heading */}
        <div style={{display:"flex", justifyContent:"center", marginBottom:"1 em"}}> 
            <h3> Order Summary </h3>
        </div>

        {/* Order Summary Content */}
        <Container> 
            {/* Order Summary Sub-headings*/}
             <Row> 
                <SummarySubheading title={"Item"}/>
                <SummarySubheading title={"Unit Price"}/>
                <SummarySubheading title={"Quantity"}/>
                <SummarySubheading title={"Total Price"}/>
                <hr/>
            </Row>
   
            {/* Food Item Rows */}
            <div style={{maxHeight:"500px", overflow:"auto"}}>
            
            {[...meals].map((meal)=>
                <OrderSummaryRow key={meal.id} FoodItem={meal}/>
            )}
            <Row> 
                <SummarySubheading title={`Room Fee (${roomName})`}/>
                <SummarySubheading title={`$${roomPrice}`}/>
                <SummarySubheading title={"-"}/>
                <SummarySubheading title={`$${roomPrice}`}/>
            </Row>

            </div>
            
            {/* Order Summary Total */}
            <Row> 
                <Col style={{display:"flex"}}>
                    {/* <h4 style={{display:"flex", justifyContent:"center", marginTop:"auto"}}>
                        Total
                    </h4>  */}
                 </Col>
                <Col> </Col>
                <Col> </Col>
                <Col> 
                    <hr/>
                    <h5 style={{display:"flex", justifyContent:"center"}}>
                        <TextWithBorder text={`$${total}`}/>
                    </h5>
                </Col>
                {/* <hr/> */}
            </Row>
        </Container>
        
        {/* Bar and Dietary requirements text fields */}
        <Container style={{marginTop:"2em"}} >
            <h6> Bar requirements: </h6>
            <div style={{marginBottom:"2em"}}>
                <TextField
                    sx={{
                        width: 560,
                        display: 'flex',
                    }}
                    id="outlined-multiline-static"
                    label="Enter bar requirements..."
                    multiline
                    rows={2}
                    variant="outlined"
                    onChange={handleBarRequirements}
                />
            </div>
            <h6> Special dietary requirements:</h6>
            <div style={{marginBottom:"2em"}}>
                <TextField
                    sx={{
                        width: 560,
                        display: 'flex',
                    }}
                    id="outlined-multiline-static"
                    label="Enter any special dietary requirements..."
                    multiline
                    rows={2}
                    variant="outlined"
                    onChange={handleDietaryRequirements}
                />
            </div>
            <h6 style={{marginBottom:"2em"}}>Note: Prices may change due to additional requirements</h6>
            <Button variant='primary'
             size='lg'
                    onClick={HandleSubmit}
                    style={{backgroundColor:'#282F38', border:'none', marginTop:'2em', marginBottom:'2em', alignSelf:'center'}}
                >
                    Submit
              </Button>
        </Container>
        </>
    )
}