{"version":3,"sources":["webpack:///./cartridges/app_harmony/cartridge/client/default/js/widgets/clientGTM.js"],"names":["arrayIntoChunks","source","chunkSize","Array","Math","ceil","length","fill","map","_","index","slice","report","args","dataLayer","push","currentCurrency","impressedProducts","hasBeenImpressed","id","some","impressionId","setTilePosition","tileInfo","pid","listId","window","position","reportGtmImpressions","gtmImpressions","ecommerce","impressions","forEach","impression","productPositions","productID","location","search","indexOf","list","transformCartItem","originalItem","transformedItem","uuid","productName","productType","brand","isCSCProduct","price","sales","value","currency","formatted","decimalPrice","isDefaultPrice","quantity","UUID","shipmentUUID","isBonusProductLineItem","priceTotal","bonusProductLineItemUUID","preOrderUUID","discountLineItems","isArray","link","gtmInfo","master","variationAttributes","productTypeVariant","productSize","brandTitle","featureSection","bundledProductLineItems","bundledItem","totalBundledItemsQty","Number","isFinite","productTypeBundle","init","currencyCode","reportPageView","gtmDelayedEvents","delayedEvent","promoImpressions","from","document","querySelectorAll","impressionEl","promoDetails","JSON","parse","dataset","addEventListener","event","promoClick","promotions","isPdp","promoTitle","name","passive","once","e","setTimeout","filter","Boolean","promoView","onbeforeunload","sendAbandonmentForm","pageViewDataElement","getElementById","data","gtm","url","href","urlParams","getUrlParams","referral","utm_source","parameters","param","sessionStorage","setItem","getItem","queryString","split","pageName","title","pagePath","pathname","getWishlistImpressions","products","product","getSearchboxImpressions","getProductList","productTile","itemList","productsGrid","get","closest","categoryPath","impressionsDebounce","reportImpression","debounce","chunks","impressionSet","eventBus","on","widget","socialChannel","ref","carouselName","carouselItemName","carouselItemDate","meta","creationDate","carouselItemPosition","element","contentInfo","config","contentButton","querySelector","contentSlotID","slotId","destinationUrl","contentButtonID","text","trim","target","hasAttribute","buttonName","contentAsset","ID","articleImageName","articleImageDescription","innerText","variation","customerId","couponCode","emitBusEvent","accountMenuElement","getText","gtmObject","RefElement","addressBookAction","tagName","orderHistoryAction","options","selectedIndex","paymentMethodsAction","checkoutSection","loginMethod","sfPersonAccountId","commerceKey","gtmData","zrl_mi_user_login_failure","sortOption","params","Object","keys","paramKey","includes","refinementName","refinementValue","replace","pmin","pmax","type","selectedState","stateSelected","targetElement","headerElementText","attr","headerLevel","formData","submittedForms","formId","formGtmData","formName","formAction","formStatus","errorMessage","specialFromIdNameMapping","specialFormsEventData","formEventData","action","footerElementText","errorText","message","accessibilityAlert","carouselButton","imagePosition","imageName","tile","cart","WIDGET_PROP_NAME","cartWidget","isEmptyCart","numItems","tileImageLinkRef","tileLinkRef","step","productData","eventData","upc","dimension24","dimension41","dimension42","dimension43","dimension44","dimension45","originalPrice","category","isBlogPage","alt","imageWrapper","parentElement","textWrapper","nextSibling","articleImagePosition","qvData","detail","actionField","changeQuantityAction","editEl","productInfo","productAnalyticsDataElement","click","searchBoxWidget","currentSelected","selectedVariation","gtmproductdetails","removeItem","currentGtmInfo","isProductDetailPage","items","i","item","concat","reportObject","add","itemsInCart","trackProductClicks","removeButton","parseInt","remove","minicart","removeProductLink","shippingMethodName","checkoutMgr","order","applicableShippingMethods","applicableShippingMethod","selected","displayName","checkout_option","option","paymentMethod","sendFirstStepDataForKnownUser","isCustomerFromLoginPage","actionFieldObject","checkout","sendLoginOption","loginOption","onlineStoreName","$","checked","customer","registeredUser","isExternallyAuthenticated","handleFormInteractedField","interactedData","handleFormInteraction","interactedForms","fields","fieldName","getSpecificEventForFirstInteraction","getContactType","reasonCode","getFindNearMeData","findNearMeData","zipCode","radius","flavor","inStore","diningOut","milesToSearch","selectedVarietal","selectedProduct","selectedType","assign","contactTypeSelected","interactedFormsKeys","fieldEngagement","join","emailSubscribe","registerForm","cutomerId","confirmationCreateAccount","contactUsForm","wheretobuyForm","readyState","storeData","parseW2BInfor","storeName","storeAddress","storeCity","storeState","storePosition","storeInformationArray"],"mappings":"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","file":"0.bundle.js","sourcesContent":["import eventBus from 'widgets/toolbox/eventBus';\nimport { debounce } from 'widgets/toolbox/debounce';\nimport { get, getUrlParams } from 'widgets/toolbox/util';\nimport { RefElement } from 'widgets/toolbox/RefElement';\n\n/**\n * @typedef {InstanceType} refElement\n */\n\n/* global dataLayer */\n\n/**\n * @param {object[]} source\n * @param {number} [chunkSize=10]\n * @returns {object[][]}\n */\nfunction arrayIntoChunks(source, chunkSize = 10) {\n return new Array(Math.ceil(source.length / chunkSize))\n .fill(0) // just make possible to call iteration on the next line\n .map((_, index) => source.slice(index * chunkSize, (index * chunkSize) + chunkSize));\n}\n\n/**\n * @description main method to push changes to datalayer\n * @param {...any} args - data object\n */\nfunction report(...args) {\n if (typeof dataLayer !== 'undefined') {\n dataLayer.push(...args);\n }\n}\n\nlet currentCurrency = '';\nconst impressedProducts = [];\n\n/**\n * @description Checks if product is already impressed\n * @param {string} id - product ID\n * @returns {boolean} result\n */\nfunction hasBeenImpressed(id) {\n return impressedProducts.some(impressionId => impressionId === id);\n}\n\n/**\n * @description Sets tile position on the PLP\\Search page\n * @param {refElement} tileInfo - product tile\n * @param {string} pid - product ID\n * @param {string} listId - id of list with products\n */\nfunction setTilePosition(tileInfo, pid, listId) {\n pid = pid || tileInfo.id;\n listId = listId || 'productPositions';\n\n if (\n window[listId] && window[listId][pid]) {\n tileInfo.position = window[listId][pid];\n }\n}\n\n/**\n * @description Reports GTM impressions on page load\n */\nfunction reportGtmImpressions() {\n if (window.gtmImpressions\n && window.gtmImpressions.ecommerce\n && window.gtmImpressions.ecommerce.impressions\n ) {\n window.gtmImpressions.ecommerce.impressions.forEach(impression => {\n if (window.productPositions && window.productPositions[impression.productID]) {\n impression.position = window.productPositions[impression.productID];\n\n if (window.location.search.indexOf('q=') > -1) {\n impression.list = 'Search Results';\n }\n }\n\n impressedProducts.push(impression.productID);\n\n delete impression.productID;\n });\n\n dataLayer.push(window.gtmImpressions);\n }\n}\n\n/**\n * Transforms a cart item object by sanitizing and structuring its data.\n * \n * This function takes an original cart item object, ensures all expected properties\n * are present (providing default values where necessary), and handles specific\n * product types (variant, bundle) with additional properties. It aims to prevent\n * runtime errors by safely accessing properties and providing fallbacks for missing data.\n *\n * @param {Object|null} originalItem - The original cart item object to be transformed.\n * If null or undefined, the function returns null.\n * @returns {Object|null} A transformed cart item object with sanitized and structured data,\n * or null if the input is null or not an object.\n */\nfunction transformCartItem(originalItem) {\n // Check for null or non-object input\n if (typeof originalItem !== 'object' || originalItem === null) return null;\n\n var transformedItem = {\n uuid: originalItem.uuid || '',\n id: originalItem.id || '',\n productName: originalItem.productName || '',\n productType: originalItem.productType || '',\n brand: originalItem.brand || '',\n isCSCProduct: !!originalItem.isCSCProduct, // Ensures a boolean value\n price: originalItem.price ? {\n sales: originalItem.price.sales ? {\n value: originalItem.price.sales.value || 0,\n currency: originalItem.price.sales.currency || '',\n formatted: originalItem.price.sales.formatted || '',\n decimalPrice: originalItem.price.sales.decimalPrice || ''\n } : {},\n list: originalItem.price.list || null,\n isDefaultPrice: !!originalItem.price.isDefaultPrice // Ensures a boolean value\n } : {},\n quantity: originalItem.quantity || 0,\n UUID: originalItem.UUID || '',\n shipmentUUID: originalItem.shipmentUUID || '',\n isBonusProductLineItem: !!originalItem.isBonusProductLineItem, // Ensures a boolean value\n priceTotal: {\n price: originalItem.priceTotal && originalItem.priceTotal.price ? originalItem.priceTotal.price : '',\n },\n bonusProductLineItemUUID: originalItem.bonusProductLineItemUUID || null,\n preOrderUUID: originalItem.preOrderUUID || null,\n discountLineItems: Array.isArray(originalItem.discountLineItems) ? originalItem.discountLineItems : [],\n link: originalItem.link || '',\n gtmInfo: typeof originalItem.gtmInfo === 'object' ? originalItem.gtmInfo : {},\n master: originalItem.master ? {\n pid: originalItem.master.pid || ''\n } : {},\n };\n\n if (originalItem.productType === 'variant' || originalItem.productType === 'standard') {\n transformedItem.variationAttributes = Array.isArray(originalItem.variationAttributes) ? originalItem.variationAttributes : [];\n transformedItem.productTypeVariant = originalItem.productTypeVariant || '';\n transformedItem.productSize = originalItem.productSize || '';\n transformedItem.brandTitle = originalItem.brandTitle || '';\n transformedItem.featureSection = Array.isArray(originalItem.featureSection) ? originalItem.featureSection : [];\n }\n\n if (originalItem.productType === 'bundle') {\n transformedItem.bundledProductLineItems = originalItem.bundledProductLineItems ? originalItem.bundledProductLineItems.map(function(bundledItem) {\n return {\n uuid: bundledItem.uuid || '',\n id: bundledItem.id || '',\n productName: bundledItem.productName || '',\n productType: bundledItem.productType || '',\n brand: bundledItem.brand || '',\n isCSCProduct: !!bundledItem.isCSCProduct,\n price: bundledItem.price ? {\n sales: bundledItem.price.sales ? {\n value: bundledItem.price.sales.value || 0,\n currency: bundledItem.price.sales.currency || '',\n formatted: bundledItem.price.sales.formatted || '',\n decimalPrice: bundledItem.price.sales.decimalPrice || ''\n } : {},\n list: bundledItem.price.list || null,\n isDefaultPrice: !!bundledItem.price.isDefaultPrice\n } : {},\n quantity: bundledItem.quantity || 0,\n link: bundledItem.link || '',\n // Only include attributes that match the main item structure\n // Specific bundled item attributes like images, availability, etc., are excluded based on the initial guidance\n };\n }) : [];\n transformedItem.totalBundledItemsQty = Number.isFinite(originalItem.totalBundledItemsQty) ? originalItem.totalBundledItemsQty : 0;\n transformedItem.productTypeBundle = originalItem.productTypeBundle || '';\n }\n\n return transformedItem;\n}\n\n\n/**\n * @description Inits GTM callback\n */\nfunction init() {\n if (currentCurrency === '') {\n currentCurrency = dataLayer.currencyCode;\n delete dataLayer.currencyCode;\n }\n\n reportPageView();\n\n reportGtmImpressions();\n\n if (window.gtmDelayedEvents) {\n window.gtmDelayedEvents.forEach((delayedEvent) => {\n report(delayedEvent);\n })\n delete window.gtmDelayedEvents;\n }\n // promo impression & interaction\n const promoImpressions = Array.from(document.querySelectorAll('[data-selector-id=\"promo-impression\"]')).map(impressionEl => {\n try {\n const promoDetails = JSON.parse(/** @type {HTMLElement} */(impressionEl).dataset.promoDetails);\n impressionEl.addEventListener('click', () => {\n report({\n event: 'promotionClick',\n ecommerce: {\n promoClick: {\n promotions: [promoDetails]\n }\n }\n });\n if (impressionEl.dataset.isPdp) {\n report({\n event: 'pdpPromotion',\n promoTitle: promoDetails.name || ''\n });\n }\n }, { passive: true, once: true });\n return promoDetails;\n } catch (e) {\n setTimeout(() => {\n throw e;\n }, 0);\n return false;\n }\n }).filter(Boolean);\n\n if (promoImpressions.length) {\n report({\n event: 'promotionView',\n ecommerce: {\n promoView: {\n promotions: promoImpressions\n }\n }\n });\n }\n\n window.onbeforeunload = sendAbandonmentForm;\n}\n\nfunction reportPageView() {\n let pageViewDataElement = document.getElementById('pageViewData');\n\n if (pageViewDataElement) {\n try {\n let data = JSON.parse(pageViewDataElement.dataset.gtm);\n const url = window.location.href;\n const urlParams = getUrlParams(url);\n data.referral = urlParams.utm_source || '';\n\n // Define new parameters for SFMC Collect Code\n const parameters = [\n 'sfmc_activity_id', 'sfmc_activity_name', 'sfmc_activityid',\n 'sfmc_asset_id', 'sfmc_channel', 'sfmc_id', 'sfmc_j',\n 'sfmc_jb', 'sfmc_journey_id', 'sfmc_journey_name', 'sfmc_l',\n 'sfmc_mid', 'sfmc_s', 'sfmc_u', 'utm_campaign', 'utm_content',\n 'utm_id', 'utm_medium', 'utm_source', 'utm_term'\n ];\n\n parameters.forEach(param => {\n if (urlParams[param]) {\n sessionStorage.setItem(param, urlParams[param]);\n }\n\n // Ensure to pull from sessionStorage if not found in URL parameters\n data[param] = urlParams[param] || sessionStorage.getItem(param) || '';\n });\n\n data.queryString = url.split('?')[1] || '';\n data.pageName = document.title;\n data.pagePath = window.location.pathname;\n\n report(data);\n }\n catch (e) { }\n }\n}\n\n/**\n * @description Returns wishlist products impression data\n * @param {Array} products - products data\n * @returns {Array} result\n */\nfunction getWishlistImpressions(products) {\n const impressions = [];\n\n if (!products || !products.length) {\n return impressions;\n }\n\n for (let index = 0; index < products.length; index++) {\n const product = products[index];\n\n if (product && !hasBeenImpressed(product.id)) {\n impressions.push({\n list: 'Wishlist',\n position: product.position,\n ...product.gtmInfo\n });\n }\n }\n\n if (!impressions.length) {\n return impressions;\n }\n\n return impressions;\n}\n\n/**\n * @description Returns searchbox products impression data\n * @param {Array} products - products data\n * @returns {Array} result\n */\nfunction getSearchboxImpressions(products) {\n const impressions = [];\n\n if (!products || !products.length) {\n return impressions;\n }\n\n for (let index = 0; index < products.length; index++) {\n const product = products[index];\n\n if (product) {\n impressions.push({\n list: 'Search Suggestions',\n position: index + 1,\n ...product.gtmInfo\n });\n }\n }\n\n return impressions;\n}\n\n/**\n * @description Gets product list value\n * @param {refElement} productTile - product tile\n * @returns {string} result\n */\nfunction getProductList(productTile) {\n let list = window.location.search.indexOf('q=') > -1 ? 'Search Results' : 'Products Listings';\n const itemList = productTile.data('list');\n const productsGrid = productTile.get().closest('[data-ref=\"grid\"]');\n const categoryPath = productsGrid ? productsGrid.dataset.categoryPath : '';\n\n if (productTile.data('recommendation')) {\n return 'Products Carousel';\n }\n\n if (categoryPath !== 'null' && categoryPath !== '') {\n return categoryPath;\n }\n\n switch (itemList) {\n case 'cart':\n list = 'Shopping Cart';\n break;\n case 'minicart':\n list = 'Mini cart';\n break;\n case 'wishlistProducts':\n list = 'Wishlist';\n break;\n case 'suggestions':\n list = 'Search Suggestions';\n break;\n case 'recentlyViewedCarousel':\n list = 'Recently Viewed Carousel';\n break;\n case 'recommendedCarousel':\n list = 'Recommended Carousel';\n break;\n default:\n break;\n }\n\n return list;\n}\n\nlet impressionsDebounce = [];\nconst reportImpression = debounce(() => {\n impressionsDebounce.forEach(impression => {\n impressedProducts.push(impression.productID || impression.id);\n\n delete impression.productID;\n });\n\n const chunks = arrayIntoChunks(impressionsDebounce);\n\n impressionsDebounce = [];\n\n chunks.forEach(impressionSet => report({\n event: 'productImpressions',\n ecommerce: {\n currencyCode: currentCurrency,\n impressions: impressionSet.map(impression => {\n return {\n list: window.location.search.indexOf('q=') > -1 ? 'Search Results' : 'Products Listings',\n ...impression\n };\n })\n }\n }));\n}, 50);\n\n/**\n * @description Sends GTM 404 error event\n*/\n\neventBus.on('gtm.error404', () => {\n report({\n event: 'error404'\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicked on social link\n * @param {string} socialChannel - social link name\n*/\n\neventBus.on('gtm.social.click', (widget) => {\n report({\n event: 'socialClick',\n socialChannel: widget.ref('self').get().title\n });\n});\n\neventBus.on('gtm.click.carousel.content', data => {\n report({\n event: 'carouselContentClick',\n carouselName: data.carouselName,\n carouselItemName: data.name,\n carouselItemDate: data.meta.creationDate,\n carouselItemPosition: data.carouselItemPosition\n\n });\n});\n\neventBus.on('gtm.content.click', element => {\n const contentInfo = element.config.contentInfo;\n const contentButton = element.ref('self').get().querySelector('a');\n contentInfo.contentSlotID = element.config.slotId;\n\n if (contentButton) {\n contentInfo.destinationUrl = contentButton.href;\n contentInfo.contentButtonID = contentButton.text.trim();\n }\n\n if (event.target.hasAttribute('href') && contentInfo.contentButtonID) {\n report({\n event: 'button-click',\n buttonName: contentInfo.contentButtonID\n\n });\n }\n\n report({\n event: 'moduleClick',\n contentAsset: contentInfo.ID,\n contentSlotID: contentInfo.contentSlotID,\n contentButtonID: contentInfo.contentButtonID || '',\n destinationUrl: contentInfo.destinationUrl || ''\n\n });\n});\n\neventBus.on('gtm.home.page.button.click', buttonName => {\n report({\n event: 'button-click',\n buttonName: buttonName\n\n });\n});\n\neventBus.on('gtm.blog.image.click', data => {\n report({\n event: 'articleImage',\n articleImageName: data.articleImageName,\n articleImageDescription: data.articleImageDescription\n\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicked on button\n * @param {string} buttonName - button name\n*/\n\neventBus.on('gtm.button.click', () => {\n report({\n event: 'button-click',\n buttonName: event.target.dataset.name || event.target.innerText.trim()\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicked on 'show more' description button on PDP\n * @param {string} buttonName - button name\n*/\n\neventBus.on('gtm.pdp.description.more.click', () => {\n report({\n event: 'pdpAboutMore'\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicked on 'show more' attributes button on PDP\n * @param {string} buttonName - button name\n*/\n\neventBus.on('gtm.pdp.attributes.more.click', () => {\n report({\n event: 'pdpAttributesMore'\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicked on variation on PDP\n * @param {string} buttonName - button name\n*/\n\neventBus.on('gtm.variation.click', (data) => {\n report({\n event: 'pdpVariation',\n variation: data.variation\n });\n});\n\n/**\n * @description Sends GTM event, when customer submit gate window\n * @param {string} customerId - customer id\n*/\n\neventBus.on('gtm.age.gate.enter', customerId => {\n report({\n event: 'ageGateEnter',\n customerId: customerId\n });\n});\n\n/**\n * @description Sends GTM event, when customer submit gate window without tracking\n*/\n\neventBus.on('gtm.age.gate.notrack', () => {\n report({\n event: 'ageGateNoTrack'\n });\n});\n\n/**\n * @description Sends GTM event, when customer opens gate window\n * @param {string} customerId - customer id\n*/\n\neventBus.on('gtm.age.gate.shown', customerId => {\n report({\n event: 'ageGateShown',\n customerId: customerId\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicks on 'forgot password' button on checkout\n*/\n\neventBus.on('gtm.checkout.forgot.password', () => {\n report({\n event: 'checkoutForgotPassword'\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicks on 'continue shopping' button on cart\n*/\n\neventBus.on('gtm.cart.continue.shopping.click', () => {\n report({\n event: 'cartContinueShopping'\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicks on 'apply coupon' button on cart\n*/\n\neventBus.on('gtm.cart.promo', (couponCode) => {\n report({\n event: 'cartPromo',\n couponCode: couponCode\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicks on 'menu item' in MA\n*/\n\neventBus.on('gtm.account.menu', (emitBusEvent) => {\n report({\n event: 'accountMenu',\n accountMenuElement: emitBusEvent.ref('self').getText().trim()\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicks in 'address book' in MA\n*/\n\neventBus.on('gtm.address.book', (element) => {\n let gtmObject = {\n event: 'addressBook'\n }\n if (element instanceof RefElement) {\n gtmObject.addressBookAction = element.getText().trim()\n } else {\n gtmObject.addressBookAction = element.ref('self').getText().trim()\n }\n\n report(gtmObject);\n});\n\n/**\n * @description Sends GTM event, when customer clicks in 'address book' in MA\n*/\n\neventBus.on('gtm.order.history', () => {\n const gtmObject = {\n event: 'orderHistory'\n };\n\n if (event.target.tagName === 'SELECT') {\n gtmObject.orderHistoryAction = event.target.options[event.target.selectedIndex].innerText.trim()\n } else {\n gtmObject.orderHistoryAction = event.target.innerText.trim()\n }\n\n report(gtmObject);\n});\n\n/**\n * @description Sends GTM event, when customer clicks in 'payments' in MA\n*/\n\neventBus.on('gtm.payment.methods', (emitBusEvent) => {\n report({\n event: 'paymentMethods',\n paymentMethodsAction: emitBusEvent.ref('self').getText().trim()\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicks on 'edit' button on checkout\n*/\n\neventBus.on('gtm.checkout.edit', (data) => {\n const gtmObject = {\n event: 'checkoutEdit'\n }\n\n gtmObject.checkoutSection = data.checkoutSection || data.data('name');\n\n report(gtmObject);\n});\n\n/**\n * @description Sends GTM event, when customer signs in\n * @param {object} data - customer object\n*/\n\neventBus.on('gtm.user.login', data => {\n report({\n event: 'accountLogin',\n loginMethod: data.loginMethod,\n sfPersonAccountId: data.sfPersonAccountId,\n commerceKey: data.commerceKey\n });\n});\n\n/**\n * @description Sends GTM event, when customer signs out\n * @param {string} customerId - customer id\n*/\n\neventBus.on('gtm.user.logout', element => {\n const gtmData = element.data('gtm');\n\n report({\n event: 'accountLogout',\n commerceKey: gtmData.commerceKey,\n sfPersonAccountId: gtmData.sfPersonAccountId\n\n });\n\n if (typeof zrl_mi_user_login_failure !== 'undefined' && document.getElementById(\"loyaltyDisallowedCustomer\").value === \"false\") {\n zrl_mi_user_login_failure();\n }\n});\n\n/**\n * @description Sends GTM event, when customer does sort\n * @param {string} sortOption - sort Option\n*/\n\neventBus.on('gtm.list.sort', sortOption => {\n report({\n event: 'listSort',\n list: window.location.search.indexOf('q=') > -1 ? 'Search Results' : 'Products Listings',\n sortOption: sortOption\n });\n});\n\n/**\n * @description Sends GTM event, when customer applies filters\n * @param {any} refinementParameterMap - sort Option\n*/\n\neventBus.on('gtm.list.filter', params => {\n /**\n * @description Applied filters Mapping\n * @type {any}\n */\n var filter = {};\n Object.keys(params).forEach((paramKey) => {\n if (paramKey.includes('prefn')) {\n let refinementName = params[paramKey];\n let refinementValue = params[paramKey.replace('prefn', 'prefv')];\n filter[refinementName] = refinementValue;\n } else if (paramKey.includes('pmin') && params.pmin && params.pmax) {\n let refinementName = 'price';\n let refinementValue = params.pmin + ' - ' + params.pmax;\n filter[refinementName] = refinementValue;\n } else if (paramKey.includes('type')) {\n filter.type = params.type;\n }\n });\n\n report({\n event: 'listFilter',\n list: window.location.search.indexOf('q=') > -1 ? 'Search Results' : 'Products Listings',\n filter: filter\n });\n});\n\n/**\n * @description Sends GTM event, when customer changes state\n * @param {string} selectedState - selected state\n*/\n\neventBus.on('shipto.state.changed', selectedState => {\n report({\n event: 'shipStateUpdated',\n stateSelected: selectedState\n });\n});\n\n/**\n * @description Sends GTM event, when customer clicked on header area\n * @param {object} element - information about click\n*/\n\neventBus.on('gtm.header.clicked', (element) => {\n const gtmObject = {\n event: 'headerClick'\n }\n const targetElement = element.ref('itemLink').length ? element.ref('itemLink') : element.ref('self');\n\n gtmObject.headerElementText = targetElement.attr('value') || targetElement.data('name') || targetElement.getText().trim();\n gtmObject.headerLevel = 'Top Level';\n report(gtmObject);\n});\n\n/**\n * @description Sends GTM event, when customer clicked on header area\n * @param {object} data - information about click\n*/\n\neventBus.on('gtm.header.navigation.clicked', (element) => {\n const targetElement = element.ref('itemLink').length ? element.ref('itemLink') : element.ref('self');\n\n report({\n event: 'headerClick',\n headerLevel: 'Second Level',\n headerElementText: targetElement.getText().trim()\n });\n});\n\n/**\n * @description Sends GTM event, when customer submits form\n * @param {object} formData - form information\n*/\neventBus.on('gtm.form.submit', (formData) => {\n //mark form as submitted\n submittedForms.push(formData.formId);\n let data = formGtmData(formData.formName, formData.formId, formData);\n report(data);\n});\n\n/**\n * @description Sends GTM event, when field is invalid\n * @param {object} data - form information\n*/\neventBus.on('gtm.form.error', (data) => {\n let gtmData = {\n event: 'form-submit',\n formName: data.formName,\n formAction: 'Validate',\n formStatus: 'Error: Form Validation',\n errorMessage: data.errorMessage\n };\n\n const formId = specialFromIdNameMapping[data.formName] || null;\n\n if (formId && specialFormsEventData[formId]) {\n const formEventData = specialFormsEventData[formId];\n gtmData.event = formEventData.event;\n gtmData.formName = formEventData.name;\n gtmData.formAction = formEventData.action;\n }\n\n report(gtmData);\n});\n\n/**\n * @description Sends GTM event, when customer clicked on footer area\n * @param {object} widget - emit bus event widget\n*/\n\neventBus.on('gtm.footer.clicked', (widget) => {\n report({\n event: 'footerClick',\n footerElementText: widget.ref('self').get().text.trim() || widget.ref('self').get().title\n });\n});\n\n/**\n * @description Sends GTM event, when error occurred\n * @param {object} e - information about click\n*/\n\neventBus.on('gtm.error.occurred', e => {\n report({\n event: 'error',\n errorText: e.message || e.accessibilityAlert\n });\n});\n\n/**\n * @description Sends GTM event, when carousel button clicked\n * @param {object} data - information about click\n*/\n\neventBus.on('gtm.carousel.button.click', data => {\n report({\n event: 'carouselNavigationClick',\n carouselButton: data.carouselButton,\n carouselName: data.carouselName\n });\n});\n\n/**\n * @description Sends GTM event, when pdp carousel was clicked\n * @param {object} data - information about click\n*/\n\neventBus.on('gtm.carousel.pdp.click', data => {\n report({\n event: 'pdpImageCarousel',\n imagePosition: data.imagePosition,\n imageName: data.imageName\n });\n});\n\n/**\n * @description Sends GTM event, when pdp zoom was clicked\n * @param {object} data - information about click\n*/\n\neventBus.on('gtm.pdp.zoom.click', data => {\n report({\n event: 'pdpImageZoom',\n imagePosition: data.imagePosition,\n imageName: data.imageName\n });\n});\n\neventBus.on('product.tile.init', tile => {\n const cart = tile.get().closest('[data-widget=\"cartMgr\"]');\n\n\n // we have case for empty cart, when carousel is rendering but is not visible (hidden by CSS).\n // When it happens we don't need to triger this event\n // This code breaks logic for case, when we have empty cart and carousel is visible\n if (cart) {\n const WIDGET_PROP_NAME = '@@_widget_instance_@@';\n const cartWidget = cart[WIDGET_PROP_NAME];\n const isEmptyCart = cartWidget.cart.numItems === 0;\n if (!isEmptyCart) {\n return;\n }\n }\n\n if (!tile) {\n return;\n }\n const impression = tile.data('analytics') || {};\n const listId = tile.data('list');\n impression.productID = tile.data('pid');\n impression.list = getProductList(tile);\n\n if (impression && !hasBeenImpressed(impression.productID || impression.id)) {\n setTilePosition(impression, impression.productID, listId);\n impressionsDebounce.push(impression);\n reportImpression();\n }\n\n const tileImageLinkRef = tile.get().querySelector('[data-ref=\"tileImageLink\"]');\n const tileLinkRef = tile.get().querySelector('[data-ref=\"tileLink\"]') || tile.get();\n const position = `?position=${impression.position || 1}`;\n\n if (tileImageLinkRef) tileImageLinkRef.href += position\n if (tileLinkRef) tileLinkRef.href += position;\n});\n\neventBus.on('wishlist.products.init', (products, step) => {\n const impressions = getWishlistImpressions(products);\n\n if (!impressions.length) {\n return;\n }\n\n const event = {\n event: 'productImpressions',\n ecommerce: {\n currencyCode: currentCurrency,\n impressions: impressions\n }\n };\n\n if (step && (step === 'browsing')) {\n event.event = 'productImpressions';\n }\n\n report(event);\n});\n\neventBus.on('searchbox.products.init', (products) => {\n const impressions = getSearchboxImpressions(products);\n\n if (!impressions.length) {\n return;\n }\n\n const event = {\n event: 'productImpressions',\n ecommerce: {\n currencyCode: currentCurrency,\n impressions: impressions\n }\n };\n\n report(event);\n});\n\n/**\n * @description Sends GTM event, when product was added to wishlist\n * @param {object} productData - Product data object containing details about the product\n*/\n\neventBus.on('product.added.to.wishlist', productData => {\n const eventData = {\n event: 'addToWishlist',\n id: productData.id,\n upc: productData.upc,\n name: productData.name,\n brand: productData.brand,\n dimension24: productData.dimension24,\n dimension41: productData.dimension41,\n dimension42: productData.dimension42,\n dimension43: productData.dimension43,\n dimension44: productData.dimension44,\n dimension45: productData.dimension45,\n originalPrice: productData.originalPrice,\n price: productData.price\n };\n\n if (productData.category) {\n eventData.category = productData.category;\n }\n\n report(eventData);\n});\n\n/**\n * @description Sends GTM event, when user clicks on image on content page\n * @param {string} productName - product name\n*/\n\neventBus.on('gtm.article.image', element => {\n const isBlogPage = element.ref('html').get().querySelector('body').dataset.isBlogPage === 'true';\n\n if (isBlogPage) {\n let text = null;\n let gtmObject = {\n event: 'articleImage',\n articleImageName: element.ref('imageTile').get().alt || element.ref('imageTile').get().title\n };\n\n const imageWrapper = element.ref('self').get().parentElement;\n const textWrapper = imageWrapper.nextSibling;\n if (textWrapper) {\n text = textWrapper.querySelector('[data-selector-id=\"text-box\"]');\n }\n\n if (text) {\n gtmObject.articleImageDescription = text.innerText.trim();\n }\n report(gtmObject);\n }\n});\n\n/**\n * @description Sends GTM event, when user scroll blog carousel\n * @param {string} productName - product name\n*/\n\neventBus.on('gtm.scroll.blog.carousel', data => {\n report({\n event: 'articleImageSlider',\n articleImageName: data.articleImageName || '',\n articleImageDescription: data.articleImageDescription || '',\n articleImagePosition: data.articleImagePosition\n });\n});\n\n/**\n * @description Sends GTM event, when product was removed from wishlist\n * @param {object} productData - Product data object containing details about the product\n*/\n\neventBus.on('product.removed.from.wishlist', productData => {\n const eventData = {\n event: 'removeFromWishlist',\n id: productData.id,\n upc: productData.upc,\n name: productData.name,\n brand: productData.brand,\n dimension24: productData.dimension24,\n dimension41: productData.dimension41,\n dimension42: productData.dimension42,\n dimension43: productData.dimension43,\n dimension44: productData.dimension44,\n dimension45: productData.dimension45,\n originalPrice: productData.originalPrice,\n price: productData.price\n };\n\n if (productData.category) {\n eventData.category = productData.category;\n }\n\n report(eventData);\n});\n\neventBus.on('product.tile.qv.open', qvData => {\n report({\n event: 'productView',\n ecommerce: {\n detail: {\n actionField: { list: 'Product quick view' },\n products: [qvData.gtmInfo]\n }\n }\n });\n});\n\neventBus.on('product.changed.quantity', action => {\n report({\n event: 'changeQuantity',\n changeQuantityAction: action\n });\n});\n\neventBus.on('product.tile.qv.open.edit', editEl => {\n if (!editEl) {\n return;\n }\n\n const productInfo = editEl.data('analytics');\n\n if (!productInfo) {\n return;\n }\n\n report({\n ecommerce: {\n detail: {\n actionField: { list: 'Product quick view' },\n products: [productInfo]\n }\n }\n });\n});\n\neventBus.on('tile.product.link.click', productTile => {\n const productAnalyticsDataElement = new RefElement([productTile.get().closest('[data-widget=\"productTile\"]')]);\n const listId = productAnalyticsDataElement.data('list');\n const list = getProductList(productAnalyticsDataElement);\n const tileInfo = productAnalyticsDataElement.data('analytics');\n const pid = productAnalyticsDataElement.data('pid');\n\n if (!tileInfo) {\n return;\n }\n\n setTilePosition(tileInfo, pid, listId);\n\n report({\n event: 'productClick',\n ecommerce: {\n currencyCode: currentCurrency,\n click: {\n actionField: { list },\n products: [tileInfo]\n }\n }\n });\n sessionStorage.setItem('productListGTM', list);\n});\n\n/**\n * @description Tracks in dataLayer an information about minicart product tile link click\n * @event \"minicart.product.link.click\"\n * @listens \"minicart.product.link.click\"\n * @returns {void}\n */\neventBus.on('minicart.product.link.click', (productTile, action) => {\n const list = getProductList(productTile);\n sessionStorage.setItem('productListGTM', list);\n});\n\n\neventBus.on('search.box.product.click', searchBoxWidget => {\n const productAnalyticsDataElement = searchBoxWidget.currentSelected;\n const listId = productAnalyticsDataElement.data('list');\n const list = getProductList(productAnalyticsDataElement);\n const tileInfo = productAnalyticsDataElement.data('analytics');\n const pid = productAnalyticsDataElement.data('pid');\n\n if (!tileInfo) {\n return;\n }\n\n setTilePosition(tileInfo, pid, listId);\n sessionStorage.setItem('productListGTM', list);\n\n report({\n event: 'productClick',\n ecommerce: {\n currencyCode: currentCurrency,\n click: {\n actionField: 'Search Suggestions',\n products: [tileInfo]\n }\n }\n });\n});\n\neventBus.on('product.variation.click', (data, selectedVariation) => {\n const list = getProductList(selectedVariation);\n report({\n event: 'productDetailView',\n ecommerce: {\n currencyCode: currentCurrency,\n detail: {\n actionField: { list },\n products: [data]\n }\n }\n });\n});\n\neventBus.on('gtm.product.detail.view', (widget) => {\n const detail = widget.config.gtmproductdetails;\n const list = sessionStorage.getItem('productListGTM');\n\n report({\n event: 'productDetailView',\n ecommerce: {\n currencyCode: detail.currencyCode,\n detail: {\n actionField: { list: list || detail.list },\n products: detail.products\n }\n }\n });\n\n sessionStorage.removeItem('productListGTM');\n});\n\neventBus.on('product.added.to.cart', (cart, widget) => {\n const tileInfo = widget.currentGtmInfo || widget.data('analytics');\n const isProductDetailPage = widget.ref('self').data('widget') === 'productDetail';\n const items = [];\n\n if (!tileInfo) {\n return;\n }\n\n if (!tileInfo.quantity) {\n tileInfo.quantity = 1;\n }\n\n if (tileInfo.position) {\n delete tileInfo.position;\n }\n\n let data = {};\n\n if (cart.items.length > 0) {\n for (var i = 0; i < cart.items.length; i++) {\n var item = transformCartItem(cart.items[i]);\n items.push(item);\n }\n }\n\n if (!isProductDetailPage) {\n const list = getProductList(widget.ref('self'));\n data.actionField = { list: list };\n }\n\n data.products = [].concat(tileInfo);\n\n\n let reportObject = {\n event: 'addToCart',\n ecommerce: {\n currencyCode: currentCurrency,\n add: data\n }\n };\n\n report(reportObject);\n\n report({\n event: 'cartUpdated',\n ecommerce: {\n itemsInCart: items\n }\n });\n});\n\n/**\n * @description Sends to dataLayer an information about product on product link click\n * @param {refElement} productTile - product link\n * @param {string} action - where click was made\n * @returns {void}\n */\nfunction trackProductClicks(productTile, action) {\n const tileInfo = productTile.data('analytics');\n const list = getProductList(productTile);\n\n sessionStorage.setItem('productListGTM', list);\n\n if (!tileInfo) {\n return;\n }\n\n report({\n event: 'productClicks',\n products: {\n name: tileInfo.name,\n id: tileInfo.id,\n action: action || productTile.data('action') || ''\n }\n });\n}\n\neventBus.on('cart.product.link.click', (productTile, action) => {\n let productAnalyticsDataElement;\n const element = productTile.ref && productTile.ref('self');\n if (element) {\n productAnalyticsDataElement = new RefElement([element.get()]);\n trackProductClicks(productAnalyticsDataElement, action);\n } else {\n trackProductClicks(productTile, action);\n }\n});\n\neventBus.on('wishlist.product.link.click', productTile => {\n const productAnalyticsDataElement = new RefElement([productTile.ref('self').get()]);\n const list = getProductList(productAnalyticsDataElement);\n const tileInfo = productAnalyticsDataElement.data('analytics');\n const pid = productAnalyticsDataElement.data('pid');\n const listId = productAnalyticsDataElement.data('list');\n\n if (!tileInfo) {\n return;\n }\n\n sessionStorage.setItem('productListGTM', list);\n\n setTilePosition(tileInfo, pid, listId);\n\n report({\n event: 'productClick',\n ecommerce: {\n currencyCode: currentCurrency,\n click: {\n actionField: { list },\n products: [tileInfo]\n }\n }\n });\n});\n\neventBus.on('gtm.cart.updated', cart => {\n const items = [];\n if (cart.items.length > 0) {\n for (var i = 0; i < cart.items.length; i++) {\n var item = transformCartItem(cart.items[i]);\n items.push(item);\n }\n }\n report({\n event: 'cartUpdated',\n ecommerce: {\n itemsInCart:items\n }\n });\n\n if (!cart.items.length) {\n report({\n event: 'cartEmptied'\n });\n }\n});\n\neventBus.on('minicart.updated', cart => {\n const items = [];\n if (cart.items.length > 0) {\n for (var i = 0; i < cart.items.length; i++) {\n var item = transformCartItem(cart.items[i]);\n items.push(item);\n }\n }\n report({\n event: 'cartUpdated',\n ecommerce: {\n itemsInCart:items\n }\n });\n\n if (!cart.items.length) {\n report({\n event: 'cartEmptied'\n });\n }\n});\n\neventBus.on('cart.remove.product', cart => {\n if (!cart.removeButton) {\n return;\n }\n\n const tileInfo = cart.removeButton.data('analytics');\n\n if (!tileInfo) {\n return;\n }\n\n tileInfo.quantity = parseInt(cart.removeButton.data('quantity'), 10) || 1;\n\n delete tileInfo.list;\n\n report({\n event: 'removeFromCart',\n ecommerce: {\n currencyCode: currentCurrency,\n remove: {\n products: [tileInfo]\n }\n }\n });\n});\n\neventBus.on('minicart.remove.product', minicart => {\n if (!minicart.removeProductLink) {\n return;\n }\n\n const tileInfo = minicart.removeProductLink.data('analytics');\n\n if (!tileInfo) {\n return;\n }\n\n tileInfo.quantity = parseInt(minicart.removeProductLink.data('quantity'), 10) || 1;\n\n report({\n event: 'removeFromCart',\n ecommerce: {\n currencyCode: currentCurrency,\n remove: {\n products: [tileInfo]\n }\n }\n });\n});\n\nlet shippingMethodName = '';\n\neventBus.on('checkout.shipping.step.submitted', checkoutMgr => {\n if (checkoutMgr.order && checkoutMgr.order.gtmInfo) {\n shippingMethodName = get(checkoutMgr, 'order.shipping.0.selectedShippingMethod.displayName');\n if (!shippingMethodName) {\n const applicableShippingMethods = get(checkoutMgr, 'order.shipping.0.applicableShippingMethods') || [];\n applicableShippingMethods.forEach(applicableShippingMethod => {\n if (applicableShippingMethod && applicableShippingMethod.selected) {\n shippingMethodName = applicableShippingMethod.displayName;\n }\n });\n }\n\n report({\n event: 'checkoutOption',\n ecommerce: {\n checkout_option: {\n actionField: {\n step: 2,\n option: shippingMethodName\n }\n }\n }\n });\n }\n});\n\neventBus.on('gtm.checkout.billing.step.submitted', checkoutMgr => {\n if (checkoutMgr.order && checkoutMgr.order.gtmInfo) {\n let paymentMethod = get(checkoutMgr, 'order.billing.payment.selectedPaymentInstruments.0.name');\n\n if (!paymentMethod) {\n paymentMethod = get(checkoutMgr, 'order.billing.payment.applicablePaymentMethods.0.name') || '';\n }\n\n report({\n event: 'checkoutOption',\n ecommerce: {\n checkout_option: {\n actionField: {\n step: 3,\n option: paymentMethod\n }\n }\n }\n });\n }\n});\n\nfunction sendFirstStepDataForKnownUser(products, isCustomerFromLoginPage) {\n const actionFieldObject = {\n step: 1\n }\n if (!isCustomerFromLoginPage) {\n actionFieldObject.option = 'logged in';\n }\n\n report({\n event: 'checkout',\n ecommerce: {\n currencyCode: currentCurrency,\n checkout: {\n actionField: actionFieldObject,\n products: products\n }\n }\n });\n}\n\nfunction sendLoginOption(loginOption) {\n report({\n event: 'checkoutOption',\n ecommerce: {\n checkout_option: {\n actionField: {\n step: 1,\n option: loginOption\n }\n }\n }\n });\n}\n\neventBus.on('checkout.selected.shipping.step', () => {\n report({\n event: 'checkout',\n ecommerce: {\n checkout: {\n actionField: {\n step: 2\n }\n }\n }\n });\n});\n\neventBus.on('checkout.selected.billing.step', () => {\n report({\n event: 'checkout',\n ecommerce: {\n checkout: {\n actionField: {\n step: 3\n }\n }\n }\n });\n});\n\neventBus.on('checkout.selected.summary.step', () => {\n report({\n event: 'checkout',\n ecommerce: {\n checkout: {\n actionField: {\n step: 4\n }\n }\n }\n });\n});\n\neventBus.on('gtm.where.to.buy.online', (emitBusEvent) => {\n report({\n event: 'whereToBuyOnline',\n onlineStoreName: emitBusEvent.data('storeName')\n });\n});\n\neventBus.on('gtm.subscribe.success', () => {\n report({\n event: \"emailSubscribe\",\n formName: \"Newsletter\",\n formAction: \"Opt-In\",\n formStatus: \"Success\"\n });\n});\n\n$(document).on('change','#dwfrm_billing_subscribe' ,function(){\n if(this.checked) {\n var gtmData = {\n event: \"emailSubscribe\",\n formName: \"Newsletter\",\n formAction: \"Opt-In\",\n formStatus: \"Success\",\n \"fieldEngagement\" : \"dwfrm_billing_subscribe\"\n\n };\n report(gtmData);\n }\n})\n\neventBus.on('gtm.checkout.send.first.step', (customer, products, isCustomerFromLoginPage = false) => {\n // sends fist step for registered/guest user\n if (customer.registeredUser) {\n sendFirstStepDataForKnownUser(products, isCustomerFromLoginPage);\n if (!isCustomerFromLoginPage) {\n return;\n }\n if (customer.isExternallyAuthenticated) {\n // TODO:HARMONY:BE pass authMethod\n // sendLoginOption(authMethod)\n }\n } else {\n sendLoginOption('guest');\n }\n});\n\neventBus.on('interacted.field', handleFormInteractedField);\n\nfunction handleFormInteractedField(interactedData) {\n //mark form as interacted\n handleFormInteraction(interactedData.formName, interactedData.formId);\n\n //set field interaction data\n interactedForms[interactedData.formId].fields.push(interactedData.fieldName);\n}\n\n/**\n * @description Returns specific event name for Form first Interacation\n * @param {string} formId\n * @returns {string}\n*/\n\nfunction getSpecificEventForFirstInteraction(formId) {\n if (formId === 'contactUsForm') {\n return 'contactUsInitiated';\n } else if (formId === 'registerForm') {\n return 'createAccountInitiated';\n }\n\n return '';\n}\n\n/**\n * @description Get contact type\n * @returns {string}\n*/\nfunction getContactType() {\n const reasonCode = document.getElementById('reasonCode');\n return reasonCode ? reasonCode.value : '';\n}\n\n/**\n * @description Get information from findNearMe form\n * @returns {object}\n*/\nfunction getFindNearMeData() {\n let findNearMeData = {};\n const zipCode = document.getElementById('zipCode');\n const radius = document.getElementById('radius');\n const flavor = document.getElementById('flavor');\n const inStore = document.getElementById('inStores');\n const diningOut = document.getElementById('diningOut');\n \n if (zipCode) {\n findNearMeData.zipCode = zipCode.value;\n }\n\n if (radius) {\n findNearMeData.milesToSearch = radius.value;\n }\n\n if (flavor) {\n findNearMeData.selectedVarietal = flavor.options[flavor.selectedIndex].text;\n }\n\n findNearMeData.selectedProduct = findNearMeData.selectedVarietal;\n if (inStore.checked) {\n findNearMeData.selectedType = 'In Store';\n } else if (diningOut.checked) {\n findNearMeData.selectedType = 'Dining Out';\n } else {\n findNearMeData.selectedType = 'Offline';\n }\n \n return findNearMeData;\n}\n\n/**\n * @description Handle Form Interacation and mark form as interacted\n * @param {string} formName The name of the form with which the client interacts\n * @param {string} formId\n * @returns {void}\n*/\nfunction handleFormInteraction(formName, formId) {\n // send data that form was interacted\n if (!interactedForms[formId]) {\n //generate gtmDataObject\n let data = formGtmData(formName, formId, null);\n\n if (data.formStatus === 'First Interaction') {\n data.event = getSpecificEventForFirstInteraction(formId) || data.event;\n }\n\n //report submit event\n report(data);\n //mark as interacted\n interactedForms[formId] = {\n fields: [],\n formName: formName\n };\n\n }\n}\n\n/**\n * @description Prepare GTM data object\n * @param {string} formName The name of the form with which the client interacts\n * @param {string} formId The name of the form widget with which the client interacts\n * @param {any} data additional data\n * @returns {object} return GTM data object\n */\nfunction formGtmData(formName, formId, data) {\n /**\n * @description gtm Object\n * @type {any}\n */\n let gtmObject = {\n formStatus: 'First Interaction'\n };\n\n if (data) {\n Object.assign(gtmObject, data);\n }\n\n // special handling for special forms\n // TODO:HARMONY:BE handle in a better way\n if (formId && specialFormsEventData[formId]) {\n const formEventData = specialFormsEventData[formId];\n gtmObject.event = formEventData.event;\n gtmObject.formName = formEventData.name;\n gtmObject.formAction = formEventData.action;\n if (formId === 'contactUsForm') {\n gtmObject.contactTypeSelected = getContactType();\n } else if (formId === 'wheretobuyForm' && gtmObject.formStatus === 'Success') {\n const findNearMeData = getFindNearMeData();\n Object.assign(gtmObject, findNearMeData);\n }\n } else {\n gtmObject.event = specialFormsEventData['default-form'].event;\n gtmObject.formName = formName;\n gtmObject.formAction = specialFormsEventData['default-form'].action;\n }\n\n return gtmObject;\n}\n\n/**\n * @description interacted forms object\n * @type {any}\n*/\nvar interactedForms = {};\n\n/**\n * @description interacted forms array\n * @type {any}\n*/\nvar submittedForms = [];\n\n/**\n * @description Sends Abandonment GTM Event, in case, when user iteracted with form, form wasn't submitted and user has left page\n * @returns {void}\n*/\nfunction sendAbandonmentForm() {\n const interactedFormsKeys = Object.keys(interactedForms);\n interactedFormsKeys.forEach(formId => {\n if (submittedForms.indexOf(formId) === -1) {\n /**\n * @description gtm Object\n * @type {any}\n */\n let gtmObject = formGtmData(interactedForms[formId].formName, formId, null);\n gtmObject.formStatus = 'Abandonment';\n gtmObject.fieldEngagement = interactedForms[formId].fields.join(' > ');\n report(gtmObject);\n }\n });\n}\n\n/**\n * @description event data for exceptional forms\n * @type {any}\n*/\nvar specialFormsEventData = {\n emailSubscribe: {\n name: 'Newsletter',\n event: 'emailSubscribe',\n action: 'Opt-In'\n },\n registerForm: {\n event: 'createAccount',\n name: 'Create Account',\n action: 'Submit',\n cutomerId: ''\n },\n confirmationCreateAccount: {\n event: 'createAccount',\n name: 'Create Account',\n action: 'Submit',\n cutomerId: ''\n },\n contactUsForm: {\n event: 'contactUs',\n name: 'Contact Us',\n action: 'Submit'\n },\n wheretobuyForm: {\n event: 'findStoreSubmit',\n name: 'Find Store',\n action: 'Submit'\n },\n 'default-form': {\n event: 'form-submit',\n action: 'Submit'\n\n }\n};\n\n/**\n * @description map form name to form ID\n * @type {any}\n */\nvar specialFromIdNameMapping = {\n 'subscribe-form': 'emailSubscribe',\n 'contactUsForm': 'contactUsForm'\n};\n\nif (window.dataLayer) {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n setTimeout(() => {\n init();\n }, 0);\n }, { once: true });\n } else {\n init();\n }\n}\n\n// store locator 3rd party events\ndocument.addEventListener('gtm.store.list', function (event) {\n const storeData = parseW2BInfor(event.detail.storeData);\n\n report({\n event: 'whereToBuyMap',\n storeName: storeData.storeName,\n storeAddress: storeData.storeAddress,\n storeCity: storeData.storeCity,\n storeState: storeData.storeState,\n storePosition: event.detail.position\n });\n});\n\nfunction parseW2BInfor(storeInformationArray) {\n const gtmObject = {\n storeName: storeInformationArray[0],\n storeAddress: storeInformationArray[1],\n storeCity: storeInformationArray[2].split(',')[0],\n storeState: storeInformationArray[2].split(',')[1].trim().split(' ')[0],\n };\n\n return gtmObject;\n}\n"],"sourceRoot":""}