{"version":3,"file":"static/js/5.2cbcde871a7f9695881e.chunk.js","mappings":"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","sources":["webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/utilities/datalayer/index.ts?9cc9","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/utilities/datalayer/helpers.ts?4c62","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/utilities/datalayer/types.ts?770f","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/utilities/quantity/Quantity.tsx?c3db","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/utils/constants.ts?e30c"],"sourcesContent":["import { ICoreContext } from '@msdyn365-commerce/core';\r\nimport { Cart, CartLine, Customer, SalesLine, SalesOrder, SimpleProduct } 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 { CheckoutType, GtmEvents, LoginFromType, LoginState, SessionStorageKey } 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 { shouldTrackShippingAddress, shippingAddress, ...correctDLObject } = 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 = (context: ICoreContext, customerData: Customer | undefined, hasLoyaltyCard: boolean) => {\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 { shouldTrackShippingAddress, shippingAddress, ...correctDLObject } = 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 = (context: ICoreContext, customerData: Customer | undefined, hasLoyaltyCard: boolean) => {\r\n const userData = context.request.user;\r\n\r\n const birthDate = customerData?.Attributes?.find(a => a.Name === 'Birthday')?.AttributeValue?.StringValue || '';\r\n\r\n const hasGenericMarketing = customerData?.Attributes?.find(a => a.Name === 'GenericMarketing')?.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 ? {\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 : {\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 = (context: ICoreContext, products: SimpleProduct[], listName: string, categoryHierarchy: string): 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(getItemFromSimpleProduct(product, categories, listName, index, 1, currency));\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 = (context: ICoreContext, product: SimpleProduct, categoryHierarchy: string, listName: string): 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: [getItemFromSimpleProduct(product, categories, listName, 0, 1, currency)]\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: [getItemFromSimpleProduct(product, categories, listName, 0, 1, currency)]\r\n }\r\n });\r\n};\r\n\r\n// Add to cart from PDP\r\nexport const trackAddToCartFromGWP = (context: ICoreContext, product: SimpleProduct | undefined, quantity: number): 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: [getItemFromSimpleProduct(product, categories, listName, 0, quantity, currency)]\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 = (context: ICoreContext, cart: Cart | undefined, products: SimpleProduct[]): 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(getItemFromCartLine(cartLine, productName, cart.Coupons || [], index, currency));\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: [getItemFromCartLine(cartLine, productName, cart.Coupons || [], 0, currency)]\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(getItemFromCartLine(cartLine, productName, cart.Coupons || [], index, currency));\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 = (salesOrder: SalesOrder | undefined, products: SimpleProduct[]): 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 (\r\n 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(getItemFromCartLine(cartLine, productName, checkoutPreviousCart.Coupons || [], index, currency));\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(getItemFromSalesLine(salesLine, productName, index, currency));\r\n });\r\n }\r\n\r\n const couponCodes = salesOrder.SalesLines?.filter(salesLine => salesLine.DiscountLines && salesLine.DiscountLines.length)\r\n .map(salesLine => {\r\n return salesLine\r\n .DiscountLines!.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01 && d.DiscountCode)\r\n .map(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 order_id: salesOrder.ChannelReferenceId,\r\n // @ts-ignore\r\n items\r\n },\r\n shouldTrackShippingAddress: !!salesOrder.SalesLines,\r\n shippingAddress: salesOrder.SalesLines\r\n ? {\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 : {\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 = (context: ICoreContext, cart: Cart | undefined, products: SimpleProduct[]): 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(getItemFromCartLine(cartLine, productName, cart.Coupons || [], index, currency));\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 = (context: ICoreContext, cart: Cart | undefined, products: SimpleProduct[]): 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(getItemFromCartLine(cartLine, productName, cart.Coupons || [], index, currency));\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: [getItemFromCartLine(cartLine, productName, cart.Coupons || [], 0, currency)]\r\n }\r\n });\r\n};\r\n\r\n// click_menu\r\nexport const trackClickMenu = (category: string, action: string, label: string): 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 = (category: string | undefined, label: string, priceFilter?: { min: number; max: number }): 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 = (searchText: string): 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\r\n// vclub_signup\r\nexport const trackVClubRegistration = (): void => {\r\n window.dataLayer?.push?.({\r\n event: GtmEvents.VCLUB_SIGNUP\r\n });\r\n};\r\n","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 const 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 // TODO: fix\r\n if (!defaultRoutes) {\r\n return PageType.PAGE_TYPE_NOT_LOADED;\r\n }\r\n\r\n const conditions: { [key: string]: PageType } = {\r\n [String(pageName?.toLowerCase().includes('sign-in'))]: PageType.LOGIN,\r\n [String(pageName?.toLowerCase().includes('sign-up'))]: PageType.SIGN_UP_ECOM,\r\n [String(defaultRoutes.home?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.HOME,\r\n [String(currentURLPathName.endsWith('.c'))]: PageType.LISTING,\r\n [String(currentURLPathName.endsWith('.p'))]: PageType.PDP,\r\n [String(currentURLPathName.includes('/blog'))]: PageType.BLOG,\r\n [String(defaultRoutes.search?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.SEARCH_RESULTS,\r\n [String(defaultRoutes.cart?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.CART,\r\n [String(defaultRoutes.checkout?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.CHECKOUT,\r\n [String(defaultRoutes.orderConfirmation?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.TYP,\r\n [String(defaultRoutes.account?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.MY_ACCOUNT,\r\n [String(defaultRoutes.accountProfile?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.MY_PROFILE,\r\n [String(defaultRoutes.loyalty?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.LOYALTY,\r\n [String(defaultRoutes.wishlist?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName)]: PageType.WISHLIST\r\n };\r\n\r\n const matchedCondition = Object.keys(conditions).find(condition => condition === 'true');\r\n\r\n return matchedCondition ? conditions[matchedCondition] : PageType.OTHER;\r\n};\r\n\r\nexport const saveCurrentCategoryHierarchyAndListName = (context: ICoreContext, categoryHierarchy: string, listName: string): void => {\r\n sessionStorage.setItem('venchiProductCategoryHierarchy', categoryHierarchy ? categoryHierarchy : getPageType(context));\r\n sessionStorage.setItem('venchiProductListName', listName);\r\n};\r\n\r\nexport const saveAddToCartCategoryHierarchyAndListName = (context: ICoreContext, categoryHierarchy?: string, listName?: string): void => {\r\n const receivedCategory = categoryHierarchy ? categoryHierarchy : getPageType(context);\r\n sessionStorage.setItem('venchiAddToCartProductCategoryHierarchy', receivedCategory ? receivedCategory : '');\r\n sessionStorage.setItem('venchiAddToCartProductListName', listName ? listName : '');\r\n};\r\n\r\nexport const refreshAddToCartCategoryHierarchyAndListName = (): void => {\r\n var _catHierarchy = sessionStorage.getItem('venchiProductCategoryHierarchy');\r\n var _listName = sessionStorage.getItem('venchiProductListName');\r\n sessionStorage.setItem('venchiAddToCartProductCategoryHierarchy', _catHierarchy || '');\r\n sessionStorage.setItem('venchiAddToCartProductListName', _listName || '');\r\n};\r\n\r\nexport const getAddToCartCategoryHierarchyAndListName = (): { categoryHierarchy: string; listname: string } => {\r\n var categoryHierarchy = sessionStorage.getItem('venchiAddToCartProductCategoryHierarchy') || '';\r\n var listname = sessionStorage.getItem('venchiAddToCartProductListName') || '';\r\n return { categoryHierarchy, listname };\r\n};\r\n\r\nexport const extractCategoryNames = (categories: string): string[] => {\r\n // Use map to transform each category into its name, filtering out undefined names\r\n return categories\r\n .split('|', 5)\r\n .concat(Array(5).fill(''))\r\n .slice(0, 5);\r\n};\r\n\r\nexport const getCurrentCategoryHierarchyAndListName = (): { categoryHierarchy: string[] | null; listName: string } => {\r\n var _catHierarchy = sessionStorage.getItem('venchiProductCategoryHierarchy');\r\n var _catHierarchyArray: string[] | null = _catHierarchy ? extractCategoryNames(_catHierarchy) : null;\r\n var _listName = sessionStorage.getItem('venchiProductListName');\r\n\r\n return { categoryHierarchy: _catHierarchyArray, listName: _listName ?? '' };\r\n};\r\n\r\nexport const getCategoryPageString = (): string => {\r\n return 'Listing';\r\n};\r\n\r\nexport const getSearchPageString = (): string => {\r\n return 'Search Results';\r\n};\r\n\r\nexport const isCategoryPage = (context: ICoreContext): boolean => {\r\n const currentURLPathName = context.request.url.requestUrl.pathname.replace(/\\/$/, '');\r\n return 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 cartLine: CartLine\r\n): { categoryHierarchy: string[] | null; listName: string } => {\r\n if (!cartLine.ExtensionProperties?.length) {\r\n return {\r\n categoryHierarchy: null,\r\n listName: ''\r\n };\r\n }\r\n\r\n let _catHierarchy = cartLine.ExtensionProperties.filter(e => e.Key === 'venchiProductCategoryHierarchy')[0]?.Value?.StringValue;\r\n let _catHierarchyArray: string[] | null = _catHierarchy ? extractCategoryNames(_catHierarchy) : null;\r\n let _listName = cartLine.ExtensionProperties.filter(e => e.Key === 'venchiProductListName')[0]?.Value?.StringValue;\r\n\r\n return { categoryHierarchy: _catHierarchyArray, listName: _listName ?? '' };\r\n};\r\n\r\nconst getCouponFromCart = (coupons: Coupon[], discountLine: DiscountLine): string => {\r\n if (!discountLine) return '';\r\n\r\n const coupon = coupons.find(c => c.DiscountOfferId === discountLine.OfferId);\r\n\r\n return coupon?.Code || '';\r\n};\r\n\r\nexport const getItemFromSimpleProduct = (\r\n product: SimpleProduct,\r\n categories: string[],\r\n listName: string,\r\n index: number,\r\n quantity: number,\r\n currency: string\r\n) => {\r\n return {\r\n item_id: product.ItemId,\r\n item_name: product.Name,\r\n affiliation: 'Venchi',\r\n currency,\r\n coupon: '',\r\n discount: Number((product.BasePrice - product.Price).toFixed(2)) * quantity,\r\n index,\r\n item_brand: 'Venchi',\r\n item_category: categories[0],\r\n item_category2: categories[1],\r\n item_category3: categories[2],\r\n item_category4: categories[3],\r\n item_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n item_list_name: listName,\r\n item_variant: '',\r\n location_id: '',\r\n price: Number(product.BasePrice.toFixed(2)) * quantity,\r\n quantity\r\n };\r\n};\r\n\r\nexport const getItemFromCartLine = (cartLine: CartLine, productName: string, coupons: Coupon[], index: number, currency: string) => {\r\n const { categoryHierarchy, listName } = getCurrentCategoryHierarchyAndListNameFromCartLine(cartLine);\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\r\n let couponCodes = ''; // TODO: check multiple coupons\r\n if (cartLine?.DiscountLines) {\r\n couponCodes = cartLine.DiscountLines.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01)\r\n .map(discountLine => getCouponFromCart(coupons, discountLine))\r\n .join('_');\r\n }\r\n\r\n return {\r\n item_id: cartLine.ItemId,\r\n item_name: productName,\r\n affiliation: 'Venchi',\r\n currency,\r\n coupon: couponCodes,\r\n discount: Number(cartLine.DiscountAmount?.toFixed(2) || 0),\r\n index,\r\n item_brand: 'Venchi',\r\n item_category: categories[0],\r\n item_category2: categories[1],\r\n item_category3: categories[2],\r\n item_category4: categories[3],\r\n item_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n item_list_name: listName,\r\n item_variant: '',\r\n location_id: '',\r\n price: Number(((cartLine.Price || 0) * (cartLine.Quantity || 1)).toFixed(2)),\r\n quantity: cartLine.Quantity\r\n };\r\n};\r\n\r\nexport const getItemFromSalesLine = (salesLine: SalesLine, productName: string, index: number, currency: string) => {\r\n //TODO update this part\r\n // const {\r\n // \tcategoryHierarchy,\r\n // \tlistName\r\n // } = getCurrentCategoryHierarchyAndListNameFromCartLine(salesLine)\r\n\r\n const categoryHierarchy = ['', '', '', '', ''];\r\n const listName = '';\r\n const categories = categoryHierarchy ? categoryHierarchy : ['', '', '', '', ''];\r\n\r\n let couponCodes = ''; // TODO: check multiple coupons\r\n if (salesLine?.DiscountLines) {\r\n couponCodes = salesLine.DiscountLines.filter(d => d.EffectiveAmount && d.EffectiveAmount > 0.01 && d.DiscountCode)\r\n .map(discountLine => discountLine.DiscountCode)\r\n .join('_');\r\n }\r\n\r\n return {\r\n item_id: salesLine.ItemId,\r\n item_name: productName,\r\n affiliation: 'Venchi',\r\n currency,\r\n coupon: couponCodes,\r\n discount: Number(salesLine.DiscountAmount?.toFixed(2) || 0),\r\n index,\r\n item_brand: 'Venchi',\r\n item_category: categories[0],\r\n item_category2: categories[1],\r\n item_category3: categories[2],\r\n item_category4: categories[3],\r\n item_category5: categories[4],\r\n item_list_id: getListIdFromListName(listName),\r\n item_list_name: listName,\r\n item_variant: '',\r\n location_id: '',\r\n price: Number(salesLine.GrossAmount?.toFixed(2) || 0),\r\n quantity: salesLine.Quantity\r\n };\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 return JSON.parse(statusString);\r\n};\r\n\r\nexport const hashSHA256 = (message: string): string => {\r\n return sha256.hex(message); // Use 'hex' method for hex string output\r\n};\r\n\r\nexport const setCheckoutCartInLocalStorage = (cart: Cart | undefined): void => {\r\n if (!cart) {\r\n localStorage.removeItem('venchiCheckoutCart');\r\n } else {\r\n localStorage.setItem('venchiCheckoutCart', JSON.stringify(cart));\r\n }\r\n};\r\n\r\nexport const getCheckoutCartFromLocalStorage = (): Cart | null => {\r\n var cartString = localStorage.getItem('venchiCheckoutCart');\r\n\r\n if (!cartString) {\r\n return null;\r\n } else {\r\n return JSON.parse(cartString) as Cart;\r\n }\r\n};\r\n\r\nexport const getUserDataForTracking = (userData: any, DLObject: any) => {\r\n // All other events\r\n if (!DLObject.shouldTrackShippingAddress) {\r\n return userData;\r\n }\r\n\r\n // Purchase event\r\n return {\r\n ...userData,\r\n address: {\r\n first_name: '',\r\n last_name: '',\r\n ...DLObject.shippingAddress\r\n }\r\n };\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 ? {\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 : {\r\n street: '',\r\n city: '',\r\n region: '',\r\n country: '',\r\n postal_code: ''\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 VCLUB_SIGNUP = 'vclub_signup_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","export const TEMPORARY_ACCOUNT_NUMBER_LENGTH = 36;\r\nexport const GIFTCARD_ITEMID = '99991';\r\n"],"names":["eventQueue","userEventDataGlobal","isUserDataTracked","triggerDLEvent","DLObject","_window$dataLayer","_window$dataLayer2","_window$dataLayer2$pu","shouldTrackShippingAddress","shippingAddress","correctDLObject","_objectWithoutProperties","_excluded","window","dataLayer","push","ecommerce","call","_objectSpread","user_data","getUserDataForTracking","user_properties","global_variables","trackUserData","context","customerData","hasLoyaltyCard","_window$dataLayer3","_window$dataLayer3$pu","userData","request","user","isSignedIn","userEventData","getUserEventData","length","forEach","DLObjectEach","_window$dataLayer4","_window$dataLayer5","_window$dataLayer5$pu","_excluded2","_customerData$Attribu","_customerData$Attribu2","birthDate","Attributes","find","a","Name","AttributeValue","StringValue","hasGenericMarketing","BooleanValue","event","GtmEvents","USER_DATA","email","Email","phone_number","Phone","address","first_name","FirstName","last_name","LastName","getUserPrimaryAddress","Addresses","user_id","AccountNumber","date_of_birth","test","gender","signup_date","CreatedDateTime","date","d","Date","year","getFullYear","String","getMonth","padStart","getDate","formatDate","vclub","newsletter_subscription","email_hashed","hashSHA256","phone_number_hashed","street","city","region","country","postal_code","Page_type","getPageType","login","trackViewItemList","products","listName","categoryHierarchy","_context$request","categories","extractCategoryNames","currency","channel","Currency","items","product","index","getItemFromSimpleProduct","VIEW_ITEM_LIST","item_list_id","getListIdFromListName","item_list_name","trackViewItemFromPDP","price","originalPrice","_context$request2","getCurrentCategoryHierarchyAndListName","VIEW_ITEM","value","Number","toFixed","Price","BasePrice","trackProductTileClick","_context$request3","saveCurrentCategoryHierarchyAndListName","SELECT_ITEM","trackAddToCartFromListing","_context$request4","saveAddToCartCategoryHierarchyAndListName","ADD_TO_CART","trackAddToCartFromGWP","quantity","_context$request5","trackAddToCartFromPDP","_context$request6","refreshAddToCartCategoryHierarchyAndListName","trackViewCart","cart","_context$request7","_cart$CartLines","_cart$AmountDue","CartLines","cartLine","_products$find","productName","p","ItemId","Description","getItemFromCartLine","Coupons","VIEW_CART","AmountDue","trackRemoveFromCart","_products$find2","_context$request8","REMOVE_FROM_CART","actionContext","requestContext","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","getOrderPlacedStatusLocalStorage","setOrderPlacedStatusLocalStorage","checkoutPreviousCart","getCheckoutCartFromLocalStorage","setCheckoutCartInLocalStorage","undefined","CurrencyCode","_checkoutPreviousCart2","_salesOrder$SalesLine2","Id","SalesLines","_products$find4","salesLine","_products$find5","getItemFromSalesLine","couponCodes","filter","DiscountLines","map","EffectiveAmount","DiscountCode","discountLine","flat","joinedCouponCodes","Set","join","shipping","IsTaxIncludedInPrice","ShippingChargeAmount","TaxOnShippingCharge","PURCHASE","coupon","SubtotalAmount","tax","TaxAmount","transaction_id","order_id","ChannelReferenceId","ShippingAddress","Street","City","County","ThreeLetterISORegionName","ZipCode","trackLogin","isUserSigned","prevLoginState","sessionStorage","getItem","SessionStorageKey","PREV_LOGIN_STATE","LoginState","GUEST","isCheckoutLogin","LOGIN_FROM","LoginFromType","CHECKOUT","triggerLoginEvent","LOGIN","setItem","LOGGED_USER","removeItem","loginFrom","method","success","login_from","trackAddShippingInfo","_context$request10","_cart$CartLines3","_cart$Coupons","_cart$AmountDue3","_products$find6","couponCodesSet","c","Code","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","trackVClubRegistration","_window$dataLayer6","_window$dataLayer6$pu","VCLUB_SIGNUP","_context$request$app","_defaultRoutes$home","_defaultRoutes$search","_defaultRoutes$cart","_defaultRoutes$checko","_defaultRoutes$orderC","_defaultRoutes$accoun","_defaultRoutes$accoun2","_defaultRoutes$loyalt","_defaultRoutes$wishli","pageName","telemetryPageName","currentURLPathName","url","requestUrl","pathname","replace","defaultRoutes","app","routes","PageType","PAGE_TYPE_NOT_LOADED","conditions","toLowerCase","includes","SIGN_UP_ECOM","home","destinationUrl","HOME","endsWith","LISTING","PDP","BLOG","search","SEARCH_RESULTS","CART","checkout","orderConfirmation","TYP","account","MY_ACCOUNT","accountProfile","MY_PROFILE","loyalty","LOYALTY","wishlist","WISHLIST","matchedCondition","Object","keys","condition","OTHER","receivedCategory","_catHierarchy","_listName","getAddToCartCategoryHierarchyAndListName","listname","split","concat","Array","fill","slice","_catHierarchyArray","getCategoryPageString","getSearchPageString","item_id","item_name","affiliation","discount","item_brand","item_category","item_category2","item_category3","item_category4","item_category5","item_variant","location_id","coupons","_cartLine$DiscountAmo","_cartLine$ExtensionPr","_cartLine$ExtensionPr2","_cartLine$ExtensionPr3","ExtensionProperties","e","Key","Value","getCurrentCategoryHierarchyAndListNameFromCartLine","getCouponFromCart","DiscountOfferId","OfferId","DiscountAmount","Quantity","_salesLine$DiscountAm","_salesLine$GrossAmoun","GrossAmount","status","localStorage","JSON","stringify","statusString","parse","message","sha256","hex","cartString","addresses","IsPrimary","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","TEMPORARY_ACCOUNT_NUMBER_LENGTH","GIFTCARD_ITEMID"],"sourceRoot":""}