84 lines
2.1 KiB
JavaScript
84 lines
2.1 KiB
JavaScript
"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 (
|
|
<dataContext.Provider value={contextElement}>
|
|
{children}
|
|
</dataContext.Provider>
|
|
);
|
|
}
|