@shopgate/pwa-common-commerce 7.27.5-alpha.2 → 7.27.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,10 +2,9 @@ import PipelineRequest from'@shopgate/pwa-core/classes/PipelineRequest';import{s
2
2
  * Fetches the data for a given category ID (including child categories).
3
3
  * @param {string} categoryId The category ID.
4
4
  * @return {Function} The dispatched action.
5
- */function fetchCategory(categoryId){return function(dispatch,getState){var category=getCategory(getState(),{categoryId:categoryId});// Check if we need to fetch data
6
- if(!shouldFetchData(category)){/**
5
+ */function fetchCategory(categoryId){return function(dispatch,getState){var category=getCategory(getState(),{categoryId:categoryId});if(!shouldFetchData(category)){/**
7
6
  * Child categories are maybe missing.
8
7
  * So we need to check it (check happens inside fetchCategoryChildren).
9
8
  * This is the case if we got categories from getRootCategory
10
- */if(category.childrenCount){dispatch(fetchCategoryChildren(categoryId));}return Promise.resolve(category);}// No data at all. So we have to fetch the category with children included
9
+ */if(category.childrenCount){dispatch(fetchCategoryChildren(categoryId));}return Promise.resolve(category);}// No data at all. So we have the fetch the category with children included
11
10
  dispatch(requestCategory(categoryId));var request=new PipelineRequest(SHOPGATE_CATALOG_GET_CATEGORY).setInput({categoryId:categoryId,includeChildren:true}).setResponseBehavior({error:errorBehavior.modal()}).dispatch();request.then(function(result){dispatch(receiveCategory(categoryId,result,result.children||[]));})["catch"](function(error){dispatch(errorCategory(categoryId,error.code));});return request;};}/** @mixes {MutableFunction} */export default mutable(fetchCategory);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopgate/pwa-common-commerce",
3
- "version": "7.27.5-alpha.2",
3
+ "version": "7.27.5",
4
4
  "description": "Commerce library for the Shopgate Connect PWA.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Shopgate <support@shopgate.com>",
@@ -19,8 +19,8 @@
19
19
  "reselect": "^4.1.8"
20
20
  },
21
21
  "devDependencies": {
22
- "@shopgate/pwa-common": "7.27.5-alpha.2",
23
- "@shopgate/pwa-core": "7.27.5-alpha.2",
22
+ "@shopgate/pwa-common": "7.27.5",
23
+ "@shopgate/pwa-core": "7.27.5",
24
24
  "lodash": "^4.17.4",
25
25
  "react": "~16.14.0",
26
26
  "react-dom": "~16.14.0"
@@ -0,0 +1,8 @@
1
+ import{EXPIRE_PRODUCT_DATA}from"../constants";/**
2
+ * Dispatches the EXPIRE_PRODUCT_DATA action object.
3
+ * Depending on the provided scopes, it will mark different types of product data as expired which
4
+ * will trigger a refetch of that data when needed.
5
+ * @param {Object} [options] The options object.
6
+ * @param {("price"|"media"|"description")[]} [options.scopes=[]] The scopes to apply the action to.
7
+ * @return {Object} The EXPIRE_PRODUCT_DATA action.
8
+ */var expireProductData=function expireProductData(){var _ref=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{},_ref$scopes=_ref.scopes,scopes=_ref$scopes===void 0?[]:_ref$scopes;return{type:EXPIRE_PRODUCT_DATA,scopes:scopes};};export default expireProductData;
@@ -0,0 +1,5 @@
1
+ import{REFRESH_EXPIRED_PDP_DATA}from"../constants";/**
2
+ * Creates the dispatched REFRESH_EXPIRED_PDP_DATA action object.
3
+ * When this action is dispatched, PDP subscriptions to fetch basic product data are re-triggered.
4
+ * @return {Object} The REFRESH_EXPIRED_PDP_DATA action.
5
+ */var refreshExpiredPDPData=function refreshExpiredPDPData(){return{type:REFRESH_EXPIRED_PDP_DATA};};export default refreshExpiredPDPData;
@@ -1,8 +1,4 @@
1
1
  var _excluded=["offset","limit"];function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}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 difference from'lodash/difference';import PipelineRequest from'@shopgate/pwa-core/classes/PipelineRequest';import{generateResultHash,shouldFetchData}from'@shopgate/pwa-common/helpers/redux';import{isNumber}from'@shopgate/pwa-common/helpers/validation';import configuration from'@shopgate/pwa-common/collections/Configuration';import{DEFAULT_PRODUCTS_FETCH_PARAMS}from'@shopgate/pwa-common/constants/Configuration';import{SORT_SCOPE_CATEGORY}from'@shopgate/engage/filter/constants';import{makeGetDefaultSortOrder}from'@shopgate/engage/filter/selectors';import{getFulfillmentParams}from'@shopgate/pwa-common-commerce/product/selectors/product';import{SHOPGATE_CATALOG_GET_PRODUCTS,SHOPGATE_CATALOG_GET_HIGHLIGHT_PRODUCTS,SHOPGATE_CATALOG_GET_LIVESHOPPING_PRODUCTS}from"../constants/Pipelines";import buildRequestFilters from"../../filter/actions/helpers/buildRequestFilters";import requestProducts from"../action-creators/requestProducts";import receiveProducts from"../action-creators/receiveProducts";import errorProducts from"../action-creators/errorProducts";import deleteProductsByIds from"../action-creators/deleteProductsByIds";import receiveProductsCached from"../action-creators/receiveProductsCached";import{makeGetProductResultByCustomHash}from"../selectors/product";/**
2
- * Checks if a product ID type is a product identifiers type.
3
- * @param {string} productIdType The product ID type to check.
4
- * @returns {boolean}
5
- */export var isProductIdentifiersProductIdType=function isProductIdentifiersProductIdType(productIdType){return['sku','ean','upc'].includes(productIdType);};/**
6
2
  * Process the pipeline params to be compatible.
7
3
  * Currently the categoryId field cannot be used in combination with the filter field. In order to
8
4
  * use them together the categoryId field has to be extracted into the filter field.
@@ -15,7 +11,7 @@ var _excluded=["offset","limit"];function _objectWithoutProperties(source,exclud
15
11
  */var processParams=function processParams(params,activeFilters){var includeSort=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var includeFilters=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;var filters=buildRequestFilters(activeFilters);var newParams=_extends({},params,{},includeFilters&&filters&&Object.keys(filters).length&&{filters:filters});/**
16
12
  * Check if the sort parameter should be included in the request parameters,
17
13
  * and remove it if necessary.
18
- */if(includeSort===false&&params&&params.sort){delete newParams.sort;}if(newParams.productIdType){if(isProductIdentifiersProductIdType(newParams.productIdType)){if(newParams.productIdType==='sku'){newParams.productSkus=newParams.productIds;}else if(newParams.productIdType==='ean'){newParams.productEans=newParams.productIds;}else if(newParams.productIdType==='upc'){newParams.productUpcs=newParams.productIds;}delete newParams.productIds;}}delete newParams.productIdType;return newParams;};var getDefaultSortOrder=makeGetDefaultSortOrder();/**
14
+ */if(includeSort===false&&params&&params.sort){delete newParams.sort;}return newParams;};var getDefaultSortOrder=makeGetDefaultSortOrder();/**
19
15
  * Retrieves a product from the Redux store.
20
16
  * @param {Object} options The options for the getProducts request.
21
17
  * @param {Object} options.params The params for the getProduct pipeline.
@@ -47,4 +43,4 @@ onBeforeDispatch();dispatch(requestProducts({hash:hash,cached:cached,cachedTime:
47
43
  * available products.
48
44
  * So we set the products count of the response as totalProductCount to decrease the
49
45
  * amount of logic, which is necessary to deal with product related pipeline.
50
- */if(typeof totalResultCount==='undefined'&&(pipeline===SHOPGATE_CATALOG_GET_HIGHLIGHT_PRODUCTS||pipeline===SHOPGATE_CATALOG_GET_LIVESHOPPING_PRODUCTS)){totalResultCount=response.products.length;}dispatch(receiveProducts({hash:hash,requestParams:requestParams,products:response.products,totalResultCount:totalResultCount,cached:cached,cachedTime:cachedTime}));if(!isProductIdentifiersProductIdType(params===null||params===void 0?void 0:params.productIdType)&&Array.isArray(params===null||params===void 0?void 0:params.productIds)){var requestIds=params===null||params===void 0?void 0:params.productIds;var responseIds=response.products.map(function(product){return product.id;});var missingResponseIds=difference(requestIds,responseIds);if(missingResponseIds.length>0){dispatch(deleteProductsByIds(missingResponseIds));}}})["catch"](function(error){dispatch(errorProducts({errorCode:error.code,hash:hash,requestParams:requestParams}));});return request;};}export default fetchProducts;
46
+ */if(typeof totalResultCount==='undefined'&&(pipeline===SHOPGATE_CATALOG_GET_HIGHLIGHT_PRODUCTS||pipeline===SHOPGATE_CATALOG_GET_LIVESHOPPING_PRODUCTS)){totalResultCount=response.products.length;}dispatch(receiveProducts({hash:hash,requestParams:requestParams,products:response.products,totalResultCount:totalResultCount,cached:cached,cachedTime:cachedTime}));if(Array.isArray(params===null||params===void 0?void 0:params.productIds)){var requestIds=params===null||params===void 0?void 0:params.productIds;var responseIds=response.products.map(function(product){return product.id;});var missingResponseIds=difference(requestIds,responseIds);if(missingResponseIds.length>0){dispatch(deleteProductsByIds(missingResponseIds));}}})["catch"](function(error){dispatch(errorProducts({errorCode:error.code,hash:hash,requestParams:requestParams}));});return request;};}export default fetchProducts;
@@ -1,23 +1,10 @@
1
- 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);}function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}import{getProductDataById}from'@shopgate/engage/product/selectors/product';import{shouldFetchData}from'@shopgate/pwa-common/helpers/redux';import fetchProducts,{isProductIdentifiersProductIdType}from"./fetchProducts";/**
2
- * Dispatches a fetch products action to retrieve products by their IDs.
3
- * @param {Object|string[]} optionsOrProductIds Action options or an array of product IDs
4
- * (deprecated)
5
- * @param {string[]} params.productIds The product id's to request
6
- * @param {string} [params.componentId=null] A unique id for the component that is using this action
7
- * @param {boolean} [params.cached=true] Whether to cache the result by hash
8
- * @param {boolean} [params.includeFulfillment=true] Whether to include fulfillment data to the
9
- * request
10
- *
11
- * @param {string} [componentId=null] (deprecated) A unique id for the component that is using this
12
- * action
13
- * @param {boolean} [cached=true] (deprecated) Whether to cache the result by hash
14
- * @param {boolean} [includeFulfillment=true] (deprecated) Whether to include fulfillment data to
15
- * the request
1
+ 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{getProductDataById}from'@shopgate/engage/product/selectors/product';import{shouldFetchData}from'@shopgate/pwa-common/helpers/redux';import fetchProducts from"./fetchProducts";/**
2
+ * Retrieves products by id from the store.
3
+ * @param {Array} productIds The product id's to request.
4
+ * @param {string} [componentId=null] A unique id for the component that is using this action.
5
+ * @param {boolean} [cached=true] cache result by hash
6
+ * @param {boolean} [includeFulfillment=true] includes fulfillment
16
7
  * @return {Function} A Redux Thunk
17
- */var fetchProductsById=function fetchProductsById(optionsOrProductIds){var componentId=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var cached=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var includeFulfillment=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;return function(dispatch,getState){var localProductIds;var localComponentId;var localCached;var localIncludeFulfillment;var productIdType;if(Array.isArray(optionsOrProductIds)){// Backwards compatibility for previous implementation where the function had a parameter list
18
- localProductIds=optionsOrProductIds;localComponentId=componentId||null;localCached=cached!==undefined?cached:true;localIncludeFulfillment=includeFulfillment!==undefined?includeFulfillment:true;}else if(_typeof(optionsOrProductIds)==='object'&&optionsOrProductIds!==null){// New object parameter mode
19
- localProductIds=optionsOrProductIds.productIds;var _optionsOrProductIds$=optionsOrProductIds.componentId;localComponentId=_optionsOrProductIds$===void 0?null:_optionsOrProductIds$;var _optionsOrProductIds$2=optionsOrProductIds.cached;localCached=_optionsOrProductIds$2===void 0?true:_optionsOrProductIds$2;var _optionsOrProductIds$3=optionsOrProductIds.includeFulfillment;localIncludeFulfillment=_optionsOrProductIds$3===void 0?true:_optionsOrProductIds$3;productIdType=optionsOrProductIds.productIdType;}var requestProductIds=localProductIds;// When the productIds are regular product IDs, we can check the Redux store for existing
20
- // and only request the missing ones. That certainly doesn't work for SKUs, EANs or UPCs,
21
- if(!isProductIdentifiersProductIdType(productIdType)){var state=getState();var products=state.product.productsById;// Filter out only the products that are not yet available in the store.
22
- requestProductIds=localProductIds.filter(function(id){return shouldFetchData(products[id]);});// Then only perform a pipeline request if there are products missing.
23
- if(!requestProductIds.length){var productsById=localProductIds.map(function(id){return getProductDataById(state,{productId:id});});var totalProductCount=productsById.length;return{products:productsById,totalProductCount:totalProductCount};}}return dispatch(fetchProducts(_extends({},localComponentId&&{id:localComponentId},{cached:localCached,params:_extends({productIds:requestProductIds},productIdType&&{productIdType:productIdType}),includeFulfillment:localIncludeFulfillment,includeFilters:false,includeSort:false})));};};export default fetchProductsById;
8
+ */var fetchProductsById=function fetchProductsById(productIds){var componentId=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var cached=arguments.length>2&&arguments[2]!==undefined?arguments[2]:true;var includeFulfillment=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;return function(dispatch,getState){var state=getState();var products=state.product.productsById;// Filter out only the products that are not yet available in the store.
9
+ var missingIds=productIds.filter(function(id){return shouldFetchData(products[id]);});// Then only perform a pipeline request if there are products missing.
10
+ if(!missingIds.length){var productsById=productIds.map(function(id){return getProductDataById(state,{productId:id});});var totalProductCount=productsById.length;return{products:productsById,totalProductCount:totalProductCount};}return dispatch(fetchProducts(_extends({},componentId&&{id:componentId},{cached:cached,params:{productIds:missingIds},includeFulfillment:includeFulfillment,includeFilters:false,includeSort:false})));};};export default fetchProductsById;
@@ -1,4 +1,4 @@
1
- var _excluded=["useDefaultRequestForProductIds","productIdType"];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);}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}import fetchHighlightProducts from"./fetchHighlightProducts";import fetchProducts from"./fetchProducts";import fetchProductsById from"./fetchProductsById";/**
1
+ var _excluded=["useDefaultRequestForProductIds"];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);}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}import fetchHighlightProducts from"./fetchHighlightProducts";import fetchProducts from"./fetchProducts";import fetchProductsById from"./fetchProductsById";/**
2
2
  * Dispatches other actions based on the query type.
3
3
  * @param {number|string} type The query type.
4
4
  * @param {string} value The value to use with the query.
@@ -8,8 +8,8 @@ var _excluded=["useDefaultRequestForProductIds","productIdType"];function _exten
8
8
  */var fetchProductsByQuery=function fetchProductsByQuery(type,value){var options=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};var id=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;return function(dispatch){/**
9
9
  * Remove all properties from the options which are just intended to be used inside this function
10
10
  * and not supposed to be used for the actual products request.
11
- */var _options$useDefaultRe=options.useDefaultRequestForProductIds,useDefaultRequestForProductIds=_options$useDefaultRe===void 0?false:_options$useDefaultRe,_options$productIdTyp=options.productIdType,productIdType=_options$productIdTyp===void 0?undefined:_options$productIdTyp,sanitizedOptions=_objectWithoutProperties(options,_excluded);switch(type){// Product highlights
12
- case 1:{var params=_extends({},sanitizedOptions);return dispatch(fetchHighlightProducts(_extends({params:params},id&&{id:id})));}// Search phrase
11
+ */var _options$useDefaultRe=options.useDefaultRequestForProductIds,useDefaultRequestForProductIds=_options$useDefaultRe===void 0?false:_options$useDefaultRe,sanitizedOptions=_objectWithoutProperties(options,_excluded);switch(type){// Product highlights
12
+ case 1:{var params=_extends({},sanitizedOptions);dispatch(fetchHighlightProducts(_extends({params:params},id&&{id:id})));break;}// Search phrase
13
13
  case 2:case 3:{var _params=_extends({searchPhrase:value},sanitizedOptions);return dispatch(fetchProducts(_extends({params:_params},id&&{id:id},{includeFilters:false})));}// Product ID's
14
14
  case 4:{/**
15
15
  * By default the productIds query type bypasses the regular product request logic. It will
@@ -21,6 +21,6 @@ case 4:{/**
21
21
  *
22
22
  * ATTENTION: To make the system work completely, also the "getProductsResult" selector helper
23
23
  * needs to be called with this parameter.
24
- */if(useDefaultRequestForProductIds){var _params2=_extends({productIds:value,productIdType:productIdType},sanitizedOptions);// Limit and offset are not fully supported for product requests with productId list
25
- delete _params2.limit;delete _params2.offset;return dispatch(fetchProducts(_extends({params:_params2},id&&{id:id},{includeFilters:false,includeSort:false})));}return dispatch(fetchProductsById(value,id));}// Category
24
+ */if(useDefaultRequestForProductIds){var _params2=_extends({productIds:value},sanitizedOptions);// Limit and offset are not fully supported for product requests with productId list
25
+ delete _params2.limit;delete _params2.offset;dispatch(fetchProducts(_extends({params:_params2},id&&{id:id},{includeFilters:false})));}else{dispatch(fetchProductsById(value,id));}break;}// Category
26
26
  case 5:{var _params3=_extends({categoryId:value},sanitizedOptions);return dispatch(fetchProducts(_extends({params:_params3},id&&{id:id},{includeFilters:false})));}default:}return null;};};export default fetchProductsByQuery;
@@ -10,9 +10,9 @@ export var REQUEST_PRODUCT_PROPERTIES='REQUEST_PRODUCT_PROPERTIES';export var RE
10
10
  export var REQUEST_PRODUCT_SHIPPING='REQUEST_PRODUCT_SHIPPING';export var RECEIVE_PRODUCT_SHIPPING='RECEIVE_PRODUCT_SHIPPING';export var ERROR_PRODUCT_SHIPPING='ERROR_PRODUCT_SHIPPING';// PRODUCT IMAGES
11
11
  export var REQUEST_PRODUCT_IMAGES='REQUEST_PRODUCT_IMAGES';export var RECEIVE_PRODUCT_IMAGES='RECEIVE_PRODUCT_IMAGES';export var ERROR_PRODUCT_IMAGES='ERROR_PRODUCT_IMAGES';// PRODUCT MEDIA
12
12
  export var REQUEST_PRODUCT_MEDIA='REQUEST_PRODUCT_MEDIA';export var RECEIVE_PRODUCT_MEDIA='RECEIVE_PRODUCT_MEDIA';export var ERROR_PRODUCT_MEDIA='ERROR_PRODUCT_MEDIA';// CURRENT PRODUCT
13
- export var RESET_CURRENT_PRODUCT='RESET_CURRENT_PRODUCT';export var EXPIRE_PRODUCT_BY_ID='EXPIRE_PRODUCT_BY_ID';export var EXPIRE_PRODUCTS_BY_HASH='EXPIRE_PRODUCTS_BY_HASH';export var DELETE_PRODUCTS_BY_IDS='DELETE_PRODUCTS_BY_IDS';export var SET_PRODUCT_ID='SET_PRODUCT_ID';export var SET_PRODUCT_VARIANT_ID='SET_PRODUCT_VARIANT_ID';export var SET_PRODUCT_QUANTITY='SET_PRODUCT_QUANTITY';export var SET_PRODUCT_OPTION='SET_PRODUCT_OPTION';// PRODUCT AVAILABILITY STATES
13
+ export var RESET_CURRENT_PRODUCT='RESET_CURRENT_PRODUCT';export var EXPIRE_PRODUCT_BY_ID='EXPIRE_PRODUCT_BY_ID';export var EXPIRE_PRODUCTS_BY_HASH='EXPIRE_PRODUCTS_BY_HASH';export var EXPIRE_PRODUCT_DATA='EXPIRE_PRODUCT_DATA';export var DELETE_PRODUCTS_BY_IDS='DELETE_PRODUCTS_BY_IDS';export var SET_PRODUCT_ID='SET_PRODUCT_ID';export var SET_PRODUCT_VARIANT_ID='SET_PRODUCT_VARIANT_ID';export var SET_PRODUCT_QUANTITY='SET_PRODUCT_QUANTITY';export var SET_PRODUCT_OPTION='SET_PRODUCT_OPTION';// PRODUCT AVAILABILITY STATES
14
14
  export var AVAILABILITY_STATE_OK='ok';export var AVAILABILITY_STATE_WARNING='warning';export var AVAILABILITY_STATE_ALERT='alert';export var OPTION_TYPE_SELECT='select';export var OPTION_TYPE_TEXT='text';export var PROPERTIES_FILTER_WHITELIST='whitelist';export var PROPERTIES_FILTER_BLACKLIST='blacklist';// PRODUCT RELATIONS
15
15
  export var REQUEST_PRODUCT_RELATIONS='REQUEST_PRODUCT_RELATIONS';export var RECEIVE_PRODUCT_RELATIONS='RECEIVE_PRODUCT_RELATIONS';export var ERROR_PRODUCT_RELATIONS='ERROR_PRODUCT_RELATIONS';export var PRODUCT_RELATIONS_DEFAULT_LIMIT=20;// PRODUCT RELATIONS TYPES
16
16
  export var PRODUCT_RELATIONS_TYPE_CROSS_SELLING='crossSelling';export var PRODUCT_RELATIONS_TYPE_UPSELLING='upselling';export var PRODUCT_RELATIONS_TYPE_BONUS='bonus';export var PRODUCT_RELATIONS_TYPE_BOUGHT_WITH='boughtWith';export var PRODUCT_RELATIONS_TYPE_CUSTOM='custom';// PRODUCT METADATA
17
17
  export var UPDATE_METADATA='UPDATE_METADATA';// PRODUCT NOT AVAILABLE + REASONS
18
- export var PRODUCT_NOT_AVAILABLE='PRODUCT_NOT_AVAILABLE';export var NOT_AVAILABLE_EFFECTIVITY_DATES='EFFECTIVITY_DATES';
18
+ export var PRODUCT_NOT_AVAILABLE='PRODUCT_NOT_AVAILABLE';export var NOT_AVAILABLE_EFFECTIVITY_DATES='EFFECTIVITY_DATES';export var REFRESH_EXPIRED_PDP_DATA='REFRESH_EXPIRED_PDP_DATA';
@@ -1,6 +1,9 @@
1
- function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_DESCRIPTION,RECEIVE_PRODUCT_DESCRIPTION,ERROR_PRODUCT_DESCRIPTION}from"../constants";/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_DESCRIPTION,RECEIVE_PRODUCT_DESCRIPTION,ERROR_PRODUCT_DESCRIPTION,EXPIRE_PRODUCT_DATA}from"../constants";/**
2
2
  * Stores product descriptions by their product ID.
3
3
  * @param {Object} [state={}] The current state.
4
4
  * @param {Object} action The action object.
5
5
  * @return {Object} The new state.
6
- */export default function descriptionsByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_DESCRIPTION:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_DESCRIPTION:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{description:action.description,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));case ERROR_PRODUCT_DESCRIPTION:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));default:return state;}}
6
+ */export default function descriptionsByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_DESCRIPTION:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_DESCRIPTION:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{description:action.description,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));case ERROR_PRODUCT_DESCRIPTION:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));// Mark all product descriptions as expired when action is dispatched with
7
+ // the "description" scope
8
+ case EXPIRE_PRODUCT_DATA:{if(Array.isArray(action.scopes)&&action.scopes.includes('description')){// Expire all descriptions
9
+ return Object.keys(state).reduce(function(acc,productId){acc[productId]=_extends({},state[productId],{expires:0});return acc;},{});}return state;}default:return state;}}
@@ -1,6 +1,8 @@
1
- function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_IMAGES,RECEIVE_PRODUCT_IMAGES,ERROR_PRODUCT_IMAGES}from"../constants";/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_IMAGES,RECEIVE_PRODUCT_IMAGES,ERROR_PRODUCT_IMAGES,EXPIRE_PRODUCT_DATA}from"../constants";/**
2
2
  * Stores product images by product id
3
3
  * @param {Object} state Current state.
4
4
  * @param {Object} action The action object.
5
5
  * @returns {Object}
6
- */export default function imagesByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_IMAGES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_IMAGES:return _extends({},state,_defineProperty({},action.productId,{isFetching:false,expires:Date.now()+PRODUCT_LIFETIME,images:action.productImages}));case ERROR_PRODUCT_IMAGES:return _extends({},state,_defineProperty({},action.productId,{isFetching:false}));default:return state;}}
6
+ */export default function imagesByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_IMAGES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_IMAGES:return _extends({},state,_defineProperty({},action.productId,{isFetching:false,expires:Date.now()+PRODUCT_LIFETIME,images:action.productImages}));case ERROR_PRODUCT_IMAGES:return _extends({},state,_defineProperty({},action.productId,{isFetching:false}));// Mark all product images as expired when action is dispatched with the "media" scope
7
+ case EXPIRE_PRODUCT_DATA:{if(Array.isArray(action.scopes)&&action.scopes.includes('media')){// Expire all descriptions
8
+ return Object.keys(state).reduce(function(acc,productId){acc[productId]=_extends({},state[productId],{expires:0});return acc;},{});}return state;}default:return state;}}
@@ -1,6 +1,7 @@
1
- function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_MEDIA,RECEIVE_PRODUCT_MEDIA,ERROR_PRODUCT_MEDIA}from"../constants";/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_MEDIA,RECEIVE_PRODUCT_MEDIA,ERROR_PRODUCT_MEDIA,EXPIRE_PRODUCT_DATA}from"../constants";/**
2
2
  * Stores product media by the ID of the related parent product.
3
3
  * @param {Object} [state={}] The current state.
4
4
  * @param {Object} action The action object.
5
5
  * @return {Object} The new state.
6
- */export default function mediaByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_MEDIA:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_MEDIA:{return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{media:action.media,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));}case ERROR_PRODUCT_MEDIA:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));default:return state;}}
6
+ */export default function mediaByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_MEDIA:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_MEDIA:{return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{media:action.media,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));}case ERROR_PRODUCT_MEDIA:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));// Mark all product media as expired when action is dispatched with the "media" scope
7
+ case EXPIRE_PRODUCT_DATA:{if(Array.isArray(action.scopes)&&action.scopes.includes('media')){return Object.keys(state).reduce(function(acc,productId){acc[productId]=_extends({},state[productId],{expires:0});return acc;},{});}return state;}default:return state;}}
@@ -1,4 +1,4 @@
1
- function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}function _toPropertyKey(arg){var key=_toPrimitive(arg,"string");return _typeof(key)==="symbol"?key:String(key);}function _toPrimitive(input,hint){if(_typeof(input)!=="object"||input===null)return input;var prim=input[Symbol.toPrimitive];if(prim!==undefined){var res=prim.call(input,hint||"default");if(_typeof(res)!=="object")return res;throw new TypeError("@@toPrimitive must return a primitive value.");}return(hint==="string"?String:Number)(input);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{ENOTFOUND}from'@shopgate/pwa-core/constants/Pipeline';import{PRODUCT_LIFETIME,REQUEST_PRODUCT,RECEIVE_PRODUCT,RECEIVE_PRODUCTS,ERROR_PRODUCT,UPDATE_METADATA,EXPIRE_PRODUCT_BY_ID,DELETE_PRODUCTS_BY_IDS,RECEIVE_PRODUCT_RELATIONS}from"../constants";import handleProductCollection from"./helpers/handleProductCollection";/**
1
+ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}function _toPropertyKey(arg){var key=_toPrimitive(arg,"string");return _typeof(key)==="symbol"?key:String(key);}function _toPrimitive(input,hint){if(_typeof(input)!=="object"||input===null)return input;var prim=input[Symbol.toPrimitive];if(prim!==undefined){var res=prim.call(input,hint||"default");if(_typeof(res)!=="object")return res;throw new TypeError("@@toPrimitive must return a primitive value.");}return(hint==="string"?String:Number)(input);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{ENOTFOUND}from'@shopgate/pwa-core/constants/Pipeline';import{PRODUCT_LIFETIME,REQUEST_PRODUCT,RECEIVE_PRODUCT,RECEIVE_PRODUCTS,ERROR_PRODUCT,UPDATE_METADATA,EXPIRE_PRODUCT_BY_ID,DELETE_PRODUCTS_BY_IDS,RECEIVE_PRODUCT_RELATIONS,EXPIRE_PRODUCT_DATA}from"../constants";import handleProductCollection from"./helpers/handleProductCollection";/**
2
2
  * Stores products by their ID.
3
3
  * @param {Object} [state={}] The current state.
4
4
  * @param {Object} action The action object.
@@ -7,4 +7,5 @@ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="s
7
7
  var _action$productId2=action.productId,ignore=state[_action$productId2],rest=_objectWithoutProperties(state,[_action$productId2].map(_toPropertyKey));return rest;}return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));case UPDATE_METADATA:{var _state$action$product2=state[action.productId].productData,productData=_state$action$product2===void 0?{}:_state$action$product2;// Merge the given metadata with the existing metadata.
8
8
  var metadata=_extends({},productData.metadata,{},action.metadata);// Put the metadata back into the productData.
9
9
  var updatedProductData=_extends({},productData,{metadata:metadata});// Put the updated product back into the state.
10
- return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{productData:updatedProductData})));}case EXPIRE_PRODUCT_BY_ID:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{expires:0})));case DELETE_PRODUCTS_BY_IDS:{var nextState=_extends({},state);if(Array.isArray(action===null||action===void 0?void 0:action.productIds)){action.productIds.forEach(function(productId){delete nextState[productId];});}return nextState;}default:return state;}}
10
+ return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{productData:updatedProductData})));}case EXPIRE_PRODUCT_BY_ID:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{expires:0})));// Mark all product data as expired
11
+ case EXPIRE_PRODUCT_DATA:{if(Array.isArray(action.scopes)&&action.scopes.includes('price')){return Object.keys(state).reduce(function(accumulator,productId){accumulator[productId]=_extends({},accumulator[productId],{expires:0});return accumulator;},_extends({},state));}return state;}case DELETE_PRODUCTS_BY_IDS:{var nextState=_extends({},state);if(Array.isArray(action===null||action===void 0?void 0:action.productIds)){action.productIds.forEach(function(productId){delete nextState[productId];});}return nextState;}default:return state;}}
@@ -1,6 +1,6 @@
1
- function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_PROPERTIES,RECEIVE_PRODUCT_PROPERTIES,ERROR_PRODUCT_PROPERTIES}from"../constants";/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_PROPERTIES,RECEIVE_PRODUCT_PROPERTIES,ERROR_PRODUCT_PROPERTIES,EXPIRE_PRODUCT_DATA}from"../constants";/**
2
2
  * Stores product properties by their product ID.
3
3
  * @param {Object} [state={}] The current state.
4
4
  * @param {Object} action The action object.
5
5
  * @return {Object} The new state.
6
- */export default function propertiesByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_PROPERTIES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_PROPERTIES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{properties:action.properties,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));case ERROR_PRODUCT_PROPERTIES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));default:return state;}}
6
+ */export default function propertiesByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_PROPERTIES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_PROPERTIES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{properties:action.properties,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));case ERROR_PRODUCT_PROPERTIES:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));case EXPIRE_PRODUCT_DATA:{return Object.keys(state).reduce(function(acc,productId){acc[productId]=_extends({},state[productId],{expires:0});return acc;},{});}default:return state;}}
@@ -1,4 +1,4 @@
1
- function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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 uniq from'lodash/uniq';import pickBy from'lodash/pickBy';import{ENOTFOUND}from'@shopgate/pwa-core';import{SELECT_GLOBAL_LOCATION}from'@shopgate/engage/core';import{PRODUCT_LIFETIME,REQUEST_PRODUCTS,RECEIVE_PRODUCTS,ERROR_PRODUCTS,EXPIRE_PRODUCT_BY_ID,EXPIRE_PRODUCTS_BY_HASH,ERROR_PRODUCT}from"../constants";/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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 uniq from'lodash/uniq';import pickBy from'lodash/pickBy';import{ENOTFOUND}from'@shopgate/pwa-core';import{SELECT_GLOBAL_LOCATION}from'@shopgate/engage/core';import{PRODUCT_LIFETIME,REQUEST_PRODUCTS,RECEIVE_PRODUCTS,ERROR_PRODUCTS,EXPIRE_PRODUCT_BY_ID,EXPIRE_PRODUCTS_BY_HASH,ERROR_PRODUCT,EXPIRE_PRODUCT_DATA}from"../constants";/**
2
2
  * Stores a collection of products by the related hash of the request parameters.
3
3
  * @param {Object} [state={}] The current state.
4
4
  * @param {Object} action The current redux action.
@@ -7,6 +7,7 @@ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj
7
7
  * If there are no previous products and no incoming products
8
8
  * its set to empty array, otherwise it will be an array of the previous and the
9
9
  * new products. Duplicates are removed.
10
- */var stateProducts=products||nextProducts.length?uniq([].concat(products||[],nextProducts.map(function(product){return product.id;}))):[];return _extends({},state,_defineProperty({},action.hash,_extends({},state[action.hash],{products:stateProducts,totalResultCount:typeof action.totalResultCount!=='undefined'?action.totalResultCount:null,isFetching:false,expires:action.cached?Date.now()+(action.cachedTime||PRODUCT_LIFETIME):0})));}/* Remove not found product from hash results */case ERROR_PRODUCT:if(action.errorCode===ENOTFOUND){return Object.keys(state).reduce(function(accumulator,hash){if(accumulator[hash].products&&accumulator[hash].products.includes(action.productId)){accumulator[hash]=_extends({},accumulator[hash],{products:accumulator[hash].products.filter(function(pId){return pId!==action.productId;})});}return accumulator;},_extends({},state));}return state;case EXPIRE_PRODUCTS_BY_HASH:{return _extends({},state,_defineProperty({},action.hash,_extends({},state[action.hash],{products:[],expires:0})));}case EXPIRE_PRODUCT_BY_ID:{var productIds=[].concat(action.productId);return Object.keys(state).reduce(function(accumulator,hash){if(accumulator[hash].products&&productIds.some(function(id){return accumulator[hash].products.includes(id);})){accumulator[hash]=_extends({},accumulator[hash],{expires:0},action.complete&&{products:accumulator[hash].products.filter(function(id){return!productIds.includes(id);})});}return accumulator;},_extends({},state));}case ERROR_PRODUCTS:return _extends({},state,_defineProperty({},action.hash,_extends({},state[action.hash],{isFetching:false})));case SELECT_GLOBAL_LOCATION:// Remove all hashes that are not bound to a location
10
+ */var stateProducts=products||nextProducts.length?uniq([].concat(products||[],nextProducts.map(function(product){return product.id;}))):[];return _extends({},state,_defineProperty({},action.hash,_extends({},state[action.hash],{products:stateProducts,totalResultCount:typeof action.totalResultCount!=='undefined'?action.totalResultCount:null,isFetching:false,expires:action.cached?Date.now()+(action.cachedTime||PRODUCT_LIFETIME):0})));}/* Remove not found product from hash results */case ERROR_PRODUCT:if(action.errorCode===ENOTFOUND){return Object.keys(state).reduce(function(accumulator,hash){if(accumulator[hash].products&&accumulator[hash].products.includes(action.productId)){accumulator[hash]=_extends({},accumulator[hash],{products:accumulator[hash].products.filter(function(pId){return pId!==action.productId;})});}return accumulator;},_extends({},state));}return state;case EXPIRE_PRODUCTS_BY_HASH:{return _extends({},state,_defineProperty({},action.hash,_extends({},state[action.hash],{products:[],expires:0})));}case EXPIRE_PRODUCT_BY_ID:{var productIds=[].concat(action.productId);return Object.keys(state).reduce(function(accumulator,hash){if(accumulator[hash].products&&productIds.some(function(id){return accumulator[hash].products.includes(id);})){accumulator[hash]=_extends({},accumulator[hash],{expires:0},action.complete&&{products:accumulator[hash].products.filter(function(id){return!productIds.includes(id);})});}return accumulator;},_extends({},state));}// Mark all product data as expired
11
+ case EXPIRE_PRODUCT_DATA:{if(Array.isArray(action.scopes)&&action.scopes.includes('price')){return Object.keys(state).reduce(function(accumulator,hash){accumulator[hash]=_extends({},accumulator[hash],{expires:0});return accumulator;},_extends({},state));}return state;}case ERROR_PRODUCTS:return _extends({},state,_defineProperty({},action.hash,_extends({},state[action.hash],{isFetching:false})));case SELECT_GLOBAL_LOCATION:// Remove all hashes that are not bound to a location
11
12
  // because stock information may change per location
12
13
  return pickBy(state,function(value,key){return!JSON.parse(key).locationCodes;});default:return state;}}
@@ -1,6 +1,6 @@
1
- function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_VARIANTS,RECEIVE_PRODUCT_VARIANTS,ERROR_PRODUCT_VARIANTS,EXPIRE_PRODUCT_BY_ID}from"../constants";/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}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{PRODUCT_LIFETIME,REQUEST_PRODUCT_VARIANTS,RECEIVE_PRODUCT_VARIANTS,ERROR_PRODUCT_VARIANTS,EXPIRE_PRODUCT_BY_ID,EXPIRE_PRODUCT_DATA}from"../constants";/**
2
2
  * Stores product variants by the ID of the related parent product.
3
3
  * @param {Object} [state={}] The current state.
4
4
  * @param {Object} action The action object.
5
5
  * @return {Object} The new state.
6
- */export default function variantsByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_VARIANTS:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_VARIANTS:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{variants:action.variants,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));case ERROR_PRODUCT_VARIANTS:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));case EXPIRE_PRODUCT_BY_ID:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{expires:0})));default:return state;}}
6
+ */export default function variantsByProductId(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case REQUEST_PRODUCT_VARIANTS:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT_VARIANTS:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{variants:action.variants,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));case ERROR_PRODUCT_VARIANTS:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:false})));case EXPIRE_PRODUCT_BY_ID:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{expires:0})));case EXPIRE_PRODUCT_DATA:{return Object.keys(state).reduce(function(acc,productId){acc[productId]=_extends({},state[productId],{expires:0});return acc;},{});}default:return state;}}
@@ -1,4 +1,4 @@
1
- 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);}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import'rxjs/add/operator/switchMap';import'rxjs/add/observable/of';import{Observable}from'rxjs/Observable';import{ENOTFOUND}from'@shopgate/pwa-core';import{main$}from'@shopgate/pwa-common/streams/main';import{routeWillEnter$,routeWillLeave$,routeDidUpdate$}from'@shopgate/pwa-common/streams/router';import{pwaDidAppear$}from'@shopgate/pwa-common/streams';import{getCurrentRoute}from'@shopgate/pwa-common/selectors/router';import{hex2bin}from'@shopgate/pwa-common/helpers/data';import{getBaseProduct}from"../selectors/product";import{ITEM_PATTERN,ITEM_GALLERY_PATTERN,RECEIVE_PRODUCT,RECEIVE_PRODUCT_CACHED,RECEIVE_PRODUCT_RELATIONS,ERROR_PRODUCT,ERROR_PRODUCT_DESCRIPTION,ERROR_PRODUCT_IMAGES,ERROR_PRODUCT_VARIANTS,ERROR_PRODUCT_PROPERTIES,ERROR_PRODUCT_OPTIONS,ERROR_PRODUCT_SHIPPING,PRODUCT_NOT_AVAILABLE,RECEIVE_PRODUCTS_CACHED,RECEIVE_PRODUCTS,PROVIDE_PRODUCT_BUFFER_TIME,PROVIDE_PRODUCT}from"../constants";/**
1
+ 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);}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import'rxjs/add/operator/switchMap';import'rxjs/add/observable/of';import{Observable}from'rxjs/Observable';import{ENOTFOUND}from'@shopgate/pwa-core';import{main$}from'@shopgate/pwa-common/streams/main';import{routeWillEnter$,routeWillLeave$,routeDidUpdate$}from'@shopgate/pwa-common/streams/router';import{pwaDidAppear$}from'@shopgate/pwa-common/streams';import{getCurrentRoute}from'@shopgate/pwa-common/selectors/router';import{hex2bin}from'@shopgate/pwa-common/helpers/data';import{getBaseProduct}from"../selectors/product";import{ITEM_PATTERN,ITEM_GALLERY_PATTERN,RECEIVE_PRODUCT,RECEIVE_PRODUCT_CACHED,RECEIVE_PRODUCT_RELATIONS,ERROR_PRODUCT,ERROR_PRODUCT_DESCRIPTION,ERROR_PRODUCT_IMAGES,ERROR_PRODUCT_VARIANTS,ERROR_PRODUCT_PROPERTIES,ERROR_PRODUCT_OPTIONS,ERROR_PRODUCT_SHIPPING,PRODUCT_NOT_AVAILABLE,RECEIVE_PRODUCTS_CACHED,RECEIVE_PRODUCTS,PROVIDE_PRODUCT_BUFFER_TIME,PROVIDE_PRODUCT,EXPIRE_PRODUCT_DATA,REFRESH_EXPIRED_PDP_DATA}from"../constants";/**
2
2
  * Emits when the category route comes active again after a legacy page was active.
3
3
  */export var productRouteReappeared$=pwaDidAppear$.filter(function(_ref){var action=_ref.action;return action.route.pattern===ITEM_PATTERN;});export var productWillEnter$=routeWillEnter$.merge(routeDidUpdate$).filter(function(_ref2){var action=_ref2.action;return action.route.pattern===ITEM_PATTERN;});export var variantWillUpdate$=routeDidUpdate$.filter(function(_ref3){var action=_ref3.action;return action.route.pattern===ITEM_PATTERN;});export var galleryWillEnter$=routeWillEnter$.filter(function(_ref4){var action=_ref4.action;return action.route.pattern===ITEM_GALLERY_PATTERN;});export var galleryWillLeave$=routeWillLeave$.filter(function(_ref5){var action=_ref5.action;return action.route.pattern===ITEM_GALLERY_PATTERN;});export var productReceived$=main$.filter(function(_ref6){var action=_ref6.action;return action.type===RECEIVE_PRODUCT;}).distinctUntilChanged();/** Dispatched when ERROR_PRODUCT received */export var errorProduct$=main$.filter(function(_ref7){var action=_ref7.action;return action.type===ERROR_PRODUCT;});/** Dispatched when ERROR_PRODUCT_* (resources) is received */export var errorProductResources$=main$.filter(function(_ref8){var action=_ref8.action;return[ERROR_PRODUCT_DESCRIPTION,ERROR_PRODUCT_IMAGES,ERROR_PRODUCT_VARIANTS,ERROR_PRODUCT_PROPERTIES,ERROR_PRODUCT_OPTIONS,ERROR_PRODUCT_SHIPPING].includes(action.type);});/** Dispatched when ERROR_PRODUCT ENOTFOUND received */export var errorProductNotFound$=errorProduct$.filter(function(_ref9){var action=_ref9.action;return action.errorCode===ENOTFOUND;});/** Dispatched when ERROR_PRODUCT_* ENOTFOUND received */export var errorProductResourcesNotFound$=errorProductResources$.filter(function(_ref10){var action=_ref10.action;return action.errorCode===ENOTFOUND;});export var cachedProductReceived$=main$.filter(function(_ref11){var action=_ref11.action;return action.type===RECEIVE_PRODUCT_CACHED;}).distinctUntilChanged();export var receivedVisibleProduct$=productReceived$.merge(cachedProductReceived$).filter(function(_ref12){var action=_ref12.action,getState=_ref12.getState;var route=getCurrentRoute(getState());if(typeof action.productData==='undefined'||typeof action.productData.id==='undefined'){return false;}if(!route.params.productId&&!route.state.productId){return false;}if(route.state.productId){return action.productData.id===route.state.productId;}return action.productData.id===hex2bin(route.params.productId);});/**
4
4
  * Emits when a product page was initially opened and its data is present.
@@ -14,4 +14,11 @@ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<argum
14
14
  */export var productsReceivedCached$=main$.filter(function(_ref20){var action=_ref20.action;return action.type===RECEIVE_PRODUCTS_CACHED;});/**
15
15
  * Buffer PROVIDE_PRODUCT action and map to have array of requested products
16
16
  * @type {Observable}
17
- */export var fetchProductsRequested$=main$.filter(function(_ref21){var action=_ref21.action;return action.type===PROVIDE_PRODUCT;}).bufferTime(PROVIDE_PRODUCT_BUFFER_TIME).filter(function(actions){return actions.length>0;}).map(function(actions){var productIds=actions.map(function(_ref22){var productId=_ref22.action.productId;return productId;});return _extends({},actions[0],{action:_extends({},actions[0].action,{productId:productIds})});});
17
+ */export var fetchProductsRequested$=main$.filter(function(_ref21){var action=_ref21.action;return action.type===PROVIDE_PRODUCT;}).bufferTime(PROVIDE_PRODUCT_BUFFER_TIME).filter(function(actions){return actions.length>0;}).map(function(actions){var productIds=actions.map(function(_ref22){var productId=_ref22.action.productId;return productId;});return _extends({},actions[0],{action:_extends({},actions[0].action,{productId:productIds})});});/**
18
+ * Emits when product data has been expired.
19
+ */export var productDataExpired$=main$.filter(function(_ref23){var action=_ref23.action;return action.type===EXPIRE_PRODUCT_DATA;});/**
20
+ * Emits when the REFRESH_EXPIRED_PDP_DATA action is dispatched
21
+ * and the current route is a product detail page.
22
+ *
23
+ * Stream payload will contain a route object that reflects the current active product / variant.
24
+ */export var pdpDataNeedsRefresh$=main$.filter(function(_ref24){var action=_ref24.action;return action.type===REFRESH_EXPIRED_PDP_DATA;}).filter(function(_ref25){var getState=_ref25.getState;var _getCurrentRoute=getCurrentRoute(getState()),pattern=_getCurrentRoute.pattern;return pattern===ITEM_PATTERN;}).switchMap(function(params){var getState=params.getState;var route=getCurrentRoute(getState());return Observable.of(_extends({},params,{action:{route:route}}));});
@@ -1,7 +1,7 @@
1
- function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import{hex2bin}from'@shopgate/pwa-common/helpers/data';import showModal from'@shopgate/pwa-common/actions/modal/showModal';import{getThemeSettings,historyPop,historyPush,routeWillEnter$,routeWillLeave$}from'@shopgate/engage/core';import{ToastProvider}from'@shopgate/pwa-common/providers';import{getSearchRoute}from'@shopgate/pwa-common-commerce/search';import fetchProduct from"../actions/fetchProduct";import fetchProductDescription from"../actions/fetchProductDescription";import fetchProductProperties from"../actions/fetchProductProperties";import fetchProductImages from"../actions/fetchProductImages";import fetchProductShipping from"../actions/fetchProductShipping";import fetchProductVariants from"../actions/fetchProductVariants";import fetchProductOptions from"../actions/fetchProductOptions";import fetchProductMedia from"../actions/fetchProductMedia";import{productWillEnter$,galleryWillEnter$,productReceived$,cachedProductReceived$,productRelationsReceived$,receivedVisibleProduct$,errorProductResourcesNotFound$,visibleProductNotFound$,productNotAvailable$,fetchProductsRequested$}from"../streams";import fetchProductsById from"../actions/fetchProductsById";import{getProductRelationsByHash}from"../selectors/relations";import{checkoutSucceeded$}from"../../checkout/streams";import expireProductById from"../action-creators/expireProductById";import{ITEM_PATTERN,NOT_AVAILABLE_EFFECTIVITY_DATES}from"../constants";import{getProductName}from"../selectors/product";/**
1
+ function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import{hex2bin}from'@shopgate/pwa-common/helpers/data';import showModal from'@shopgate/pwa-common/actions/modal/showModal';import{getThemeSettings,historyPop,historyPush,routeWillEnter$,routeWillLeave$}from'@shopgate/engage/core';import{ToastProvider}from'@shopgate/pwa-common/providers';import{getSearchRoute}from'@shopgate/pwa-common-commerce/search';import fetchProduct from"../actions/fetchProduct";import fetchProductDescription from"../actions/fetchProductDescription";import fetchProductProperties from"../actions/fetchProductProperties";import fetchProductImages from"../actions/fetchProductImages";import fetchProductShipping from"../actions/fetchProductShipping";import fetchProductVariants from"../actions/fetchProductVariants";import fetchProductOptions from"../actions/fetchProductOptions";import fetchProductMedia from"../actions/fetchProductMedia";import{productWillEnter$,galleryWillEnter$,productReceived$,cachedProductReceived$,productRelationsReceived$,receivedVisibleProduct$,errorProductResourcesNotFound$,visibleProductNotFound$,productNotAvailable$,fetchProductsRequested$,pdpDataNeedsRefresh$}from"../streams";import fetchProductsById from"../actions/fetchProductsById";import{getProductRelationsByHash}from"../selectors/relations";import{checkoutSucceeded$}from"../../checkout/streams";import expireProductById from"../action-creators/expireProductById";import{ITEM_PATTERN,NOT_AVAILABLE_EFFECTIVITY_DATES}from"../constants";import{getProductName}from"../selectors/product";var fetchPDPData$=productWillEnter$.merge(pdpDataNeedsRefresh$);/**
2
2
  * Product subscriptions.
3
3
  * @param {Function} subscribe The subscribe function.
4
- */function product(subscribe){var processProduct$=productReceived$.merge(cachedProductReceived$);subscribe(productWillEnter$,function(_ref){var action=_ref.action,dispatch=_ref.dispatch;var productId=action.route.params.productId;var variantId=action.route.state.productId;var id=variantId||hex2bin(productId);dispatch(fetchProduct(id));dispatch(fetchProductDescription(id));dispatch(fetchProductProperties(id));dispatch(fetchProductImages(id));dispatch(fetchProductShipping(id));/**
4
+ */function product(subscribe){var processProduct$=productReceived$.merge(cachedProductReceived$);subscribe(fetchPDPData$,function(_ref){var action=_ref.action,dispatch=_ref.dispatch;var productId=action.route.params.productId;var variantId=action.route.state.productId;var id=variantId||hex2bin(productId);dispatch(fetchProduct(id));dispatch(fetchProductDescription(id));dispatch(fetchProductProperties(id));dispatch(fetchProductImages(id));dispatch(fetchProductShipping(id));/**
5
5
  * This feature is currently in BETA testing.
6
6
  * It should only be used for approved BETA Client Projects
7
7
  */dispatch(fetchProductMedia(id));});subscribe(galleryWillEnter$,function(_ref2){var action=_ref2.action,dispatch=_ref2.dispatch;var productId=action.route.params.productId;dispatch(fetchProductImages(hex2bin(productId)));dispatch(fetchProductMedia(hex2bin(productId)));});subscribe(processProduct$,function(_ref3){var action=_ref3.action,dispatch=_ref3.dispatch;var _action$productData=action.productData,id=_action$productData.id,_action$productData$f=_action$productData.flags,flags=_action$productData$f===void 0?{hasVariants:false,hasOptions:false}:_action$productData$f,baseProductId=_action$productData.baseProductId,active=_action$productData.active;if(baseProductId){dispatch(fetchProduct(baseProductId));dispatch(fetchProductImages(baseProductId));}if(active&&flags.hasVariants){dispatch(fetchProductVariants(id));}if(active&&flags.hasOptions){dispatch(fetchProductOptions(id));}});var errorProductResourcesNotFoundFirst$=receivedVisibleProduct$.filter(function(_ref4){var _action$productData2;var action=_ref4.action;var active=action===null||action===void 0?void 0:(_action$productData2=action.productData)===null||_action$productData2===void 0?void 0:_action$productData2.active;return!!active;}).switchMap(function(){return errorProductResourcesNotFound$.first();});/** Refresh product data after some of resources has ENOTFOUND code */subscribe(errorProductResourcesNotFoundFirst$,function(_ref5){var action=_ref5.action,dispatch=_ref5.dispatch;var productId=action.productId;dispatch(fetchProduct(productId,true));});var productNotFound$=visibleProductNotFound$.withLatestFrom(receivedVisibleProduct$.startWith({action:{productData:{}}}));/** Visible product is no more available */subscribe(productNotFound$,function(_ref6){var _ref7=_slicedToArray(_ref6,2),_ref7$=_ref7[0],action=_ref7$.action,dispatch=_ref7$.dispatch,productData=_ref7[1].action.productData;var productId=action.productId;var name=productData.id===productId?productData.name:productId;dispatch(showModal({confirm:null,dismiss:'modal.ok',title:'modal.title_error',message:'product.no_more_found',params:{name:name}}));dispatch(historyPop());dispatch(expireProductById(productId));});subscribe(productRelationsReceived$,function(_ref8){var dispatch=_ref8.dispatch,getState=_ref8.getState,action=_ref8.action;var hash=action.hash;var productIds=getProductRelationsByHash(hash)(getState());dispatch(fetchProductsById(productIds));});/**
@@ -1,65 +0,0 @@
1
- // fetchProductsById.d.ts
2
-
3
- import { ThunkAction } from 'redux-thunk';
4
- import { AnyAction } from 'redux';
5
-
6
- export interface FetchProductsResult {
7
- products: any[];
8
- totalProductCount: number;
9
- }
10
-
11
- export interface FetchProductsConfig {
12
- /**
13
- * Array of product IDs to fetch.
14
- */
15
- productIds: string[];
16
- /**
17
- * Optional unique identifier for the component making the request.
18
- */
19
- componentId?: string | null;
20
- /**
21
- * Whether to cache the result by hash.
22
- */
23
- cached?: boolean;
24
- /**
25
- * Whether to include fulfillment information in the response.
26
- */
27
- includeFulfillment?: boolean;
28
- /**
29
- * Optional type of the product IDs. Needs only to be set if the product IDs are not regular
30
- * product IDs.
31
- */
32
- productIdType?: 'id' | 'sku' | 'ean' | 'upc';
33
- }
34
-
35
- /**
36
- * Dispatches a fetch products action to retrieve products by their IDs.
37
- */
38
- declare function fetchProductsById(
39
- options: FetchProductsConfig
40
- ): ThunkAction<Promise<FetchProductsResult | void>, any, unknown, AnyAction>;
41
-
42
- /**
43
- * Dispatches a fetch products action to retrieve products by their IDs.
44
- * @deprecated Use the object-based API instead.
45
- */
46
- declare function fetchProductsById(
47
- /**
48
- * Array of product IDs to fetch.
49
- */
50
- productIds: string[],
51
- /**
52
- * Optional unique identifier for the component making the request.
53
- */
54
- componentId?: string | null,
55
- /**
56
- * Whether to cache the result by hash.
57
- */
58
- cached?: boolean,
59
- /**
60
- * Whether to include fulfillment information in the response.
61
- */
62
- includeFulfillment?: boolean
63
- ): ThunkAction<Promise<FetchProductsResult | void>, any, unknown, AnyAction>;
64
-
65
- export default fetchProductsById;