createReducer(INITIAL_STATE, { [Types.LOAD_PRODUCTS_REQUEST]: state => state.merge({ loading: true }), [Types.LOAD_PRODUCTS_SUCCESS]: (state, { data }) => state.merge({ data, loading: false }), })
createReducer(INITIAL_STATE, { [Types.ADD_PRODUCT]: (state, { product }) => { const found = state.data.find(data => data.id === product.id); if (found) { return { data: state.data.map(item => (item.id === found.id ? { ...item, quantity: item.quantity + 1 } : item)), }; } return { data: [...state.data, { ...product, quantity: 1 }] }; }, [Types.REMOVE_PRODUCT]: (state, { product }) => ({ data: state.data.filter(data => data.id !== product.id), }), [Types.UPDATE_PRODUCT]: (state, { id, quantity }) => ({ data: state.data.map(data => (data.id === id ? { ...data, quantity } : data)), }), })
createReducer(INITIAL_STATE, { [Types.LOAD_CATEGORIES_REQUEST]: state => state.merge({ loading: true }), [Types.LOAD_CATEGORIES_SUCCESS]: (state, { data }) => state.merge({ data, loading: false, selectedCategory: data[0] }), [Types.SELECT_CATEGORY]: (state, { category }) => state.merge({ selectedCategory: category }), })
createReducer(INITIAL_STATE, { [Types.SET_ERROR]: (state, { message }) => state.merge({ visible: true, message }), [Types.HIDE_ERROR]: state => state.merge({ visible: false, message: null }), })