-
Notifications
You must be signed in to change notification settings - Fork 601
Expand file tree
/
Copy pathAppContext.jsx
More file actions
103 lines (83 loc) · 2.54 KB
/
AppContext.jsx
File metadata and controls
103 lines (83 loc) · 2.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
'use client'
import { productsDummyData, userDummyData } from "@/assets/assets";
import { useUser } from "@clerk/nextjs";
import { useRouter } from "next/navigation";
import { createContext, useContext, useEffect, useState } from "react";
export const AppContext = createContext();
export const useAppContext = () => {
return useContext(AppContext)
}
export const AppContextProvider = (props) => {
const currency = process.env.NEXT_PUBLIC_CURRENCY
const router = useRouter()
const { user } = useUser()
const [products, setProducts] = useState([])
const [userData, setUserData] = useState(false)
const [isSeller, setIsSeller] = useState(true)
const [cartItems, setCartItems] = useState({})
const fetchProductData = async () => {
setProducts(productsDummyData)
}
const fetchUserData = async () => {
setUserData(userDummyData)
}
const addToCart = async (itemId) => {
let cartData = structuredClone(cartItems);
if (cartData[itemId]) {
cartData[itemId] += 1;
}
else {
cartData[itemId] = 1;
}
setCartItems(cartData);
}
const updateCartQuantity = async (itemId, quantity) => {
let cartData = structuredClone(cartItems);
if (quantity === 0) {
delete cartData[itemId];
} else {
cartData[itemId] = quantity;
}
setCartItems(cartData)
}
const getCartCount = () => {
let totalCount = 0;
for (const items in cartItems) {
if (cartItems[items] > 0) {
totalCount += cartItems[items];
}
}
return totalCount;
}
const getCartAmount = () => {
let totalAmount = 0;
for (const items in cartItems) {
let itemInfo = products.find((product) => product._id === items);
if (cartItems[items] > 0) {
totalAmount += itemInfo.offerPrice * cartItems[items];
}
}
return Math.floor(totalAmount * 100) / 100;
}
useEffect(() => {
fetchProductData()
}, [])
useEffect(() => {
fetchUserData()
}, [])
const value = {
user,
currency, router,
isSeller, setIsSeller,
userData, fetchUserData,
products, fetchProductData,
cartItems, setCartItems,
addToCart, updateCartQuantity,
getCartCount, getCartAmount
}
return (
<AppContext.Provider value={value}>
{props.children}
</AppContext.Provider>
)
}