diff --git a/src/App.css b/src/App.css
index 85c14030..7aa4d7d9 100644
--- a/src/App.css
+++ b/src/App.css
@@ -7,7 +7,7 @@
.first_page {
display: flex;
height: 100vh;
- background-image: url("https://cdn.pixabay.com/photo/2018/07/05/14/45/conference-3518465_1280.jpg");
+ background-image: url("https://cdn.pixabay.com/photo/2014/05/05/20/29/conference-room-338563_1280.jpg");
background-size: cover;
background-position: center;
justify-content: center;
@@ -110,7 +110,8 @@
top: 100vh;
left: 0;
width: 100%;
- height: 100vh;
+ /* height: 100vh; */
+ height:auto;
background-color: rgba(255, 255, 255, 0.8);
transition: top 0.5s ease;
overflow-y: auto;
diff --git a/src/ConferenceEvent.css b/src/ConferenceEvent.css
index d69f2a9d..1af9a4c5 100644
--- a/src/ConferenceEvent.css
+++ b/src/ConferenceEvent.css
@@ -18,7 +18,8 @@
flex-wrap: wrap;
gap: 30px;
width: 90vw;
- margin-left: 250px;
+ /*margin-left: 250px;*/
+ margin-left:350px;
}
.venue_main {
diff --git a/src/ConferenceEvent.jsx b/src/ConferenceEvent.jsx
index 612a4648..b2504985 100644
--- a/src/ConferenceEvent.jsx
+++ b/src/ConferenceEvent.jsx
@@ -3,10 +3,14 @@ import "./ConferenceEvent.css";
import TotalCost from "./TotalCost";
import { useSelector, useDispatch } from "react-redux";
import { incrementQuantity, decrementQuantity } from "./venueSlice";
+import { decrementAvQuantity, incrementAvQuantity } from "./avSlice";
+import { toggleMealSelection } from "./mealsSlice";
const ConferenceEvent = () => {
const [showItems, setShowItems] = useState(false);
const [numberOfPeople, setNumberOfPeople] = useState(1);
const venueItems = useSelector((state) => state.venue);
+ const avItems = useSelector((state) => state.av);
+ const mealsItems = useSelector((state) => state.meals);
const dispatch = useDispatch();
const remainingAuditoriumQuantity = 3 - venueItems.find(item => item.name === "Auditorium Hall (Capacity:200)").quantity;
@@ -28,24 +32,87 @@ const ConferenceEvent = () => {
dispatch(decrementQuantity(index));
}
};
- const handleIncrementAvQuantity = (index) => {
- };
+ const handleIncrementAvQuantity = (index) => {
+ dispatch(incrementAvQuantity(index));
+ };
const handleDecrementAvQuantity = (index) => {
+ dispatch(decrementAvQuantity(index));
};
const handleMealSelection = (index) => {
-
+ const item = mealsItems[index];
+ if(item.selected && item.type === "mealForPeople"){
+ // Ensure numberOfPeople is set before toggling selection
+ const newNumberOfPeople = item.selected ? numberOfPeople : 0;
+ dispatch(toggleMealSelection(index, newNumberOfPeople));
+ }
+ else{
+ dispatch(toggleMealSelection(index));
+ }
};
const getItemsFromTotalCost = () => {
const items = [];
+ venueItems.forEach((item) => {
+ if(item.quantity > 0){
+ items.push({...item, type:"venue"});
+ }
+ });
+ avItems.forEach((item) => {
+ if(item.quantity > 0 && !items.some((i) => i.name === item.name && i.type === "av")){
+ items.push({...item, type: "av"});
+ }
+ });
+
+ mealsItems.forEach((item) => {
+ if(item.selected){
+ const itemForDisplay = { ...item, type: "meals"};
+ if(item.numberOfPeople) {
+ itemForDisplay.numberOfPeople = numberOfPeople;
+ }
+ items.push(itemForDisplay);
+ }
+ });
+ return items;
};
const items = getItemsFromTotalCost();
const ItemsDisplay = ({ items }) => {
-
+ console.log(items);
+ return <>
+
+ {items.length === 0 &&
No items selected
}
+
+
+
+ | Name |
+ Unit Cost |
+ Quantity |
+ Subtotal |
+
+
+
+ {items.map((item, index) => (
+
+ | {item.name} |
+ ${item.cost} |
+
+ {item.type === "meals" || item.numberOfPeople
+ ? ` For ${numberOfPeople} people`
+ : item.quantity}
+ |
+ {item.type === "meals" || item.numberOfPeople
+ ? `${item.cost * numberOfPeople}`
+ : `${item.cost * item.quantity}`}
+ |
+
+ ))}
+
+
+
+ >
};
const calculateTotalCost = (section) => {
let totalCost = 0;
@@ -53,11 +120,24 @@ const ConferenceEvent = () => {
venueItems.forEach((item) => {
totalCost += item.cost * item.quantity;
});
+ }else if(section === "av"){
+ avItems.forEach((item)=> {
+ totalCost += item.cost * item.quantity;
+ });
+ }else if(section === "meals"){
+ mealsItems.forEach((item) => {
+ if (item.selected) {
+ totalCost += item.cost * numberOfPeople;
+ }
+ });
}
return totalCost;
};
- const venueTotalCost = calculateTotalCost("venue");
-
+
+
+ const venueTotalCost = calculateTotalCost("venue");
+ const avTotalCost = calculateTotalCost("av");
+ const mealsTotalCost = calculateTotalCost("meals");
const navigateToProducts = (idType) => {
if (idType == '#venue' || idType == '#addons' || idType == '#meals') {
if (showItems) { // Check if showItems is false
@@ -65,6 +145,11 @@ const ConferenceEvent = () => {
}
}
}
+ const totalCosts = {
+ venue: venueTotalCost,
+ av: avTotalCost,
+ meals: mealsTotalCost,
+ };
return (
<>
@@ -157,10 +242,22 @@ const ConferenceEvent = () => {
-
+ {avItems.map((item, index) => (
+
+
+

+
+
{item.name}
+
${item.cost}
+
+
+ {item.quantity}
+
+
+
+))}
- Total Cost:
-
+ Total Cost: {avTotalCost}
{/* Meal Section */}
@@ -173,12 +270,27 @@ const ConferenceEvent = () => {
-
+
+ setNumberOfPeople(parseInt(e.target.value))}
+ min="1"
+ />
-
+ {mealsItems.map((item, index) => (
+
+
+ handleMealSelection(index)}
+ />
+
+
+
${item.cost}
+
+ ))}
- Total Cost:
+ Total Cost: {mealsTotalCost}
diff --git a/src/TotalCost.jsx b/src/TotalCost.jsx
index 845abca9..06565da1 100644
--- a/src/TotalCost.jsx
+++ b/src/TotalCost.jsx
@@ -2,7 +2,7 @@ import React, { useState, useEffect } from 'react';
import "./TotalCost.css";
const TotalCost = ({ totalCosts, ItemsDisplay }) => {
-
+ const total_amount = totalCosts.venue + totalCosts.av + totalCosts.meals;
return (
@@ -12,11 +12,11 @@ const TotalCost = ({ totalCosts, ItemsDisplay }) => {
diff --git a/src/avSlice.js b/src/avSlice.js
index cdd79aac..06912212 100644
--- a/src/avSlice.js
+++ b/src/avSlice.js
@@ -3,16 +3,52 @@ import { createSlice } from "@reduxjs/toolkit";
export const avSlice = createSlice({
name: "av",
initialState: [
-
+ {
+ img: "https://pixabay.com/images/download/business-20031_640.jpg",
+ name: "Projectors",
+ cost: 200,
+ quantity: 0,
+ },
+ {
+ img: "https://pixabay.com/images/download/speakers-4109274_640.jpg",
+ name: "Speaker",
+ cost: 35,
+ quantity: 0,
+ },
+ {
+ img: "https://pixabay.com/images/download/public-speaking-3926344_640.jpg",
+ name: "Microphones",
+ cost: 45,
+ quantity: 0,
+ },
+ {
+ img: "https://pixabay.com/images/download/whiteboard-2903269_640.png",
+ name: "Whiteboards",
+ cost: 80,
+ quantity: 0,
+ },
+
+ {
+ img: "https://pixabay.com/images/download/signpost-235079_640.jpg",
+ name: "Signage",
+ cost: 80,
+ quantity: 0,
+ },
],
reducers: {
incrementAvQuantity: (state, action) => {
-
+ const item = state[action.payload];
+ if(item){
+ item.quantity++;
+ }
},
decrementAvQuantity: (state, action) => {
-
+ const item = state[action.payload];
+ if (item && item.quantity > 0){
+ item.quantity--;
+ }
},
},
});
diff --git a/src/mealsSlice.js b/src/mealsSlice.js
index faf8138a..87ba0b88 100644
--- a/src/mealsSlice.js
+++ b/src/mealsSlice.js
@@ -4,10 +4,14 @@ import { createSlice } from '@reduxjs/toolkit';
export const mealsSlice = createSlice({
name: 'meals',
initialState: [
-
+ { name: 'Breakfast', cost: 50, selected: false },
+{ name: 'High Tea', cost: 25, selected: false },
+{ name: 'Lunch', cost: 65, selected: false },
+{ name: 'Dinner', cost: 70, selected: false },
],
reducers: {
toggleMealSelection: (state, action) => {
+ state[action.payload].selected = !state[action.payload].selected;
},
},
});
diff --git a/src/store.js b/src/store.js
index f05b9f8f..4df73915 100644
--- a/src/store.js
+++ b/src/store.js
@@ -1,9 +1,13 @@
// store.js
import { configureStore } from '@reduxjs/toolkit';
import venueReducer from './venueSlice';
+import avReducer from './avSlice';
+import mealsReducer from './mealsSlice';
export default configureStore({
reducer: {
venue: venueReducer,
+ av:avReducer,
+ meals: mealsReducer,
},
});