diff --git a/donutshop_ecommerce/src/app/api/models/MenuItem.js b/donutshop_ecommerce/src/app/api/models/MenuItem.js index ba2c7f1..8af438b 100644 --- a/donutshop_ecommerce/src/app/api/models/MenuItem.js +++ b/donutshop_ecommerce/src/app/api/models/MenuItem.js @@ -23,7 +23,11 @@ const MenuItemSchema = new Schema({ }, sizes:{ type: [ExtraPriceSchema] - } + }, + extraItems:{ + type: [ExtraPriceSchema] + }, + }, {timestamps: true}) export const MenuItem = models?.MenuItem || model('MenuItem', MenuItemSchema) \ No newline at end of file diff --git a/donutshop_ecommerce/src/app/menu/page.js b/donutshop_ecommerce/src/app/menu/page.js index cd546c6..189e050 100644 --- a/donutshop_ecommerce/src/app/menu/page.js +++ b/donutshop_ecommerce/src/app/menu/page.js @@ -19,11 +19,11 @@ const MenuPage = () => { return ( -
+
{categories?.length > 0 && categories.map(c => ( -
-

{c.name}

-
+
+

{c.name}

+
{menuItems.filter(item => item.category === c._id).map(item => ( ))} diff --git a/donutshop_ecommerce/src/components/AppContext.js b/donutshop_ecommerce/src/components/AppContext.js index a3f8005..a5adf0c 100644 --- a/donutshop_ecommerce/src/components/AppContext.js +++ b/donutshop_ecommerce/src/components/AppContext.js @@ -37,9 +37,9 @@ const AppProvider = ({children}) => { } } - function addToCart(product, size=null){ + function addToCart(product, size=null, extra=[]){ setCartProducts(prevProducts => { - const cartProduct = {...product, size} + const cartProduct = {...product, size, extra} const newProducts = [...prevProducts, cartProduct]; saveCartProductsToLocalStorage(newProducts); return newProducts diff --git a/donutshop_ecommerce/src/components/layout/MenuItemForm.js b/donutshop_ecommerce/src/components/layout/MenuItemForm.js index 225bce2..a1fdf97 100644 --- a/donutshop_ecommerce/src/components/layout/MenuItemForm.js +++ b/donutshop_ecommerce/src/components/layout/MenuItemForm.js @@ -9,6 +9,7 @@ const MenuItemForm = ({handleMenuFormSubmit, menuItem}) => { const [description, setDescription] = useState(menuItem?.description || ''); const [basePrice, setBasePrice] = useState(menuItem?.basePrice || ''); const [sizes, setSizes] = useState(menuItem?.sizes || []); + const [extraItems, setExtraItems] = useState(menuItem?.extraItems || []); const [category, setCategory] = useState(menuItem?.category || ''); const [categories, setCategories] = useState([]); @@ -23,7 +24,7 @@ const MenuItemForm = ({handleMenuFormSubmit, menuItem}) => { return ( -
handleMenuFormSubmit(ev, {menuImg, itemName, description, basePrice, sizes, category,})}> + handleMenuFormSubmit(ev, {menuImg, itemName, description, basePrice, sizes, extraItems, category,})}>
@@ -47,7 +48,8 @@ const MenuItemForm = ({handleMenuFormSubmit, menuItem}) => { setBasePrice(ev.target.value)}/>
- + + ) diff --git a/donutshop_ecommerce/src/components/layout/MenuItemProps.js b/donutshop_ecommerce/src/components/layout/MenuItemProps.js index d391edf..f4bcd3f 100644 --- a/donutshop_ecommerce/src/components/layout/MenuItemProps.js +++ b/donutshop_ecommerce/src/components/layout/MenuItemProps.js @@ -2,7 +2,7 @@ import React, { useState } from 'react' import { IoTrashOutline } from "react-icons/io5"; import { MdKeyboardArrowDown, MdKeyboardArrowUp } from "react-icons/md"; -const MenuItemProps = ({props, setProps}) => { +const MenuItemProps = ({name, addLabel, props, setProps}) => { const [isOpen, setIsOpen] = useState(false); function addProp(){ @@ -29,7 +29,7 @@ const MenuItemProps = ({props, setProps}) => {
+
diff --git a/donutshop_ecommerce/src/components/menu/Menu.js b/donutshop_ecommerce/src/components/menu/Menu.js index f95c56d..53047c9 100644 --- a/donutshop_ecommerce/src/components/menu/Menu.js +++ b/donutshop_ecommerce/src/components/menu/Menu.js @@ -4,12 +4,12 @@ import { CartContext } from '../AppContext'; import toast from 'react-hot-toast'; const Menu = (menuItem) => { - const {menuImg, itemName, description, basePrice, sizes} = menuItem + const {menuImg, itemName, description, basePrice, sizes, extraItems} = menuItem const {addToCart} = useContext(CartContext); const [showPopup, setShowPopup] = useState(false); function handleAddToCartButtonClick(){ - if(sizes.length === 0 ){ + if(sizes.length === 0 && extraItems.length === 0){ toast.success('Add to cart'); addToCart(menuItem); } else{ @@ -17,16 +17,45 @@ const Menu = (menuItem) => { } } + + return ( <> {showPopup && ( -
-
test
+
+
+
+ menu-donut +

{itemName}

+

{description}

+ {sizes?.length > 0 && ( +
+

Choose your size

+ {sizes.map(size => ( +
+ {size.itemName} ${basePrice + size.price} +
+ ))} +
+ )} + {extraItems?.length > 0 && ( +
+

Extra toppings

+ {extraItems.map(extraTopping => ( +
+ {extraTopping.itemName} (${extraTopping.price}) +
+ ))} +
+ )} + +
+
)}
- menu-donut + menu-donut

{itemName}

{description}

${basePrice}

diff --git a/donutshop_ecommerce/src/components/menu/MenuItem.js b/donutshop_ecommerce/src/components/menu/MenuItem.js index c4d7e12..d17e7f5 100644 --- a/donutshop_ecommerce/src/components/menu/MenuItem.js +++ b/donutshop_ecommerce/src/components/menu/MenuItem.js @@ -27,7 +27,7 @@ const MenuItem = (menuItem) => {
menu-donut

{itemName}

-

{description}

+

{description}

${basePrice}