prokuranepal/inventory_app

View on GitHub
src/store/reducers/cart.js

Summary

Maintainability
A
30 mins
Test Coverage
D
62%
import { ADD_TO_CART, REMOVE_FROM_CART } from '../actions/cart';
// import { ADD_ORDER } from '../actions/order';
import CartItem from '../../models/cart-items';
import { DELETE_ITEM } from '../actions/items';

export const initialState = {
    items: {}
};

export default (state = initialState, action) => {
    switch (action.type) {
        case ADD_TO_CART:
            const addedItem = action.item;
            const itemPrice = addedItem.price
            const itemTitle = addedItem.title;

            let updatedOrNewCartItem;

            if (state.items[addedItem._id]) {
                // already have the item in the cart
                updatedOrNewCartItem = new CartItem(
                    state.items[addedItem._id].quantity + action.quantity,
                    itemPrice,
                    itemTitle,
                );
            } else {
                updatedOrNewCartItem = new CartItem(action.quantity, itemPrice, itemTitle);
            }
            return {
                ...state,
                items: { ...state.items, [addedItem._id]: updatedOrNewCartItem },

            };

        case REMOVE_FROM_CART:
            const selectedCartItem = state.items[action.item_id];
            const currentQty = selectedCartItem.quantity;
            let updatedCartItems;
            if (currentQty > 1) {
                // need to reduce it, not erase it
                const updatedCartItem = new CartItem(
                    selectedCartItem.quantity - 1,
                    selectedCartItem.itemPrice,
                    selectedCartItem.itemTitle,

                );
                updatedCartItems = { ...state.items, [action.item_id]: updatedCartItem };
            } else {
                updatedCartItems = { ...state.items };
                delete updatedCartItems[action.item_id];
            }
            return {
                ...state,
                items: updatedCartItems,

            };
        // case ADD_ORDER:
        //     return initialState;
        case DELETE_ITEM:
            if (!state.items[action.item_id]) {
                return state;
            }
            const updatedItems = { ...state.items };
            const itemTotal = state.items[action.item_id].sum;
            delete updatedItems[action.item_id];
            return {
                ...state,
                items: updatedItems,
            };
    }

    return state;
};