{"version":3,"file":"cart-analytics-6e6bf3b5.js","sources":["../../../client/src/javascripts/customer_pages/_cart/cart-omni-analytics.js","../../../client/src/javascripts/customer_pages/_cart/cart-google-tag-manager.js"],"sourcesContent":["import { builderDispatch } from '../_utils/ui';\nimport CartItemsChangeEvents from './cart-items-change-events';\n\nclass Analytics {\n // Analytics style options\n\n constructor(items) {\n this.items = items;\n this.items.prints = $.extend({\n quantity: 0,\n sizes: [],\n delivery_options: [],\n }, this.items.prints);\n }\n\n invoke() {\n if (typeof s_omni !== 'object') return;\n\n s_omni.channel = window.location.hostname;\n s_omni.prop1 = 'Cart';\n s_omni.events = this._events();\n s_omni.products = this._products();\n\n if (this._isEmpty()) {\n s_omni.pageName = 'Shopping Cart Empty';\n s_omni.prop2 = 'Shopping Cart Empty';\n s_omni.prop21 = '';\n } else {\n // Get the delivery options and quantity\n s_omni.pageName = 'Shopping Cart Cart';\n s_omni.prop2 = 'Shopping Cart Cart';\n s_omni.prop8 = 'Walmart Photo: LiveLink';\n s_omni.prop21 = `InCart:${this._fulfilmentMethods()}`; // Fulfilment Methods List\n s_omni.eVar33 = `${this._quantity()}`;\n }\n\n s_omni.t();\n };\n\n _quantity() {\n if (this.__quantity) {\n return this.__quantity;\n }\n\n this.__quantity = this._allItems().reduce((total, item) => total + item.quantity, 0);\n\n return this.__quantity;\n };\n\n _isEmpty() {\n return this._quantity() === 0;\n };\n\n _fulfilmentMethods() {\n const fulfilmentMethods = {};\n // Collect the delivery options\n this._allItems().forEach((item) => {\n const fulfilmentMethod = this.#translateDeliveryOption(item.delivery_options[0]);\n if (fulfilmentMethod) {\n fulfilmentMethods[fulfilmentMethod] = true;\n }\n });\n\n return Object.keys(fulfilmentMethods).join(',');\n };\n\n _allItems() {\n return [].concat(this._printsItems(), this._prismItems());\n };\n\n _products() {\n return [].concat(this._printProducts(), this._prismProducts()).map((item) => item.join(';')).join(',');\n };\n\n _printProducts() {\n return this._printsProductItems().map((item) => [\n 'walmartphotocenter:',\n (item.partner_id || item.sku),\n item.quantity,\n (item.total_price / 100),\n '',\n 'evar30=Walmart.com',\n ]);\n };\n\n _prismProducts() {\n return this._prismProductItems().map((item) => [\n 'walmartphotocenter:',\n (item.partner_id || item.sku),\n item.quantity,\n (item.cost / 100),\n '',\n 'evar30=Walmart.com',\n ]);\n };\n\n #translateDeliveryOption(option) {\n option = option || {};\n switch (option.type) {\n case 'PICKUP':\n if (parseInt(option.time_hours) === 1) {\n return '1-HOUR';\n }\n if (option.time_hours <= 24) {\n return 'PUT';\n }\n if (option.time_hours <= 24 * 5) {\n return 'S2S';\n }\n break;\n case 'POST':\n if (option.time_hours <= 24 * 5) {\n return 'S2H';\n }\n break;\n }\n }\n}\n\nclass AnalyticsLoaded extends Analytics {\n _events() {\n return 'scView';\n };\n\n _printsItems() {\n return this.items.prints;\n };\n\n _prismItems() {\n return this.items.prism;\n };\n\n _printsProductItems() {\n return this.items.prints.sizes;\n };\n\n _prismProductItems() {\n return this.items.prism;\n };\n}\n\nclass AnalyticsRemovedPrints extends Analytics {\n constructor(items, size) {\n super(items);\n\n this.size = size;\n }\n\n _events() {\n return 'scRemove';\n };\n\n // prints items \"are no longer in the cart\"\n _printsItems() {\n return $.extend({\n quantity: 0,\n sizes: [],\n delivery_options: [],\n }, this.items.prints);\n };\n\n // but prism items are\n _prismItems() {\n return this.items.prism;\n };\n\n // need to pass the not-yet-deleted prints summary to omniture\n _printsProductItems() {\n if (this.size) {\n return [this.size];\n }\n return this.items.prints.sizes;\n };\n\n // omniture doesn't want to know\n _prismProductItems() {\n return [];\n };\n}\n\nclass AnalyticsUnremovedPrints extends AnalyticsRemovedPrints {\n _events() {\n return 'scAdd';\n };\n}\n\nclass AnalyticsRemovedPrism extends Analytics {\n // `prism_id` is passed in but not used, and seems empty the `products` event variable\n // this differs to the behaviour of the prints equivalent\n constructor(items, _prism_id) {\n super(items);\n }\n\n _events() {\n return 'scRemove';\n };\n\n // prints are still here\n _printsItems() {\n return this.items.prints;\n };\n\n // we're removing just this particular item\n _prismItems() {\n // this array with the item in question removed\n return this.items.prism.filter(function (item) {\n return item.id != this.prism_id;\n }, this);\n };\n\n // omniture doesn't want to know\n _printsProductItems() {\n return [];\n };\n\n // omniture is only interested in the removed item\n _prismProductItems() {\n return this.items.prism.filter(function (item) {\n return item.id == this.prism_id;\n }, this);\n };\n}\n\nclass AnalyticsUnremovedPrism extends AnalyticsRemovedPrism {\n _events() {\n return 'scAdd';\n };\n}\n\nclass AnalyticsChangedQuantity extends Analytics {\n constructor(items, prism_id, quantity) {\n super(items);\n\n this.quantity = parseInt(quantity, 10);\n\n this.item = items.prism.find((item) => item.id == prism_id);\n }\n\n _events() {\n return this.quantity < this.item.quantity ? 'scRemove' : 'scAdd';\n };\n\n _printsItems() {\n return this.items.prints;\n };\n\n _prismItems() {\n return this.items.prism;\n };\n\n // omniture doesn't want to know\n _printsProductItems() {\n return [];\n };\n\n // omniture is only interested in the adjusted item\n _prismProductItems() {\n const delta = Math.abs(this.quantity - this.item.quantity);\n\n const item = $.extend({}, this.item, {\n quantity: delta,\n cost: (this.item.cost / this.item.quantity) * delta,\n });\n\n return [item];\n };\n}\n\nbuilderDispatch.register((payload) => {\n let analytics;\n\n switch (payload.type) {\n case CartItemsChangeEvents.LOADED:\n analytics = new AnalyticsLoaded(payload.items);\n break;\n case CartItemsChangeEvents.REMOVED_PRINTS:\n analytics = new AnalyticsRemovedPrints(payload.items, payload.print_size);\n break;\n case CartItemsChangeEvents.UNREMOVED_PRINTS:\n analytics = new AnalyticsUnremovedPrints(payload.items, payload.print_size);\n break;\n case CartItemsChangeEvents.REMOVED_PRISM:\n analytics = new AnalyticsRemovedPrism(payload.items, payload.prism_id);\n break;\n case CartItemsChangeEvents.UNREMOVED_PRISM:\n analytics = new AnalyticsUnremovedPrism(payload.items, payload.prism_id);\n break;\n case CartItemsChangeEvents.QUANTITY_CHANGED:\n analytics = new AnalyticsChangedQuantity(payload.items, payload.prism_id, payload.quantity);\n break;\n }\n\n try {\n analytics && analytics.invoke();\n } catch (e) {\n window.console && window.console.warn && window.console.warn(e);\n }\n});\n","import Currency from '../_utils/tools/currency';\nimport { builderDispatch } from '../_utils/ui';\nimport CartItemsChangeEvents, {\n CartItemsAnalyticsEvents,\n} from './cart-items-change-events';\nimport OrderCalculator from '../_utils/_order-data/order-calculator';\n\nif (typeof dataLayer === 'object') {\n dataLayer.push({\n cartId: App.order.order_id.replace(/^[A-Z]+/, ''),\n });\n}\n\nbuilderDispatch.register(payload => {\n if (typeof dataLayer !== 'object') {\n return;\n }\n\n switch (payload.type) {\n case CartItemsChangeEvents.UPDATED:\n handleContentsChange(payload.items);\n break;\n case CartItemsChangeEvents.ZIP_CODE_CHANGED:\n handleZipCodeChanged(payload.value);\n break;\n }\n});\n\n// Product Item keys being pushed to the window dataLayer need to align with keys in\n// https://github.com/livelink/web-kiosk/blob/main/app/google_tag_manager_data_layer/basket_page_google_tag_manager_data_layer.rb\n// These are used within GTM for analytics etc\n\nfunction handleContentsChange({ prints = {}, prism = [] }) {\n const items = [];\n let cartValue = 0;\n let printsDeliveryOption;\n (prints.delivery_options || []).forEach(option => {\n if (option.key == prints.delivery) {\n printsDeliveryOption = option.partner_id;\n }\n });\n\n OrderCalculator.alivePrintSizes(prints).forEach(size => {\n cartValue += size.total_price;\n\n items.push({\n catalog_item_id: size.partner_id,\n id: size.sku,\n category: 'Print',\n product_title: size.title,\n quantity: size.quantity,\n price: Currency.format(size.price),\n total_price: Currency.format(size.total_price),\n delivery_option: printsDeliveryOption,\n });\n });\n\n OrderCalculator.alivePrismItems(prism).forEach(item => {\n cartValue += item.cost;\n let deliveryOption;\n item.delivery_options.forEach(option => {\n if (option.key == item.delivery) {\n deliveryOption = option.partner_id;\n }\n });\n\n items.push({\n catalog_item_id: item.partner_id,\n id: item.sku,\n category: item?.product_category?.title,\n product_title: item.product_title,\n quantity: item.quantity,\n price: Currency.format(item.price),\n total_price: Currency.format(item.cost),\n delivery_option: deliveryOption,\n });\n });\n\n dataLayer.push({\n event: CartItemsAnalyticsEvents.UPDATED,\n cart_value: Currency.format(cartValue),\n items,\n });\n}\n\nfunction handleZipCodeChanged(value) {\n dataLayer.push({\n event: CartItemsAnalyticsEvents.UPDATED,\n zip_code: value,\n });\n}\n"],"names":["Analytics","items","__privateAdd","_translateDeliveryOption","total","item","fulfilmentMethods","fulfilmentMethod","__privateMethod","translateDeliveryOption_fn","option","AnalyticsLoaded","AnalyticsRemovedPrints","size","AnalyticsUnremovedPrints","AnalyticsRemovedPrism","_prism_id","AnalyticsUnremovedPrism","AnalyticsChangedQuantity","prism_id","quantity","delta","builderDispatch","payload","analytics","CartItemsChangeEvents","e","handleContentsChange","handleZipCodeChanged","prints","prism","cartValue","printsDeliveryOption","OrderCalculator","Currency","deliveryOption","_a","CartItemsAnalyticsEvents","value"],"mappings":"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"}