{"version":3,"file":"ga4.min.js","mappings":"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","sources":["webpack://sfcc-hastens/./cartridges/app_hastens/cartridge/client/default/js/ga4.js"],"sourcesContent":["$(document).ready(function () {\n    $('body').on('hastens:afterAddToCart', function (event, response) {\n        const addedItem = response.data.cart.items.find(function (item) {\n            return item.id == response.pid;\n        });\n        addedItem.quantity = response.quantity;\n\n        // GA4\n        window.dataLayer.push({\n            event: 'add_to_cart',\n            ecommerce: generateGA4ItemData([addedItem])\n        });\n\n        // UA\n        window.dataLayer.push({\n            event: 'eec.add',\n            ecommerce: {\n                add: {\n                    actionField: {\n                        list: 'Product Page'\n                    },\n                    products: generateUAItemData([addedItem])\n                }\n            }\n        })\n    });\n    $('body').on('product:afterAttributeSelect', function (event, response) {\n        const category = response.data.breadcrumbs[1] ? response.data.breadcrumbs[1].htmlValue : '';\n\n        // GA4 - skip for now\n        // window.dataLayer.push({\n        //     event: 'view_item',\n        //     ecommerce: generateGA4ItemData([response.data.product], category)\n        // });\n\n        // UA\n        window.dataLayer.push({\n            event: 'eec.detail',\n            ecommerce: {\n                detail: {\n                    products: generateUAItemData([response.data.product], category)\n                }\n            }\n        });\n    });\n    $('body').on('checkout:serializeBilling', function (event, response) {\n        const form = response.form.serializeArray();\n        const payment = form.filter(function (item) {\n            return item.name === 'adyenPaymentMethod';\n        });\n\n        if (payment.length > 0) {\n            // GA4\n            window.dataLayer.push({\n                event: 'add_payment_info',\n                ecommerce: {\n                    payment_type: payment[0].value\n                }\n            });\n\n            // UA\n            window.dataLayer.push({\n                event: 'eec.checkout',\n                ecommerce: {\n                    checkout: {\n                        actionField: {\n                            step: '2',\n                            option: payment[0].value\n                        }\n                    }\n                }\n            });\n        }\n    });\n    $('body').on('hastens:updateShippingMethods', function (event, response) {\n        const cost = response.shipping.selectedShippingMethod.shippingCost || '';\n        const currency = getCurrency(response.shipping.productLineItems.items);\n        const tier = response.shipping.selectedShippingMethod.displayName;\n        const data = {\n            shipping_tier: tier,\n        };\n\n        if (cost) {\n            data.value = cleanNumber(cost);\n        }\n        if (currency) {\n            data.currency = currency;\n        }\n\n        // GA4\n        window.dataLayer.push({\n            event: 'add_shipping_info',\n            ecommerce: data\n        });\n\n        // UA - must trigger after begin_checkout\n        window.dataLayer.push({\n            event: 'eec.checkout_option',\n            ecommerce: {\n                checkout_option: {\n                    actionField: {\n                        step: '1',\n                        option: tier\n                    }\n                }\n            }\n        });\n    });\n\n    /*\n    // Currently not triggered\n    $('body').on('afterRemoveFromCart', function (event, response) {\n        const items = response.cart.items;\n\n        window.dataLayer.push({\n            event: 'remove_from_cart',\n            ecommerce: generateEcommerceData(items)\n        });\n    });\n\n    // Maybe needed\n    $('body').on('product:statusUpdate', function (event, response) {\n        console.log(event, response);\n    });\n    $('body').on('cart:update', function (event, response) {\n        console.log(event, response);\n    });\n    $('body').on('cart:updateQuantity', function (event, response) {\n        console.log(event, response);\n    });\n    $('body').on('setShippingMethodSelection', function (event, response) {\n        console.log(event, response);\n    });\n    */\n\n    $('body').on('hastens:storeLocatorResultsUpdated', function () {\n        window.dataLayer.push({ event: 'storeLocatorSearch' });\n    });\n\n    $('body').on('hastens:storeLocatorResultClick', function (event, label) {\n        window.dataLayer.push({ event: 'storeLocatorClickOnSearchResults', label: label });\n    });\n\n    $('body').on('hastens:storeLocatorMapMarkerClick', function (event, label) {\n        window.dataLayer.push({ event: 'storeLocatorClickOnMarker', label: label });\n    });\n\n    $('body').on('hastens:newsletterRequestSent', function () {\n        window.dataLayer.push({ event: 'signUpForNewsLetter' });\n    });\n\n    $('.tid-storelocator-partnerpage').on('click', function() {\n        window.dataLayer.push({\n            event: 'storeLocatorViewStore',\n            label: $(this).data('store'),\n        });\n    });\n\n    $('.tid-storelocator-phone').on('click', function() {\n        window.dataLayer.push({\n            event: 'storeLocatorClickOnPhoneNumber',\n            label: $(this).data('store'),\n            number: $(this).data('number'),\n            type: 'location',\n        });\n    });\n\n    $('.tid-storelocator-direction').on('click', function() {\n        window.dataLayer.push({\n            event: 'storeLocatorClickOnDirections',\n            label: $(this).data('store'),\n            type: 'location',\n        });\n    });\n\n    $('#footercontent .container-social').on('click', 'a', function() {\n        var href = $(this).attr('href');\n\n        if (href.indexOf('facebook') !== -1) {\n            window.dataLayer.push({ event: 'clickOnSocialMediaIcon', label: 'facebook' });\n        } else if (href.indexOf('linkedin') !== -1) {\n            window.dataLayer.push({ event: 'clickOnSocialMediaIcon', label: 'linkedin' });\n        } else if (href.indexOf('pinterest') !== -1) {\n            window.dataLayer.push({ event: 'clickOnSocialMediaIcon', label: 'pinterest' });\n        } else if (href.indexOf('youtube') !== -1) {\n            window.dataLayer.push({ event: 'clickOnSocialMediaIcon', label: 'youtube' });\n        } else if (href.indexOf('instagram') !== -1) {\n            window.dataLayer.push({ event: 'clickOnSocialMediaIcon', label: 'instagram' });\n        }\n    });\n});\n\n/**\n * Generate default ecommerce data object with item list and value.\n *\n * Skipping item_id and item_variant since Analytics don't handle them\n * correctly as of now.\n *\n * @param items\n * @param {string} category\n * @returns {object}\n */\nfunction generateGA4ItemData(items, category) {\n    let itemData = [];\n    let value = 0;\n    let currency = '';\n\n    items.forEach(function (item) {\n        const dataCategory = category || (item.primaryCategory ? item.primaryCategory.displayName : '');\n        const variant = getVariant(item);\n        const data = {\n            // item_id: item.id,\n            item_name: item.productName,\n            quantity: (item.quantity || item.selectedQuantity || 0).toString(),\n        };\n        if (variant) {\n            // data.item_variant = variant;\n        }\n        if (dataCategory) {\n            data.item_category = dataCategory;\n        }\n        if (item.price.sales) {\n            data.price = item.price.sales.value.toFixed(2);\n            data.currency = item.price.sales.currency;\n            value += data.price * data.quantity;\n            currency = data.currency;\n        }\n        itemData.push(data);\n    });\n\n    const retVal = {\n        items: itemData\n    }\n    if (currency) {\n        retVal.currency = currency;\n    }\n    if (value > 0) {\n        retVal.value = value.toFixed(2);\n    }\n\n    return retVal;\n}\n\n/**\n * Generate a products array appropriate for UA events.\n *\n * @param items\n * @param category\n * @returns {[]}\n */\nfunction generateUAItemData(items, category) {\n    let itemData = [];\n\n    items.forEach(function (item) {\n        const dataCategory = category || (item.primaryCategory ? item.primaryCategory.displayName : '');\n        const variant = getVariant(item);\n        const data = {\n            id: item.id,\n            name: item.productName,\n            quantity: (item.quantity || item.selectedQuantity || 0).toString(),\n        };\n        if (variant) {\n            data.variant = variant;\n        }\n        if (dataCategory) {\n            data.category = dataCategory;\n        }\n        if (item.price.sales && item.price.sales.value !== null) {\n            data.price = item.price.sales.value.toFixed(2);\n            data.currency = item.price.sales.currency;\n        }\n        itemData.push(data);\n    });\n\n    return itemData;\n}\n\n/**\n * Return a string of all selected variants.\n *\n * @param item\n * @returns {string}\n */\nfunction getVariant(item) {\n    if (!item.variationAttributes) {\n        return '';\n    }\n\n    let variations = [];\n    item.variationAttributes.forEach(function (v) {\n        if (v.displayValue) {\n            variations.push(v.displayName + ': ' + v.displayValue);\n        } else {\n            const selected = v.values.map(function (cur) {\n                return cur.selected ? cur.displayValue : null;\n            }).filter(function (cur) {\n                return !!cur;\n            });\n            if (selected.length) {\n                variations.push(v.displayName + ': ' + selected.join(', '));\n            }\n        }\n    });\n\n    return variations.sort().join(', ');\n}\n\n/**\n * Extract currency information from item data.\n *\n * @param items\n * @returns {string}\n */\nfunction getCurrency(items) {\n    const currencies = items.map(function (item) {\n        return item.price && item.price.sales\n            ? item.price.sales.currency\n            : '';\n    });\n\n    return currencies.length > 0 ? currencies[0] : '';\n}\n\n/**\n * Change a formatted money string to float.\n *\n * @param {string} num\n * @returns {string}\n */\nfunction cleanNumber(num) {\n    return parseFloat(num.replace('.', '').replace(',', '.').replace(/[^0-9.]/, '')).toFixed(2);\n}\n"],"names":["generateGA4ItemData","items","category","itemData","value","currency","forEach","item","dataCategory","primaryCategory","displayName","data","getVariant","item_name","productName","quantity","selectedQuantity","toString","item_category","price","sales","toFixed","push","retVal","generateUAItemData","variant","id","name","variationAttributes","variations","v","displayValue","selected","values","map","cur","filter","length","join","sort","$","document","ready","on","event","response","addedItem","cart","find","pid","window","dataLayer","ecommerce","add","actionField","list","products","breadcrumbs","htmlValue","detail","product","payment","form","serializeArray","payment_type","checkout","step","option","cost","shipping","selectedShippingMethod","shippingCost","currencies","getCurrency","productLineItems","tier","shipping_tier","parseFloat","replace","checkout_option","label","this","number","type","href","attr","indexOf"],"sourceRoot":""}