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
|
import { createSlice } from "@reduxjs/toolkit";
export interface CartItem {
product_template_id: number,
quantity: number,
variant_id: number,
estPrice: string,
}
const cartSlice = createSlice({
name: "cart",
initialState: {
cart: [] as CartItem[],
maxPrice: null as number | null,
},
reducers: {
addCartItem(state, action: { payload: { product_template_id: number, variant_id: number, estPrice: string } }) {
const existingItem = state.cart.find((item) => item.product_template_id === action.payload.product_template_id && item.variant_id === action.payload.variant_id);
if (existingItem) {
existingItem.quantity += 1;
return;
}
state.cart.push({
product_template_id: action.payload.product_template_id,
quantity: 1,
variant_id: action.payload.variant_id,
estPrice: action.payload.estPrice,
});
},
removeCartItem(state, action: { payload: CartItem }) {
const existingItem = state.cart.find((item) => item.product_template_id === action.payload.product_template_id && item.variant_id === action.payload.variant_id);
if (existingItem) {
existingItem.quantity -= 1;
if (existingItem.quantity === 0) {
const idx = state.cart.findIndex((item) => item.product_template_id === action.payload.product_template_id && item.variant_id === action.payload.variant_id);
state.cart.splice(idx, 1);
}
}
},
setMaxPrice(state, action: { payload: number }) {
state.maxPrice = action.payload;
}
},
});
export const { addCartItem, removeCartItem, setMaxPrice } = cartSlice.actions;
export default cartSlice.reducer;
|