{"version":3,"file":"cart.js?v=62918b0065cdda693b38","mappings":"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","sources":["webpack://RdoWeb/./ResourcePackages/Main/assets/src/scripts/filters/to-currency.js","webpack://RdoWeb/./ResourcePackages/Main/assets/src/scripts/functions/currency-utils.js","webpack://RdoWeb/./ResourcePackages/Main/assets/src/scripts/functions/cart-utils.js","webpack://RdoWeb/./ResourcePackages/Main/assets/src/scripts/functions/element-enumerator.js","webpack://RdoWeb/./ResourcePackages/Main/assets/src/scripts/functions/widget-initializer.js","webpack://RdoWeb/./ResourcePackages/Main/assets/src/scripts/mixins/cart-mixin.js","webpack://RdoWeb/./ResourcePackages/Main/assets/src/scripts/widgets/cart.js","webpack://RdoWeb/./node_modules/vue-click-outside/index.js"],"sourcesContent":["// Based on https://stackoverflow.com/a/48550430\r\nimport { widgetInitialisation } from \"../functions/widget-init\";\r\nimport { NumberUtils } from \"../functions/number-utils\";\r\n\r\nwidgetInitialisation(initToCurrencyFilter);\r\nwidgetInitialisation(initToCurrencyNoCentsFilter);\r\n\r\nfunction initToCurrencyFilter() {\r\n Vue.filter('toCurrency', function (value, options) {\r\n options = options || {};\r\n\r\n var minimumFractionDigits = '2';\r\n if (typeof options.minimumFractionDigits === \"number\") {\r\n minimumFractionDigits = options.minimumFractionDigits.toString();\r\n }\r\n\r\n if (typeof value !== \"number\") {\r\n var parsedValue = NumberUtils.tryParse(value);\r\n if (parsedValue === null)\r\n return value;\r\n\r\n value = parsedValue;\r\n }\r\n\r\n var currencyCode = options.currencyCode || 'USD';\r\n\r\n var formatter = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: currencyCode,\r\n minimumFractionDigits: minimumFractionDigits\r\n });\r\n\r\n return formatter.format(value);\r\n });\r\n}\r\n\r\nfunction initToCurrencyNoCentsFilter() {\r\n Vue.filter('toCurrencyNoCents', function (value, options) {\r\n options = options || {};\r\n\r\n var minimumFractionDigits = '0';\r\n if (typeof options.minimumFractionDigits === \"number\") {\r\n minimumFractionDigits = options.minimumFractionDigits.toString();\r\n }\r\n\r\n if (typeof value !== \"number\") {\r\n var parsedValue = NumberUtils.tryParse(value);\r\n if (parsedValue === null)\r\n return value;\r\n\r\n value = parsedValue;\r\n }\r\n\r\n var currencyCode = options.currencyCode || 'USD';\r\n\r\n var formatter = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: currencyCode,\r\n minimumFractionDigits: minimumFractionDigits\r\n });\r\n\r\n return formatter.format(parseInt(value,10));\r\n });\r\n}","export var CurrencyUtils = {\r\n getSymbolFromCode: function (currencyCode) {\r if (!currencyCode)\r return '';\r\r if (typeof currencyCode !== 'string')\r return '';\r\r const symbol = Intl.NumberFormat('en', { style: 'currency', currency: currencyCode }).formatToParts(0).find(x => x.type === 'currency');\r return symbol && symbol.value;\r }\r}","import { ArrayUtils } from \"./array-utils\";\r\nimport { CurrencyUtils } from \"./currency-utils\";\r\nimport { RouteUtils } from \"./route-utils\";\r\n\r\nexport var CartUtils = {\r\n getProductsTotalQuantity: function (cartDetail) {\r\n if (!cartDetail)\r\n return 0;\r\n\r\n if (ArrayUtils.isNotEmpty(cartDetail.products) === false)\r\n return 0;\r\n\r\n var sumProductQuantities = cartDetail.products.reduce(function (sum, product) {\r\n return sum + (product.quantity || 0);\r\n }, 0);\r\n return sumProductQuantities;\r\n },\r\n getCartDetailsDecorated: function (cartDetail) {\r\n if (!cartDetail)\r\n return this.getCartDetailsTemplate();\r\n\r\n var decoratedCartDetail = cartDetail;\r\n if (cartDetail === true)\r\n decoratedCartDetail = {};\r\n\r\n decoratedCartDetail.products = this.getCartDetailsProducts(cartDetail);\r\n\r\n this.cartDetailsEnsureDefaults(decoratedCartDetail);\r\n\r\n return decoratedCartDetail;\r\n },\r\n getCartDetailsProducts: function (cartDetail) {\r\n if (!cartDetail)\r\n return [];\r\n\r\n if (ArrayUtils.isNotEmpty(cartDetail.products))\r\n return cartDetail.products;\r\n\r\n if (!cartDetail.line_items)\r\n return [];\r\n\r\n if (ArrayUtils.isNotEmpty(cartDetail.line_items.physical_items) === false)\r\n return [];\r\n\r\n return cartDetail.line_items.physical_items;\r\n },\r\n getCartDetailsTemplate: function () {\r\n return {\r\n currency: {\r\n symbol: '$'\r\n },\r\n products: []\r\n };\r\n },\r\n cartDetailsEnsureDefaults: function (cartDetail) {\r\n if (!cartDetail)\r\n return this.getCartDetailsTemplate();\r\n\r\n if (!cartDetail.currency)\r\n cartDetail.currency = {};\r\n\r\n if (!cartDetail.currency.symbol) {\r\n if (cartDetail.currency.code) {\r\n cartDetail.currency.symbol = CurrencyUtils.getSymbolFromCode(cartDetail.currency.code);\r\n } else {\r\n cartDetail.currency.symbol = '$';\r\n }\r\n }\r\n\r\n if (ArrayUtils.isNotEmpty(cartDetail.products)) {\r\n for (var i = 0; i < cartDetail.products.length; i++) {\r\n cartDetail.products[i] = this.decorateProduct(cartDetail.products[i]);\r\n }\r\n } else {\r\n cartDetail.products = [];\r\n }\r\n },\r\n decorateProduct: function (product) {\r\n if (!product)\r\n return product;\r\n\r\n product.onHand = product.onHand || 0;\r\n\r\n if (!product.url.includes(GlobalApp.generalSettings.productDetailsPageUrl))\r\n product.url = `${RouteUtils.ensureNoTrailingSlash(GlobalApp.generalSettings.productDetailsPageUrl)}/${RouteUtils.ensureNoLeadingSlash(product.url)}`;\r\n\r\n return product;\r\n }\r\n}","export var ElementsEnumerator = function (elementsClass) {\r\n this.elementsClass = elementsClass;\r\n};\r\n\rElementsEnumerator.prototype.getElements = function () {\r var elements = document.getElementsByClassName(this.elementsClass);\r\n var elementIdPrefix = this.elementsClass + \"-\";\r\n for (var i = 0; i < elements.length; i++) {\r\n var element = elements[i];\r\n element.setAttribute(\"id\", (elementIdPrefix + (i + 1)));\r\n }\r return elements;\r};","import { widgetInitialisation } from \"./widget-init\";\r\nimport { ElementsEnumerator } from \"./element-enumerator\";\r\n\r\nconst initializedVueAppAttrName = \"data-vue-initialized\";\r\n\r\nexport var WidgetInitializer = function (elementsClass) {\r\n this.elementsClass = elementsClass;\r\n};\r\n\r\nWidgetInitializer.prototype.initialize = function (initializationCallback) {\r\n var that = this;\r\n widgetInitialisation(function () {\r\n return innerInitialization.call(that, initializationCallback);\r\n });\r\n};\r\n\r\nfunction innerInitialization(initializationCallback) {\r\n var elementsEnumerator = new ElementsEnumerator(this.elementsClass);\r\n var notInitializedElements = elementsEnumerator.getElements();\r\n for (var i = 0; i < notInitializedElements.length; i++) {\r\n var element = notInitializedElements[i];\r\n if (element.hasAttribute(initializedVueAppAttrName))\r\n return;\r\n\r\n var newElement = initializationCallback(element);\r\n if (newElement)\r\n { element = newElement; }\r\n\r\n element.setAttribute(initializedVueAppAttrName, '');\r\n }\r\n};","import { Constants } from \"../functions/constants\";\r\nimport { RouteUtils } from \"../functions/route-utils\";\r\n\r\nconst cartMixin = {\r\n methods: {\r\n updateCartDetails: function () {\r\n GlobalApp.CartService\r\n .getCartDetails();\r\n },\r\n removeCartItem: function (item) {\r\n GlobalApp.CartService\r\n .removeCartItem(item)\r\n .then(this.pushUpdateCartData(item));\r\n },\r\n pushUpdateCartData: function (product, oldQty = 0) {\r\n let evt = '';\r\n\r\n const price = product.sale_price;\r\n const newQty = product.quantity;\r\n const qty = Math.abs(newQty - oldQty);\r\n\r\n if (oldQty === 0) {\r\n evt = 'remove_from_cart';\r\n } else if (newQty < oldQty) {\r\n evt = 'remove_from_cart';\r\n } else {\r\n evt = 'add_to_cart';\r\n }\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n dataLayer.push({ ecommerce: null });\r\n dataLayer.push({\r\n 'event': evt,\r\n 'ecommerce': {\r\n 'currency': this.cartDetail.currency.code,\r\n 'value': (price * qty),\r\n 'items': [{ 'item_id': product.sku, 'item_name': product.name, 'price': price, 'quantity': qty }]\r\n }\r\n });\r\n },\r\n },\r\n computed: {\r\n formattedProducts: function () {\r\n if (this.cartDetail.products.length > 0) {\r\n var formattedProducts = [];\r\n this.cartDetail.products.map(function (el) {\r\n if (el.name)\r\n el.shortName = el.name.substring(0, el.name.lastIndexOf(Constants.PRODUCT.SKU_SEPARATOR) - 1);\r\n if (el.url)\r\n el.url = `${RouteUtils.ensureNoTrailingSlash(el.url)}`\r\n\r\n formattedProducts.push(el);\r\n });\r\n return formattedProducts;\r\n }\r\n return [];\r\n }\r\n }\r\n};\r\n\r\nexport default cartMixin;","import ClickOutside from 'vue-click-outside';\r\nimport { WidgetInitializer } from \"../functions/widget-initializer\";\r\nimport { CartUtils } from \"../functions/cart-utils\";\r\nimport { Constants } from \"../functions/constants\";\r\nimport cartMixin from \"../mixins/cart-mixin\";\r\n\r\nimport '../filters/to-currency';\r\n\r\nvar widgetInitializer = new WidgetInitializer(Constants.COMPONENTS.CART);\r\nGlobalApp.registerInitializationHandler(Constants.COMPONENTS.CART, function () {\r\n widgetInitializer.initialize(initCartApp);\r\n});\r\n\r\nfunction initCartApp(element) {\r\n var vueApp = new Vue({\r\n el: '#' + element.id,\r\n mixins: [ cartMixin ],\r\n data: {\r\n initializationReadyHook: GlobalApp.getInitializationReadyHook(),\r\n cartDetail: CartUtils.getCartDetailsTemplate(),\r\n isCartDetailsExpanded: false,\r\n isCartDetailsLoaded: false\r\n },\r\n directives: {\r\n ClickOutside\r\n },\r\n computed: {\r\n productsTotalQuantity: function () {\r\n return CartUtils.getProductsTotalQuantity(this.cartDetail);\r\n },\r\n subtotalAmount: function () {\r\n var subtotal = this.cartDetail.cart_amount_ex_tax <= 0 ? \"TBD\" : this.cartDetail.cart_amount_ex_tax\r\n\r\n return subtotal;\r\n }\r\n },\r\n methods: {\r\n toggleCartDetailsExpanded: function () {\r\n if (!this.isCartDetailsExpanded) {\r\n GlobalApp.EventHub.raiseEvent(Constants.EVENTS.CLOSE_ALL_POPUPS);\r\n GlobalApp.EventHub.raiseEvent(Constants.EVENTS.POPUP_OPENED);\r\n }\r\n this.isCartDetailsExpanded = !this.isCartDetailsExpanded;\r\n },\r\n hidePopup: function hidePopup() {\r\n this.isCartDetailsExpanded = false;\r\n },\r\n handleUpdateCartDetailsResponse: function (cartDetail) {\r\n this.isCartDetailsLoaded = true;\r\n\r\n if (!cartDetail)\r\n return;\r\n\r\n this.cartDetail = CartUtils.getCartDetailsDecorated(cartDetail);\r\n },\r\n cartDetailsUpdatedEventHandler: function (object, cartDetail) {\r\n this.handleUpdateCartDetailsResponse(cartDetail);\r\n }\r\n },\r\n\r\n created: function () {\r\n this.updateCartDetails();\r\n GlobalApp.EventHub.subscribeToEvent(Constants.EVENTS.CART.CART_DETAILS_UPDATE, this.cartDetailsUpdatedEventHandler);\r\n this.initializationReadyHook(element.id);\r\n GlobalApp.EventHub.subscribeToEvent(Constants.EVENTS.CLOSE_ALL_POPUPS, this.hidePopup);\r\n },\r\n\r\n destroyed() {\r\n GlobalApp.EventHub.unsubscribeToEvent(Constants.EVENTS.CART.CART_DETAILS_UPDATE, this.cartDetailsUpdatedEventHandler);\r\n GlobalApp.EventHub.unsubscribeToEvent(Constants.EVENTS.CLOSE_ALL_POPUPS, this.hidePopup);\r\n }\r\n });\r\n\r\n return vueApp.$el;\r\n}","function validate(binding) {\n if (typeof binding.value !== 'function') {\n console.warn('[Vue-click-outside:] provided expression', binding.expression, 'is not a function.')\n return false\n }\n\n return true\n}\n\nfunction isPopup(popupItem, elements) {\n if (!popupItem || !elements)\n return false\n\n for (var i = 0, len = elements.length; i < len; i++) {\n try {\n if (popupItem.contains(elements[i])) {\n return true\n }\n if (elements[i].contains(popupItem)) {\n return false\n }\n } catch(e) {\n return false\n }\n }\n\n return false\n}\n\nfunction isServer(vNode) {\n return typeof vNode.componentInstance !== 'undefined' && vNode.componentInstance.$isServer\n}\n\nexports = module.exports = {\n bind: function (el, binding, vNode) {\n if (!validate(binding)) return\n\n // Define Handler and cache it on the element\n function handler(e) {\n if (!vNode.context) return\n\n // some components may have related popup item, on which we shall prevent the click outside event handler.\n var elements = e.path || (e.composedPath && e.composedPath())\n elements && elements.length > 0 && elements.unshift(e.target)\n\n if (el.contains(e.target) || isPopup(vNode.context.popupItem, elements)) return\n\n el.__vueClickOutside__.callback(e)\n }\n\n // add Event Listeners\n el.__vueClickOutside__ = {\n handler: handler,\n callback: binding.value\n }\n const clickHandler = 'ontouchstart' in document.documentElement ? 'touchstart' : 'click';\n !isServer(vNode) && document.addEventListener(clickHandler, handler)\n },\n\n update: function (el, binding) {\n if (validate(binding)) el.__vueClickOutside__.callback = binding.value\n },\n\n unbind: function (el, binding, vNode) {\n // Remove Event Listeners\n const clickHandler = 'ontouchstart' in document.documentElement ? 'touchstart' : 'click';\n !isServer(vNode) && el.__vueClickOutside__ && document.removeEventListener(clickHandler, el.__vueClickOutside__.handler)\n delete el.__vueClickOutside__\n }\n}\n"],"names":["widgetInitialisation","Vue","filter","value","options","minimumFractionDigits","toString","parsedValue","NumberUtils","tryParse","currencyCode","Intl","NumberFormat","style","currency","format","parseInt","CurrencyUtils","symbol","formatToParts","find","x","type","CartUtils","getProductsTotalQuantity","cartDetail","ArrayUtils","isNotEmpty","products","reduce","sum","product","quantity","getCartDetailsDecorated","this","getCartDetailsTemplate","decoratedCartDetail","getCartDetailsProducts","cartDetailsEnsureDefaults","line_items","physical_items","code","i","length","decorateProduct","onHand","url","includes","GlobalApp","generalSettings","productDetailsPageUrl","concat","RouteUtils","ensureNoTrailingSlash","ensureNoLeadingSlash","ElementsEnumerator","elementsClass","prototype","getElements","elements","document","getElementsByClassName","elementIdPrefix","setAttribute","WidgetInitializer","innerInitialization","initializationCallback","notInitializedElements","element","hasAttribute","newElement","initialize","that","call","methods","updateCartDetails","CartService","getCartDetails","removeCartItem","item","then","pushUpdateCartData","oldQty","arguments","undefined","evt","price","sale_price","newQty","qty","Math","abs","window","dataLayer","push","ecommerce","sku","name","computed","formattedProducts","map","el","shortName","substring","lastIndexOf","Constants","PRODUCT","SKU_SEPARATOR","widgetInitializer","COMPONENTS","CART","initCartApp","id","mixins","cartMixin","data","initializationReadyHook","getInitializationReadyHook","isCartDetailsExpanded","isCartDetailsLoaded","directives","ClickOutside","productsTotalQuantity","subtotalAmount","cart_amount_ex_tax","toggleCartDetailsExpanded","EventHub","raiseEvent","EVENTS","CLOSE_ALL_POPUPS","POPUP_OPENED","hidePopup","handleUpdateCartDetailsResponse","cartDetailsUpdatedEventHandler","object","created","subscribeToEvent","CART_DETAILS_UPDATE","destroyed","unsubscribeToEvent","$el","registerInitializationHandler","validate","binding","console","warn","expression","isServer","vNode","componentInstance","$isServer","module","exports","bind","handler","e","context","path","composedPath","unshift","target","contains","popupItem","len","isPopup","__vueClickOutside__","callback","clickHandler","documentElement","addEventListener","update","unbind","removeEventListener"],"sourceRoot":""}