@shopgate/pwa-common-commerce
Version:
Commerce library for the Shopgate Connect PWA.
47 lines (45 loc) • 2.33 kB
JavaScript
import PipelineRequest from '@shopgate/pwa-core/classes/PipelineRequest';
import { PROCESS_SEQUENTIAL } from '@shopgate/pwa-core/constants/ProcessTypes';
import { mutable } from '@shopgate/pwa-common/helpers/redux';
import configuration from '@shopgate/pwa-common/collections/Configuration';
import { PIPELINES } from '@shopgate/pwa-common/constants/Configuration';
import { SHOPGATE_CART_UPDATE_PRODUCTS } from "../constants/Pipelines";
import createPipelineErrorList from "../helpers/createPipelineErrorList";
import { ECART } from "../constants/PipelineErrors";
import updateProducts from "../action-creators/updateProductsInCart";
import successUpdateProductsInCart from "../action-creators/successUpdateProductsInCart";
import errorUpdateProductsInCart from "../action-creators/errorUpdateProductsInCart";
import { messagesHaveErrors, createErrorMessageList } from "../helpers";
/**
* Updates a product in the cart.
* @param {Array} updateData The data for the updateProductsInCart request.
* @return {Function} A redux thunk.
*/
function updateProductsInCart(updateData) {
return async dispatch => {
const {
[SHOPGATE_CART_UPDATE_PRODUCTS]: pipeline = SHOPGATE_CART_UPDATE_PRODUCTS
} = configuration.get(PIPELINES, {});
dispatch(updateProducts(updateData));
const request = new PipelineRequest(pipeline).setInput({
cartItems: updateData
}).setResponseProcessed(PROCESS_SEQUENTIAL).setErrorBlacklist(ECART).dispatch();
request.then(result => {
/**
* @deprecated: The property "messages" is not supposed to be part of the pipeline response.
* Specification demands errors to be returned as response object with an "error" property.
* This code snippet needs to be removed after fixing the `@shopgate/legacy-cart` extension.
*/
if (result.messages && messagesHaveErrors(result.messages)) {
dispatch(errorUpdateProductsInCart(updateData, createErrorMessageList(SHOPGATE_CART_UPDATE_PRODUCTS, result.messages)));
return;
}
dispatch(successUpdateProductsInCart());
}).catch(error => {
dispatch(errorUpdateProductsInCart(updateData, createPipelineErrorList(SHOPGATE_CART_UPDATE_PRODUCTS, error)));
});
return request;
};
}
/** @mixes {MutableFunction} */
export default mutable(updateProductsInCart);