@shopgate/pwa-common-commerce
Version:
Commerce library for the Shopgate Connect PWA.
7 lines • 2.46 kB
JavaScript
import PipelineRequest from'@shopgate/pwa-core/classes/PipelineRequest';import{EEXIST}from'@shopgate/pwa-core/constants/Pipeline';import showModal from'@shopgate/pwa-common/actions/modal/showModal';import{mutable}from'@shopgate/pwa-common/helpers/redux';import{SHOPGATE_CATALOG_UPDATE_PRODUCT_REVIEW,SHOPGATE_CATALOG_ADD_PRODUCT_REVIEW}from"../constants/Pipelines";import requestSubmitReview from"../action-creators/requestSubmitReview";import receiveSubmitReview from"../action-creators/receiveSubmitReview";import errorSubmitReview from"../action-creators/errorSubmitReview";import resetSubmittedReview from"../action-creators/resetSubmittedReview";import{getUserReviewForProduct}from"../selectors/index";import fetchProduct from"../../product/actions/fetchProduct";/**
* Request a user review for a product from server.
* @param {Object} review The review data.
* @param {boolean} update Indicate whether the update pipeline be called or not.
* @returns {Function} The dispatched action.
*/function submitReview(review){var update=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;return function(dispatch,getState){var newReview=review;var originalReview=getUserReviewForProduct(getState(),{productId:review.productId});var fields=['rate','title','review','author','productId'];var pipelineData={};// Sanitize pipeline input
Object.keys(newReview).forEach(function(field){if(typeof newReview[field]==='string'){newReview[field]=newReview[field].trim();}if(fields.indexOf(field)!==-1){pipelineData[field]=newReview[field];}});dispatch(requestSubmitReview(review));if(update){var _request=new PipelineRequest(SHOPGATE_CATALOG_UPDATE_PRODUCT_REVIEW).setInput(pipelineData).setRetries(0).dispatch();_request.then(function(){dispatch(receiveSubmitReview(newReview));dispatch(fetchProduct(newReview.productId,true));})["catch"](function(){dispatch(resetSubmittedReview(originalReview));});return _request;}var request=new PipelineRequest(SHOPGATE_CATALOG_ADD_PRODUCT_REVIEW).setRetries(0).setErrorBlacklist([EEXIST]).setInput(pipelineData).dispatch();request.then(function(){dispatch(receiveSubmitReview(newReview));dispatch(fetchProduct(newReview.productId,true));})["catch"](function(error){if(error.code===EEXIST){dispatch(showModal({confirm:null,title:'modal.title_error',message:'modal.body_error'}));}dispatch(errorSubmitReview(newReview.productId));});return request;};}/** @mixes {MutableFunction} */export default mutable(submitReview);