Kailash Chandra
Kailash Chandra

Reputation: 155

Removing Item from array in reducer not working

I am trying to remove single item from cart in reducer but not it does not seems to work. itemsInCart is Updated in ADD_TO_CART but not in REMOVE_FROM_CART.

Can anyone suggest edit to my code....

I tried passing mutable/immutable params to manageItemCount()

function manageItemCount(allItems, newItem){
    let itemIndex = [];
    if(allItems.length > 0) {
        allItems.forEach((elem, i) => { 
            if (elem.product.id == newItem.product.id) {
                itemIndex.push(i);
            }; 
        });

        if(itemIndex.length){
            allItems.splice(itemIndex.length-1, 1);
        }
    }
    return allItems;
}

let alreadyRemovedFromCart = false;

const cartReducer = (state = {
    itemsInCart: []
}, action) => {
    switch (action.type) {
        case 'ADD_TO_CART':
            state = {
                ...state,
                itemsInCart: [...state.itemsInCart, action.payload]
            };
            break;
        case 'REMOVE_FROM_CART':
            state = {
                ...state,
                itemsInCart: manageItemCount(...state.itemsInCart, action.payload)
            };
            break;
    }

    return state;
}

export default cartReducer;

Upvotes: 0

Views: 147

Answers (1)

Krasimir
Krasimir

Reputation: 13549

manageItemCount accepts two parameters but you are spreading all the itemsInCart array. So it should be:

case 'REMOVE_FROM_CART':
  state = {
    ...state,
    itemsInCart: manageItemCount(state.itemsInCart, action.payload)
  };
  break

Also manageItemCount seems like it is doing just .filter on itemsInCart.

Upvotes: 1

Related Questions