diff --git a/donutshop_ecommerce/src/components/AppContext.js b/donutshop_ecommerce/src/components/AppContext.js index fd2691c..8737748 100644 --- a/donutshop_ecommerce/src/components/AppContext.js +++ b/donutshop_ecommerce/src/components/AppContext.js @@ -1,11 +1,26 @@ "use client" import { SessionProvider } from 'next-auth/react' -import React from 'react' +import React, { createContext, useState } from 'react' + + +export const CartContext = createContext({}); const AppProvider = ({children}) => { + const [cartProducts, setCartProducts] = useState([]); + + function addToCart(product, size=null){ + setCartProducts(prevProducts => { + const cartProduct = {...product, size} + const newProducts = [...prevProducts, cartProduct]; + return newProducts + }) + } + return ( + {children} + ) } diff --git a/donutshop_ecommerce/src/components/layout/Header.js b/donutshop_ecommerce/src/components/layout/Header.js index c8474da..3addc82 100644 --- a/donutshop_ecommerce/src/components/layout/Header.js +++ b/donutshop_ecommerce/src/components/layout/Header.js @@ -1,10 +1,12 @@ "use client" -import React, { useState } from "react"; +import React, { useContext, useState } from "react"; import {signOut, useSession} from 'next-auth/react' import Image from 'next/image'; import Link from 'next/link'; import { IoCloseOutline } from "react-icons/io5"; import { HiBars2 } from "react-icons/hi2"; +import { BsBox2Heart } from "react-icons/bs"; +import { CartContext } from "../AppContext"; const Header = () => { @@ -16,6 +18,10 @@ const Header = () => { //use session const session = useSession(); const status = session?.status; + + //add to cart + const {cartProducts} = useContext(CartContext); + //use userdata const userData = session.data?.user; let userName = userData?.name || userData?.email; @@ -53,6 +59,7 @@ const Header = () => { {status === 'authenticated' && ( <> {userName} + ({cartProducts.length}) )} @@ -62,7 +69,6 @@ const Header = () => { Register )} -
setNav(!nav)} className="cursor-pointer pr-4 z-20 text-[#95743D] md:hidden "> {nav ? : }
{nav && ( diff --git a/donutshop_ecommerce/src/components/menu/Menu.js b/donutshop_ecommerce/src/components/menu/Menu.js index 183d31d..292374d 100644 --- a/donutshop_ecommerce/src/components/menu/Menu.js +++ b/donutshop_ecommerce/src/components/menu/Menu.js @@ -6,8 +6,8 @@ const Menu = ({menuImg, itemName, description, basePrice, sizes}) => {
menu-donut

{itemName}

-

{description}

-

${basePrice}

+

{description}

+

${basePrice}

) diff --git a/donutshop_ecommerce/src/components/menu/MenuItem.js b/donutshop_ecommerce/src/components/menu/MenuItem.js index 77bf6ec..20dda23 100644 --- a/donutshop_ecommerce/src/components/menu/MenuItem.js +++ b/donutshop_ecommerce/src/components/menu/MenuItem.js @@ -1,8 +1,10 @@ -import React from 'react' +import React, { useContext } from 'react' import Image from 'next/image'; +import { CartContext } from '../AppContext'; -const MenuItem = ({menuImg, itemName, description, basePrice, sizes}) => { - +const MenuItem = (menuItem) => { + const {menuImg, itemName, description, basePrice, sizes} = menuItem + const {addToCart} = useContext(CartContext) return (
@@ -10,7 +12,7 @@ const MenuItem = ({menuImg, itemName, description, basePrice, sizes}) => {

{itemName}

{description}

${basePrice}

- +
) }