"use client"; import React, { useEffect } from "react"; import { useContext, useState } from "react"; const dataContext = React.createContext(); export const useContextElement = () => { return useContext(dataContext); }; export default function Context({ children }) { const [cartProducts, setCartProducts] = useState([]); const [totalPrice, setTotalPrice] = useState(0); useEffect(() => { const subtotal = cartProducts.reduce((accumulator, product) => { return accumulator + product.quantity * product.price; }, 0); setTotalPrice(subtotal); }, [cartProducts]); const isAddedToCartProducts = (id) => { if (cartProducts.filter((elm) => elm.id == id)[0]) { return true; } return false; }; const addProductToCart = (id, qty) => { if (!isAddedToCartProducts(id)) { const item = { ...products.filter((elm) => elm.id == id)[0], quantity: qty ? qty : 1, }; setCartProducts((pre) => [...pre, item]); } }; const productQuantityInCart = (id) => { if (!isAddedToCartProducts(id)) { const item = { ...products.filter((elm) => elm.id == id)[0], }; return item.quantity; } else { return 0; } }; const updateQuantity = (id, qty) => { if (isAddedToCartProducts(id) && qty > 0) { let item = cartProducts.filter((elm) => elm.id == id)[0]; let items = [...cartProducts]; const itemIndex = items.indexOf(item); item.quantity = qty / 1; items[itemIndex] = item; setCartProducts(items); } }; useEffect(() => { const items = JSON.parse(localStorage.getItem("cartList")); if (items?.length) { setCartProducts(items); } }, []); useEffect(() => { localStorage.setItem("cartList", JSON.stringify(cartProducts)); }, [cartProducts]); const contextElement = { cartProducts, setCartProducts, totalPrice, addProductToCart, isAddedToCartProducts, productQuantityInCart, updateQuantity, }; return ( {children} ); }