@shopgate/pwa-common-commerce
Version:
Commerce library for the Shopgate Connect PWA.
10 lines • 4.54 kB
JavaScript
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";/**
* Stores products by their ID.
* @param {Object} [state={}] The current state.
* @param {Object} action The action object.
* @return {Object} The new state.
*/export default function productsById(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;switch(action.type){case RECEIVE_PRODUCTS:return _extends({},state,{},handleProductCollection(action.products));case RECEIVE_PRODUCT_RELATIONS:return _extends({},state,{},handleProductCollection(action.payload.relations));case REQUEST_PRODUCT:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{isFetching:true,expires:0})));case RECEIVE_PRODUCT:return _extends({},state,_defineProperty({},action.productId,_extends({},state[action.productId],{productData:action.productData,isFetching:false,expires:Date.now()+PRODUCT_LIFETIME})));case ERROR_PRODUCT:if(action.errorCode===ENOTFOUND){// Remove the entry from the state when noting was found for the productId.
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.
var metadata=_extends({},productData.metadata,{},action.metadata);// Put the metadata back into the productData.
var updatedProductData=_extends({},productData,{metadata:metadata});// Put the updated product back into the state.
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;}}