UNPKG

@shopgate/pwa-common-commerce

Version:

Commerce library for the Shopgate Connect PWA.

7 lines 2.24 kB
function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import PipelineRequest from'@shopgate/pwa-core/classes/PipelineRequest';import{logger}from'@shopgate/pwa-core/helpers';import{generateResultHash,shouldFetchFilters}from'@shopgate/pwa-common/helpers/redux';import{SHOPGATE_CATALOG_GET_FILTERS}from"../constants/Pipelines";import requestFilters from"../action-creators/requestFilters";import receiveFilters from"../action-creators/receiveFilters";import errorFilters from"../action-creators/errorFilters";import{getFilterResults}from"../selectors";import buildFilterParams from"./helpers/buildFilterParams";import processParams from"./helpers/processParams";/** * Retrieves the available filters for a list of products. * @param {Object} options The options for the getProducts request. * @param {Object} [options.filters = null] Filters object for the request * @returns {Function} A redux thunk */function fetchFilters(){var _ref=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},_ref$filters=_ref.filters,filters=_ref$filters===void 0?null:_ref$filters;return function(dispatch,getState){var state=getState();var params=buildFilterParams(state,filters);var hash=generateResultHash(_extends({pipeline:SHOPGATE_CATALOG_GET_FILTERS},params),false,false);var result=getFilterResults(state)[hash];if(!shouldFetchFilters(result)){return Promise.resolve(null);}// We need to process the params to handle edge cases in the pipeline params. var requestParams=processParams(params);if(Object.keys(requestParams).length===0){var error="Attempt to call ".concat(SHOPGATE_CATALOG_GET_FILTERS," pipeline without parameters - aborted");logger.error(error);return Promise.reject(new Error(error));}dispatch(requestFilters(hash));var request=new PipelineRequest(SHOPGATE_CATALOG_GET_FILTERS).setInput(requestParams).dispatch();request.then(function(response){dispatch(receiveFilters(hash,response.filters));})["catch"](function(){dispatch(errorFilters(hash));});return request;};}export default fetchFilters;