{"version":3,"file":"mosoft.estore.min.js","sources":["mosoft.estore.js"],"sourcesContent":["(function (w, factory) {\r\n w.PublicEStore = factory();\r\n}(window, function () {\r\n var $ = window.jQuery;\r\n var _ = window._;\r\n var globalActionChannel = 'estore.action';\r\n var globalCallbackChannel = 'estore.callback';\r\n var globalErrorChannel = 'estore.error';\r\n\r\n var handlerUrl = window.R + 'Handlers/Public/PublicEStore.ashx';\r\n\r\n var internalCache = {};\r\n\r\n var publicEStore = {\r\n name: 'MPEF'\r\n };\r\n\r\n // Check if PubSub engine was loaded\r\n var pubSub = window.PubSub;\r\n if(typeof pubSub !== 'object' || !pubSub) {\r\n console.error('PubSub library is not loaded');\r\n return null;\r\n }\r\n\r\n // Supported action values should always be in lower case!\r\n var supportedActions = {\r\n addToCart: 'addtocart',\r\n removeFromCart: 'removefromcart',\r\n emptyCart: 'emptycart',\r\n updateCartQuantity: 'updatecartquantity',\r\n getCartInfo: 'getcartinfo',\r\n getDetailedCartInfo: 'getdetailedcartinfo',\r\n getTempOrderLines: 'gettemporderlines',\r\n getBuyFeedbackData: 'getbuyfeedbackdata',\r\n addToShoppingList: 'addtoshoppinglist',\r\n removeFromShoppingList: 'removefromshoppinglist',\r\n addToWishList: 'addtowishlist',\r\n removeFromWishList: 'removefromwishlist',\r\n getShoppingList: 'getshoppinglist',\r\n getShoppingLists: 'getshoppinglists',\r\n addShoppingList: 'addshoppinglist',\r\n updateShoppingList: 'updateshoppinglist',\r\n updateShoppingListItemsQuantity: 'updateshoppinglistitemsquantity',\r\n updateShoppingListItemsDescription: 'updateshoppinglistitemsdescription',\r\n removeShoppingList: 'removeshoppinglist',\r\n getShoppingListInfo: 'getshoppinglistinfo',\r\n getWishListInfo: 'getwishlistinfo',\r\n getEStoreContext: 'getestorecontext',\r\n getCustomerShoppingHistory: 'getcustomershoppinghistory',\r\n reorderShoppingListItems: 'reordershoppinglistitems',\r\n addToOfferRequest: 'addtoofferrequest',\r\n getofferrequestsinfo: 'getofferrequestsinfo',\r\n removefromcartofferrequest: 'removefromcartofferrequest',\r\n emptyofferrequests: 'emptyofferrequests'\r\n };\r\n\r\n var supportedChannels = {\r\n action: {\r\n global: globalActionChannel,\r\n shopCart: globalActionChannel + '.shopcart',\r\n shoppingList: globalActionChannel + '.shoppinglist',\r\n offerRequest: globalActionChannel + '.offerrequest'\r\n },\r\n callback: {\r\n global: globalCallbackChannel,\r\n shopCart: globalCallbackChannel + '.shopcart',\r\n shoppingList: globalCallbackChannel + '.shoppinglist',\r\n offerRequest: globalCallbackChannel + '.offerrequest'\r\n },\r\n error: {\r\n global: globalErrorChannel\r\n }\r\n };\r\n\r\n var actionHandler = function (topic, requestObj, deferred, isPrivate) {\r\n if (typeof requestObj === 'object' && requestObj) {\r\n var privateAction = !!isPrivate;\r\n var contract = _.omit(requestObj, ['callerId', 'transactionId', 'action', 'includeVat']);\r\n var errorTopic = requestObj.callerId ? globalErrorChannel + '.' + requestObj.callerId : globalErrorChannel;\r\n $.ajax({\r\n url: handlerUrl,\r\n type: 'POST',\r\n data: {\r\n callerId: requestObj.callerId,\r\n transactionId: requestObj.transactionId ? requestObj.transactionId : new Date().getTime(),\r\n action: requestObj.action,\r\n contract: JSON.stringify(contract),\r\n includeVat: requestObj.includeVat\r\n },\r\n dataType: 'json',\r\n success: function (response) {\r\n switch (response.status.toLowerCase()) {\r\n case 'ok':\r\n case 'warning':\r\n // Publish message only for the public actions\r\n if (!privateAction) {\r\n var pubTopic = topic.replace(globalActionChannel, globalCallbackChannel) + '.' + response.action;\r\n pubSub.publish(pubTopic, response);\r\n }\r\n // Call custom callback if specified\r\n if (typeof deferred === 'object' && deferred) {\r\n deferred.resolve(response);\r\n }\r\n break;\r\n default:\r\n // Publish message only for the public actions\r\n if (!privateAction) {\r\n pubSub.publish(errorTopic, response);\r\n }\r\n // Call custom error callback if specified\r\n if (typeof deferred === 'object' && deferred) {\r\n deferred.reject(response);\r\n }\r\n break;\r\n }\r\n },\r\n error: function (jqXHR, errorStatus, errorThrown) {\r\n // Since all internal server errors are handled by the backend, this handler will be executed very rare,\r\n // mostly in cases when application is unavailable or there are some network issues\r\n var error = {\r\n action: requestObj.action,\r\n transactionID: requestObj.transactionId,\r\n status: 'Error',\r\n message: errorThrown\r\n };\r\n\r\n if (!privateAction) {\r\n pubSub.publish(errorTopic, error);\r\n }\r\n\r\n // Call custom error callback if specified\r\n if (typeof deferred === 'object' && deferred) {\r\n deferred.reject(error);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n var getRequiredFieldName = function (action) {\r\n // Determine required field name according to the action\r\n var targetContractField = 'productId';\r\n switch (action.toLowerCase()) {\r\n case supportedActions.removeFromCart:\r\n case supportedActions.getBuyFeedbackData:\r\n targetContractField = 'tempOrderLineId';\r\n break;\r\n case supportedActions.addToShoppingList:\r\n case supportedActions.removeFromShoppingList:\r\n case supportedActions.addToWishList:\r\n case supportedActions.removeFromWishList:\r\n targetContractField = 'productId';\r\n break;\r\n }\r\n\r\n return targetContractField;\r\n };\r\n\r\n var getActionChannel = function (action) {\r\n if (typeof action !== 'string' || !action) {\r\n return '';\r\n }\r\n\r\n var channel = globalActionChannel;\r\n switch (action.toLowerCase()) {\r\n case supportedActions.addToCart:\r\n case supportedActions.removeFromCart:\r\n case supportedActions.emptyCart:\r\n case supportedActions.updateCartQuantity:\r\n case supportedActions.getCartInfo:\r\n case supportedActions.getDetailedCartInfo:\r\n case supportedActions.getTempOrderLines:\r\n case supportedActions.getBuyFeedbackData:\r\n channel = supportedChannels.action.shopCart;\r\n break;\r\n case supportedActions.addToShoppingList:\r\n case supportedActions.removeFromShoppingList:\r\n case supportedActions.addToWishList:\r\n case supportedActions.removeFromWishList:\r\n case supportedActions.getShoppingList:\r\n case supportedActions.getShoppingLists:\r\n case supportedActions.addShoppingList:\r\n case supportedActions.updateShoppingList:\r\n case supportedActions.updateShoppingListItemsQuantity:\r\n case supportedActions.updateShoppingListItemsDescription:\r\n case supportedActions.removeShoppingList:\r\n case supportedActions.getShoppingListInfo:\r\n case supportedActions.getWishListInfo:\r\n case supportedActions.reorderShoppingListItems:\r\n channel = supportedChannels.action.shoppingList;\r\n break;\r\n case supportedActions.addToOfferRequest:\r\n case supportedActions.getofferrequestsinfo:\r\n case supportedActions.removefromcartofferrequest:\r\n case supportedActions.emptyofferrequests:\r\n channel = supportedChannels.action.offerRequest;\r\n break;\r\n }\r\n\r\n return channel;\r\n };\r\n\r\n var preProcessItems = function (items, requiredField) {\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n var prods = $.isArray(items) ? items : [items];\r\n // Some actions does not require the whole contract to be specified into the request\r\n // In this case, assume that if 'items' field is not an array of objects, then it is an array of a single required for the action fields\r\n if (prods.length > 0 && typeof prods[0] !== 'object' && typeof requiredField !== 'undefined') {\r\n // Create item objects based on the passed required field values\r\n prods = $.map(prods, function (value) {\r\n var itemObj = {};\r\n itemObj[requiredField] = value;\r\n return itemObj;\r\n });\r\n }\r\n\r\n // Fix comma float number separator. On the server side InvariantCulture is using while parsing JSON, so we need to replace ',' with '.' for floats\r\n _.each(prods, function (prod) {\r\n if (prod.quantity && prod.quantity.replace) {\r\n prod.quantity = prod.quantity.replace(',', '.');\r\n }\r\n });\r\n\r\n return prods;\r\n };\r\n\r\n var getPromise = function (requestObj, isPrivate) {\r\n return $.Deferred(function (defer) {\r\n actionHandler(getActionChannel(requestObj.action), requestObj, defer, isPrivate);\r\n }).promise();\r\n };\r\n\r\n publicEStore.actions = supportedActions;\r\n\r\n publicEStore.channels = supportedChannels;\r\n\r\n publicEStore.publish = function (channel, data) {\r\n return pubSub.publish(channel, data);\r\n };\r\n\r\n publicEStore.subscribe = function (channel, handler) {\r\n return pubSub.subscribe(channel, handler);\r\n };\r\n\r\n publicEStore.unsubscribe = function (tokenOrFunction) {\r\n return pubSub.unsubscribe(tokenOrFunction);\r\n };\r\n\r\n publicEStore.addToCart = function (items, includeVat, isPrivate) {\r\n var action = supportedActions.addToCart;\r\n var requestObj = { action: action, items: preProcessItems(items), includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeFromCart = function (items, isPrivate) {\r\n var action = supportedActions.removeFromCart;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.emptyCart = function(isPrivate) {\r\n var action = supportedActions.emptyCart;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateCartQuantity = function (items, isPrivate) {\r\n var action = supportedActions.updateCartQuantity;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addToShoppingList = function (shoppingListId, items, includeVat, isPrivate) {\r\n var action = supportedActions.addToShoppingList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)), shoppingListId: shoppingListId, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeFromShoppingList = function (shoppingListId, items, isPrivate) {\r\n var action = supportedActions.removeFromShoppingList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)), shoppingListId: shoppingListId };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addShoppingList = function(name, description, items, includeVat, isPrivate) {\r\n var action = supportedActions.addShoppingList;\r\n var requestObj = { action: action, name: name, description: description, items: preProcessItems(items, getRequiredFieldName(action)), includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateShoppingList = function (shoppingListId, name, description, isPrivate) {\r\n var action = supportedActions.updateShoppingList;\r\n var requestObj = { action: action, shoppingListId: shoppingListId, name: name, description: description };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateShoppingListItemsQuantity = function (items, isPrivate) {\r\n var action = supportedActions.updateShoppingListItemsQuantity;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.updateShoppingListItemsDescription = function (items, isPrivate) {\r\n var action = supportedActions.updateShoppingListItemsDescription;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeShoppingList = function (shoppingListId, isPrivate) {\r\n var action = supportedActions.removeShoppingList;\r\n var requestObj = { action: action, shoppingListId: shoppingListId };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getShoppingLists = function(isPrivate) {\r\n var action = supportedActions.getShoppingLists;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addToWishList = function (items, includeVat, isPrivate) {\r\n var action = supportedActions.addToWishList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)), includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.removeFromWishList = function (items, isPrivate) {\r\n var action = supportedActions.removeFromWishList;\r\n var requestObj = { action: action, items: preProcessItems(items, getRequiredFieldName(action)) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getTempOrderLines = function (includeVat, isPrivate) {\r\n var action = supportedActions.getTempOrderLines;\r\n var requestObj = { action: action, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getCartInfo = function (includeVat, isPrivate) {\r\n var action = supportedActions.getCartInfo;\r\n var requestObj = { action: action, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getDetailedCartInfo = function(includeVat, isPrivate, imageWidth, imageMod) {\r\n var action = supportedActions.getDetailedCartInfo;\r\n var requestObj = { action: action, includeVat: includeVat, imageWidth: imageWidth, imageMod: imageMod };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getShoppingList = function (shoppingListId, includeVat, isPrivate) {\r\n var action = supportedActions.getShoppingList;\r\n var requestObj = { action: action, shoppingListId: shoppingListId, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getWishList = function (includeVat, isPrivate) {\r\n return publicEStore.getShoppingList(0, includeVat, isPrivate);\r\n };\r\n\r\n publicEStore.getShoppingListInfo = function (shoppingListId, includeVat, isPrivate) {\r\n var action = supportedActions.getShoppingListInfo;\r\n var requestObj = { action: action, shoppingListId: shoppingListId, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getWishListInfo = function (includeVat, isPrivate) {\r\n var action = supportedActions.getWishListInfo;\r\n var requestObj = { action: action, includeVat: includeVat };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getEStoreContext = function (forceGetFromServer, isPrivate) {\r\n if (!internalCache['estorecontext'] || forceGetFromServer) {\r\n var action = supportedActions.getEStoreContext;\r\n var requestObj = { action: action };\r\n\r\n internalCache['estorecontext'] = getPromise(requestObj, isPrivate);\r\n }\r\n\r\n return internalCache['estorecontext'];\r\n };\r\n\r\n publicEStore.getBuyFeedbackData = function (buyfeedbackItems, isPrivate) {\r\n var action = supportedActions.getBuyFeedbackData;\r\n var requestObj = { action: action, items: preProcessItems(buyfeedbackItems, getRequiredFieldName(action)) };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.getCustomerShoppingHistory = function() {\r\n var action = supportedActions.getCustomerShoppingHistory;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.reorderShoppingListItems = function (items, moveTo, isPrivate) {\r\n var action = supportedActions.reorderShoppingListItems;\r\n var requestObj = { action: action, items: preProcessItems(items), moveTo: moveTo };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n\r\n publicEStore.addToOfferRequest = function (items) {\r\n var action = supportedActions.addToOfferRequest;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.getofferrequestsinfo = function () {\r\n var action = supportedActions.getofferrequestsinfo;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.removefromcartofferrequest = function (items) {\r\n var action = supportedActions.removefromcartofferrequest;\r\n var requestObj = { action: action, items: preProcessItems(items) };\r\n\r\n return getPromise(requestObj);\r\n };\r\n\r\n publicEStore.emptyofferrequests = function (isPrivate) {\r\n var action = supportedActions.emptyofferrequests;\r\n var requestObj = { action: action };\r\n\r\n return getPromise(requestObj, isPrivate);\r\n };\r\n \r\n\r\n // Subscribe to the action channels\r\n var internalSubcriptionToken = pubSub.subscribe(globalActionChannel, actionHandler);\r\n\r\n publicEStore.destroy = function () {\r\n pubSub.unsubscribe(internalSubcriptionToken);\r\n internalCache = null;\r\n };\r\n\r\n return publicEStore;\r\n}));"],"names":["window","PublicEStore","$","jQuery","_","globalActionChannel","globalCallbackChannel","globalErrorChannel","handlerUrl","R","internalCache","publicEStore","name","pubSub","PubSub","console","error","supportedActions","addToCart","removeFromCart","emptyCart","updateCartQuantity","getCartInfo","getDetailedCartInfo","getTempOrderLines","getBuyFeedbackData","addToShoppingList","removeFromShoppingList","addToWishList","removeFromWishList","getShoppingList","getShoppingLists","addShoppingList","updateShoppingList","updateShoppingListItemsQuantity","updateShoppingListItemsDescription","removeShoppingList","getShoppingListInfo","getWishListInfo","getEStoreContext","getCustomerShoppingHistory","reorderShoppingListItems","addToOfferRequest","getofferrequestsinfo","removefromcartofferrequest","emptyofferrequests","supportedChannels","action","global","shopCart","shoppingList","offerRequest","callback","actionHandler","topic","requestObj","deferred","isPrivate","privateAction","contract","omit","errorTopic","callerId","ajax","url","type","data","transactionId","Date","getTime","JSON","stringify","includeVat","dataType","success","response","status","toLowerCase","pubTopic","replace","publish","resolve","reject","jqXHR","errorStatus","errorThrown","transactionID","message","getRequiredFieldName","targetContractField","getActionChannel","channel","preProcessItems","items","requiredField","prods","isArray","length","map","value","itemObj","each","prod","quantity","getPromise","Deferred","defer","promise","internalSubcriptionToken","actions","channels","subscribe","handler","unsubscribe","tokenOrFunction","shoppingListId","description","imageWidth","imageMod","getWishList","forceGetFromServer","buyfeedbackItems","moveTo","destroy","factory"],"mappings":"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"}