This commit is contained in:
Hamed
2026-08-01 15:15:34 +04:00
parent 87b518cf4e
commit 9697c98999
50 changed files with 2619 additions and 1 deletions
+71
View File
@@ -0,0 +1,71 @@
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
items: [], // { id, name, priceNumeric, priceLabel, qty, image }
isDrawerOpen: false,
};
const cartSlice = createSlice({
name: 'cart',
initialState,
reducers: {
addToCart: (state, action) => {
const product = action.payload;
const existing = state.items.find((item) => item.id === product.id);
if (existing) {
existing.qty += 1;
} else {
state.items.push({ ...product, qty: 1 });
}
state.isDrawerOpen = true;
},
removeFromCart: (state, action) => {
state.items = state.items.filter((item) => item.id !== action.payload);
},
incrementQty: (state, action) => {
const item = state.items.find((item) => item.id === action.payload);
if (item) item.qty += 1;
},
decrementQty: (state, action) => {
const item = state.items.find((item) => item.id === action.payload);
if (item && item.qty > 1) {
item.qty -= 1;
} else if (item) {
state.items = state.items.filter((i) => i.id !== action.payload);
}
},
clearCart: (state) => {
state.items = [];
},
openDrawer: (state) => {
state.isDrawerOpen = true;
},
closeDrawer: (state) => {
state.isDrawerOpen = false;
},
toggleDrawer: (state) => {
state.isDrawerOpen = !state.isDrawerOpen;
},
},
});
export const {
addToCart,
removeFromCart,
incrementQty,
decrementQty,
clearCart,
openDrawer,
closeDrawer,
toggleDrawer,
} = cartSlice.actions;
// Selectors
export const selectCartItems = (state) => state.cart.items;
export const selectCartCount = (state) =>
state.cart.items.reduce((sum, item) => sum + item.qty, 0);
export const selectCartTotal = (state) =>
state.cart.items.reduce((sum, item) => sum + item.qty * item.priceNumeric, 0);
export const selectIsDrawerOpen = (state) => state.cart.isDrawerOpen;
export default cartSlice.reducer;
+12
View File
@@ -0,0 +1,12 @@
import { configureStore } from '@reduxjs/toolkit';
import cartReducer from './cartSlice';
export const makeStore = () =>
configureStore({
reducer: {
cart: cartReducer,
},
});
// Singleton store for the client (App Router renders providers on the client tree).
export const store = makeStore();