diff --git a/donutshop_ecommerce/src/app/cart/page.js b/donutshop_ecommerce/src/app/cart/page.js index 3104e62..91110cf 100644 --- a/donutshop_ecommerce/src/app/cart/page.js +++ b/donutshop_ecommerce/src/app/cart/page.js @@ -1,41 +1,62 @@ "use client" import React, { useContext } from 'react' -import { CartContext } from '../../components/AppContext' +import { CartContext, productTotal } from '../../components/AppContext' import Image from 'next/image'; +import { IoMdCloseCircleOutline } from "react-icons/io"; const CartPage = () => { - const {cartProducts} = useContext(CartContext); + const {cartProducts, removeCartProduct} = useContext(CartContext); + + //cart total + let total = 0 + for(const p of cartProducts){ + total += productTotal(p) + } return (
-
+

My cart

-
+
{cartProducts?.length === 0 && (
Your cart is empty
)} - {cartProducts?.length > 0 && cartProducts.map(product => ( -
-
- + {cartProducts?.length > 0 && cartProducts.map((product, index) => ( +
+
+
+ +
+
+

{product.itemName}

+ {product.size && ( +
Size: {product.size.itemName}
+ )} + {product.extra?.length > 0 && ( +
Add: {product.extra.map(extras => ( + {extras.itemName} (+${extras.price}) + ))} +
+ )} +
-

{product.itemName}

- {product.size && ( -
Size: {product.size.itemName}
- )} - {product.extra?.length > 0 && ( -
Toppings: {product.extra.map(extras => ( - {extras.itemName} (+${extras.price}) - ))}
- )} +

${productTotal(product)}

+
+
+
))} +
+

Sub-total ${total}

+
+
+
+

Summary

-
right
diff --git a/donutshop_ecommerce/src/components/AppContext.js b/donutshop_ecommerce/src/components/AppContext.js index a5adf0c..fad10c3 100644 --- a/donutshop_ecommerce/src/components/AppContext.js +++ b/donutshop_ecommerce/src/components/AppContext.js @@ -1,9 +1,22 @@ "use client" import { SessionProvider } from 'next-auth/react' import React, { createContext, useEffect, useState } from 'react' +import toast from 'react-hot-toast'; export const CartContext = createContext({}); +export function productTotal(cartProduct){ + let price = cartProduct.basePrice; + if(cartProduct.size){ + price += cartProduct.size.price; + } + if(cartProduct.extra?.length > 0){ + for(const extras of cartProduct.extra){ + price += extras.price + } + } + return price +} const AppProvider = ({children}) => { const [cartProducts, setCartProducts] = useState([]); @@ -25,10 +38,10 @@ const AppProvider = ({children}) => { function removeCartProduct(indexToRemove){ setCartProducts(prevCartProducts => { const newCartProducts = prevCartProducts.filter((v, index) => index !== indexToRemove); - saveCartProductsToLocalStorage(newCartProducts) - + saveCartProductsToLocalStorage(newCartProducts); return newCartProducts; }); + toast.success('Item is removed') } function saveCartProductsToLocalStorage(cartProducts){