{"version":3,"file":"775.3b50764f7f960ff60bb4.js","mappings":"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","sources":["webpack:///./Scripts/_Addons/PNGtmEnhancedEcom/AddToCartTrackingDataBuilder.js","webpack:///./Scripts/_Addons/PNGtmEnhancedEcom/RemoveFromCartTrackingDataBuilder.js","webpack:///./Scripts/_Addons/PNGtmEnhancedEcom/ProductBuilder.js","webpack:///./Scripts/_Addons/PNGtmEnhancedEcom/Actions/GtmEEC.action.js","webpack:///./Scripts/_Addons/PNGtmEnhancedEcom/GtmEnhancedEcomListener.js"],"sourcesContent":["export default class AddToCartTrackingDataBuilder{\n\n build(product, location) {\n \n return {\n currencyCode: window.gtmeecom?.currencyCode || '',\n add: {\n actionField: {\n list: location\n },\n products: [product]\n }\n }\n }\n}","export default class RemoveFromCartTrackingDataBuilder{\n build(product){\n return {\n currencyCode: window.gtmeecom.currencyCode || '',\n remove: {\n actionField: {\n list: \"Shopping Cart\"\n },\n products: [product]\n }\n }\n }\n}","export default class ProductBuilder{\n build(product, quantity) {\n return {\n brand: product.brand,\n category: product.category,\n id: product.id,\n name: product.name,\n price: product.price,\n quantity: quantity\n }\n }\n}","import {\n GTM_IMPRESSIONS, GTM_ADD_TO_CART, CART_LOAD_ERROR\n} from '../constants';\n\n\nimport { get } from '../../../Services/http';\nimport { catchError } from '../../../Actions/Error.action';\nimport ClickTrackingDataBuilder from '../ClickTrackingDataBuilder';\nimport AddToCartTrackingDataBuilder from '../AddToCartTrackingDataBuilder';\nimport RemoveFromCartTrackingDataBuilder from '../RemoveFromCartTrackingDataBuilder';\nimport ProductBuilder from '../ProductBuilder';\n\nexport const sendGtmImpressions = (displayProductsAmount) => (dispatch, getState) => {\n let gtmImpression = getImpressionData(displayProductsAmount, getState);\n window.gtmTracker.impressions(gtmImpression);\n}\n\nexport const sendGtmClick = (itemIndex) => (dispatch, getState) => {\n let builder = new ClickTrackingDataBuilder();\n let clickedProduct = getClickedProduct(itemIndex, getState);\n let data = builder.build(clickedProduct);\n\n window.gtmTracker.click(data);\n}\n\nexport const productLinkClick = (item, itemIndex) => (dispatch, getState) => {\n \n let builder = new ClickTrackingDataBuilder();\n //let clickedProduct = getClickedProduct(itemIndex, getState);\n item.position = itemIndex + 1;\n let data = builder.build(item);\n\n window.gtmTracker.click(data);\n}\n\nconst getClickedProduct = (itemIndex, getState) => {\n let impresssionResult = getState().quickSearch.gtmImpressionResult;\n let clickedProduct = impresssionResult.impressions.products.filter(Boolean).slice(itemIndex, itemIndex + 1);\n\n return clickedProduct[0];\n}\n\nexport const updateProductInCart = (orderRowId, quantity, currentQuantity) => (dispatch, getState) => {\n \n let row = getState().cart.orderRows.find(r => {\n return r.rowSystemId == orderRowId;\n });\n let articleNumber = row.articleNumber;\n \n let products = getState().gtmPNCart.products;\n let product = products.find(p => {\n return p.id === articleNumber;\n });\n\n if (product !== undefined) {\n processUpdate(product, currentQuantity, quantity);\n product.quantity = quantity;\n dispatch(receive(products));\n } else {\n return get(`/api/gtmPNCart/prodDetails/${articleNumber}`)\n .then(response => response.json())\n .then(result => {\n processUpdate(result, currentQuantity, quantity);\n products.push(result);\n dispatch(receive(products));\n })\n .catch(ex => dispatch(catchError(ex, error => loadError(error))));\n }\n}\n\nexport const removeProductInCart = (product) => (dispatch, getState) => {\n let builder = new ProductBuilder();\n if (product !== undefined) {\n processUpdate(product, product.quantity, 0);\n }\n};\n\nexport const addProductToCart = (articleNumber, quantity) => (dispatch, getState) => {\n\n let products = getState().gtmPNCart.products;\n let product = products.find(p => {\n return p.id === articleNumber;\n });\n\n let builder = new ProductBuilder();\n\n if (product !== undefined) {\n \n let p = builder.build(product, quantity);\n sendGtmAddToCart(p, window.gtmeecom.currentPageType);\n\n product.quantity = product.quantity + quantity;\n dispatch(receive(products));\n }\n else {\n return get(`/api/gtmPNCart/prodDetails/${articleNumber}`)\n .then(response => response.json())\n .then(result => {\n let p = builder.build(result, quantity)\n sendGtmAddToCart(p, window.gtmeecom.currentPageType)\n products.push(p)\n dispatch(receive(products))\n })\n .catch(ex => dispatch(catchError(ex, error => loadError(error))));\n }\n}\n\nexport const loadError = error => ({\n type: CART_LOAD_ERROR,\n payload: {\n error\n }\n});\n\nconst receive = products => ({\n type: GTM_ADD_TO_CART,\n payload: {\n products: products\n }\n});\n\nconst processUpdate = (product, currentQuantity, newQuantity) => {\n let builder = new ProductBuilder();\n \n if (newQuantity === 0) {\n \n let p = builder.build(product, currentQuantity);\n sendGtmRemoveFromCart(p);\n }\n else if (newQuantity > currentQuantity) {\n let addedQuantity = newQuantity - currentQuantity;\n let p = builder.build(product, addedQuantity);\n sendGtmAddToCart(p, \"Shopping Cart\")\n }\n else if (newQuantity < currentQuantity) {\n let removedQuantity = currentQuantity - newQuantity;\n let p = builder.build(product, removedQuantity);\n sendGtmRemoveFromCart(p);\n }\n};\n\nconst sendGtmAddToCart = (product, actionFieldList) => {\n let builder = new AddToCartTrackingDataBuilder();\n let data = builder.build(product, actionFieldList);\n window.gtmTracker.add(data);\n //window.facebookTracker.trackAdd();\n};\n\nconst sendGtmRemoveFromCart = (product) => {\n let builder = new RemoveFromCartTrackingDataBuilder();\n let data = builder.build(product);\n\n window.gtmTracker.remove(data);\n};\n\nconst getImpressionData = (displayProductsAmount, getState) => {\n let gtmImpression = getState().quickSearch.gtmImpressionResult;\n let displayProducts = gtmImpression.impressions.products.filter(Boolean).slice(0, displayProductsAmount);\n gtmImpression.products = displayProducts;\n\n return gtmImpression;\n}\n","import React, { Fragment, useEffect, useState, useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport {\n addProductToCart,\n updateProductInCart,\n removeProductInCart,\n} from './Actions/GtmEEC.action';\n\nconst GtmEnhancedEcomListener = () => {\n const dispatch = useDispatch();\n const [savedQuantity, setSavedQuantity] = useState(-1);\n const [savedOrderRows, setSavedOrderRows] = useState(-1);\n const elementRef = useRef(null);\n const { quantity, orderRows } = useSelector((state) => state.cart);\n\n useEffect(() => {\n if (savedQuantity !== -1 && savedOrderRows) {\n // Compare objects\n // Added to Cart\n\n // ...any Article been Removed?\n //else if (savedOrderRows.length > orderRows.length) {\n // const removedArticle = savedOrderRows.find(changed => !orderRows.some(saved => changed.articleNumber === saved.articleNumber));\n // if (removedArticle) {\n // // Removing article\n // }\n //}\n if (orderRows.length > savedOrderRows.length) {\n // Adding\n const changedArticle = orderRows.find(\n (changed) =>\n !savedOrderRows.some(\n (saved) => changed.articleNumber === saved.articleNumber\n )\n );\n if (changedArticle) {\n const quantity = changedArticle?.quantity || 1;\n dispatch(\n addProductToCart(changedArticle.articleNumber, parseInt(quantity))\n );\n }\n } else {\n // Update\n const changedArticle = orderRows.find((changed) =>\n savedOrderRows.some(\n (saved) =>\n changed.articleNumber === saved.articleNumber &&\n changed.quantity !== saved.quantity\n )\n );\n const oldValuesArticle = savedOrderRows.find(\n (x) =>\n x.articleNumber != null &&\n changedArticle?.articleNumber != null &&\n x.articleNumber === changedArticle.articleNumber\n );\n if (oldValuesArticle != null) {\n const quantity = changedArticle?.quantity || 1;\n dispatch(\n updateProductInCart(\n changedArticle.rowSystemId,\n parseInt(quantity),\n parseInt(oldValuesArticle.quantity || 1)\n )\n );\n } else if (orderRows.length < savedOrderRows.length) {\n const removedArticle = savedOrderRows.find(\n (changed) =>\n !orderRows.some(\n (old) => old.articleNumber === changed.articleNumber\n )\n );\n // Removing\n if (removedArticle) {\n dispatch(removeProductInCart(removedArticle));\n }\n\n //if (!oldValuesArticle) {\n // console.log(\"Not in list -> Add -> Changed\",changedArticle);\n //}\n //else {\n // console.log(\"IS IN LIST! -> Update -> Changed\", changedArticle);\n //}\n //if (quantity > oldValuesArticle.quantity) {\n // // Adding\n // const amountAdded = changedArticle.quantity - oldValuesArticle.quantity;\n // console.log(\"adding: \", amountAdded);\n //}\n //else if (quantity < oldValuesArticle.quantity) {\n // // Removing\n // const amountRemoved = oldValuesArticle.quantity - quantity;\n // console.log(\"Removing: \", amountRemoved);\n //}\n }\n }\n }\n setSavedQuantity(quantity);\n setSavedOrderRows(orderRows);\n }, [quantity]);\n\n return null;\n};\nexport default GtmEnhancedEcomListener;\n"],"names":["AddToCartTrackingDataBuilder","build","product","location","currencyCode","window","gtmeecom","add","actionField","list","products","RemoveFromCartTrackingDataBuilder","remove","ProductBuilder","quantity","brand","category","id","name","price","loadError","error","type","CART_LOAD_ERROR","payload","receive","GTM_ADD_TO_CART","processUpdate","currentQuantity","newQuantity","builder","p","sendGtmRemoveFromCart","addedQuantity","sendGtmAddToCart","removedQuantity","actionFieldList","data","gtmTracker","GtmEnhancedEcomListener","dispatch","useDispatch","savedQuantity","setSavedQuantity","useState","savedOrderRows","setSavedOrderRows","orderRows","useRef","useSelector","state","cart","useEffect","length","changedArticle","find","changed","some","saved","articleNumber","addProductToCart","getState","gtmPNCart","undefined","get","then","response","json","result","currentPageType","push","catch","ex","catchError","parseInt","oldValuesArticle","x","updateProductInCart","orderRowId","r","rowSystemId","removedArticle","old"],"sourceRoot":""}