{"version":3,"file":"static/js/6.c843dfc37ee05d64a4f2.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/datalayer/helpers.ts?4c62","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/datalayer/index.ts?9cc9","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/datalayer/types.ts?770f","webpack://Msdyn365.Commerce.Online/./src/themes/venchi/utilities/quantity/Quantity.tsx?c3db"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { Address, Cart, CartLine, Coupon, DiscountLine, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { sha256 } from 'js-sha256';\r\n\r\nimport { PageType } from './types'\r\n\r\nexport const getPageType = (context: ICoreContext): PageType => {\r\n\tconst pageName = context.actionContext.requestContext.telemetryPageName\r\n\r\n const currentURLPathName = context.request.url.requestUrl.pathname.replace(/\\/$/, '');\r\n const defaultRoutes = context.request.app?.routes;\r\n\r\n\t// TODO: fix\r\n if (!defaultRoutes) {\r\n return PageType.PAGE_TYPE_NOT_LOADED;\r\n }\r\n\r\n\tconst conditions: { [key: string]: PageType } = {\r\n\t\t[String(pageName?.toLowerCase().includes('sign-in'))]: PageType.LOGIN,\r\n\t\t[String(pageName?.toLowerCase().includes('sign-up'))]: PageType.SIGN_UP_ECOM,\r\n\t\t[String(defaultRoutes.home?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.HOME,\r\n\t\t[String(currentURLPathName.endsWith('.c'))]: PageType.LISTING,\r\n\t\t[String(currentURLPathName.endsWith('.p'))]: PageType.PDP,\r\n\t\t[String(currentURLPathName.includes('/blog'))]: PageType.BLOG,\r\n\t\t[String(defaultRoutes.search?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.SEARCH_RESULTS,\r\n\t\t[String(defaultRoutes.cart?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.CART,\r\n\t\t[String(defaultRoutes.checkout?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.CHECKOUT,\r\n\t\t[String(defaultRoutes.orderConfirmation?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.TYP,\r\n\t\t[String(defaultRoutes.account?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.MY_ACCOUNT,\r\n\t\t[String(defaultRoutes.accountProfile?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.MY_PROFILE,\r\n\t\t[String(defaultRoutes.loyalty?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.LOYALTY,\r\n\t\t[String(defaultRoutes.wishlist?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.WISHLIST,\r\n\t};\r\n\r\n\tconst matchedCondition = Object.keys(conditions).find(condition => condition === 'true');\r\n\r\n\treturn matchedCondition ? conditions[matchedCondition] : PageType.OTHER;\r\n}\r\n\r\nexport const saveCurrentCategoryHierarchyAndListName = (\r\n\tcontext: ICoreContext,\r\n\tcategoryHierarchy: string,\r\n\tlistName: string\r\n): void => {\r\n\tsessionStorage.setItem('venchiProductCategoryHierarchy', categoryHierarchy ? categoryHierarchy : getPageType(context))\r\n sessionStorage.setItem('venchiProductListName', listName)\r\n}\r\n\r\nexport const saveAddToCartCategoryHierarchyAndListName = (\r\n\tcontext: ICoreContext, categoryHierarchy?: string, listName?: string\r\n): void => {\r\n\tconst receivedCategory = categoryHierarchy ? categoryHierarchy : getPageType(context);\r\n\tsessionStorage.setItem('venchiAddToCartProductCategoryHierarchy', (receivedCategory ? receivedCategory : ''));\r\n sessionStorage.setItem('venchiAddToCartProductListName', (listName ? listName : ''));\r\n}\r\n\r\nexport const refreshAddToCartCategoryHierarchyAndListName = (): void => {\r\n\tvar _catHierarchy = sessionStorage.getItem('venchiProductCategoryHierarchy');\r\n\tvar _listName = sessionStorage.getItem('venchiProductListName');\r\n\tsessionStorage.setItem('venchiAddToCartProductCategoryHierarchy', _catHierarchy || '');\r\n sessionStorage.setItem('venchiAddToCartProductListName', _listName || '');\r\n}\r\n\r\nexport const getAddToCartCategoryHierarchyAndListName = (): {categoryHierarchy: string, listname: string} => {\r\n\tvar categoryHierarchy = sessionStorage.getItem('venchiAddToCartProductCategoryHierarchy') || '';\r\n\tvar listname = sessionStorage.getItem('venchiAddToCartProductListName') || '';\r\n\treturn {categoryHierarchy, listname}\r\n}\r\n\r\nexport const extractCategoryNames = (categories: string): string[] =>{\r\n\t// Use map to transform each category into its name, filtering out undefined names\r\n\treturn categories.split('|',5).concat(Array(5).fill('')).slice(0, 5);\r\n}\r\n\r\nexport const getCurrentCategoryHierarchyAndListName = () : { categoryHierarchy: string[] | null, listName: string } => {\r\n\tvar _catHierarchy = sessionStorage.getItem('venchiProductCategoryHierarchy');\r\n\tvar _catHierarchyArray : string[] | null = _catHierarchy ? extractCategoryNames(_catHierarchy) : null;\r\n\tvar _listName = sessionStorage.getItem('venchiProductListName');\r\n\r\n\treturn {categoryHierarchy: _catHierarchyArray, listName: _listName ?? ''}\r\n}\r\n\r\nexport const getCategoryPageString = (): string => {\r\n\treturn 'Listing';\r\n}\r\n\r\nexport const getSearchPageString = (): string => {\r\n\treturn 'Search Results';\r\n}\r\n\r\nexport const isCategoryPage = (context: ICoreContext): boolean => {\r\n\tconst currentURLPathName = context.request.url.requestUrl.pathname.replace(/\\/$/, '');\r\n\treturn (currentURLPathName.endsWith('.c'));\r\n}\r\n\r\nexport const getListIdFromListName = (listName: string): string => {\r\n const cleanListName = listName.replace(/[^\\p{L}|\\d\\s]/gu, '');\r\n return cleanListName.toLowerCase().replace(/\\s/g, '_');\r\n}\r\n\r\nconst getCurrentCategoryHierarchyAndListNameFromCartLine = (\r\n\tcartLine: CartLine\r\n) : { categoryHierarchy: string[] | null, listName: string } => {\r\n\tif (!cartLine.ExtensionProperties?.length) {\r\n\t\treturn {\r\n\t\t\tcategoryHierarchy: null,\r\n\t\t\tlistName: ''\r\n\t\t}\r\n\t}\r\n\r\n\tlet _catHierarchy = cartLine.ExtensionProperties.filter(e => e.Key === 'venchiProductCategoryHierarchy')[0]?.Value?.StringValue;\r\n\tlet _catHierarchyArray : string[] | null = _catHierarchy ? extractCategoryNames(_catHierarchy) : null;\r\n\tlet _listName = cartLine.ExtensionProperties.filter(e => e.Key === 'venchiProductListName')[0]?.Value?.StringValue;\r\n\r\n\treturn {categoryHierarchy: _catHierarchyArray, listName: _listName ?? ''}\r\n}\r\n\r\nconst getCouponFromCart = (\r\n\tcoupons: Coupon[],\r\n\tdiscountLine: DiscountLine\r\n): string => {\r\n\tif (!discountLine) return ''\r\n\r\n\tconst coupon = coupons.find(c => c.DiscountOfferId === discountLine.OfferId);\r\n\r\n\treturn coupon?.Code || '';\r\n}\r\n\r\nexport const getItemFromSimpleProduct = (\r\n\tproduct: SimpleProduct,\r\n\tcategories: string[],\r\n\tlistName: string,\r\n\tindex: number,\r\n\tquantity: number,\r\n\tcurrency: string,\r\n) => {\r\n\treturn {\r\n\t\titem_id: product.ItemId,\r\n\t\titem_name: product.Name,\r\n\t\taffiliation: 'Venchi',\r\n\t\tcurrency,\r\n\t\tcoupon: '',\r\n\t\tdiscount: Number((product.BasePrice - product.Price).toFixed(2)) * quantity,\r\n\t\tindex,\r\n\t\titem_brand: 'Venchi',\r\n\t\titem_category: categories[0],\r\n\t\titem_category2: categories[1],\r\n\t\titem_category3: categories[2],\r\n\t\titem_category4: categories[3],\r\n\t\titem_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n\t\titem_list_name: listName,\r\n\t\titem_variant: '',\r\n\t\tlocation_id: '',\r\n\t\tprice: Number(product.BasePrice.toFixed(2)) * quantity,\r\n\t\tquantity,\r\n\t}\r\n}\r\n\r\nexport const getItemFromCartLine = (\r\n\tcartLine: CartLine,\r\n\tproductName: string,\r\n\tcoupons: Coupon[],\r\n\tindex: number,\r\n\tcurrency: string,\r\n) => {\r\n\tconst {\r\n\t\tcategoryHierarchy,\r\n\t\tlistName\r\n\t} = getCurrentCategoryHierarchyAndListNameFromCartLine(cartLine)\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\t\r\n\tlet couponCodes = ''; // TODO: check multiple coupons\r\n\tif (cartLine?.DiscountLines) {\r\n\t\tcouponCodes = cartLine.DiscountLines.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01).map(\r\n\t\t\tdiscountLine => getCouponFromCart(coupons, discountLine)\r\n\t\t).join('_');\r\n\t}\r\n\r\n\treturn {\r\n\t\titem_id: cartLine.ItemId,\r\n\t\titem_name: productName,\r\n\t\taffiliation: 'Venchi',\r\n\t\tcurrency,\r\n\t\tcoupon: couponCodes,\r\n\t\tdiscount: Number(cartLine.DiscountAmount?.toFixed(2) || 0),\r\n\t\tindex,\r\n\t\titem_brand: 'Venchi',\r\n\t\titem_category: categories[0],\r\n\t\titem_category2: categories[1],\r\n\t\titem_category3: categories[2],\r\n\t\titem_category4: categories[3],\r\n\t\titem_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n\t\titem_list_name: listName,\r\n\t\titem_variant: '',\r\n\t\tlocation_id: '',\r\n\t\tprice: Number(((cartLine.Price || 0) * (cartLine.Quantity || 1)).toFixed(2)),\r\n\t\tquantity: cartLine.Quantity,\r\n\t}\r\n}\r\n\r\nexport const getItemFromSalesLine = (\r\n\tsalesLine: SalesLine,\r\n\tproductName: string,\r\n\tindex: number,\r\n\tcurrency: string\r\n) => {\r\n\t//TODO update this part\r\n\t// const {\r\n\t// \tcategoryHierarchy,\r\n\t// \tlistName\r\n\t// } = getCurrentCategoryHierarchyAndListNameFromCartLine(salesLine) \r\n\t\r\n\tconst categoryHierarchy = ['', '', '', '', ''];\r\n\tconst listName = '';\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\r\n\tlet couponCodes = ''; // TODO: check multiple coupons\r\n\tif (salesLine?.DiscountLines) {\r\n\t\tcouponCodes = salesLine.DiscountLines.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01 && d.DiscountCode).map(\r\n\t\t\tdiscountLine => discountLine.DiscountCode\r\n\t\t).join('_');\r\n\t}\r\n\r\n\treturn {\r\n\t\titem_id: salesLine.ItemId,\r\n\t\titem_name: productName,\r\n\t\taffiliation: 'Venchi',\r\n\t\tcurrency,\r\n\t\tcoupon: couponCodes,\r\n\t\tdiscount: Number(salesLine.DiscountAmount?.toFixed(2) || 0),\r\n\t\tindex,\r\n\t\titem_brand: 'Venchi',\r\n\t\titem_category: categories[0],\r\n\t\titem_category2: categories[1],\r\n\t\titem_category3: categories[2],\r\n\t\titem_category4: categories[3],\r\n\t\titem_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n\t\titem_list_name: listName,\r\n\t\titem_variant: '',\r\n\t\tlocation_id: '',\r\n\t\tprice: Number(salesLine.GrossAmount?.toFixed(2) || 0),\r\n\t\tquantity: salesLine.Quantity,\r\n\t}\r\n}\r\nexport const setOrderPlacedStatusLocalStorage = (status: Boolean): void => {\r\n localStorage.setItem('venchiOrderPlaced', JSON.stringify(status))\r\n}\r\n\r\nexport const getOrderPlacedStatusLocalStorage = () : Boolean => {\r\n var statusString = localStorage.getItem('venchiOrderPlaced') || 'false'\r\n\treturn JSON.parse(statusString)\r\n}\r\n\r\nexport const hashSHA256 = (message: string): string => {\r\n\treturn sha256.hex(message) // Use 'hex' method for hex string output\r\n}\r\n\r\n\r\nexport const setCheckoutCartInLocalStorage = (cart: Cart | undefined): void => {\r\n if (!cart) {\r\n\t\tlocalStorage.removeItem('venchiCheckoutCart')\r\n\t} else {\r\n\t\tlocalStorage.setItem('venchiCheckoutCart', JSON.stringify(cart))\r\n\t}\r\n}\r\n\r\nexport const getCheckoutCartFromLocalStorage = (): Cart | null => {\r\n var cartString = localStorage.getItem('venchiCheckoutCart')\r\n\r\n\tif (!cartString) {\r\n\t\treturn null\r\n\t} else {\r\n\t\treturn JSON.parse(cartString) as Cart\r\n\t}\r\n}\r\n\r\nexport const getUserDataForTracking = (userData: any, DLObject: any) => {\r\n\t// All other events\r\n\tif (!DLObject.shouldTrackShippingAddress) {\r\n\t\treturn userData\r\n\t}\r\n\r\n\t// Purchase event\r\n\treturn {\r\n\t\t...userData,\r\n\t\taddress: {\r\n\t\t\tfirst_name: '',\r\n\t\t\tlast_name: '',\r\n\t\t\t...DLObject.shippingAddress\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport const getUserPrimaryAddress = (addresses: Address[] | undefined) => {\r\n if (!addresses) {\r\n return {\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: '',\r\n }\r\n }\r\n \r\n const address = addresses.find(a => a.IsPrimary)\r\n \r\n return address ? {\r\n street: address.Street || '',\r\n city: address.City || '',\r\n region: address.County || '',\r\n country: address.ThreeLetterISORegionName || '',\r\n postal_code: address.ZipCode || '',\r\n } : {\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: '',\r\n }\r\n}\r\n","import { ICoreContext } from '@msdyn365-commerce/core'\r\nimport {\r\n Cart,\r\n CartLine,\r\n Customer,\r\n SalesLine,\r\n SalesOrder,\r\n SimpleProduct,\r\n} from '@msdyn365-commerce/retail-proxy'\r\n\r\nimport {\r\n saveCurrentCategoryHierarchyAndListName,\r\n getPageType,\r\n extractCategoryNames,\r\n getCurrentCategoryHierarchyAndListName,\r\n getItemFromSimpleProduct,\r\n getListIdFromListName,\r\n getItemFromCartLine,\r\n getItemFromSalesLine,\r\n setOrderPlacedStatusLocalStorage,\r\n getOrderPlacedStatusLocalStorage,\r\n saveAddToCartCategoryHierarchyAndListName,\r\n refreshAddToCartCategoryHierarchyAndListName,\r\n hashSHA256,\r\n getCheckoutCartFromLocalStorage,\r\n setCheckoutCartInLocalStorage,\r\n getUserDataForTracking,\r\n getUserPrimaryAddress,\r\n} from './helpers'\r\n\r\nimport {\r\n CheckoutType,\r\n GtmEvents,\r\n LoginFromType,\r\n LoginState,\r\n SessionStorageKey,\r\n} from './types'\r\n\r\nconst eventQueue: any[] = []\r\nlet isUserDataTracked = false\r\nlet userEventDataGlobal: any\r\n\r\nconst triggerDLEvent = (DLObject: any) => {\r\n if (isUserDataTracked) {\r\n const {\r\n shouldTrackShippingAddress,\r\n shippingAddress,\r\n ...correctDLObject\r\n } = DLObject\r\n\r\n window.dataLayer?.push({ ecommerce: null })\r\n window.dataLayer?.push?.({\r\n ...correctDLObject,\r\n user_data: getUserDataForTracking(userEventDataGlobal.user_data, DLObject),\r\n user_properties: userEventDataGlobal.user_properties,\r\n global_variables: userEventDataGlobal.global_variables\r\n })\r\n\r\n return\r\n }\r\n\r\n eventQueue.push(DLObject)\r\n}\r\n\r\nexport const trackUserData = (\r\n context: ICoreContext,\r\n customerData: Customer | undefined,\r\n hasLoyaltyCard: boolean\r\n) => {\r\n const userData = context.request.user\r\n\r\n if (!userData) return\r\n\r\n if (userData.isSignedIn && !customerData) return\r\n\r\n const userEventData = getUserEventData(context, customerData, hasLoyaltyCard)\r\n\r\n if (!userEventData) return\r\n\r\n window.dataLayer?.push?.(userEventData)\r\n userEventDataGlobal = userEventData\r\n isUserDataTracked = true\r\n\r\n if (eventQueue.length) {\r\n eventQueue.forEach(DLObjectEach => {\r\n const {\r\n shouldTrackShippingAddress,\r\n shippingAddress,\r\n ...correctDLObject\r\n } = DLObjectEach\r\n\r\n window.dataLayer?.push({ ecommerce: null })\r\n window.dataLayer?.push?.({\r\n ...correctDLObject,\r\n user_data: getUserDataForTracking(userEventDataGlobal.user_data, DLObjectEach),\r\n user_properties: userEventDataGlobal.user_properties,\r\n global_variables: userEventDataGlobal.global_variables\r\n })\r\n })\r\n }\r\n}\r\n\r\nconst getUserEventData = (\r\n context: ICoreContext,\r\n customerData: Customer | undefined,\r\n hasLoyaltyCard: boolean\r\n) => {\r\n const userData = context.request.user\r\n\r\n const birthDate = customerData?.Attributes?.find(\r\n a => a.Name === 'Birthday'\r\n )?.AttributeValue?.StringValue || ''\r\n\r\n const hasGenericMarketing = customerData?.Attributes?.find(\r\n a => a.Name === 'GenericMarketing'\r\n )?.AttributeValue?.BooleanValue || false\r\n\r\n const formatDate = (date: Date): string => {\r\n const d = new Date(date)\r\n \r\n const year = d.getFullYear()\r\n\r\n if (year === 1900) return ''\r\n\r\n const month = String(d.getMonth() + 1).padStart(2, '0')\r\n const day = String(d.getDate()).padStart(2, '0')\r\n \r\n return `${year}-${month}-${day}`\r\n }\r\n\r\n return {\r\n event: GtmEvents.USER_DATA,\r\n ...(userData.isSignedIn && customerData ? {\r\n user_data: {\r\n email: customerData.Email,\r\n phone_number: customerData.Phone,\r\n address: {\r\n first_name: customerData.FirstName,\r\n last_name: customerData.LastName,\r\n ...getUserPrimaryAddress(customerData.Addresses),\r\n }\r\n },\r\n user_properties: {\r\n user_id: customerData.AccountNumber,\r\n date_of_birth: /^\\d{4}-\\d{2}-\\d{2}$/.test(birthDate) ? birthDate : '',\r\n gender: '',\r\n signup_date: customerData.CreatedDateTime ? formatDate(customerData.CreatedDateTime) : '',\r\n vclub: hasLoyaltyCard,\r\n newsletter_subscription: String(hasGenericMarketing),\r\n email_hashed: customerData.Email ? hashSHA256(customerData.Email) : '',\r\n phone_number_hashed: customerData.Phone ? hashSHA256(customerData.Phone) : '',\r\n }\r\n } : {\r\n user_data: {\r\n email: '',\r\n phone_number: '',\r\n address: {\r\n first_name: '',\r\n last_name: '',\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: ''\r\n } \r\n },\r\n user_properties: {\r\n user_id: '',\r\n date_of_birth: '',\r\n gender: '',\r\n signup_date: '',\r\n vclub: false,\r\n newsletter_subscription: '',\r\n email_hashed: '',\r\n phone_number_hashed: '', \r\n }\r\n }),\r\n global_variables: {\r\n Page_type: getPageType(context),\r\n login: userData.isSignedIn ? 'logged-in' : 'not-logged-in'\r\n }\r\n }\r\n}\r\n\r\n// View Item List\r\nexport const trackViewItemList = (\r\n context: ICoreContext,\r\n products: SimpleProduct[],\r\n listName: string,\r\n categoryHierarchy: string\r\n): void => {\r\n if (!products.length) return\r\n\r\n const categories = categoryHierarchy ? extractCategoryNames(categoryHierarchy) : [getPageType(context), '', '', '', '']\r\n\r\n const currency = context?.request?.channel?.Currency || ''\r\n // @ts-ignore\r\n const items = []\r\n products.forEach((product: SimpleProduct, index: number) => {\r\n items.push(\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n index,\r\n 1,\r\n currency\r\n )\r\n )\r\n })\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.VIEW_ITEM_LIST,\r\n item_list_id: getListIdFromListName(listName),\r\n item_list_name: listName,\r\n ecommerce: {\r\n currency,\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// View_item\r\nexport const trackViewItemFromPDP = (\r\n context: ICoreContext,\r\n product: SimpleProduct | undefined,\r\n price: number,\r\n originalPrice: number\r\n): void => {\r\n if (!product) return\r\n\r\n const { categoryHierarchy, listName } = getCurrentCategoryHierarchyAndListName()\r\n\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', '']\r\n\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.VIEW_ITEM,\r\n ecommerce: {\r\n currency,\r\n // @ts-ignore\r\n value: Number(price.toFixed(2)),\r\n items: [\r\n getItemFromSimpleProduct(\r\n {\r\n ...product,\r\n Price: price,\r\n BasePrice: originalPrice\r\n },\r\n categories,\r\n listName,\r\n 0,\r\n 1,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Select Item in product tile\r\nexport const trackProductTileClick = (\r\n context: ICoreContext,\r\n product: SimpleProduct,\r\n categoryHierarchy: string,\r\n listName: string\r\n): void => {\r\n saveCurrentCategoryHierarchyAndListName(context, categoryHierarchy, listName)\r\n const categories = categoryHierarchy ? extractCategoryNames(categoryHierarchy) : [getPageType(context), '', '', '', '']\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.SELECT_ITEM,\r\n ecommerce: {\r\n item_list_id: getListIdFromListName(listName),\r\n item_list_name: listName,\r\n currency,\r\n value: Number(product.Price.toFixed(2)),\r\n items: [\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n 0,\r\n 1,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Add to cart from listing\r\nexport const trackAddToCartFromListing = (\r\n context: ICoreContext,\r\n product: SimpleProduct,\r\n categoryHierarchy: string,\r\n listName: string,\r\n): void => {\r\n saveAddToCartCategoryHierarchyAndListName(context, categoryHierarchy, listName)\r\n const categories = categoryHierarchy ? extractCategoryNames(categoryHierarchy) : [getPageType(context), '', '', '', '']\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_CART,\r\n ecommerce: {\r\n currency,\r\n value: Number(product.Price.toFixed(2)),\r\n items: [\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n 0,\r\n 1,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Add to cart from PDP\r\nexport const trackAddToCartFromGWP = (\r\n context: ICoreContext,\r\n product: SimpleProduct | undefined,\r\n quantity: number\r\n): void => {\r\n if (!product) return\r\n\r\n const categories = ['GWP','','','','']\r\n const listName ='GWP'\r\n\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_CART,\r\n ecommerce: {\r\n currency,\r\n value: Number(product.Price.toFixed(2)) * quantity,\r\n items: [\r\n getItemFromSimpleProduct(\r\n product,\r\n categories,\r\n listName,\r\n 0,\r\n quantity,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Add to cart from PDP\r\nexport const trackAddToCartFromPDP = (\r\n context: ICoreContext,\r\n product: SimpleProduct | undefined,\r\n quantity: number,\r\n price: number,\r\n originalPrice: number,\r\n): void => {\r\n if (!product) return\r\n\r\n const { categoryHierarchy, listName } = getCurrentCategoryHierarchyAndListName()\r\n refreshAddToCartCategoryHierarchyAndListName()\r\n var categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', '']\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_CART,\r\n ecommerce: {\r\n currency,\r\n value: Number(price.toFixed(2)) * quantity,\r\n items: [\r\n getItemFromSimpleProduct(\r\n {\r\n ...product,\r\n Price: price,\r\n BasePrice: originalPrice\r\n },\r\n categories,\r\n listName,\r\n 0,\r\n quantity,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// View Cart\r\nexport const trackViewCart = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[]\r\n): void => {\r\n if (!cart) return\r\n\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n // @ts-ignore\r\n const items = []\r\n cart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n index,\r\n currency\r\n )\r\n )\r\n })\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.VIEW_CART,\r\n ecommerce: {\r\n currency,\r\n value: Number(cart.AmountDue?.toFixed(2) || 0),\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// Remove from cart\r\nexport const trackRemoveFromCart = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[],\r\n cartLine: CartLine | undefined\r\n): void => {\r\n if (!cart || !cartLine) return\r\n\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.REMOVE_FROM_CART,\r\n ecommerce: {\r\n currency,\r\n // @ts-ignore\r\n value: context.actionContext.requestContext.telemetryData.activeCart.AmountDue.toFixed(2),\r\n items: [\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n 0,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// Begin Checkout\r\nexport const trackBeginCheckout = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[],\r\n checkoutType: CheckoutType\r\n): void => {\r\n if (!cart) return\r\n\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n // @ts-ignore\r\n const items = []\r\n cart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n index,\r\n currency\r\n )\r\n )\r\n })\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.BEGIN_CHECKOUT,\r\n checkout_type: checkoutType,\r\n ecommerce: {\r\n currency,\r\n value: Number(cart.AmountDue?.toFixed(2) || 0),\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// Purchase\r\nexport const trackPurchase = (\r\n salesOrder: SalesOrder | undefined,\r\n products: SimpleProduct[]\r\n): void => {\r\n const isOrderPlaced = getOrderPlacedStatusLocalStorage()\r\n if (!salesOrder || !products.length || !isOrderPlaced) return\r\n\r\n setOrderPlacedStatusLocalStorage(false)\r\n \r\n // @ts-ignore\r\n const items = []\r\n const checkoutPreviousCart = getCheckoutCartFromLocalStorage()\r\n setCheckoutCartInLocalStorage(undefined)\r\n const currency = salesOrder.CurrencyCode || ''\r\n\r\n if (checkoutPreviousCart &&\r\n checkoutPreviousCart.Id === salesOrder.Id &&\r\n checkoutPreviousCart.CartLines?.length === salesOrder.SalesLines?.length\r\n ) {\r\n checkoutPreviousCart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n checkoutPreviousCart.Coupons || [],\r\n index,\r\n currency\r\n )\r\n )\r\n })\r\n } else {\r\n salesOrder.SalesLines?.forEach((salesLine: SalesLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === salesLine.ItemId)?.Name || salesLine.Description || ''\r\n\r\n items.push(\r\n getItemFromSalesLine(\r\n salesLine,\r\n productName,\r\n index,\r\n currency\r\n )\r\n )\r\n })\r\n }\r\n\r\n const couponCodes = salesOrder.SalesLines?.filter(salesLine => salesLine.DiscountLines && salesLine.DiscountLines.length).map(salesLine => {\r\n return salesLine.DiscountLines!.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01 && d.DiscountCode).map(\r\n discountLine => discountLine.DiscountCode!\r\n )\r\n }).flat()\r\n\r\n const uniqueCouponCodes = [...new Set(couponCodes)]\r\n\r\n const joinedCouponCodes = uniqueCouponCodes.join('_')\r\n\r\n const shipping = salesOrder.IsTaxIncludedInPrice ?\r\n (salesOrder.ShippingChargeAmount || 0) + (salesOrder.TaxOnShippingCharge || 0) :\r\n salesOrder.ShippingChargeAmount || 0\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.PURCHASE,\r\n ecommerce: {\r\n coupon: joinedCouponCodes,\r\n value: Number(salesOrder.SubtotalAmount?.toFixed(2) || 0),\r\n tax: Number(salesOrder.TaxAmount?.toFixed(2) || 0),\r\n shipping: Number(shipping.toFixed(2)),\r\n currency,\r\n transaction_id: salesOrder.Id,\r\n // @ts-ignore\r\n items\r\n },\r\n shouldTrackShippingAddress: !!salesOrder.SalesLines,\r\n shippingAddress: salesOrder.SalesLines ? {\r\n street: salesOrder.SalesLines[0]?.ShippingAddress?.Street || '',\r\n city: salesOrder.SalesLines[0]?.ShippingAddress?.City || '',\r\n region: salesOrder.SalesLines[0]?.ShippingAddress?.County || '',\r\n country: salesOrder.SalesLines[0]?.ShippingAddress?.ThreeLetterISORegionName || '',\r\n postal_code: salesOrder.SalesLines[0]?.ShippingAddress?.ZipCode || ''\r\n } : {\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: ''\r\n }\r\n })\r\n}\r\n\r\n// Login\r\nexport const trackLogin = (isUserSigned: boolean): void => {\r\n const prevLoginState = sessionStorage.getItem(SessionStorageKey.PREV_LOGIN_STATE)\r\n\r\n if (prevLoginState) {\r\n if (isUserSigned && prevLoginState === LoginState.GUEST) {\r\n const isCheckoutLogin = sessionStorage.getItem(SessionStorageKey.LOGIN_FROM) === LoginFromType.CHECKOUT\r\n\r\n triggerLoginEvent(isCheckoutLogin ? LoginFromType.CHECKOUT : LoginFromType.LOGIN)\r\n\r\n sessionStorage.setItem(SessionStorageKey.PREV_LOGIN_STATE, LoginState.LOGGED_USER)\r\n } else if (!isUserSigned && prevLoginState === LoginState.LOGGED_USER) {\r\n sessionStorage.setItem(SessionStorageKey.PREV_LOGIN_STATE, LoginState.GUEST)\r\n }\r\n } else {\r\n sessionStorage.setItem(SessionStorageKey.PREV_LOGIN_STATE, isUserSigned ? LoginState.LOGGED_USER : LoginState.GUEST)\r\n }\r\n\r\n sessionStorage.removeItem(SessionStorageKey.LOGIN_FROM)\r\n}\r\n\r\nconst triggerLoginEvent = (loginFrom: LoginFromType) => {\r\n triggerDLEvent({\r\n event: GtmEvents.LOGIN,\r\n method: '',\r\n success: true,\r\n login_from: loginFrom\r\n })\r\n}\r\n\r\n// Add_shipping_info\r\nexport const trackAddShippingInfo = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[]\r\n): void => {\r\n if (!cart) return\r\n\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n // @ts-ignore\r\n const items = []\r\n cart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n index,\r\n currency\r\n )\r\n )\r\n })\r\n\r\n const couponCodesSet = cart.Coupons?.map(c => {\r\n return c.Code\r\n })\r\n\r\n const joinedCouponCodes = (couponCodesSet && couponCodesSet.length) ? couponCodesSet.join('_') : ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_SHIPPING_INFO,\r\n ecommerce: {\r\n currency,\r\n coupon: joinedCouponCodes,\r\n shipping_tier: '',\r\n value: Number(cart.AmountDue?.toFixed(2) || 0),\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// Add_payment_info\r\nexport const trackAddPaymentInfo = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[]\r\n): void => {\r\n if (!cart) return\r\n\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n // @ts-ignore\r\n const items = []\r\n cart.CartLines?.forEach((cartLine: CartLine, index: number) => {\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n\r\n items.push(\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n index,\r\n currency\r\n )\r\n )\r\n })\r\n\r\n const couponCodesSet = cart.Coupons?.map(c => {\r\n return c.Code\r\n })\r\n\r\n const joinedCouponCodes = (couponCodesSet && couponCodesSet.length) ? couponCodesSet.join('_') : ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_PAYMENT_INFO,\r\n ecommerce: {\r\n currency,\r\n coupon: joinedCouponCodes,\r\n payment_type: '',\r\n value: Number(cart.AmountDue?.toFixed(2) || 0),\r\n // @ts-ignore\r\n items\r\n },\r\n })\r\n}\r\n\r\n// add_to_wishlist from PDP (Product Detail Page)\r\nexport const trackAddToWishlistFromPDP = (\r\n context: ICoreContext,\r\n product: SimpleProduct | undefined,\r\n price: number,\r\n originalPrice: number,\r\n): void => {\r\n if (!product) return\r\n\r\n const userData = context.request.user\r\n\r\n if (!userData || !userData.isSignedIn) return\r\n\r\n const { categoryHierarchy, listName } = getCurrentCategoryHierarchyAndListName()\r\n refreshAddToCartCategoryHierarchyAndListName()\r\n var categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', '']\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_WISHLIST,\r\n ecommerce: {\r\n currency,\r\n value: Number(price.toFixed(2)),\r\n items: [\r\n getItemFromSimpleProduct(\r\n {\r\n ...product,\r\n Price: price,\r\n BasePrice: originalPrice\r\n },\r\n categories,\r\n listName,\r\n 0,\r\n 1,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// add_to_wishlist from Cart Page\r\nexport const trackAddToWishlistFromCart = (\r\n context: ICoreContext,\r\n cart: Cart | undefined,\r\n products: SimpleProduct[],\r\n cartLine: CartLine | undefined\r\n): void => {\r\n if (!cart || !cartLine) return\r\n\r\n const productName = products.find(p => p.ItemId === cartLine.ItemId)?.Name || cartLine.Description || ''\r\n const currency = context?.request?.channel?.Currency || ''\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_TO_WISHLIST,\r\n ecommerce: {\r\n currency,\r\n // @ts-ignore\r\n value: context.actionContext.requestContext.telemetryData.activeCart.AmountDue.toFixed(2),\r\n items: [\r\n getItemFromCartLine(\r\n cartLine,\r\n productName,\r\n cart.Coupons || [],\r\n 0,\r\n currency\r\n )\r\n ]\r\n },\r\n })\r\n}\r\n\r\n// click_menu\r\nexport const trackClickMenu = (\r\n category: string,\r\n action: string,\r\n label: string\r\n): void => {\r\n if (!category) return\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.CLICK_MENU,\r\n category,\r\n action,\r\n label\r\n })\r\n}\r\n\r\n// click_filter\r\nexport const trackClickFilter = (\r\n category: string | undefined,\r\n label: string,\r\n priceFilter?: { min: number, max: number }\r\n): void => {\r\n if (!category) return\r\n\r\n triggerDLEvent({\r\n event: GtmEvents.CLICK_FILTER,\r\n category,\r\n label,\r\n ...(priceFilter ? {price_min: priceFilter.min, price_max: priceFilter.max} : {})\r\n })\r\n}\r\n\r\n// view_search_results\r\nexport const trackSearch = (\r\n searchText: string\r\n): void => {\r\n triggerDLEvent({\r\n event: GtmEvents.VIEW_SEARCH_RESULT,\r\n search_term: searchText\r\n })\r\n}\r\n\r\n// my_venchi_mix\r\nexport const trackAddVenchiMix = (\r\n products: {\r\n category: string,\r\n action: number,\r\n label: number\r\n }[]\r\n): void => {\r\n triggerDLEvent({\r\n event: GtmEvents.ADD_VENCHI_MIX,\r\n products,\r\n })\r\n}\r\n","export enum PageType {\r\n HOME = 'Home',\r\n LISTING = 'Listing',\r\n PDP = 'PDP',\r\n LOGIN = 'Login',\r\n SIGN_UP_ECOM = 'Sign-Up Ecom',\r\n BLOG = 'Blog',\r\n SEARCH_RESULTS = 'Search Results',\r\n CART = 'Cart',\r\n CHECKOUT = 'Checkout',\r\n TYP = 'TYP',\r\n MY_ACCOUNT = 'MyAccount',\r\n MY_PROFILE = 'MyProfile',\r\n LOYALTY = 'Loyalty',\r\n WISHLIST = 'Wishlist',\r\n OTHER = 'Other',\r\n PAGE_TYPE_NOT_LOADED = 'PageTypeNotLoaded',\r\n}\r\n\r\nexport enum GtmEvents {\r\n SELECT_ITEM = 'select_item_new',\r\n VIEW_CART = 'view_cart_new',\r\n ADD_TO_CART = 'add_to_cart_new',\r\n REMOVE_FROM_CART = 'remove_from_cart_new',\r\n VIEW_ITEM_LIST = 'view_item_list_new',\r\n VIEW_ITEM = 'view_item_new',\r\n BEGIN_CHECKOUT = 'begin_checkout_new',\r\n PURCHASE = 'purchase_new',\r\n LOGIN = 'login_new',\r\n USER_DATA = 'user_data_new',\r\n ADD_TO_WISHLIST = 'add_to_wishlist_new',\r\n ADD_SHIPPING_INFO = 'add_shipping_info_new',\r\n ADD_PAYMENT_INFO = 'add_payment_info_new',\r\n CLICK_MENU = 'click_menu_new',\r\n CLICK_FILTER = 'click_filter_new',\r\n VIEW_SEARCH_RESULT = 'view_search_results_new',\r\n ADD_VENCHI_MIX = 'add_venchi_mix_new'\r\n}\r\n\r\nexport enum CheckoutType {\r\n GUEST_CHECKOUT = 'guest_checkout',\r\n CLASSIC_CHECKOUT = 'classic_checkout'\r\n}\r\n\r\nexport enum LoginType {\r\n GOOGLE = 'google',\r\n FACEBOOK = 'fb'\r\n}\r\n\r\nexport enum LoginFromType {\r\n CHECKOUT = 'checkout',\r\n LOGIN = 'login'\r\n}\r\n\r\nexport enum LoginState {\r\n LOGGED_USER = 'logged_user',\r\n GUEST = 'guest'\r\n}\r\n\r\nexport enum SessionStorageKey {\r\n PREV_LOGIN_STATE = 'prev_login_state',\r\n LOGIN_FROM = 'login_from'\r\n}\r\n","import { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport { debounce } from 'lodash';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IQuantityProps } from './Quantity.props';\r\n\r\ninterface IQuantityState {\r\n currentInput: number;\r\n isUpdateing: boolean;\r\n}\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity\r\n */\r\n@observer\r\nexport default class Quantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private inputRef: React.RefObject = React.createRef();\r\n private payLoad: IPayLoad;\r\n\r\n constructor(props: IQuantityProps) {\r\n super(props);\r\n this.state = { currentInput: props.currentCount || 1, isUpdateing: false };\r\n this._onIncrement = this._onIncrement.bind(this);\r\n this._onDecrement = this._onDecrement.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n\r\n public componentDidUpdate(prevProps: IQuantityProps): void {\r\n if (\r\n !this.props.disabled &&\r\n this.state.currentInput !== this.props.currentCount &&\r\n prevProps.currentCount !== this.props.currentCount\r\n ) {\r\n this.setState({ currentInput: this.props.currentCount || 1 });\r\n }\r\n\r\n if (this.props.disabled && !this.state.isUpdateing) {\r\n this.setState({ isUpdateing: true });\r\n }\r\n\r\n if (!this.props.disabled && this.state.isUpdateing) {\r\n this.setState({ currentInput: this.props.currentCount || 1, isUpdateing: false });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { min, max } = this.props;\r\n\r\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\r\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\r\n const decrementDisabled = this.state.currentInput <= (min || 1) || this.props.isGiftCard;\r\n const incrementDisabled = this.state.currentInput >= max || this.props.isGiftCard;\r\n const currentValue = this.state.currentInput;\r\n this.payLoad.contentAction.etext = TelemetryConstant.DecrementQuantity;\r\n const decrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.IncrementQuantity;\r\n const incrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n\r\n let extraClassDecrement = '';\r\n if (decrementDisabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClassDecrement = 'disabled';\r\n } else if (this.props.disabled) {\r\n // this.props.disabled shows if the state is not succeded yet\r\n extraClassDecrement = 'transition';\r\n }\r\n let extraClassIncrement = '';\r\n if (incrementDisabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClassIncrement = 'disabled';\r\n } else if (this.props.disabled) {\r\n // this.props.disabled shows if the state is not succeded yet\r\n extraClassIncrement = 'transition';\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n private _onIncrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = this.state.currentInput;\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity < this.props.max) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity + 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = this.props.max;\r\n }\r\n\r\n if (invokeCallback && this.props.onChange) {\r\n if (this.props.onChange(updatedQuantity)) {\r\n this.setState({ currentInput: updatedQuantity });\r\n }\r\n }\r\n }\r\n\r\n private _onDecrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = this.state.currentInput;\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity > 1) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity - 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = 1;\r\n }\r\n\r\n if (invokeCallback && this.props.onChange) {\r\n if (this.props.onChange(updatedQuantity)) {\r\n this.setState({ currentInput: updatedQuantity });\r\n }\r\n }\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n const currentValue = parseInt(e.target.value, 10);\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n const inputElement =\r\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n\r\n if (currentValue > this.props.max) {\r\n this.setState({ currentInput: this.props.max }, () => {\r\n debounce(() => {\r\n // due of usage debouncer, we may ignore onChange return value\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }, 200)();\r\n });\r\n } else {\r\n this.setState({ currentInput: currentValue }, () => {\r\n debounce(() => {\r\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\r\n // due of usage debouncer, we may ignore onChange return value\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\r\n inputElement.setAttribute('value', currentValue.toString());\r\n }\r\n }\r\n }, 200)();\r\n });\r\n }\r\n }\r\n\r\n private _validateMin = (): void => {\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\r\n this.setState({ currentInput: minValue }, () => {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n });\r\n } else {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }\r\n };\r\n}\r\n"],"names":["getPageType","context","_context$request$app","_defaultRoutes$home","_defaultRoutes$search","_defaultRoutes$cart","_defaultRoutes$checko","_defaultRoutes$orderC","_defaultRoutes$accoun","_defaultRoutes$accoun2","_defaultRoutes$loyalt","_defaultRoutes$wishli","pageName","actionContext","requestContext","telemetryPageName","currentURLPathName","request","url","requestUrl","pathname","replace","defaultRoutes","app","routes","PageType","PAGE_TYPE_NOT_LOADED","conditions","String","toLowerCase","includes","LOGIN","SIGN_UP_ECOM","home","destinationUrl","HOME","endsWith","LISTING","PDP","BLOG","search","SEARCH_RESULTS","cart","CART","checkout","CHECKOUT","orderConfirmation","TYP","account","MY_ACCOUNT","accountProfile","MY_PROFILE","loyalty","LOYALTY","wishlist","WISHLIST","matchedCondition","Object","keys","find","condition","OTHER","saveCurrentCategoryHierarchyAndListName","categoryHierarchy","listName","sessionStorage","setItem","saveAddToCartCategoryHierarchyAndListName","receivedCategory","refreshAddToCartCategoryHierarchyAndListName","_catHierarchy","getItem","_listName","getAddToCartCategoryHierarchyAndListName","listname","extractCategoryNames","categories","split","concat","Array","fill","slice","getCurrentCategoryHierarchyAndListName","_catHierarchyArray","getCategoryPageString","getSearchPageString","getListIdFromListName","getItemFromSimpleProduct","product","index","quantity","currency","item_id","ItemId","item_name","Name","affiliation","coupon","discount","Number","BasePrice","Price","toFixed","item_brand","item_category","item_category2","item_category3","item_category4","item_category5","item_list_id","item_list_name","item_variant","location_id","price","getItemFromCartLine","cartLine","productName","coupons","_cartLine$DiscountAmo","_cartLine$ExtensionPr","_cartLine$ExtensionPr2","_cartLine$ExtensionPr3","ExtensionProperties","length","filter","e","Key","Value","StringValue","getCurrentCategoryHierarchyAndListNameFromCartLine","couponCodes","DiscountLines","d","EffectiveAmount","map","discountLine","getCouponFromCart","c","DiscountOfferId","OfferId","Code","join","DiscountAmount","Quantity","getItemFromSalesLine","salesLine","_salesLine$DiscountAm","_salesLine$GrossAmoun","DiscountCode","GrossAmount","setOrderPlacedStatusLocalStorage","status","localStorage","JSON","stringify","getOrderPlacedStatusLocalStorage","statusString","parse","hashSHA256","message","sha256","hex","setCheckoutCartInLocalStorage","removeItem","getCheckoutCartFromLocalStorage","cartString","getUserDataForTracking","userData","DLObject","shouldTrackShippingAddress","_objectSpread","address","first_name","last_name","shippingAddress","getUserPrimaryAddress","addresses","street","city","region","country","postal_code","a","IsPrimary","Street","City","County","ThreeLetterISORegionName","ZipCode","eventQueue","userEventDataGlobal","isUserDataTracked","triggerDLEvent","_window$dataLayer","_window$dataLayer2","_window$dataLayer2$pu","correctDLObject","_objectWithoutProperties","_excluded","window","dataLayer","push","ecommerce","call","user_data","user_properties","global_variables","trackUserData","customerData","hasLoyaltyCard","_window$dataLayer3","_window$dataLayer3$pu","user","isSignedIn","userEventData","getUserEventData","forEach","DLObjectEach","_window$dataLayer4","_window$dataLayer5","_window$dataLayer5$pu","_excluded2","_customerData$Attribu","_customerData$Attribu2","birthDate","Attributes","AttributeValue","hasGenericMarketing","BooleanValue","event","GtmEvents","USER_DATA","email","Email","phone_number","Phone","FirstName","LastName","Addresses","user_id","AccountNumber","date_of_birth","test","gender","signup_date","CreatedDateTime","date","Date","year","getFullYear","getMonth","padStart","getDate","formatDate","vclub","newsletter_subscription","email_hashed","phone_number_hashed","Page_type","login","trackViewItemList","products","_context$request","channel","Currency","items","VIEW_ITEM_LIST","trackViewItemFromPDP","originalPrice","_context$request2","VIEW_ITEM","value","trackProductTileClick","_context$request3","SELECT_ITEM","trackAddToCartFromListing","_context$request4","ADD_TO_CART","trackAddToCartFromGWP","_context$request5","trackAddToCartFromPDP","_context$request6","trackViewCart","_context$request7","_cart$CartLines","_cart$AmountDue","CartLines","_products$find","p","Description","Coupons","VIEW_CART","AmountDue","trackRemoveFromCart","_products$find2","_context$request8","REMOVE_FROM_CART","telemetryData","activeCart","trackBeginCheckout","checkoutType","_context$request9","_cart$CartLines2","_cart$AmountDue2","_products$find3","BEGIN_CHECKOUT","checkout_type","trackPurchase","salesOrder","_checkoutPreviousCart","_salesOrder$SalesLine","_salesOrder$SalesLine3","_salesOrder$SubtotalA","_salesOrder$TaxAmount","_salesOrder$SalesLine4","_salesOrder$SalesLine5","_salesOrder$SalesLine6","_salesOrder$SalesLine7","_salesOrder$SalesLine8","isOrderPlaced","checkoutPreviousCart","undefined","CurrencyCode","_checkoutPreviousCart2","_salesOrder$SalesLine2","Id","SalesLines","_products$find4","_products$find5","flat","joinedCouponCodes","Set","shipping","IsTaxIncludedInPrice","ShippingChargeAmount","TaxOnShippingCharge","PURCHASE","SubtotalAmount","tax","TaxAmount","transaction_id","ShippingAddress","trackLogin","isUserSigned","prevLoginState","SessionStorageKey","PREV_LOGIN_STATE","LoginState","GUEST","isCheckoutLogin","LOGIN_FROM","LoginFromType","triggerLoginEvent","LOGGED_USER","loginFrom","method","success","login_from","trackAddShippingInfo","_context$request10","_cart$CartLines3","_cart$Coupons","_cart$AmountDue3","_products$find6","couponCodesSet","ADD_SHIPPING_INFO","shipping_tier","trackAddPaymentInfo","_context$request11","_cart$CartLines4","_cart$Coupons2","_cart$AmountDue4","_products$find7","ADD_PAYMENT_INFO","payment_type","trackAddToWishlistFromPDP","_context$request12","ADD_TO_WISHLIST","trackAddToWishlistFromCart","_products$find8","_context$request13","trackClickMenu","category","action","label","CLICK_MENU","trackClickFilter","priceFilter","CLICK_FILTER","price_min","min","price_max","max","trackSearch","searchText","VIEW_SEARCH_RESULT","search_term","trackAddVenchiMix","ADD_VENCHI_MIX","CheckoutType","LoginType","React","constructor","props","super","inputRef","_validateMin","minValue","this","isNaN","state","currentInput","setState","onChange","currentCount","isUpdateing","_onIncrement","bind","_onDecrement","_handleChange","payLoad","getPayloadObject","telemetryContent","componentDidUpdate","prevProps","disabled","render","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","decrementDisabled","isGiftCard","incrementDisabled","currentValue","contentAction","etext","TelemetryConstant","DecrementQuantity","decrementAttributes","getTelemetryAttributes","IncrementQuantity","incrementAttributes","extraClassDecrement","extraClassIncrement","className","id","assign","title","decrementButtonAriaLabel","onClick","tabIndex","color","type","pattern","onBlur","inputQuantityAriaLabel","role","ref","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","parseInt","target","inputElement","current","HTMLInputElement","_debounce","setAttribute","toString","defaultProps","__decorate","observer"],"sourceRoot":""}