import { createSlice, PayloadAction } from '@reduxjs/toolkit'; export interface CartItem { id: string; variantId: string; title: string; price: number; quantity: number; image?: string; vendor?: string; } interface CartState { items: CartItem[]; isOpen: boolean; isLoading: boolean; total: number; } const initialState: CartState = { items: [], isOpen: false, isLoading: false, total: 0, }; /** * Cart Slice - Manages shopping cart state * Example slice - feel free to modify or delete */ const cartSlice = createSlice({ name: 'cart', initialState, reducers: { addToCart: (state, action: PayloadAction) => { const existingItem = state.items.find( item => item.variantId === action.payload.variantId ); if (existingItem) { existingItem.quantity += action.payload.quantity; } else { state.items.push(action.payload); } state.total = state.items.reduce((sum, item) => sum + (item.price * item.quantity), 0); }, removeFromCart: (state, action: PayloadAction) => { state.items = state.items.filter(item => item.variantId !== action.payload); state.total = state.items.reduce((sum, item) => sum + (item.price * item.quantity), 0); }, updateQuantity: (state, action: PayloadAction<{ variantId: string; quantity: number }>) => { const item = state.items.find(item => item.variantId === action.payload.variantId); if (item) { item.quantity = action.payload.quantity; if (item.quantity <= 0) { state.items = state.items.filter(i => i.variantId !== action.payload.variantId); } } state.total = state.items.reduce((sum, item) => sum + (item.price * item.quantity), 0); }, clearCart: (state) => { state.items = []; state.total = 0; }, toggleCart: (state) => { state.isOpen = !state.isOpen; }, setCartOpen: (state, action: PayloadAction) => { state.isOpen = action.payload; }, setCartLoading: (state, action: PayloadAction) => { state.isLoading = action.payload; }, }, }); export const { addToCart, removeFromCart, updateQuantity, clearCart, toggleCart, setCartOpen, setCartLoading, } = cartSlice.actions; export default cartSlice.reducer;