{"version":3,"file":"static/js/2591ac816fd43f916eee.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/actions/get-attributes-for-selected-variant.action.ts?8d1d","webpack://henrys-ecommerce/./src/actions/get-media-locations-for-selected-variant.action.ts?5dc9","webpack://henrys-ecommerce/./src/common/getProductVariantUrl.ts?9182","webpack://henrys-ecommerce/./src/common/utilities/makeAbsUrl.ts?817a","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/swatch.tsx?18a8","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/dropdown.tsx?eddd","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/buybox-product-configure.tsx?faa3","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/hei-buybox-v2-find-in-store.tsx?a24b","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/price.tsx?cc00","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/getBuyboxProductPrice.tsx?12e4","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/hei-buybox-v2.tsx?0132","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/AuthorizedDealerBadge.tsx?ec73","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/ProductCode.tsx?d059","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/ProductBadge.tsx?099f","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/Promotions.tsx?191f","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/WarrantySection.tsx?e651","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/ShopUsed.tsx?cc12","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/FloatingSummary.tsx?4e19","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/Klaviyo/subscription-confirmation-modal.tsx?4624","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/Klaviyo/back-in-stock-subscription-modal.tsx?7780","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/KlaviyoBackInStockSubscription.tsx?7fc1","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/Klaviyo/price-drop-subscription-modal.tsx?6a7d","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/components/KlaviyoPriceDropSubscription.tsx?2e20","webpack://henrys-ecommerce/./src/modules/hei-buybox-v2/hei-buybox-v2.view.tsx?581a","webpack://henrys-ecommerce/./src/modules/hei-klaviyo-signup-form/subscribeToList.ts?2aba","webpack://henrys-ecommerce/./lib/hei-buybox-v2/module-registration.js?b8d2","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["// base on @msdyn365-commerce-modules/retail-actions/get-attributes-for-selected-variant\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n getCatalogId,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, ProductsDataActions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport {\r\n getSelectedProductIdFromActionInput,\r\n SelectedVariantInput,\r\n getSelectedVariantActionDataAction\r\n // QueryResultSettingsProxy\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Chains getting the SelectedVariant with GetActivePrice.\r\n */\r\nexport class AttributesForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n\r\n public channelId: number;\r\n\r\n public catalogId: number;\r\n\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n this.catalogId = catalogId || 0;\r\n }\r\n\r\n public getCacheKey = () => 'AttributesForSelectedVariant';\r\n\r\n public getCacheObjectType = () => 'ProductAttributeValue';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nexport const createAttributesForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): AttributesForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n const catalogId = getCatalogId(inputData.requestContext);\r\n\r\n if (productId) {\r\n return new AttributesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, undefined, catalogId);\r\n }\r\n throw new Error('Unable to create PriceForSelectedVariantInput, no productId found on module config or query');\r\n};\r\n\r\n/**\r\n * Calls the Retail API a get a list of dimension values for a given product.\r\n * @param input\r\n * @param ctx\r\n */\r\nexport async function getAttributesForSelectedVariantAction(\r\n input: AttributesForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n return Promise.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(\r\n input.productId,\r\n input.channelId,\r\n undefined,\r\n undefined,\r\n ctx.requestContext\r\n );\r\n\r\n return getSelectedVariantActionDataAction(selectedVariantInput, ctx);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then((productResult: SimpleProduct | null) => {\r\n const activeProduct: SimpleProduct | undefined = productResult;\r\n\r\n if (activeProduct) {\r\n return ProductsDataActions.getAttributeValuesAsync(\r\n {\r\n callerContext: ctx\r\n // queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .then((attributeValues: AttributeValue[] | null) => {\r\n const resultArray = attributeValues;\r\n if (resultArray) {\r\n return resultArray;\r\n }\r\n\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug('[getPriceForSelectedVariantAction]Error executing action');\r\n throw new Error('[getPriceForSelectedVariantAction]Error executing action');\r\n });\r\n}\r\n\r\nexport const getAttributesForSelectedVariantActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-attributes-for-selected-variant',\r\n action: >getAttributesForSelectedVariantAction,\r\n input: createAttributesForSelectedVariantInput\r\n});\r\n\r\nexport default getAttributesForSelectedVariantActionDataAction;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n getCatalogId,\r\n getMediaLocationsForProductAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric,\r\n MediaLocationsInput\r\n} from '@msdyn365-commerce/core';\r\nimport { AsyncResult, MediaLocation, ProductsDataActions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getMediaLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n QueryResultSettingsProxy,\r\n generateImageUrl,\r\n getSelectedProductIdFromActionInput,\r\n getSelectedVariant,\r\n SelectedVariantInput,\r\n IDimensionForSelectedVariant,\r\n ArrayExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport getAllDimensionsForProductActionDataAction, { GetAllDimensionsForProductInput } from './get-all-dimensions-for-product';\r\n\r\n/**\r\n * The action input class for the getMediaLocationsForSelectedVariant data action.\r\n */\r\nexport class MediaLocationsForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n\r\n public channelId: number;\r\n\r\n public catalogId: number;\r\n\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n constructor(productId: number, channelId: number, selectedProduct?: SimpleProduct, catalogId?: number) {\r\n this.productId = productId;\r\n this.channelId = channelId;\r\n this.catalogId = catalogId || 0;\r\n this.selectedProduct = selectedProduct;\r\n }\r\n\r\n public getCacheKey = () => 'MediaLocationsForSelectedVariant';\r\n\r\n public getCacheObjectType = () => 'MediaLocations';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * The createInput method for the getMediaLocationsForSelectedVariant data action.\r\n * @param inputData The input data passed to the createInput method.\r\n */\r\nexport const createMediaLocationsForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): MediaLocationsForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n const catalogId = getCatalogId(inputData.requestContext);\r\n\r\n if (productId) {\r\n return new MediaLocationsForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId, undefined, catalogId);\r\n }\r\n throw new Error('Unable to create MediaLocationsForSelectedVariantInput, no productId found on module config or query');\r\n};\r\n\r\n/**\r\n * The action method for the getMediaLocationsForSelectedVariant data action.\r\n * @param input\r\n * @param ctx\r\n */\r\nexport async function getMediaLocationsForSelectedVariantAction(\r\n input: MediaLocationsForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n return AsyncResult.resolve()\r\n .then(() => {\r\n const activeProduct: SimpleProduct | undefined = input.selectedProduct;\r\n\r\n if (!activeProduct) {\r\n const selectedVariantInput = new SelectedVariantInput(\r\n input.productId,\r\n input.channelId,\r\n undefined,\r\n undefined,\r\n ctx.requestContext\r\n );\r\n return getSelectedVariant(selectedVariantInput, ctx);\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then(productResult => {\r\n const activeProduct = productResult;\r\n\r\n const newProductRecId = activeProduct?.ExtensionProperties?.find(ep => ep.Key === 'NewSku')?.Value?.StringValue?.split(':')[0];\r\n if (activeProduct && newProductRecId && +newProductRecId) {\r\n process.env.NODE_ENV === 'development' && console.log('get-media-locations-for-selected-variant', newProductRecId);\r\n const getAllDimensionsForProductInput = new GetAllDimensionsForProductInput(+newProductRecId, input.channelId);\r\n return getAllDimensionsForProductActionDataAction(getAllDimensionsForProductInput, ctx).then(\r\n (dimensions: IDimensionForSelectedVariant[]) => {\r\n const validProducts: Record> = {};\r\n\r\n dimensions.forEach(d => {\r\n d.dimensionValuesWithInventory?.forEach(inv => {\r\n inv.ProductIds?.forEach(variantId => {\r\n const variantDims = validProducts[variantId] ?? (validProducts[variantId] = {});\r\n variantDims[d.DimensionTypeValue] = inv.DimensionValue?.Value ?? '';\r\n });\r\n });\r\n });\r\n\r\n var variantId = ArrayExtensions.firstOrDefault(\r\n Object.keys(validProducts)\r\n .filter(variantId => Object.keys(validProducts[variantId]).length === dimensions.length)\r\n .filter(variantId => {\r\n const mismatched = activeProduct.Dimensions?.filter(d => d.DimensionTypeValue !== 4).find(\r\n d =>\r\n (d.DimensionValue?.Value?.toLowerCase() ?? '') !==\r\n (validProducts[variantId][d.DimensionTypeValue] ?? '').toLowerCase()\r\n );\r\n\r\n return !mismatched;\r\n })\r\n );\r\n\r\n // process.env.NODE_ENV === 'development' &&\r\n // console.log('get-media-locations-for-selected-variant', variantId, activeProduct.Dimensions, validProducts);\r\n if (variantId && +variantId) {\r\n return ProductsDataActions.getByIdAsync({ callerContext: ctx }, +variantId, input.channelId).then(product => {\r\n // process.env.NODE_ENV === 'development' &&\r\n // console.log('get-media-locations-for-selected-variant', JSON.parse(JSON.stringify(product)));\r\n return product;\r\n });\r\n }\r\n\r\n return activeProduct;\r\n }\r\n );\r\n }\r\n\r\n return activeProduct;\r\n })\r\n .then(productResult => {\r\n const activeProduct = productResult;\r\n\r\n if (activeProduct) {\r\n if (ctx.requestContext.app?.config?.OmniChannelMedia) {\r\n const mediaLocationsInput = new MediaLocationsInput(\r\n ctx.requestContext,\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n );\r\n return getMediaLocationsForProductAction(mediaLocationsInput, ctx);\r\n }\r\n return getMediaLocationsAsync(\r\n { callerContext: ctx, queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx) },\r\n activeProduct.RecordId,\r\n input.channelId,\r\n input.catalogId\r\n ).then(response => {\r\n return response.map(\r\n (mediaLocation: MediaLocation): MediaLocation => {\r\n mediaLocation.Uri = generateImageUrl(mediaLocation.Uri, ctx.requestContext.apiSettings);\r\n mediaLocation.AltText = mediaLocation.AltText ? mediaLocation.AltText : activeProduct.Name;\r\n return mediaLocation;\r\n }\r\n );\r\n });\r\n }\r\n\r\n return [];\r\n })\r\n .catch(error => {\r\n ctx.trace(error);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug('[getMediaLocationsForSelectedVariantAction]Error executing action');\r\n throw new Error('[getMediaLocationsForSelectedVariantAction]Error executing action');\r\n });\r\n}\r\n\r\n/**\r\n * The getMediaLocationsForSelectedVariant data action\r\n * Gets the currently selected variant for the page via the getSelectedVariant data action,\r\n * and then gets the media location information for the variant via the MediaLocations RetailServer API.\r\n */\r\nexport const getMediaLocationsForSelectedVariantActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-media-locations-for-selected-variant',\r\n action: >getMediaLocationsForSelectedVariantAction,\r\n input: createMediaLocationsForSelectedVariantInput\r\n});\r\n\r\nexport default getMediaLocationsForSelectedVariantActionDataAction;\r\n","import { IActionContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { createCanonicalUrl } from './utilities/createCanonicalUrl';\r\n\r\nexport const getProductVariantUrl = (productDetails: SimpleProduct, context: IActionContext) => {\r\n const title = productDetails.Name ?? '';\r\n let normalizedCanonicalUrl = createCanonicalUrl(\r\n context,\r\n [title ?? ''],\r\n `${productDetails.MasterProductId ?? productDetails.RecordId}.p`\r\n ).toLowerCase();\r\n\r\n const dimParams = productDetails.Dimensions?.map(dim => {\r\n if (dim.DimensionTypeValue === 1 && dim.DimensionValue?.Value) {\r\n return `color=${encodeURIComponent(dim.DimensionValue.Value).replace(/%20/g, '+')}`;\r\n }\r\n\r\n if (dim.DimensionTypeValue === 3 && dim.DimensionValue?.Value) {\r\n return `size=${encodeURIComponent(dim.DimensionValue.Value).replace(/%20/g, '+')}`;\r\n }\r\n\r\n if (dim.DimensionTypeValue === 4 && dim.DimensionValue?.Value) {\r\n return `style=${encodeURIComponent(dim.DimensionValue.Value).replace(/%20/g, '+')}`;\r\n }\r\n\r\n return null;\r\n })\r\n .filter(p => !!p)\r\n .join('&');\r\n\r\n if (dimParams) {\r\n normalizedCanonicalUrl = `${normalizedCanonicalUrl}?${dimParams}`;\r\n }\r\n\r\n return normalizedCanonicalUrl;\r\n};\r\n","import { IActionContext } from '@msdyn365-commerce/core';\r\n\r\nexport const makeAbsUrl = (context: IActionContext, url: string) => {\r\n if (url[0] === '/') {\r\n let origin = `https://${window.location.host}`;\r\n\r\n if (context.requestContext.sitePath && process.env.NODE_ENV !== 'development') {\r\n origin += context.requestContext.sitePath;\r\n }\r\n\r\n return `${origin}${url}`;\r\n }\r\n\r\n return url;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { ICommerceApiSettings } from '@msdyn365-commerce/core-internal';\r\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { ISwatchItem, SwatchItemComponent } from '@msdyn365-commerce/components';\r\n\r\n/**\r\n * Swatch item configuration.\r\n */\r\nexport interface ISwatchProps {\r\n className?: string;\r\n apiSettings: ICommerceApiSettings;\r\n\r\n list: ISwatchItem[];\r\n isSelectionEnabled?: boolean;\r\n isRefineItem?: boolean;\r\n\r\n onSelectItem?(item: ISwatchItem): void;\r\n}\r\n\r\n/**\r\n * Represents a single item for swatch.\r\n * @param props - Item configuration.\r\n * @returns React node.\r\n */\r\nexport const SwatchComponent: React.FC = (props: ISwatchProps) => {\r\n const containerClassName = 'msc-swatch-container';\r\n\r\n const [selectedItemId, setSelectedItemId] = React.useState(undefined);\r\n\r\n const isSelectionEnabled = props.isSelectionEnabled ?? true;\r\n\r\n const onSelectItemCallback = props.onSelectItem;\r\n\r\n const onSelectItem = React.useCallback(\r\n (item: ISwatchItem) => {\r\n setSelectedItemId(item.itemId);\r\n if (!ObjectExtensions.isNullOrUndefined(onSelectItemCallback)) {\r\n onSelectItemCallback(item);\r\n }\r\n },\r\n [setSelectedItemId, onSelectItemCallback]\r\n );\r\n\r\n React.useEffect(() => {\r\n const defaultItem = props.list.find(item => item.isDefault);\r\n if (defaultItem && defaultItem.itemId !== selectedItemId) {\r\n setSelectedItemId(defaultItem.itemId);\r\n if (!ObjectExtensions.isNullOrUndefined(onSelectItemCallback)) {\r\n onSelectItemCallback(defaultItem);\r\n }\r\n }\r\n }, [props.list]);\r\n\r\n return (\r\n \r\n {props.list.map(item => {\r\n const itemId = item.itemId;\r\n const isSelected = selectedItemId === itemId;\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { ISwatchItem } from '@msdyn365-commerce/components';\r\nimport { DimensionTypes } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IDropdownItemProps, IDropdownProps, SelectionType } from '@msdyn365-commerce-modules/buybox';\r\nimport { SwatchComponent } from './swatch';\r\n\r\n/**\r\n * State for a dropdown component.\r\n */\r\ninterface IDropdownState {\r\n /**\r\n * @friendlyName selectedIndex\r\n * @description Selected index.\r\n */\r\n selectedIndex: string;\r\n}\r\n\r\n/**\r\n *\r\n * DropDown component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class Dropdown extends React.PureComponent {\r\n private readonly selectMenu: React.RefObject = React.createRef();\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n public constructor(props: IDropdownProps, state: IDropdownState) {\r\n super(props);\r\n\r\n const selectedItem = this.props.dropdownList.find(item => item.isDefault);\r\n if (selectedItem) {\r\n this.state = {\r\n selectedIndex: selectedItem.id.toString()\r\n };\r\n if (this.props.onChange) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Update for default.\r\n this.props.onChange({\r\n dropdownId: this.props.dropdownId,\r\n selectId: selectedItem.id,\r\n selectedValue: selectedItem.value\r\n });\r\n }\r\n } else {\r\n this.state = {\r\n selectedIndex: ''\r\n };\r\n }\r\n this.payLoad = getPayloadObject('click', props.telemetryContent!, this.props.dropdownName);\r\n }\r\n\r\n public render(): JSX.Element {\r\n if (this.props.apiSettings && this.props.selectionType === SelectionType.swatch) {\r\n return this._renderSwatch();\r\n }\r\n\r\n return this._renderDropdown();\r\n }\r\n\r\n private _renderDropdown(): JSX.Element {\r\n const { dropdownId, dropdownList, dropdownName, dropdownToggleName } = this.props;\r\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n return (\r\n \r\n \r\n {dropdownList.map(\r\n (item: IDropdownItemProps) =>\r\n item && (\r\n \r\n {item.value}\r\n \r\n )\r\n )}\r\n \r\n );\r\n }\r\n\r\n private _renderSwatch(): JSX.Element {\r\n const swatchItems = this.props.dropdownList.map(item => {\r\n return {\r\n ...item,\r\n itemId: item.id,\r\n dimensionType: this.props.dropdownName as DimensionTypes\r\n };\r\n });\r\n\r\n return ;\r\n }\r\n\r\n /**\r\n * Updates state on swatch selection.\r\n * @param item - Selected swatch item.\r\n */\r\n private readonly _selectSwatch = async (item: ISwatchItem) => {\r\n this.setState({ selectedIndex: item.itemId });\r\n\r\n if (this.props.onChange) {\r\n await this.props.onChange({\r\n dropdownId: this.props.dropdownId,\r\n selectId: item.itemId,\r\n selectedValue: item.value\r\n });\r\n }\r\n };\r\n\r\n private readonly _onChanged = async (event: React.ChangeEvent) => {\r\n this.setState({ selectedIndex: event.target.value });\r\n\r\n if (this.props.onChange) {\r\n await this.props.onChange({\r\n dropdownId: this.props.dropdownId,\r\n selectId: event.target.value,\r\n selectedValue: event.target.innerText\r\n });\r\n }\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { ICoreContext } from '@msdyn365-commerce/core-internal';\r\nimport { ProductDimension, ProductDimensionType } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n convertProductDimensionTypeToDimensionTypes,\r\n DimensionTypes,\r\n getDimensionValuesFromQuery,\r\n getInventoryLevelCodeFromDimensionValue,\r\n IDimensionForSelectedVariant,\r\n IDimensionsApp,\r\n IDimensionValueForSelectedVariant,\r\n InventoryLevelValues,\r\n ObjectExtensions,\r\n InventoryLevels\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format, getTelemetryObject, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IBuyboxCallbacks,\r\n IBuyboxCommonData,\r\n IBuyboxCommonResources,\r\n IBuyboxExtentedProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxState,\r\n IProductDetails,\r\n IDropdownItemProps,\r\n IDropdownOnSelectionChangeNotification,\r\n SelectionType\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport memoize from 'memoize-one';\r\nimport { IHeiBuyboxCallbacks } from '../hei-buybox-v2.data';\r\nimport { Dropdown } from './dropdown';\r\n\r\nlet telemetryContent: ITelemetryContent;\r\n\r\n/**\r\n * Dimension pre-processing info.\r\n */\r\ninterface IProductDimensionInfo {\r\n dropdownName: string;\r\n dropdownId: string;\r\n dropdownList: IDropdownItemProps[];\r\n}\r\n\r\n/**\r\n * Props for rendering a dropdown.\r\n */\r\ninterface IProductDimensionDropdownProps extends IProductDimensionInfo {\r\n resources: IBuyboxCommonResources;\r\n className: string;\r\n context: ICoreContext;\r\n\r\n configureErrors: { [configureId: string]: string | undefined };\r\n\r\n getDropdownName(dimensionType: number, resources: IBuyboxCommonResources): string;\r\n dropdownCallback(notification: IDropdownOnSelectionChangeNotification): Promise;\r\n}\r\n\r\nconst mapProductDimensionFullToDropdownViewProps = (props: IProductDimensionDropdownProps): IBuyboxProductConfigureDropdownViewProps => {\r\n const dimensionId = Number.parseInt(props.dropdownId, 10) as ProductDimensionType;\r\n const dropdownToggleName = format(props.resources.selectDimensionFormatString, props.dropdownName);\r\n\r\n const errorMessage = props.configureErrors[props.dropdownId];\r\n\r\n let dimensionSelectionType = SelectionType.dropdown;\r\n\r\n const dimensionType = convertProductDimensionTypeToDimensionTypes(dimensionId);\r\n\r\n const dimensionsAsSwatchConfiguration = props.context.app.config.dimensionsAsSwatchType;\r\n if (\r\n ArrayExtensions.hasElements(dimensionsAsSwatchConfiguration) &&\r\n !dimensionsAsSwatchConfiguration.includes(DimensionTypes.none) &&\r\n dimensionsAsSwatchConfiguration.includes(dimensionType)\r\n ) {\r\n dimensionSelectionType = SelectionType.swatch;\r\n }\r\n\r\n return {\r\n ContainerProps: {\r\n key: dimensionId,\r\n className: `${props.className}__dropdown ${props.className}__dimension-${props.dropdownId}`\r\n },\r\n LabelContainerProps: {\r\n tag: 'label',\r\n className: `${props.className}__dropdown-quantity-label`,\r\n htmlFor: `${props.className}__dropown-quantity-input-${props.dropdownId}`\r\n },\r\n errors: errorMessage && (\r\n \r\n \r\n ),\r\n heading:
{props.dropdownName}
,\r\n select: (\r\n \r\n )\r\n };\r\n};\r\n\r\nconst getDimensionCombinations = memoize((allDimensions: IDimensionForSelectedVariant[]) => {\r\n const productIdsToDimensions: Record> = {};\r\n for (const dimension of allDimensions) {\r\n for (const dimensionValueWithInventory of dimension.dimensionValuesWithInventory ?? []) {\r\n for (const productId of dimensionValueWithInventory.ProductIds ?? []) {\r\n const productIdToDimensions = productIdsToDimensions[productId] ?? (productIdsToDimensions[productId] = {});\r\n productIdToDimensions[+dimension.DimensionTypeValue] = {\r\n id: dimensionValueWithInventory.DimensionValue?.RecordId ?? 0,\r\n value: dimensionValueWithInventory.DimensionValue?.Value ?? ''\r\n };\r\n }\r\n }\r\n }\r\n\r\n const dimensionCombinations = Object.keys(productIdsToDimensions).map(\r\n productId => productIdsToDimensions[productId] as Record\r\n );\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getBuyboxProductConfigure', 'getDimensionCombinations', dimensionCombinations);\r\n return dimensionCombinations;\r\n});\r\n\r\nconst getDimensionValuesFromQueryMemoized = memoize((url: string) => getDimensionValuesFromQuery(new URL(url)));\r\n\r\nconst mapDimensionsInfo = memoize(\r\n (\r\n productDimensions: IDimensionForSelectedVariant[],\r\n matchedDimensions: ProductDimension[],\r\n enableStockCheck: boolean,\r\n inventoryLevel: InventoryLevels | undefined,\r\n getDropdownName: IBuyboxCallbacks['getDropdownName'],\r\n resources: IBuyboxCommonResources\r\n ): IProductDimensionInfo[] => {\r\n const dimensionsInfo = productDimensions.map(productDimensionFull => {\r\n const dropdownName = getDropdownName(productDimensionFull.DimensionTypeValue, resources);\r\n const dropdownId = productDimensionFull.DimensionTypeValue.toString();\r\n\r\n const dimensions = (productDimensionFull.dimensionValuesWithInventory ??\r\n productDimensionFull.DimensionValues ??\r\n []) as IDimensionValueForSelectedVariant[];\r\n const validProductDimensionsFull = dimensions.filter(\r\n value => !ObjectExtensions.isNullOrUndefined(value.DimensionValue?.RecordId ?? value.RecordId)\r\n );\r\n\r\n const dropdownList: IDropdownItemProps[] = validProductDimensionsFull.map(dimensionValuesWithInventory => {\r\n const dimensionValue = dimensionValuesWithInventory.DimensionValue ?? dimensionValuesWithInventory;\r\n const inventoryLevelCode = getInventoryLevelCodeFromDimensionValue(dimensionValuesWithInventory, inventoryLevel);\r\n return {\r\n value: dimensionValue.Value ?? '',\r\n id: dimensionValue.RecordId.toString(),\r\n colorHexCode: dimensionValue.ColorHexCode,\r\n imageUrl: dimensionValue.ImageUrl,\r\n isDisabled: enableStockCheck && inventoryLevelCode === InventoryLevelValues.outOfStock,\r\n swatchItemAriaLabel: resources.swatchItemAriaLabel ? resources.swatchItemAriaLabel : ''\r\n };\r\n });\r\n return {\r\n dropdownName,\r\n dropdownId,\r\n dropdownList\r\n };\r\n });\r\n\r\n for (const dimensionInfo of dimensionsInfo) {\r\n const currentDimensionsFromQuery = matchedDimensions.filter(\r\n dimensionFromQuery => dimensionFromQuery.DimensionTypeValue.toString() === dimensionInfo.dropdownId\r\n );\r\n if (!ArrayExtensions.hasElements(currentDimensionsFromQuery)) {\r\n continue;\r\n }\r\n\r\n const currentDimensionFromQuery = currentDimensionsFromQuery[0];\r\n const selectedDimensionItem = dimensionInfo.dropdownList.filter(\r\n dimensionItem =>\r\n dimensionItem.value.toLocaleLowerCase() === currentDimensionFromQuery.DimensionValue?.Value?.toLocaleLowerCase()\r\n );\r\n if (!ArrayExtensions.hasElements(selectedDimensionItem)) {\r\n continue;\r\n }\r\n\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('getBuyboxProductConfigure', 'set', selectedDimensionItem[0].id, '=', selectedDimensionItem[0].value);\r\n selectedDimensionItem[0].isDefault = true;\r\n }\r\n\r\n const dimensionCombinations = getDimensionCombinations(productDimensions);\r\n\r\n for (const dimensionInfo of dimensionsInfo) {\r\n const otherDimensionsFromQuery = matchedDimensions.filter(\r\n dimensionFromQuery => dimensionFromQuery.DimensionTypeValue !== +dimensionInfo.dropdownId\r\n );\r\n\r\n // valid dimensions where match the other selected values\r\n const validDimensionValues = dimensionCombinations\r\n .filter(dc => dc[+dimensionInfo.dropdownId])\r\n .filter(dc => {\r\n const unmatched = otherDimensionsFromQuery.find(\r\n od => (dc[od.DimensionTypeValue]?.value.toLowerCase() ?? '') !== (od.DimensionValue?.Value?.toLowerCase() ?? '')\r\n );\r\n\r\n return !unmatched;\r\n })\r\n .map(dc => dc[+dimensionInfo.dropdownId]);\r\n\r\n // process.env.NODE_ENV === 'development' &&\r\n // console.log(\r\n // 'getBuyboxProductConfigure',\r\n // 'when',\r\n // otherDimensionsFromQuery\r\n // .map(d => `${getDropdownName(d.DimensionTypeValue, resources)}='${d.DimensionValue?.Value}'`)\r\n // .join(', '),\r\n // dimensionInfo.dropdownName,\r\n // 'in',\r\n // validDimensionValues.map(v => `'${v?.value}'`).join(', ')\r\n // );\r\n dimensionInfo.dropdownList.forEach(dl => {\r\n if (!validDimensionValues.find(val => val.value === dl.value)) {\r\n dl.isDisabled = true;\r\n // process.env.NODE_ENV === 'development' && console.log('getBuyboxProductConfigure', 'disable', `'${dl.value}'`);\r\n }\r\n });\r\n\r\n // process.env.NODE_ENV === 'development' &&\r\n // console.log('getBuyboxProductConfigure', 'mapDimensionsInfo', dimensionInfo, validDimensionCombinations);\r\n }\r\n\r\n return dimensionsInfo;\r\n }\r\n);\r\n\r\nexport function getBuyboxProductConfigure(\r\n props: IBuyboxExtentedProps,\r\n state: IBuyboxState,\r\n callbacks: IHeiBuyboxCallbacks,\r\n productDetails?: IProductDetails,\r\n selectedDimensions?: ProductDimension[],\r\n allDimensions?: IDimensionForSelectedVariant[]\r\n): IBuyboxProductConfigureViewProps | undefined {\r\n const { resources, typeName } = props;\r\n\r\n const {\r\n errorState: { configureErrors }\r\n } = state;\r\n\r\n const { getDropdownName } = callbacks;\r\n\r\n const context = props.context as ICoreContext;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const product = props.data.product?.result ? props.data.product.result : productDetails?.product;\r\n\r\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\r\n const productDimensionsData = allDimensions ?? props.data.productDimensions?.result ?? productDetails?.productDimensions;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n const enableStockCheck = props.context.app.config.enableStockCheck;\r\n\r\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensionsData);\r\n\r\n // process.env.NODE_ENV === 'development' && console.log('getBuyboxProductConfigure', 'dimensionsInfo', product);\r\n if (!product || !hasProductDimensions) {\r\n return undefined;\r\n }\r\n\r\n const className = _getClassNamePrefix(typeName);\r\n\r\n if (!telemetryContent) {\r\n telemetryContent = getTelemetryObject(context.request.telemetryPageName!, props.typeName, props.telemetry);\r\n }\r\n\r\n const inventoryLevel = context.app.config.inventoryLevel;\r\n\r\n const productDimensions = productDimensionsData as IDimensionForSelectedVariant[];\r\n const dimensionCombinations = getDimensionCombinations(productDimensions);\r\n const matchedDimensions = selectedDimensions ?? getDimensionValuesFromQueryMemoized(context.request.url.requestUrl.toString());\r\n\r\n const onChanged = async (notification: IDropdownOnSelectionChangeNotification) => {\r\n const possibleDimensions = dimensionCombinations.filter(\r\n dc => dc[+notification.dropdownId]?.id.toString() === notification.selectId\r\n );\r\n\r\n const otherDimensions = matchedDimensions.filter(\r\n dimensionFromQuery => dimensionFromQuery.DimensionTypeValue !== +notification.dropdownId\r\n );\r\n\r\n const isOtherDimensionsValid = possibleDimensions.find(pd => {\r\n const unmatched = otherDimensions.find(\r\n od => (pd[od.DimensionTypeValue]?.value.toLowerCase() ?? '') !== (od.DimensionValue?.Value?.toLowerCase() ?? '')\r\n );\r\n\r\n return !unmatched;\r\n });\r\n\r\n const dimensionsSelected: Record = {};\r\n if (!isOtherDimensionsValid && ArrayExtensions.hasElements(possibleDimensions)) {\r\n const nextDimensions = possibleDimensions[0];\r\n Object.keys(nextDimensions).forEach(\r\n dimensionTypeValue => (dimensionsSelected[+dimensionTypeValue] = nextDimensions[+dimensionTypeValue].id.toString())\r\n );\r\n } else {\r\n dimensionsSelected[+notification.dropdownId] = notification.selectId;\r\n }\r\n await callbacks.dimensionsSelectedAsync(dimensionsSelected);\r\n };\r\n\r\n const dimensionsInfo = mapDimensionsInfo(\r\n productDimensions,\r\n matchedDimensions,\r\n enableStockCheck,\r\n inventoryLevel,\r\n getDropdownName,\r\n resources\r\n );\r\n\r\n // process.env.NODE_ENV === 'development' && console.log('getBuyboxProductConfigure', 'dimensionsInfo', dimensionsInfo);\r\n const dropdowns: IBuyboxProductConfigureDropdownViewProps[] = dimensionsInfo.map(dimensionInfo => {\r\n return mapProductDimensionFullToDropdownViewProps({\r\n ...dimensionInfo,\r\n resources,\r\n configureErrors,\r\n getDropdownName,\r\n dropdownCallback: onChanged,\r\n className,\r\n context\r\n });\r\n });\r\n\r\n return {\r\n ContainerProps: {\r\n className: `${className}__configure hei-buybox-configure`\r\n },\r\n dropdowns\r\n };\r\n}\r\n\r\nconst _getClassNamePrefix = (typeName: string): string => {\r\n return typeName.toLocaleLowerCase() === 'quickview' ? 'ms-quickView' : 'ms-buybox';\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n AddToCartBehavior,\r\n IAddToCartFailureResult,\r\n IAddToCartResources,\r\n ItemSuccessfullyAddedToCartNotification,\r\n PriceComponent\r\n} from '@msdyn365-commerce/components';\r\nimport { getUrlSync, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n DeliveryOption,\r\n FeatureState,\r\n OrgUnitLocation,\r\n ProductAvailableQuantity,\r\n ProductDimension,\r\n ProductsDataActions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\r\nimport {\r\n ArrayExtensions,\r\n DeliveryMode,\r\n IProductInventoryInformation,\r\n isAggregatedInventory\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getTelemetryObject, Heading, INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { BuyboxErrorBlock } from '@msdyn365-commerce-modules/buybox';\r\nimport { IBuyboxCallbacks } from '@msdyn365-commerce-modules/buybox';\r\nimport { getConfigureErrors, getGenericError } from '@msdyn365-commerce-modules/buybox';\r\nimport { IHeiBuyboxState, IHeiBuyboxV2Data } from '../hei-buybox-v2.data';\r\nimport { IHeiBuyboxV2Props, IHeiBuyboxV2Resources } from '../hei-buybox-v2.props.autogenerated';\r\nimport { sendGoogleAnalyticsEvent } from '../../../common/sendGoogleAnalyticsEvent';\r\nimport { getBonusItemsForAddToCart } from '../../hei-buybox/components/add-to-cart.component';\r\nimport Popup, { IPopupProps } from '../../hei-buybox/components/Popup';\r\nimport { getLineIdFromExtProps } from '../../cart/components/cart-pick-up-in-store';\r\n\r\nconst modalCloseButtonReference: React.RefObject = React.createRef();\r\n\r\n/**\r\n * FindinStore failure Interface.\r\n */\r\nexport interface IFindInStoreFailureResult {\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\ninterface IAddCartLine {\r\n product: SimpleProduct;\r\n count?: number;\r\n location?: OrgUnitLocation;\r\n additionalProperties?: object;\r\n availableQuantity?: number;\r\n enableStockCheck?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n customPrice?: number;\r\n deliveryMode?: string;\r\n shouldSkipSiteSettings?: boolean;\r\n}\r\n\r\n/**\r\n * BuyBoxFindinStore View Props Interface.\r\n */\r\nexport interface IBuyboxFindInStoreViewProps {\r\n storeSelector?: React.ReactNode;\r\n heading?: React.ReactNode;\r\n description?: React.ReactNode;\r\n errors?: React.ReactNode;\r\n button?: React.ReactNode;\r\n productPickupOptionList?: React.ReactNode;\r\n\r\n modal?: React.ReactNode;\r\n\r\n ContainerProps: INodeProps;\r\n\r\n openFindInStoreDialog(): Promise;\r\n}\r\n\r\n/**\r\n * On click find store handler.\r\n * @param props -Buybox data.\r\n * @param state -Buybox state.\r\n * @param callbacks -Buybox callbacks.\r\n * @returns Find in store.\r\n */\r\nconst onClickFindInStoreHandler = (\r\n props: IHeiBuyboxV2Props,\r\n state: IHeiBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n) => async () => {\r\n await findInStoreOnClick(props, state, callbacks);\r\n};\r\n\r\n/**\r\n * Inventory settings based on the inventory policy for aggregated availability.\r\n */\r\ninterface IInventorySettingsProps {\r\n isSectionDisabled: boolean;\r\n description: string;\r\n buttonText: string;\r\n}\r\n\r\n/**\r\n * The function defines the settings values for a given inventory configuration.\r\n * @param context - The context.\r\n * @param isStockCheck - Flag to enable inventory validation.\r\n * @param productAvailability - The product inventory information.\r\n * @param buyboxResources - The buybox string resources.\r\n * @param isLoading - Is loading.\r\n * @returns Boolean.\r\n */\r\nfunction getFindInStoreInventorySettings(\r\n context: ICoreContext,\r\n isStockCheck: boolean,\r\n productAvailability: IProductInventoryInformation[] | undefined,\r\n buyboxResources: IHeiBuyboxV2Resources,\r\n isLoading?: boolean\r\n): IInventorySettingsProps {\r\n // If shouldValidateAggregation is true then is required to check for the product inventory, based on this the messaging will change\r\n // and the find in store button will be ensbled or disabled\r\n\r\n let isSectionDisabled: boolean;\r\n let buttonText;\r\n let description: string;\r\n\r\n let pickupInventory: IProductInventoryInformation | undefined;\r\n\r\n if (!isStockCheck || isLoading) {\r\n return {\r\n isSectionDisabled: false,\r\n buttonText: buyboxResources.findInStoreLinkText,\r\n description: buyboxResources.findInStoreDescriptionText\r\n };\r\n }\r\n\r\n if (productAvailability) {\r\n pickupInventory = productAvailability.find(pickup => pickup.deliveryType === DeliveryMode.pickup);\r\n }\r\n\r\n // If aggregated is enabled, then we need to validate the inventor check for find in store.\r\n // If an individual is selected, then we will always show a find in store button.\r\n if (isAggregatedInventory(context.actionContext)) {\r\n if (productAvailability && pickupInventory?.IsProductAvailable) {\r\n isSectionDisabled = false;\r\n buttonText = buyboxResources.findInStoreLinkText;\r\n description = buyboxResources.findInStoreDescriptionText;\r\n } else {\r\n isSectionDisabled = true;\r\n buttonText = buyboxResources.findInStoreNotAvailableTextButton;\r\n description = buyboxResources.findInStoreNotAvailableDescription;\r\n }\r\n } else {\r\n isSectionDisabled = false;\r\n buttonText = buyboxResources.findInStoreLinkText;\r\n description = buyboxResources.findInStoreDescriptionText;\r\n }\r\n\r\n return {\r\n isSectionDisabled,\r\n description,\r\n buttonText\r\n };\r\n}\r\n\r\n/**\r\n * Method to check if we have atleast one common delivery code between product and channel.\r\n * @param productdeliveryOptions - Product DeliveryOption List.\r\n * @param storePickUpOptionList - Channel DeliveryOption List.\r\n * @returns Boolean flag.\r\n */\r\nconst matchDeliveryOptions = (\r\n productdeliveryOptions: DeliveryOption[] | undefined,\r\n storePickUpOptionList: string[] | undefined\r\n): boolean => {\r\n const deliveryOption: string[] = [];\r\n productdeliveryOptions?.map(delivery => {\r\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\r\n if (pickup) {\r\n deliveryOption.push(pickup);\r\n }\r\n return deliveryOption;\r\n });\r\n\r\n return ArrayExtensions.hasElements(deliveryOption);\r\n};\r\n\r\nconst PopupComponent = (props: {\r\n buyBoxProps: IHeiBuyboxV2Props;\r\n buyBoxState: IHeiBuyboxState;\r\n callbacks: IBuyboxCallbacks;\r\n}) => {\r\n const { buyBoxProps, buyBoxState, callbacks } = props;\r\n const {\r\n resources: {\r\n priceFree,\r\n originalPriceText,\r\n currentPriceText,\r\n buyBoxGoToCartText,\r\n buyBoxContinueShoppingText,\r\n closeNotificationLabel,\r\n buyBoxSingleItemText,\r\n buyBoxMultiLineItemFormatText,\r\n buyBoxHeaderMessageText\r\n }\r\n } = buyBoxProps;\r\n const { modalOpen, quantity, productPromotions, productPrice, selectedProduct } = buyBoxState;\r\n\r\n const [bonusProducts, setBonusProducts] = React.useState();\r\n const bonusProductIds = productPromotions?.FreeItemProductIds;\r\n React.useEffect(() => {\r\n if (bonusProductIds) {\r\n void ProductsDataActions.getByIdsAsync(\r\n { callerContext: buyBoxProps.context.actionContext },\r\n buyBoxProps.context.request.apiSettings.channelId,\r\n bonusProductIds\r\n ).then(resp => setBonusProducts(resp || []));\r\n } else {\r\n setBonusProducts([]);\r\n }\r\n }, [bonusProductIds]);\r\n\r\n const [productVariant, setProductVariant] = React.useState();\r\n React.useEffect(() => {\r\n if (bonusProductIds) {\r\n void ProductsDataActions.getByIdsAsync(\r\n { callerContext: buyBoxProps.context.actionContext },\r\n buyBoxProps.context.request.apiSettings.channelId,\r\n bonusProductIds\r\n ).then(resp => setBonusProducts(resp || []));\r\n } else {\r\n setBonusProducts([]);\r\n }\r\n }, [bonusProductIds]);\r\n\r\n React.useEffect(() => {\r\n selectedProduct?.then(p => setProductVariant(p ?? undefined));\r\n }, [selectedProduct]);\r\n\r\n if (!bonusProducts || !productVariant) {\r\n return null;\r\n }\r\n\r\n const price = productPrice;\r\n\r\n const dialogStrings = {\r\n goToCartText: buyBoxGoToCartText,\r\n continueShoppingText: buyBoxContinueShoppingText,\r\n closeNotificationLabel,\r\n headerItemOneText: buyBoxSingleItemText,\r\n headerItemFormatText: buyBoxMultiLineItemFormatText,\r\n headerMessageText: buyBoxHeaderMessageText,\r\n freePriceText: priceFree,\r\n originalPriceText,\r\n currentPriceText\r\n };\r\n\r\n const priceComponent = price ? (\r\n \r\n ) : (\r\n ''\r\n );\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const popupProps: IPopupProps = {\r\n context: buyBoxProps.context,\r\n className: 'ms-buybox',\r\n id: buyBoxProps.id,\r\n typeName: buyBoxProps.typeName,\r\n data: { product: productVariant, price: productPrice, bonusProducts: bonusProducts },\r\n dialogStrings,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: buyBoxProps.context.request.gridSettings,\r\n productQuantity: quantity,\r\n priceComponent,\r\n navigationUrl: getUrlSync('cart', buyBoxProps.context.actionContext),\r\n modalOpen,\r\n setModalOpen: callbacks.changeModalOpen\r\n };\r\n\r\n return ;\r\n};\r\n\r\nexport function getBuyboxFindInStore(\r\n props: IHeiBuyboxV2Props,\r\n state: IHeiBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): IBuyboxFindInStoreViewProps | undefined {\r\n const {\r\n data,\r\n slots: { storeSelector },\r\n resources: { unavailableForPickupText, availableForPickupText },\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n }\r\n } = props;\r\n\r\n // wait for availabilities check for pickup\r\n if (state.storeAvailabilities === undefined) {\r\n return undefined;\r\n } else if (state.storeAvailabilities.length === 0) {\r\n return {\r\n ContainerProps: {\r\n className: 'ms-buybox__find-in-store'\r\n },\r\n openFindInStoreDialog: () => Promise.resolve(),\r\n heading: \r\n };\r\n }\r\n\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const product = data?.product?.result;\r\n const storeSelectorStateManager = data?.storeSelectorStateManager?.result;\r\n const cart = data?.cart?.result;\r\n const deliveryOptions = data?.deliveryOptions?.result;\r\n const productAvailability = data.productAvailableQuantity?.result;\r\n const retailMulitplePickupMFeatureState = data?.featureState?.result?.find(\r\n (featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n const channelDeliveryOptionConfig = data?.channelDeliveryOptionConfig?.result;\r\n\r\n const missingDimensions = product?.Dimensions?.filter(dimension => !dimension.DimensionValue?.Value);\r\n\r\n const {\r\n errorState: { configureErrors, quantityError, otherError, errorHost }\r\n } = state;\r\n\r\n const { isSectionDisabled, buttonText } = getFindInStoreInventorySettings(\r\n props.context,\r\n props.context.app.config.enableStockCheck,\r\n productAvailability,\r\n props.resources,\r\n props.data.productAvailableQuantity.status === 'LOADING' || ArrayExtensions.hasElements(missingDimensions)\r\n );\r\n\r\n if (!product || !storeSelectorStateManager || !ArrayExtensions.hasElements(storeSelector)) {\r\n return undefined;\r\n }\r\n\r\n if (!deliveryOptions || !deliveryOptions.DeliveryOptions) {\r\n return undefined;\r\n }\r\n\r\n // If no delivery options present on the product, or none of the delivery options\r\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\r\n if (retailMulitplePickupMFeatureState && channelDeliveryOptionConfig) {\r\n if (!matchDeliveryOptions(deliveryOptions.DeliveryOptions, channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\r\n return undefined;\r\n }\r\n } else if (\r\n !PickupDeliveryModeCode ||\r\n !deliveryOptions.DeliveryOptions.find((option: DeliveryOption) => option.Code === PickupDeliveryModeCode)\r\n ) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n ContainerProps: {\r\n className: 'ms-buybox__find-in-store'\r\n },\r\n\r\n storeSelector: storeSelector[0],\r\n\r\n openFindInStoreDialog: onClickFindInStoreHandler(props, state, callbacks),\r\n\r\n heading: ,\r\n\r\n description:

Pick up near you

,\r\n productPickupOptionList: null,\r\n errors: (\r\n \r\n ),\r\n\r\n button: (\r\n \r\n {buttonText}\r\n \r\n ),\r\n\r\n modal: \r\n };\r\n}\r\n\r\n/**\r\n * Handler for find in store button.\r\n * @param props - BuyBox data.\r\n * @param state - BuyBox state.\r\n * @param callbacks - BuyBox callbacks.\r\n * @returns - Promise.\r\n */\r\nasync function findInStoreOnClick(\r\n props: IHeiBuyboxV2Props,\r\n state: IHeiBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): Promise {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n cart: { result: cart },\r\n productAvailableQuantity: { result: productAvailableQuantity }\r\n },\r\n resources,\r\n context,\r\n modules\r\n } = props;\r\n\r\n const { selectedProduct, quantity } = state;\r\n\r\n let dataProduct = props.data.product.result;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const retailMulitplePickupMFeatureState = props.data?.featureState?.result?.find(\r\n (featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n\r\n if (selectedProduct) {\r\n dataProduct = (await selectedProduct) || dataProduct;\r\n }\r\n\r\n if (!dataProduct || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const product = dataProduct;\r\n\r\n const missingDimensions =\r\n product.Dimensions &&\r\n product.Dimensions.filter((dimension: ProductDimension) => !(dimension.DimensionValue && dimension.DimensionValue.Value));\r\n\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n\r\n if (missingDimensions && missingDimensions.length > 0) {\r\n if (callbacks.updateErrorState) {\r\n callbacks.updateErrorState({\r\n errorHost: 'FINDINSTORE',\r\n configureErrors: getConfigureErrors(missingDimensions, resources)\r\n });\r\n }\r\n } else {\r\n storeSelectorStateManager\r\n .openDialog({\r\n product,\r\n id: storeSelectorId,\r\n parentElementRef: modalCloseButtonReference,\r\n deliveryOptions: retailMulitplePickupMFeatureState ? props.data.deliveryOptions.result : undefined,\r\n onLocationSelected: async (orgUnitLocation: OrgUnitLocation, deliveryMode: string) => {\r\n if (!cart) {\r\n return Promise.resolve();\r\n }\r\n\r\n const productsToAdd: IAddCartLine[] = [];\r\n productsToAdd.push({\r\n product: product,\r\n count: quantity,\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n location: orgUnitLocation,\r\n deliveryMode: deliveryMode\r\n });\r\n const behavior = props.context?.app?.config?.addToCartBehavior;\r\n if (state.selectedWarranty) {\r\n const warrantyProduct = state.selectedWarranty;\r\n productsToAdd.push({\r\n product: warrantyProduct,\r\n count: quantity,\r\n location: orgUnitLocation,\r\n additionalProperties: {\r\n warrantyProduct: product.RecordId\r\n },\r\n deliveryMode: deliveryMode\r\n });\r\n }\r\n\r\n // add bonus items\r\n const bonusItemIds = props.data.productPromotions.result?.FreeItemProductIds;\r\n if (bonusItemIds && bonusItemIds.length > 0) {\r\n const bonusItems = await getBonusItemsForAddToCart({\r\n context: props.context,\r\n bonusItemIds: bonusItemIds,\r\n quantity\r\n });\r\n\r\n const warehouseParams = bonusItems.map(p => ({\r\n ProductId: p.product.RecordId,\r\n InventLocationId: orgUnitLocation.InventoryLocationId,\r\n DataAreaId: context.request.channel?.InventLocationDataAreaId ?? 'hei'\r\n }));\r\n\r\n const warehouseAvailability = await ProductsDataActions.getEstimatedProductWarehouseAvailabilityAsync(\r\n {\r\n callerContext: props.context.actionContext\r\n },\r\n warehouseParams,\r\n null\r\n );\r\n\r\n // process.env.NODE_ENV === 'development' &&\r\n // console.log('hei-buybox-v2-find-in-store', bonusItemIds, warehouseParams, warehouseAvailability);\r\n\r\n for (const p of bonusItems) {\r\n const storeStock = warehouseAvailability.ProductWarehouseInventoryAvailabilities?.find(\r\n a => a.ProductId === p.product.RecordId\r\n );\r\n\r\n const shoppingInfo =\r\n storeStock && storeStock.PhysicalAvailableInventoryLevelCode !== 'OOS'\r\n ? {\r\n location: orgUnitLocation,\r\n deliveryMode: deliveryMode\r\n }\r\n : {};\r\n\r\n process.env.NODE_ENV === 'development' && console.log('hei-buybox-v2-find-in-store', p, storeStock);\r\n\r\n productsToAdd.push({\r\n ...p,\r\n ...shoppingInfo,\r\n additionalProperties: {\r\n isBonus: true\r\n }\r\n });\r\n }\r\n }\r\n\r\n const currentCartLinesCount = cart.cart.CartLines?.length ?? 0;\r\n return cart\r\n .addProductsToCart(productsToAdd)\r\n .then(async (result: ICartActionResult) => {\r\n if (result.status === 'FAILED' && result.substatus === 'MAXQUANTITY') {\r\n callbacks.changeModalOpen(false);\r\n let productAvailability: ProductAvailableQuantity | undefined;\r\n if (state.productAvailableQuantity) {\r\n productAvailability = state.productAvailableQuantity.ProductAvailableQuantity;\r\n } else if (productAvailableQuantity && ArrayExtensions.hasElements(productAvailableQuantity)) {\r\n const shippingInventory = productAvailableQuantity.find(\r\n shipping => shipping.deliveryType === DeliveryMode.pickup\r\n );\r\n productAvailability = shippingInventory?.ProductAvailableQuantity;\r\n } else {\r\n productAvailability = undefined;\r\n }\r\n const failureResult: IAddToCartFailureResult = {\r\n failureReason: 'CARTACTIONFAILED',\r\n cartActionResult: { status: result.status, substatus: result.substatus }\r\n };\r\n callbacks.updateErrorState({\r\n errorHost: 'ADDTOCART',\r\n configureErrors: {},\r\n otherError: getGenericError(\r\n failureResult,\r\n cart,\r\n resources,\r\n context,\r\n product,\r\n productAvailability,\r\n orgUnitLocation\r\n )\r\n });\r\n } else {\r\n const cartLines = cart.cart.CartLines ?? [];\r\n const itemsAdded = cartLines.length - currentCartLinesCount;\r\n\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('BuyboxView', 'addProductsToCart', result, itemsAdded);\r\n\r\n if (itemsAdded > 1) {\r\n const productLine = cartLines[currentCartLinesCount];\r\n const updatedCartLinesObject: CartLine[] = [];\r\n\r\n // Link warranty if selected\r\n const warrantyLine = cartLines[currentCartLinesCount + 1];\r\n if (productLine && warrantyLine?.ProductId === state.selectedWarranty?.RecordId) {\r\n warrantyLine.WarrantableLineNumber = productLine.LineNumber;\r\n warrantyLine.IsWarrantyLine = true;\r\n\r\n const [productLineId, productLineUpdated] = getLineIdFromExtProps(productLine);\r\n\r\n if (!warrantyLine.ExtensionProperties) {\r\n warrantyLine.ExtensionProperties = [];\r\n }\r\n\r\n warrantyLine.ExtensionProperties.push({\r\n Key: 'warrantable-line-id',\r\n Value: {\r\n StringValue: productLineId\r\n }\r\n });\r\n\r\n updatedCartLinesObject.push(warrantyLine);\r\n if (productLineUpdated) {\r\n updatedCartLinesObject.push(productLine);\r\n }\r\n }\r\n\r\n // check if there's bonus item\r\n for (let idx = currentCartLinesCount + 1; idx < cartLines.length; idx++) {\r\n const bonusCartLine = cartLines[idx];\r\n if (!bonusCartLine.IsWarrantyLine) {\r\n if (!bonusCartLine.ExtensionProperties) {\r\n bonusCartLine.ExtensionProperties = [];\r\n }\r\n\r\n const [productLineId, productLineUpdated] = getLineIdFromExtProps(productLine);\r\n\r\n bonusCartLine.ExtensionProperties.push({\r\n Key: 'bonus-for-line-id',\r\n Value: {\r\n StringValue: productLineId\r\n }\r\n });\r\n\r\n updatedCartLinesObject.push(bonusCartLine);\r\n\r\n if (productLineUpdated) {\r\n updatedCartLinesObject.push(productLine);\r\n }\r\n }\r\n }\r\n\r\n if (updatedCartLinesObject.length > 0) {\r\n await cart.updateCartLines({ updatedCartLinesObject });\r\n }\r\n }\r\n\r\n await sendGoogleAnalyticsEvent(productsToAdd, props.context.actionContext);\r\n\r\n callbacks.updateErrorState({\r\n configureErrors: {}\r\n });\r\n const navigationUrl = getUrlSync('cart', context.actionContext);\r\n if (behavior === undefined || behavior === AddToCartBehavior.goToCart) {\r\n if (result.status === 'SUCCESS' && navigationUrl) {\r\n window.location.assign(navigationUrl);\r\n }\r\n } else if (behavior === AddToCartBehavior.showModal) {\r\n callbacks.changeModalOpen(true);\r\n } else if (behavior === AddToCartBehavior.showNotification) {\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\r\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n const telemetryContent = getTelemetryObject(\r\n props.context.request.telemetryPageName!,\r\n props.friendlyName,\r\n props.telemetry\r\n );\r\n const dialogStrings: IAddToCartResources = {\r\n goToCartText: resources.buyBoxGoToCartText,\r\n continueShoppingText: resources.buyBoxContinueShoppingText,\r\n closeNotificationLabel: resources.closeNotificationLabel,\r\n headerItemOneText: resources.buyBoxSingleItemText,\r\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\r\n headerMessageText: resources.buyBoxHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n addedQuantityText: resources.addedQuantityText\r\n };\r\n const notification = new ItemSuccessfullyAddedToCartNotification(\r\n props.context,\r\n dialogStrings,\r\n defaultImageSettings,\r\n props.context.request.gridSettings,\r\n product,\r\n props.data.productPrice?.result,\r\n productsToAdd.length === 2 ? quantity + 1 : quantity,\r\n navigationUrl,\r\n telemetryContent,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n }\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.exception(error);\r\n props.telemetry.debug('Unable to add product to cart');\r\n }\r\n });\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.error(error.message);\r\n props.telemetry.debug('Unable to find in store');\r\n }\r\n });\r\n }\r\n}\r\n","import classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { IComponent, IComponentProps } from '@msdyn365-commerce/core';\r\nimport { AttributeValue, ProductPrice } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n attributeValues?: AttributeValue[];\r\n resources: {\r\n seePriceInCartLabel: string;\r\n };\r\n}\r\nexport interface IPriceComponent extends IComponent {}\r\n\r\nconst Price: React.FC = (props: IPriceComponentProps) => {\r\n const { attributeValues, resources } = props;\r\n\r\n const seePriceInCart = React.useMemo(() => {\r\n const attr = attributeValues?.find(av => av.Name === 'See Price In Cart');\r\n return attr?.BooleanValue ?? false;\r\n }, [attributeValues]);\r\n\r\n if (seePriceInCart) {\r\n return

{resources.seePriceInCartLabel}

;\r\n }\r\n\r\n // CustomerContextualPrice could be 0\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\nconst showStrikethroughPricing = (props: IPriceComponentProps) => {\r\n const originalPrice = getOriginalPrice(props);\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst getOriginalPrice = (props: IPriceComponentProps) => {\r\n return props.data.price.TradeAgreementPrice || props.data.price.BasePrice || 0;\r\n};\r\n\r\nconst renderCurrentPrice = (props: IPriceComponentProps): JSX.Element | undefined => {\r\n const initialPrice = formatCurrency(props, props.data.price.CustomerContextualPrice);\r\n return (\r\n \r\n {initialPrice}\r\n \r\n );\r\n};\r\n\r\nconst formatCurrency = (props: IPriceComponentProps, price: number | undefined): string | undefined => {\r\n if (price === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (price === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price);\r\n};\r\n\r\nconst renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element | null => {\r\n const originalPrice = getOriginalPrice(props);\r\n const initialPrice = formatCurrency(props, originalPrice);\r\n let discountAmount = formatCurrency(props, props.data.price.DiscountAmount);\r\n let discountPrice = 0;\r\n if (props.data.price.CustomerContextualPrice && initialPrice !== undefined) {\r\n discountPrice = originalPrice - props.data.price.CustomerContextualPrice;\r\n discountAmount = formatCurrency(props, originalPrice - props.data.price.CustomerContextualPrice);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n \r\n\r\n \r\n {discountPrice > 0 ? Instant Savings: {discountAmount} : null}\r\n \r\n );\r\n};\r\n\r\nexport default Price;\r\n","import { IHeiBuyboxState, IHeiBuyboxV2Data } from '../hei-buybox-v2.data';\r\nimport { IHeiBuyboxV2Props } from '../hei-buybox-v2.props.autogenerated';\r\nimport Price from './price';\r\nimport * as React from 'react';\r\n\r\nexport function getBuyboxProductPrice(props: IHeiBuyboxV2Props, state: IHeiBuyboxState): React.ReactElement | undefined {\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n resources,\r\n data: {\r\n attributeValues: { result: attributeValues }\r\n }\r\n } = props;\r\n\r\n return (\r\n state.productPrice && (\r\n \r\n )\r\n );\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getCatalogId, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport {\r\n CommerceProperty,\r\n ProductCatalog,\r\n ProductDeliveryOptions,\r\n ProductDimensionValue,\r\n ProductDimensionValueInventoryAvailability,\r\n ProductPrice,\r\n ProductsDataActions,\r\n ProductWarehouseInventoryInformation,\r\n ReleasedProductType,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { BulkPurchase } from '@msdyn365-commerce-modules/bulk-purchase';\r\nimport {\r\n ArrayExtensions,\r\n DeliveryMode,\r\n FinitePromiseQueue,\r\n FinitePromiseQueueError,\r\n getDeliveryOptionsForSelectedVariant,\r\n GetDeliveryOptionsForSelectedVariantInput,\r\n getDimensionsForSelectedVariant,\r\n GetDimensionsForSelectedVariantInput,\r\n getInventoryLevelCodeFromDimensionValue,\r\n getPriceForSelectedVariant,\r\n getProductAvailabilitiesForSelectedVariant,\r\n getSelectedVariant,\r\n IDimensionsApp,\r\n IDimensionValueForSelectedVariant,\r\n InventoryLevelValues,\r\n IProductInventoryInformation,\r\n IPromiseQueue,\r\n PriceForSelectedVariantInput,\r\n ProductAvailabilitiesForSelectedVariantInput,\r\n SelectedVariantInput,\r\n mapProductInventoryInformation,\r\n createInventoryAvailabilitySearchCriteria,\r\n getDimensionValuesFromQuery,\r\n setDimensionValuesToQuery\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getTelemetryObject,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\r\n updateMaxQuantityForCartLineItem\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n getBuyBoxInventoryLabel,\r\n getBuyboxKeyInPrice,\r\n getBuyboxProductAddToOrderTemplate,\r\n getBuyboxProductAddToWishlist,\r\n getBuyboxProductComparisonButton,\r\n getBuyboxProductDescription,\r\n getBuyboxProductQuantity,\r\n getBuyboxProductRating,\r\n getBuyboxProductTitle,\r\n getBuyboxProductUnitOfMeasure,\r\n getBuyboxShopSimilarButton,\r\n getQuantityLimitsMessages,\r\n RetailDefaultOrderQuantityLimitsFeatureName\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport { getBuyboxProductConfigure } from './components/buybox-product-configure';\r\nimport {\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxAddToOrderTemplateViewProps,\r\n IBuyboxAddToWishlistViewProps,\r\n IBuyboxCommonData,\r\n IBuyboxExtentedProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxShopSimilarLookViewProps,\r\n IBuyboxState,\r\n IErrorState,\r\n ShopSimiliarButtonType\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport { IHeiBuyboxCallbacks, IHeiBuyboxState, IHeiBuyboxV2Data } from './hei-buybox-v2.data';\r\nimport { IHeiBuyboxV2Props, IHeiBuyboxV2Resources } from './hei-buybox-v2.props.autogenerated';\r\nimport { getBuyboxFindInStore, IBuyboxFindInStoreViewProps } from './components/hei-buybox-v2-find-in-store';\r\nimport { RecentlyViewedState } from '@msdyn365-commerce-modules/buybox';\r\nimport getProductPromotionsAction, { GetProductPromotionsInput } from '../../actions/get-product-promotions.action';\r\nimport { getApplicableWarrantiesAction, getApplicableWarrantiesInput } from '../../actions/get-applicable-warranties.action';\r\nimport { getBuyboxAddToCart } from '../hei-buybox/common/buybox-components';\r\nimport { IGetProductPromotionResponse } from '../../actions/DataServiceEntities.g';\r\nimport getMediaLocationsForSelectedVariantActionDataAction, {\r\n MediaLocationsForSelectedVariantInput\r\n} from '../../actions/get-media-locations-for-selected-variant.action';\r\nimport { getBuyboxProductPrice } from './components/getBuyboxProductPrice';\r\n\r\nexport interface IBuyboxViewProps extends IHeiBuyboxV2Props {\r\n state: IHeiBuyboxState;\r\n ModuleProps: IModuleProps;\r\n ProductInfoContainerProps: INodeProps;\r\n MediaGalleryContainerProps: INodeProps;\r\n callbacks: IHeiBuyboxCallbacks;\r\n mediaGallery?: React.ReactNode;\r\n title?: React.ReactNode;\r\n description?: React.ReactNode;\r\n rating?: React.ReactNode;\r\n price?: React.ReactNode;\r\n productComparisonButton?: React.ReactNode;\r\n bulkPurchaseLink?: React.ReactNode;\r\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps;\r\n addToWishlist?: IBuyboxAddToWishlistViewProps;\r\n max: number | undefined;\r\n addToCart: IBuyboxAddToCartViewProps;\r\n findInStore?: IBuyboxFindInStoreViewProps;\r\n quantity?: IBuyboxProductQuantityViewProps;\r\n configure?: IBuyboxProductConfigureViewProps;\r\n inventoryLabel?: React.ReactNode;\r\n shopSimilarLook?: IBuyboxShopSimilarLookViewProps;\r\n shopSimilarDescription?: IBuyboxShopSimilarLookViewProps;\r\n quantityLimitsMessages: React.ReactNode;\r\n telemetryContent?: ITelemetryContent;\r\n keyInPrice?: IBuyboxKeyInPriceViewProps;\r\n unitOfMeasure?: React.ReactNode;\r\n catalogs?: ProductCatalog[] | undefined;\r\n}\r\n\r\n/**\r\n * Buybox Module.\r\n */\r\nclass Buybox extends React.PureComponent, IHeiBuyboxState> {\r\n /**\r\n * A queue of tasks of processing the changes in the dimensions.\r\n * Limit to two processes:\r\n * 1 - for the current process, which is under execution at the moment.\r\n * 2 - next process, which will process the latest version of data.\r\n * @remark Enqueueing new promises will discard the previous ones (except the one which is under processing).\r\n */\r\n private readonly dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(2);\r\n\r\n private dimensions: { [id: number]: string } = {};\r\n\r\n private readonly buyboxCallbacks: IHeiBuyboxCallbacks = {\r\n updateQuantity: (newQuantity: number): boolean => {\r\n const errorState = { ...this.state.errorState };\r\n errorState.quantityError = undefined;\r\n errorState.otherError = undefined;\r\n\r\n this.setState({ quantity: newQuantity, errorState });\r\n return true;\r\n },\r\n updateErrorState: (newErrorState: IErrorState): void => {\r\n this.setState({ errorState: newErrorState });\r\n },\r\n updateSelectedProduct: (\r\n newSelectedProduct: Promise,\r\n newInventory: IProductInventoryInformation | undefined,\r\n newPrice: ProductPrice | undefined,\r\n newDeliveryOptions: ProductDeliveryOptions | undefined\r\n ): void => {\r\n this.setState({\r\n selectedProduct: newSelectedProduct,\r\n productAvailableQuantity: newInventory,\r\n productDeliveryOptions: newDeliveryOptions\r\n });\r\n this._updatePrice(newPrice);\r\n },\r\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\r\n const selecedDimensions: Record = {};\r\n selecedDimensions[selectedDimensionId] = selectedDimensionValueId;\r\n return this.buyboxCallbacks.dimensionsSelectedAsync(selecedDimensions);\r\n },\r\n dimensionsSelectedAsync: async (selecedDimensions: Record): Promise => {\r\n Object.keys(selecedDimensions).forEach(\r\n selectedDimensionId => (this.dimensions[+selectedDimensionId] = selecedDimensions[+selectedDimensionId])\r\n );\r\n\r\n process.env.NODE_ENV === 'development' && console.log('Buybox', 'dimensionsSelectedAsync', selecedDimensions, this.dimensions);\r\n return this.dimensionUpdateQueue\r\n .enqueue(async () => {\r\n return this._updateDimensions();\r\n })\r\n .catch((error: unknown) => {\r\n // Ignore discarded processes.\r\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\r\n throw error;\r\n }\r\n });\r\n },\r\n getDropdownName: (dimensionType: number, resources: IHeiBuyboxV2Resources): string => {\r\n return this._getDropdownName(dimensionType, resources);\r\n },\r\n changeModalOpen: (isModalOpen: boolean): void => {\r\n this.setState({ modalOpen: isModalOpen });\r\n },\r\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\r\n this.setState({ isUpdatingDimension });\r\n },\r\n\r\n /**\r\n * Update isUpdatingDeliveryOptions state.\r\n *\r\n * @param isUpdatingDeliveryOptions - The status of updating delivery options.\r\n */\r\n changeUpdatingDeliveryOptions: (isUpdatingDeliveryOptions: boolean): void => {\r\n this.setState({ isUpdatingDeliveryOptions });\r\n },\r\n\r\n updateKeyInPrice: (customPrice: number): void => {\r\n // Remove custom amount error when updating the custom price\r\n const errorState = { ...this.state.errorState };\r\n errorState.customAmountError = undefined;\r\n\r\n this.setState({ isPriceKeyedIn: true, keyInPriceAmount: customPrice, errorState });\r\n this._updatePrice(this.state.productPrice, customPrice);\r\n },\r\n\r\n setSelectedWarranty: (warranty: SimpleProduct | null): void => {\r\n this.setState({ selectedWarranty: warranty });\r\n }\r\n };\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly mountCategories: { [category: string]: boolean } = {};\r\n private readonly packSizeCategories: { [category: string]: boolean } = {};\r\n\r\n public constructor(props: IHeiBuyboxV2Props, state: IBuyboxState) {\r\n super(props);\r\n this.state = {\r\n errorState: {\r\n configureErrors: {}\r\n },\r\n quantity: 1,\r\n min: undefined,\r\n max: undefined,\r\n selectedProduct: undefined,\r\n productPrice: undefined,\r\n productDeliveryOptions: undefined,\r\n\r\n modalOpen: false,\r\n isUpdatingDimension: false,\r\n isUpdatingDeliveryOptions: false,\r\n selectedWarranty: null,\r\n productPromotions: undefined,\r\n storeAvailabilities: undefined,\r\n applicableWarranties: undefined,\r\n mediaLocations: undefined\r\n };\r\n this.telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n\r\n if (props.config.mountCategories) {\r\n for (const c of props.config.mountCategories.split('|')) {\r\n this.mountCategories[c] = true;\r\n }\r\n }\r\n\r\n if (props.config.packSizeCategories === 'string') {\r\n for (const c of props.config.packSizeCategories.split('|')) {\r\n this.packSizeCategories[c] = true;\r\n }\r\n }\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const {\r\n data: {\r\n product: { result: product },\r\n productPromotions,\r\n applicableWarranties,\r\n productPrice,\r\n allDimensions\r\n },\r\n context\r\n } = this.props;\r\n\r\n const matchedDimensions = getDimensionValuesFromQuery(context.request.url.requestUrl);\r\n await allDimensions.then(async productDimensionsData => {\r\n let dimensionUpdated = false;\r\n for (const productDimensionFull of productDimensionsData) {\r\n if (!ArrayExtensions.hasElements(productDimensionFull.DimensionValues)) {\r\n continue;\r\n }\r\n\r\n const dropdownId = productDimensionFull.DimensionTypeValue.toString();\r\n const dimensionFromQuery = matchedDimensions.find(\r\n dimensionFromQuery => dimensionFromQuery.DimensionTypeValue.toString() === dropdownId\r\n );\r\n\r\n // no dimension selected from URL\r\n if (!dimensionFromQuery) {\r\n let autoSelectValue = productDimensionFull.dimensionValuesWithInventory?.find(\r\n dvi => dvi.PhysicalAvailableInventoryLevelCode !== 'OOS'\r\n )?.DimensionValue;\r\n\r\n if (!autoSelectValue) {\r\n // style or condition, try to select '9'\r\n if (productDimensionFull.DimensionTypeValue === 4) {\r\n autoSelectValue =\r\n productDimensionFull.DimensionValues.find(dv => dv.Value === '9') ??\r\n productDimensionFull.DimensionValues[0];\r\n } else {\r\n autoSelectValue = productDimensionFull.DimensionValues[0];\r\n }\r\n }\r\n\r\n process.env.NODE_ENV === 'development' && console.log('Buybox dim', dropdownId, '=>', autoSelectValue.Value);\r\n\r\n this.dimensions[productDimensionFull.DimensionTypeValue] = autoSelectValue.RecordId.toString();\r\n dimensionUpdated = true;\r\n }\r\n }\r\n\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('Buybox dim', 'matchedDimensions', matchedDimensions, this.dimensions, 'updated=', dimensionUpdated);\r\n\r\n if (dimensionUpdated) {\r\n process.env.NODE_ENV === 'development' && console.log('Buybox auto select dim', dimensionUpdated);\r\n await this._updateDimensions();\r\n }\r\n });\r\n\r\n await productPrice.then(async result => {\r\n this._updatePrice(result);\r\n });\r\n\r\n if (product) {\r\n // Check if the product is service or not by product type\r\n if (product.ItemTypeValue === ReleasedProductType.Service) {\r\n this.setState({ isServiceItem: true });\r\n }\r\n await this._updateQuantitiesInState(product);\r\n await this._updateAvailableForPickup(product);\r\n }\r\n\r\n if (product && context.app.config.maxRecentlyViewedItemsCount > 0) {\r\n RecentlyViewedState.instance(this.props.context, context.app.config.maxRecentlyViewedItemsCount, product.RecordId);\r\n }\r\n\r\n await productPromotions.then(async result => {\r\n this.setState({ productPromotions: result });\r\n });\r\n\r\n await applicableWarranties.then(async result => {\r\n this.setState({ applicableWarranties: result });\r\n });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const {\r\n slots: { mediaGallery, productComparisonButton },\r\n data: {\r\n product: { result: product }\r\n },\r\n config: { className = '' }\r\n } = this.props;\r\n\r\n const { max } = this.state;\r\n\r\n if (!product) {\r\n this.props.context.telemetry.error('Product content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n const props = this.props as IBuyboxExtentedProps;\r\n const defaultMinimumKeyInPrice = 10;\r\n const defaultMaximumKeyInPrice = 100;\r\n\r\n const context = this.props.context as ICoreContext;\r\n const inventoryLevel = context.app.config.inventoryLevel;\r\n const dimensionValuesWithInventory = ArrayExtensions.flatten(\r\n ArrayExtensions.validValues(this.props.data.allDimensions.result?.map(value => value.dimensionValuesWithInventory))\r\n );\r\n const hasAvailableProducts =\r\n !ArrayExtensions.hasElements(dimensionValuesWithInventory) ||\r\n dimensionValuesWithInventory.some((value: unknown) => {\r\n const inventoryLevelCode = getInventoryLevelCodeFromDimensionValue(\r\n value as ProductDimensionValueInventoryAvailability,\r\n inventoryLevel\r\n );\r\n return inventoryLevelCode !== InventoryLevelValues.outOfStock;\r\n });\r\n const catalogId = getCatalogId(this.props.context.request);\r\n\r\n const hasSerialNumber = product?.Behavior?.HasSerialNumber || false;\r\n\r\n const viewProps: IBuyboxViewProps = {\r\n ...(this.props as IHeiBuyboxV2Props),\r\n state: this.state,\r\n mediaGallery: mediaGallery && mediaGallery.length > 0 ? mediaGallery[0] : undefined,\r\n ModuleProps: {\r\n moduleProps: this.props,\r\n className: classnames('ms-buybox', 'hei-buybox-v2', className)\r\n },\r\n ProductInfoContainerProps: {\r\n className: 'ms-buybox__content'\r\n },\r\n MediaGalleryContainerProps: {\r\n className: 'ms-buybox__media-gallery'\r\n },\r\n telemetryContent: this.telemetryContent,\r\n callbacks: this.buyboxCallbacks,\r\n title: getBuyboxProductTitle(props),\r\n description: getBuyboxProductDescription(props),\r\n bulkPurchaseLink: this._renderBuyboxBulkPurchaseLink(),\r\n unitOfMeasure: getBuyboxProductUnitOfMeasure(props),\r\n configure: getBuyboxProductConfigure(\r\n props,\r\n this.state,\r\n this.buyboxCallbacks,\r\n undefined,\r\n undefined,\r\n this.props.data.allDimensions.result\r\n ),\r\n findInStore: getBuyboxFindInStore(this.props, this.state, this.buyboxCallbacks),\r\n price: getBuyboxProductPrice(this.props, this.state),\r\n addToCart: getBuyboxAddToCart(\r\n props,\r\n this.state,\r\n this.buyboxCallbacks,\r\n defaultMinimumKeyInPrice,\r\n defaultMaximumKeyInPrice,\r\n undefined,\r\n hasAvailableProducts,\r\n this.state.productPromotions?.FreeItemProductIds\r\n ),\r\n productComparisonButton: ArrayExtensions.hasElements(productComparisonButton)\r\n ? getBuyboxProductComparisonButton(\r\n productComparisonButton[0],\r\n product,\r\n getCatalogId(this.props.context.request),\r\n this.state\r\n )\r\n : undefined,\r\n addToOrderTemplate: getBuyboxProductAddToOrderTemplate(props, this.state, this.buyboxCallbacks),\r\n addToWishlist: getBuyboxProductAddToWishlist(props, this.state, this.buyboxCallbacks),\r\n rating: !props.context.app.config.hideRating && getBuyboxProductRating(props),\r\n quantity: product.IsGiftCard || hasSerialNumber ? undefined : getBuyboxProductQuantity(props, this.state, this.buyboxCallbacks),\r\n inventoryLabel: getBuyBoxInventoryLabel(props),\r\n shopSimilarLook:\r\n this.props.config.enableShopSimilarLooks && !product.IsGiftCard\r\n ? getBuyboxShopSimilarButton(props, ShopSimiliarButtonType.Looks)\r\n : undefined,\r\n shopSimilarDescription:\r\n this.props.config.enableShopSimilarDescription && !product.IsGiftCard\r\n ? getBuyboxShopSimilarButton(props, ShopSimiliarButtonType.Description)\r\n : undefined,\r\n keyInPrice:\r\n this.props.config.enableKeyInPrice && this.state.isCustomPriceSelected\r\n ? getBuyboxKeyInPrice(props, this.state, this.buyboxCallbacks)\r\n : undefined,\r\n quantityLimitsMessages: getQuantityLimitsMessages(props, this.state),\r\n max,\r\n catalogs: this._validateCatalogDetails(catalogId)\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Handles anchor click event and scrolls to the given bulk purchase module.\r\n * @param bulkPurchaseModule - Bulk purchase module.\r\n * @returns Handler.\r\n */\r\n private readonly _onBulkPurchaseLinkClick = (bulkPurchaseModule: Element) => () => {\r\n const boundingRect = bulkPurchaseModule.getBoundingClientRect();\r\n window.scrollTo(boundingRect.left, boundingRect.top);\r\n };\r\n\r\n private _renderBuyboxBulkPurchaseLink(): React.ReactNode {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\r\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\r\n return null;\r\n }\r\n\r\n if (!msdyn365Commerce.isBrowser) {\r\n return null;\r\n }\r\n\r\n const bulkPurchaseModules = Array.from(document.getElementsByClassName(BulkPurchase.className));\r\n\r\n if (!ArrayExtensions.hasElements(bulkPurchaseModules)) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n {this.props.resources.bulkPurchaseLinkText}\r\n \r\n );\r\n }\r\n\r\n private _updatePrice(newPrice: ProductPrice | undefined, customPrice: number | undefined = this.state.keyInPriceAmount): void {\r\n if (this.state.isCustomPriceSelected && newPrice) {\r\n newPrice.CustomerContextualPrice = customPrice;\r\n }\r\n this.setState({ productPrice: newPrice });\r\n }\r\n\r\n private _getProductVariant(dimensionsToUpdate: { [id: number]: string }) {\r\n const {\r\n data: {\r\n product: { result: product }\r\n },\r\n context: {\r\n actionContext,\r\n request: {\r\n apiSettings: { channelId }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const productDimensions = this.props.data.allDimensions.result!;\r\n\r\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\r\n // over the information in data\r\n const mappedDimensions = productDimensions\r\n .map(dimension => {\r\n const dimensions = (dimension.dimensionValuesWithInventory ??\r\n dimension.DimensionValues ??\r\n []) as IDimensionValueForSelectedVariant[];\r\n return {\r\n DimensionTypeValue: dimension.DimensionTypeValue,\r\n DimensionValue:\r\n dimensions.find(\r\n value => value.DimensionValue?.RecordId.toString() === dimensionsToUpdate[dimension.DimensionTypeValue]\r\n )?.DimensionValue ?? dimension.DimensionValue,\r\n ExtensionProperties: dimension.ExtensionProperties\r\n };\r\n })\r\n .filter(dimension => dimension.DimensionValue);\r\n setDimensionValuesToQuery(this.props.context.actionContext.requestContext.url.requestUrl, mappedDimensions);\r\n\r\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\r\n // so that places like add to cart can await it\r\n const selectedProductPromise = getSelectedVariant(\r\n new SelectedVariantInput(\r\n product!.MasterProductId ? product!.MasterProductId : product!.RecordId,\r\n channelId,\r\n undefined,\r\n undefined,\r\n this.props.context.request\r\n ),\r\n actionContext\r\n );\r\n this.setState({ selectedProduct: selectedProductPromise });\r\n\r\n return { productVariantPromise: selectedProductPromise, mappedDimensions };\r\n }\r\n\r\n private readonly _updateDimensions = async (): Promise => {\r\n const product = this.props.data.product.result;\r\n\r\n const productDimensions = this.props.data.allDimensions.result;\r\n\r\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\r\n\r\n if (!product || !hasProductDimensions) {\r\n return;\r\n }\r\n\r\n const dimensionsToUpdate: { [id: number]: string } = { ...this.dimensions };\r\n this.setState({ isUpdatingDimension: true, isUpdatingDeliveryOptions: true });\r\n\r\n // Step 1: Clear error state to display relevant errors\r\n if (this.state.errorState.otherError || this.state.errorState.quantityError) {\r\n const clearErrorState = { ...this.state.errorState };\r\n clearErrorState.otherError = undefined;\r\n if (this.state.errorState.errorHost === 'ADDTOCART') {\r\n clearErrorState.quantityError = undefined;\r\n clearErrorState.errorHost = undefined;\r\n }\r\n this.setState({ errorState: clearErrorState });\r\n }\r\n\r\n // Step 2: Clear any errors indicating the dimension wasn't selected\r\n for (const key of Object.keys(dimensionsToUpdate)) {\r\n if (this.state.errorState.configureErrors[key]) {\r\n this.setState(previousState => {\r\n const errorState = previousState.errorState;\r\n errorState.configureErrors[key] = undefined;\r\n return { errorState };\r\n });\r\n }\r\n }\r\n\r\n const data = this._getProductVariant(dimensionsToUpdate);\r\n const productVariant: SimpleProduct | null = await data.productVariantPromise;\r\n process.env.NODE_ENV === 'development' && console.log('Buybox', 'productVariant', JSON.parse(JSON.stringify(productVariant)));\r\n\r\n if (!productVariant) {\r\n return;\r\n }\r\n\r\n const promises: Promise[] = [\r\n this._getDimensionsForSelectedVariant(productVariant, data.mappedDimensions),\r\n this._hydrateInventoryInfo(productVariant),\r\n this._hydratePrice(productVariant),\r\n this._hydrateDeliveryOptions(productVariant),\r\n this._updateQuantitiesInState(productVariant),\r\n this._updateAvailableForPickup(productVariant),\r\n this._updatePromotions(productVariant),\r\n this._updateWarranties(productVariant),\r\n this._updateSelectedProduct(productVariant),\r\n this._mediaLocations(productVariant)\r\n ];\r\n\r\n await Promise.all(promises);\r\n };\r\n\r\n private async _getDimensionsForSelectedVariant(\r\n productVariant: SimpleProduct,\r\n mappedDimensions: {\r\n /* eslint-disable @typescript-eslint/naming-convention -- Retail proxy values */\r\n DimensionTypeValue: number;\r\n DimensionValue: ProductDimensionValue | undefined;\r\n ExtensionProperties: CommerceProperty[] | undefined;\r\n /* eslint-enable @typescript-eslint/naming-convention -- Retail proxy values */\r\n }[]\r\n ): Promise {\r\n await getDimensionsForSelectedVariant(\r\n new GetDimensionsForSelectedVariantInput(\r\n productVariant.MasterProductId ? productVariant.MasterProductId : productVariant.RecordId,\r\n this.props.context.request.apiSettings.channelId,\r\n mappedDimensions,\r\n this.props.context.request\r\n ),\r\n this.props.context.actionContext\r\n );\r\n }\r\n\r\n private async _hydrateInventoryInfo(productVariant: SimpleProduct): Promise {\r\n // Step 5. Use these dimensions hydrate the inventory. Wrap this in a promise\r\n // so that places like add to cart can await it\r\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(\r\n new ProductAvailabilitiesForSelectedVariantInput(productVariant.RecordId, this.props.context.request.apiSettings.channelId),\r\n this.props.context.actionContext\r\n );\r\n\r\n const newShippingQuantity = newAvailableQuantity?.find(\r\n // @ts-expect-error\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n (shipping: { deliveryType: any }) => shipping.deliveryType === DeliveryMode.shipping\r\n );\r\n const isCustomPriceSelected = productVariant.Dimensions?.find(\r\n dimension =>\r\n dimension.DimensionTypeValue === 4 && dimension.DimensionValue && dimension.DimensionValue.Value?.toLowerCase() === 'custom'\r\n );\r\n if (isCustomPriceSelected) {\r\n this.setState({ isCustomPriceSelected: true });\r\n } else {\r\n this.setState(previousState => {\r\n const errorState = previousState.errorState;\r\n errorState.customAmountError = undefined;\r\n return { isCustomPriceSelected: false, isPriceKeyedIn: false, errorState };\r\n });\r\n }\r\n\r\n if (newShippingQuantity) {\r\n this.setState({ productAvailableQuantity: newShippingQuantity });\r\n } else {\r\n this.setState({ productAvailableQuantity: undefined });\r\n }\r\n }\r\n\r\n private async _hydratePrice(productVariant: SimpleProduct): Promise {\r\n // Step 6. Use these dimensions hydrate the product price.\r\n const newPrice = await getPriceForSelectedVariant(\r\n new PriceForSelectedVariantInput(productVariant.RecordId, this.props.context.request.apiSettings.channelId),\r\n this.props.context.actionContext\r\n );\r\n\r\n if (newPrice) {\r\n this._updatePrice(newPrice);\r\n }\r\n }\r\n\r\n private async _hydrateDeliveryOptions(productVariant: SimpleProduct): Promise {\r\n const retailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n );\r\n\r\n // Step 7. Use these dimensions hydrate the product delivery options.\r\n const newDeliveryOptions = await getDeliveryOptionsForSelectedVariant(\r\n new GetDeliveryOptionsForSelectedVariantInput(\r\n productVariant.RecordId,\r\n this.props.context.request.apiSettings.channelId,\r\n undefined,\r\n undefined,\r\n retailMultiplePickupFeatureState?.IsEnabled\r\n ),\r\n this.props.context.actionContext\r\n );\r\n\r\n if (newDeliveryOptions) {\r\n this.setState({ productDeliveryOptions: newDeliveryOptions });\r\n }\r\n }\r\n\r\n private async _updateQuantitiesInState(product: SimpleProduct): Promise {\r\n const isOrderQuantityLimitsFeatureEnabled = await this._isOrderQuantityLimitsFeatureEnabled();\r\n if (isOrderQuantityLimitsFeatureEnabled && product) {\r\n this.setState({\r\n min: product.Behavior?.MinimumQuantity || 1,\r\n\r\n // If max by feature in default order settings is not defined then use max from site settings or default max 10.\r\n max:\r\n product.Behavior?.MaximumQuantity && product.Behavior?.MaximumQuantity > 0\r\n ? product.Behavior?.MaximumQuantity\r\n : updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem)\r\n });\r\n } else {\r\n this.setState({\r\n min: 1,\r\n max: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem)\r\n });\r\n }\r\n }\r\n\r\n private readonly _getDropdownName = (dimensionType: number, resources: IHeiBuyboxV2Resources): string => {\r\n const isGiftCard = this.props.data.product.result?.IsGiftCard;\r\n\r\n const leafCategories = this.props.data.product.result?.ExtensionProperties?.find(p => p.Key === 'LeafCategories')?.Value\r\n ?.StringValue;\r\n\r\n switch (dimensionType) {\r\n case 1: // ProductDimensionType.Color\r\n return resources.productDimensionTypeColor;\r\n case 2: // ProductDimensionType.Configuration\r\n return resources.productDimensionTypeConfiguration;\r\n case 3: // ProductDimensionType.Size\r\n if (leafCategories) {\r\n for (const leafCategory of leafCategories.split('|')) {\r\n if (this.mountCategories[leafCategory]) {\r\n return resources.productDimensionTypeMount;\r\n }\r\n }\r\n }\r\n\r\n return resources.productDimensionTypeSize;\r\n case 4: // ProductDimensionType.Style\r\n if (leafCategories) {\r\n for (const leafCategory of leafCategories.split('|')) {\r\n if (this.packSizeCategories[leafCategory]) {\r\n return resources.productDimensionTypePackSize;\r\n }\r\n }\r\n }\r\n\r\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\r\n default:\r\n return '';\r\n }\r\n };\r\n\r\n private async _isOrderQuantityLimitsFeatureEnabled(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return false;\r\n }\r\n\r\n const featureStatuses = await this.props.data.featureState;\r\n const isFeatureEnabledInHq = featureStatuses?.find(\r\n featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName\r\n )?.IsEnabled;\r\n if (!isFeatureEnabledInHq) {\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return true;\r\n }\r\n let customerInfo;\r\n try {\r\n customerInfo = await this.props.data.customerInformation;\r\n } catch (error) {\r\n this.props.telemetry.information(`${error}`);\r\n this.props.telemetry.debug('Unable to receive Customer Information. May be user is not authorized');\r\n return false;\r\n }\r\n\r\n return (\r\n customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n }\r\n\r\n private _validateCatalogDetails(catalogId: number): ProductCatalog[] | undefined {\r\n const catalogs = this.props.data.catalogs?.result?.filter(item => item.RecordId === catalogId);\r\n if (ArrayExtensions.hasElements(catalogs) && catalogs[0].RecordId === 0) {\r\n return;\r\n }\r\n\r\n return catalogs;\r\n }\r\n\r\n private async _updateAvailableForPickup(productVariant: SimpleProduct) {\r\n const ctx = this.props.context.actionContext;\r\n const searchCriteria = createInventoryAvailabilitySearchCriteria(\r\n ctx,\r\n [productVariant.RecordId],\r\n false,\r\n true,\r\n {},\r\n DeliveryMode.pickup\r\n );\r\n\r\n const productInventoryInformation = await ProductsDataActions.getEstimatedAvailabilityAsync(\r\n { callerContext: ctx },\r\n searchCriteria\r\n ).then(async (productWarehouseInformation: ProductWarehouseInventoryInformation) => {\r\n // For store selector, inventory should always come from an individual store\r\n const productInventoryInformation = mapProductInventoryInformation(\r\n ctx,\r\n productWarehouseInformation.ProductWarehouseInventoryAvailabilities\r\n );\r\n\r\n process.env.NODE_ENV === 'development' && console.log('getFullAvailableInventoryNearbyAction', productInventoryInformation);\r\n\r\n return productInventoryInformation;\r\n });\r\n\r\n // Ensure inventory data is for the selected variant\r\n if (productVariant.RecordId === this.state.productVariantData?.RecordId) {\r\n const storeAvailabilities = productInventoryInformation?.filter(a => (a.ProductAvailableQuantity.AvailableQuantity ?? 0) > 0);\r\n\r\n process.env.NODE_ENV === 'development' &&\r\n console.log(\r\n 'Buybox',\r\n 'storeAvailabilities',\r\n productVariant.RecordId,\r\n JSON.parse(JSON.stringify(storeAvailabilities)),\r\n JSON.parse(JSON.stringify(productInventoryInformation))\r\n );\r\n\r\n this.setState({ storeAvailabilities: storeAvailabilities });\r\n }\r\n }\r\n\r\n private async _updatePromotions(productVariant: SimpleProduct) {\r\n const product = this.props.data.product.result;\r\n\r\n if (product) {\r\n const promotions = await getProductPromotionsAction(\r\n new GetProductPromotionsInput(product.RecordId, productVariant.Dimensions ?? []),\r\n this.props.context.actionContext\r\n );\r\n\r\n process.env.NODE_ENV === 'development' && console.log('Buybox', 'productPromotions', promotions);\r\n this.setState({ productPromotions: promotions });\r\n\r\n const productPromotionsChangeEvent = new CustomEvent('onProductPromotionsChange', {\r\n detail: promotions\r\n });\r\n\r\n window.dispatchEvent(productPromotionsChangeEvent);\r\n }\r\n }\r\n\r\n private async _updateWarranties(productVariant: SimpleProduct) {\r\n const product = this.props.data.product.result;\r\n\r\n if (product) {\r\n const applicableWarranties = await getApplicableWarrantiesAction(\r\n new getApplicableWarrantiesInput(product.RecordId, productVariant.Dimensions ?? []),\r\n this.props.context.actionContext\r\n );\r\n\r\n let selectedWarranty = this.state.selectedWarranty;\r\n\r\n if (!ArrayExtensions.hasElements(applicableWarranties)) {\r\n // no applicable warranties for the selected variant\r\n selectedWarranty = null;\r\n } else if (selectedWarranty) {\r\n // different set of warranties for the selected variant\r\n if (!Boolean(applicableWarranties[0].Warranties?.find(aw => aw.RecordId === selectedWarranty!.RecordId))) {\r\n selectedWarranty = null;\r\n }\r\n }\r\n\r\n this.setState({ applicableWarranties: applicableWarranties, selectedWarranty: selectedWarranty });\r\n }\r\n }\r\n\r\n private async _mediaLocations(productVariant: SimpleProduct) {\r\n const input = new MediaLocationsForSelectedVariantInput(\r\n productVariant.RecordId,\r\n this.props.context.actionContext.requestContext.apiSettings.channelId,\r\n productVariant,\r\n this.props.context.actionContext.requestContext.apiSettings.catalogId\r\n );\r\n\r\n const mediaLocations = await getMediaLocationsForSelectedVariantActionDataAction(input, this.props.context.actionContext);\r\n process.env.NODE_ENV === 'development' && console.log('_mediaLocations', JSON.parse(JSON.stringify(mediaLocations)));\r\n this.setState({ mediaLocations: mediaLocations ?? [] });\r\n }\r\n\r\n private async _updateSelectedProduct(productVariant: SimpleProduct) {\r\n this.setState({ productVariantData: productVariant });\r\n }\r\n}\r\n\r\nexport default Buybox;\r\n","import React from 'react';\r\nimport { IRequestContext } from '@msdyn365-commerce/core';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nconst AuthorizedDealerBadge = ({ product, requestContext }: { product?: SimpleProduct; requestContext: IRequestContext }) => {\r\n const brand = React.useMemo(() => {\r\n const brandFromExt = product?.ExtensionProperties?.find(p => p.Key === 'Brand')?.Value?.StringValue;\r\n if (brandFromExt) {\r\n return brandFromExt;\r\n }\r\n\r\n return null;\r\n }, [product]);\r\n\r\n if (brand && requestContext.gridSettings) {\r\n const locale = requestContext.locale;\r\n const fileName = `Catalogs/${locale}/${brand.toUpperCase()}_AuthDLR_${locale}.png`;\r\n const categoryImageUrl = generateImageUrl(fileName, requestContext.apiSettings);\r\n\r\n if (categoryImageUrl) {\r\n const ImageData: Msdyn365.IImageData = { src: categoryImageUrl };\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport { AuthorizedDealerBadge };\r\n","import React from 'react';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nconst ProductCode = ({\r\n product,\r\n resources\r\n}: {\r\n product?: SimpleProduct;\r\n resources: {\r\n webCodeLabel: string;\r\n mfrCodeLabel: string;\r\n };\r\n}) => {\r\n const [itemId, mfrCode] = React.useMemo(() => {\r\n const mfrCode = product?.ExtensionProperties?.find(p => p.Key === 'MfrCode')?.Value?.StringValue;\r\n return [product?.ItemId, mfrCode];\r\n }, [product]);\r\n\r\n return (\r\n \r\n {resources.webCodeLabel}: {itemId ?? ''}\r\n {mfrCode && ` ${String.fromCharCode(183)} ${resources.mfrCodeLabel}: ${mfrCode}`}\r\n \r\n );\r\n};\r\n\r\nexport { ProductCode };\r\n","import React, { useMemo } from 'react';\r\nimport { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { AttributeValue, ProductPrice } from '@msdyn365-commerce/retail-proxy';\r\nimport { buildProductBadgeUrl } from '../../../common/utilities/productListExtensionHelpers';\r\n\r\nconst ProductBadge = ({\r\n attributeValues,\r\n productPrice,\r\n requestContext\r\n}: {\r\n attributeValues?: AttributeValue[];\r\n requestContext: IRequestContext;\r\n productPrice?: ProductPrice;\r\n}) => {\r\n const badgeValue = useMemo(() => {\r\n const discountAmount = productPrice?.DiscountAmount;\r\n if (discountAmount && discountAmount > 0) {\r\n process.env.NODE_ENV === 'development' && console.log('onsale', 'show', discountAmount);\r\n return 'on_sale';\r\n }\r\n\r\n var badgeAttr = attributeValues?.find(\r\n av => av.Name === 'Product Badge Status' && av.TextValue && av.TextValue.toLocaleLowerCase() !== 'none'\r\n );\r\n return badgeAttr?.TextValue ?? null;\r\n }, [productPrice, attributeValues]);\r\n\r\n if (badgeValue) {\r\n const badgeUrl = buildProductBadgeUrl(requestContext.locale, badgeValue, requestContext.apiSettings.baseImageUrl, '_PDP');\r\n const badgeName = badgeValue.replace(/_/, ' ');\r\n return {badgeName};\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport { ProductBadge };\r\n","import React, { useMemo } from 'react';\r\nimport { IProductPromotion } from '../../../actions/DataServiceEntities.g';\r\n\r\ntype Props = {\r\n sitePath?: string;\r\n promotions?: IProductPromotion[];\r\n};\r\n\r\nconst Promotions = ({ sitePath, promotions }: Props) => {\r\n const importantPromos = useMemo(() => {\r\n return promotions?.filter(p => p.IsImportant) ?? [];\r\n }, [promotions]);\r\n\r\n if (promotions && promotions.length > 0) {\r\n const heading = promotions.length > 1 ? `${promotions.length} Special Offers Available!` : '1 Special Offer Available!';\r\n return (\r\n
\r\n
{heading}
\r\n {importantPromos.length > 0 && (\r\n
    \r\n {importantPromos\r\n .filter(p => p.IsImportant)\r\n .map(o => {\r\n return (\r\n
  • \r\n {o.Name}\r\n
  • \r\n );\r\n })}\r\n
\r\n )}\r\n \r\n See all offers\r\n \r\n
\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport { Promotions };\r\n","import React, { useMemo } from 'react';\r\nimport { ICoreContext, Image, IImageData } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct, Warranty, WarrantyGroup } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { makeAbsUrl } from '../../../common/utilities/makeAbsUrl';\r\n\r\ntype Props = {\r\n warrantyGroups?: WarrantyGroup[];\r\n logo?: IImageData;\r\n\r\n selectedWarranty: SimpleProduct | null;\r\n setSelectedWarranty: (warranty: SimpleProduct | null) => void;\r\n coreContext: ICoreContext;\r\n};\r\n\r\nconst WarrantyOptionButton = (props: {\r\n warranty: Warranty;\r\n isSelected: boolean;\r\n coreContext: ICoreContext;\r\n onClick: (warranty: SimpleProduct | null) => void;\r\n}) => {\r\n const { warranty, isSelected, coreContext, onClick } = props;\r\n const unit = warranty.DurationUnitValue ?? 0;\r\n const duration = warranty.Duration ?? 0;\r\n const label =\r\n unit === 1\r\n ? duration > 1\r\n ? 'Days'\r\n : 'Day'\r\n : unit === 2\r\n ? duration > 1\r\n ? 'Months'\r\n : 'Month'\r\n : unit === 3\r\n ? duration > 1\r\n ? 'Years'\r\n : 'Year'\r\n : '';\r\n\r\n const formatedPrice = useMemo(() => coreContext.cultureFormatter.formatCurrency(warranty.AdjustedPrice || warranty.BasePrice), [\r\n warranty,\r\n coreContext\r\n ]);\r\n\r\n return (\r\n onClick(warranty)}\r\n >\r\n {`${duration} ${label}`}\r\n {formatedPrice}\r\n \r\n );\r\n};\r\n\r\nconst WarrantySection = ({ warrantyGroups, logo, setSelectedWarranty, selectedWarranty, coreContext }: Props) => {\r\n const { actionContext } = coreContext;\r\n const warranties = ArrayExtensions.hasElements(warrantyGroups) ? warrantyGroups[0].Warranties : undefined;\r\n\r\n if (!warranties) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {logo && (\r\n \r\n )}\r\n
\r\n
Henry's Extended Life Plan
\r\n
\r\n \r\n View all benefits\r\n \r\n
\r\n
\r\n
\r\n {warranties.map((w, idx) => (\r\n setSelectedWarranty(w)}\r\n />\r\n ))}\r\n setSelectedWarranty(null)}\r\n >\r\n {`No coverage`}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport { WarrantySection };\r\n","import React, { useEffect, useState } from 'react';\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { IDimensionForSelectedVariant, ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ProductsDataActions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport getAllDimensionsForProductActionDataAction, {\r\n GetAllDimensionsForProductInput\r\n} from '../../../actions/get-all-dimensions-for-product';\r\nimport { getProductVariantUrl } from '../../../common/getProductVariantUrl';\r\n\r\nconst ShopUsed = ({\r\n product,\r\n resources,\r\n context\r\n}: {\r\n product?: SimpleProduct;\r\n context: IActionContext;\r\n resources: {\r\n shopUsedText: string;\r\n };\r\n}) => {\r\n const [usedProductUrl, setUsedProductUrl] = useState('');\r\n const [recId, itemId] = React.useMemo(() => {\r\n const values = product?.ExtensionProperties?.find(ep => ep.Key === 'UsedSku')?.Value?.StringValue?.split(':');\r\n\r\n return values && values.length === 2 ? [+values[0], values[1]] : [0, null];\r\n }, [product]);\r\n\r\n useEffect(() => {\r\n setUsedProductUrl('');\r\n if (!recId) {\r\n return;\r\n }\r\n\r\n const input = new GetAllDimensionsForProductInput(recId, context.requestContext.apiSettings.channelId);\r\n void getAllDimensionsForProductActionDataAction(input, context)\r\n .then((dimensions: IDimensionForSelectedVariant[]) => {\r\n const validProducts: Record> = {};\r\n\r\n dimensions.forEach(d => {\r\n d.dimensionValuesWithInventory?.forEach(inv => {\r\n inv.ProductIds?.forEach(variantId => {\r\n const variantDims = validProducts[variantId] ?? (validProducts[variantId] = {});\r\n variantDims[d.DimensionTypeValue] = inv.DimensionValue?.Value ?? '';\r\n });\r\n });\r\n });\r\n\r\n var variantId = ArrayExtensions.firstOrDefault(\r\n Object.keys(validProducts).filter(variantId => Object.keys(validProducts[variantId]).length === dimensions.length)\r\n );\r\n\r\n return variantId ? +variantId : 0;\r\n })\r\n .then(variantId => {\r\n if (variantId) {\r\n void ProductsDataActions.getByIdAsync(\r\n { callerContext: context },\r\n +variantId,\r\n context.requestContext.apiSettings.channelId\r\n ).then(productDetails => {\r\n const usedProductUrl = getProductVariantUrl(productDetails, context);\r\n setUsedProductUrl(usedProductUrl);\r\n });\r\n }\r\n });\r\n }, [context, recId]);\r\n\r\n if (!usedProductUrl) {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport { ShopUsed };\r\n","import { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { Image, IImageData } from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nimport { IBuyboxAddToCartViewProps } from '@msdyn365-commerce-modules/buybox';\r\nimport { IBuyboxViewProps } from '../hei-buybox-v2';\r\nimport { ProductCode } from './ProductCode';\r\nimport classnames from 'classnames';\r\nimport { ArrayExtensions, getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nconst FloatingSummary = ({\r\n addToCart,\r\n price,\r\n title,\r\n data: { product },\r\n isInViewport,\r\n state,\r\n context,\r\n resources\r\n}: IBuyboxViewProps & { isInViewport: boolean }) => {\r\n const { mediaLocations } = state;\r\n\r\n const image: IImageData | null = ArrayExtensions.hasElements(mediaLocations)\r\n ? {\r\n src: mediaLocations[0].Uri,\r\n altText: mediaLocations[0].AltText\r\n }\r\n : null;\r\n\r\n const fallbackImageUrl = getFallbackImageUrl(product.result?.ItemId, context.actionContext.requestContext.apiSettings);\r\n\r\n return (\r\n \r\n
\r\n {image && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n {title}\r\n \r\n
\r\n
{price}
\r\n
\r\n
{addToCart && _renderAddToCart(addToCart)}
\r\n
\r\n \r\n );\r\n};\r\n\r\nconst _renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\r\n const { ContainerProps, errorBlock, button } = addToCart;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\nexport { FloatingSummary };\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { Button, Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\nexport interface SubscriptionConfirmationModalProps {\r\n className: string;\r\n modalOpen: boolean | undefined;\r\n setModalOpen(newValue: boolean): void;\r\n}\r\n\r\nexport const SubscriptionConfirmationModal = (popupProps: SubscriptionConfirmationModalProps) => {\r\n const { className, modalOpen, setModalOpen } = popupProps;\r\n const closeModal = React.useCallback(() => {\r\n setModalOpen(false);\r\n }, [setModalOpen]);\r\n\r\n return (\r\n \r\n \r\n {'Thank you'}\r\n \r\n \r\n

{\"Your notification request has been received. Please check your spam box and add Henry's to your safe list.\"}

\r\n \r\n
\r\n
\r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { Button, Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport axios from 'axios';\r\nimport { encodeKlaviyoItemId } from '../../../../common/encodeKlaviyoItemId';\r\nimport { SubscriptionConfirmationModal } from './subscription-confirmation-modal';\r\nimport { subscribeToList } from '../../../hei-klaviyo-signup-form/subscribeToList';\r\n\r\nexport interface BackInStockSubscriptionModalProps {\r\n className: string;\r\n modalOpen: boolean | undefined;\r\n setModalOpen(newValue: boolean): void;\r\n context: IActionContext;\r\n product: SimpleProduct;\r\n}\r\n\r\nexport const BackInStockSubscriptionModal = (popupProps: BackInStockSubscriptionModalProps) => {\r\n const { className, modalOpen, setModalOpen, context, product } = popupProps;\r\n const [isUpdating, setIsUpdating] = React.useState(false);\r\n const [isSubmitted, setIsSubmitted] = React.useState(false);\r\n const [email, setEmail] = React.useState(context.requestContext.user.emailAddress ?? '');\r\n const [subscribeToNewsletter, setSubscribeToNewsletter] = React.useState(false);\r\n const [errMsg, setErrMsg] = React.useState('');\r\n const closeModal = React.useCallback(() => {\r\n setModalOpen(false);\r\n }, [setModalOpen]);\r\n\r\n const handleSubscription = () => {\r\n if (!email) {\r\n setErrMsg('Please enter your email address.');\r\n // eslint-disable-next-line security/detect-unsafe-regex\r\n } else if (!/^[a-zA-Z0-9._-]+(\\+[a-zA-Z0-9._-]+)?@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/.test(email)) {\r\n setErrMsg('Please enter a valid email address.');\r\n } else {\r\n setErrMsg('');\r\n\r\n setIsUpdating(true);\r\n const publicKey = context.requestContext.app.config.heiKlaviyoPublicKey;\r\n if (publicKey) {\r\n const endpoint = `https://a.klaviyo.com/client/back-in-stock-subscriptions/?company_id=${publicKey}`;\r\n const apiRev = context.requestContext.app.config.heiKlaviyoApiRevision ?? '2024-05-15';\r\n void axios\r\n .post(\r\n endpoint,\r\n {\r\n data: {\r\n type: 'back-in-stock-subscription',\r\n attributes: {\r\n channels: ['EMAIL'],\r\n profile: {\r\n data: {\r\n type: 'profile',\r\n attributes: {\r\n email: email,\r\n id: context.requestContext.user.customerAccountNumber || undefined\r\n }\r\n }\r\n }\r\n },\r\n relationships: {\r\n variant: {\r\n data: {\r\n type: 'catalog-variant',\r\n id: encodeKlaviyoItemId(product.ProductNumber ?? product.ItemId ?? '')\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n headers: {\r\n revision: apiRev\r\n }\r\n }\r\n )\r\n .then(() => {\r\n setIsUpdating(false);\r\n closeModal();\r\n setIsSubmitted(true);\r\n })\r\n .catch(err => {\r\n process.env.NODE_ENV === 'development' && console.log('KlaviyoSubscription', err);\r\n setErrMsg('An error has occurred, please try again later.');\r\n setIsUpdating(false);\r\n });\r\n\r\n if (subscribeToNewsletter) {\r\n void subscribeToList(context.requestContext, { email });\r\n }\r\n }\r\n }\r\n };\r\n\r\n if (isSubmitted) {\r\n return (\r\n {\r\n setIsSubmitted(isOpen);\r\n }}\r\n className={className}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {'Thank you for your interest in this item'}\r\n \r\n \r\n

{'Enter your email address and we will notify you when it becomes available.'}

\r\n

\r\n {\r\n \"An email notification guarantees neither inventory nor price. But don't worry: should you miss out on the first shipment, you can always request another notification.\"\r\n }\r\n

\r\n
\r\n setEmail(evt.currentTarget.value)}\r\n disabled={isUpdating}\r\n />\r\n \r\n
\r\n {errMsg &&
{errMsg}
}\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { BackInStockSubscriptionModal } from './Klaviyo/back-in-stock-subscription-modal';\r\nimport { UncontrolledTooltip } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport classnames from 'classnames';\r\n\r\nconst KlaviyoBackInStockSubscription = ({\r\n context,\r\n product,\r\n productAvailableQuantity\r\n}: {\r\n context: IActionContext;\r\n product?: SimpleProduct;\r\n productAvailableQuantity?: IProductInventoryInformation;\r\n}) => {\r\n const [backInStockModalOpen, setBackInStockModalOpen] = React.useState(false);\r\n const btnRef = React.createRef();\r\n\r\n const publicKey = context.requestContext.app.config.heiKlaviyoPublicKey;\r\n if (\r\n !publicKey ||\r\n !product ||\r\n !productAvailableQuantity ||\r\n productAvailableQuantity.StockLevelCode?.toUpperCase() === 'INSTOCK' ||\r\n productAvailableQuantity.StockLevelCode?.toUpperCase() === 'LOW'\r\n ) {\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('KlaviyoSubscription', product?.ItemId, productAvailableQuantity?.StockLevelCode);\r\n return null;\r\n }\r\n\r\n const label = 'Notify when back in stock';\r\n\r\n return (\r\n {\r\n setBackInStockModalOpen(true);\r\n }}\r\n >\r\n \r\n \r\n {errMsg &&
{errMsg}
}\r\n
\r\n \r\n
\r\n \r\n \r\n );\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { PriceDropSubscriptionModal } from './Klaviyo/price-drop-subscription-modal';\r\nimport { UncontrolledTooltip } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport classnames from 'classnames';\r\n\r\nconst KlaviyoPriceDropSubscription = ({\r\n context,\r\n product,\r\n productPrice\r\n}: {\r\n context: IActionContext;\r\n product?: SimpleProduct;\r\n productPrice?: ProductPrice;\r\n}) => {\r\n const btnRef = React.createRef();\r\n const [modalOpen, setModalOpen] = React.useState(false);\r\n\r\n if (!product || !productPrice) {\r\n return null;\r\n }\r\n\r\n const label = 'Get Sale Alert';\r\n return (\r\n
\r\n {\r\n setModalOpen(true);\r\n }}\r\n ref={btnRef}\r\n >\r\n {label}\r\n \r\n \r\n {label}\r\n \r\n setModalOpen(v)}\r\n productPrice={productPrice}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport { KlaviyoPriceDropSubscription };\r\n","/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxAddToOrderTemplateViewProps,\r\n IBuyboxAddToWishlistViewProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxShopSimilarLookViewProps\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport { ArrayExtensions, DeliveryMode } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IBuyboxViewProps } from './hei-buybox-v2';\r\nimport { IBuyboxFindInStoreViewProps } from './components/hei-buybox-v2-find-in-store';\r\nimport { AuthorizedDealerBadge } from './components/AuthorizedDealerBadge';\r\nimport { ProductCode } from './components/ProductCode';\r\nimport { ProductBadge } from './components/ProductBadge';\r\nimport Bazzarvoice from '../bazzarvoice-widget/components/Bazzarvoice';\r\nimport { widgetType } from '../bazzarvoice-widget/bazzarvoice-widget.props.autogenerated';\r\nimport { Promotions } from './components/Promotions';\r\nimport { WarrantySection } from './components/WarrantySection';\r\nimport useIsInViewport from 'use-is-in-viewport';\r\nimport { ShopUsed } from './components/ShopUsed';\r\nimport { FloatingSummary } from './components/FloatingSummary';\r\nimport { MediaGalleryOverlay } from './components/MediaGalleryOverlay';\r\nimport { JsonLinkingData } from './components/JsonLinkingData';\r\nimport { KlaviyoBackInStockSubscription } from './components/KlaviyoBackInStockSubscription';\r\nimport { GaPayload } from '../../common/pushGoogleAnalyticsEvent';\r\nimport { useGoogleAnalytics } from '../../common/useGoogleAnalytics';\r\nimport { KlaviyoPriceDropSubscription } from './components/KlaviyoPriceDropSubscription';\r\n\r\nconst BuyboxView: React.FC = props => {\r\n const {\r\n ModuleProps,\r\n MediaGalleryContainerProps,\r\n ProductInfoContainerProps,\r\n addToCart,\r\n // addToOrderTemplate,\r\n addToWishlist,\r\n configure,\r\n description,\r\n findInStore,\r\n quantity,\r\n price,\r\n title,\r\n inventoryLabel,\r\n // shopSimilarLook,\r\n // keyInPrice,\r\n // shopSimilarDescription,\r\n // unitOfMeasure,\r\n // productComparisonButton,\r\n context,\r\n data: { product, attributeValues, categoryPaths },\r\n config: { helpLogo },\r\n state,\r\n callbacks,\r\n resources\r\n } = props;\r\n const { request } = context;\r\n const { productPromotions, applicableWarranties, productPrice, productVariantData } = state;\r\n const promotions = React.useMemo(() => {\r\n const promotions = productPromotions?.Promotions ?? [];\r\n if (promotions.length > 0) {\r\n promotions[0].IsImportant = true;\r\n }\r\n\r\n return promotions;\r\n }, [productPromotions?.Promotions]);\r\n const [isInViewport, targetRef] = useIsInViewport();\r\n // process.env.NODE_ENV === 'development' && console.log('BuyboxView', 'isInViewport', isInViewport);\r\n\r\n const gaPayload = React.useMemo(() => {\r\n if (productVariantData && productPrice) {\r\n const hasUnselectedOption = productVariantData.Dimensions?.find(d => Boolean(!d.DimensionValue));\r\n\r\n if (hasUnselectedOption) {\r\n return undefined;\r\n }\r\n\r\n const brand = productVariantData?.ExtensionProperties?.find(ep => ep.Key === 'Brand')?.Value?.StringValue;\r\n\r\n const paths = categoryPaths?.result?.map(p => p.Name) ?? [];\r\n const variant = productVariantData.Dimensions?.map(d => d.DimensionValue?.Value).join(',');\r\n const discount = productPrice.DiscountAmount ?? 0;\r\n const payload: GaPayload = {\r\n event: 'view_item',\r\n ecommerce: {\r\n currency: productPrice.CurrencyCode,\r\n value: productPrice.CustomerContextualPrice ?? 0,\r\n items: [\r\n {\r\n item_id: productVariantData.ProductNumber ?? productVariantData.ItemId ?? '',\r\n item_name: productVariantData.Name ?? '',\r\n item_brand: brand ?? undefined,\r\n item_variant: variant,\r\n item_category: paths[0],\r\n item_category2: paths[1],\r\n item_category3: paths[2],\r\n item_category4: paths[3],\r\n item_category5: paths[4],\r\n price: (productPrice.BasePrice ?? 0) - discount,\r\n discount: discount,\r\n quantity: 1,\r\n pid: productVariantData.ItemId ?? '',\r\n index: 0\r\n }\r\n ]\r\n }\r\n };\r\n\r\n return payload;\r\n }\r\n\r\n return undefined;\r\n }, [productVariantData, productPrice, categoryPaths]);\r\n\r\n useGoogleAnalytics(gaPayload);\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n {title} \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {props.mediaGallery}\r\n \r\n \r\n
\r\n {description &&
About this product
}\r\n
\r\n {description}\r\n \r\n Find out more\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {title} \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {price}\r\n \r\n
\r\n
\r\n \r\n {/* {unitOfMeasure} */}\r\n {/* {props.bulkPurchaseLink} */}\r\n
\r\n \r\n
\r\n
About this product
\r\n
\r\n {description}\r\n \r\n Find out more\r\n \r\n
\r\n
\r\n
\r\n
\r\n callbacks.setSelectedWarranty(w)}\r\n logo={helpLogo}\r\n />\r\n {/* {keyInPrice && _renderKeyInPrice(keyInPrice)} */}\r\n
\r\n
\r\n {inventoryLabel}\r\n {_renderAvailability(props) || (findInStore && _renderFindInStore(findInStore))}\r\n
\r\n
\r\n {quantity && _renderQuantity(quantity)}\r\n \r\n {addToCart && _renderAddToCart(addToCart)}\r\n {addToWishlist && _renderAddToWishlist(addToWishlist)}\r\n {/* {productComparisonButton} */}\r\n
\r\n
\r\n {/* {addToOrderTemplate && _renderAddToOrderTemplate(addToOrderTemplate)} */}\r\n {/* {_renderSocialShare(props.slots && props.slots.socialShare)} */}\r\n {configure && _renderConfigure(configure)}\r\n {/* {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)} */}\r\n {/* {shopSimilarDescription && _renderShopSimilarItem(shopSimilarDescription)} */}\r\n \r\n {ArrayExtensions.hasElements(props.slots.actionBlocks) && props.slots.actionBlocks.map(b => b)}\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst _renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\r\n const { ContainerProps, errorBlock, button } = addToCart;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\n// @ts-ignore\r\nconst _renderAddToOrderTemplate = (addToOrderTemplate: IBuyboxAddToOrderTemplateViewProps): JSX.Element => {\r\n const { ContainerProps, errorBlock, button } = addToOrderTemplate;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\nconst _renderAddToWishlist = (addToWishlist: IBuyboxAddToWishlistViewProps): JSX.Element => {\r\n const { ContainerProps, errorBlock, button } = addToWishlist;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\r\n const { ContainerProps, dropdowns } = configure;\r\n\r\n return {dropdowns.map(_renderConfigureDropdown)};\r\n};\r\n\r\n// @ts-ignore\r\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\r\n if (!socialShare || socialShare.length === 0) {\r\n return undefined;\r\n }\r\n\r\n return <>{socialShare[0]};\r\n};\r\n\r\nconst _renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n {errors}\r\n \r\n {select}\r\n \r\n );\r\n};\r\n\r\nconst _renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\r\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\r\n\r\n return (\r\n \r\n {storeSelector}\r\n {heading}\r\n {productPickupOptionList}\r\n {description}\r\n {errors}\r\n {button}\r\n {modal}\r\n \r\n );\r\n};\r\n\r\nconst _renderQuantity = (quantity: IBuyboxProductQuantityViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\r\n\r\n return (\r\n \r\n {input}\r\n \r\n {heading}\r\n {errors}\r\n \r\n \r\n );\r\n};\r\n\r\n// @ts-ignore\r\nconst _renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\r\n\r\n return (\r\n \r\n {heading}\r\n {input}\r\n \r\n );\r\n};\r\n\r\nconst _renderAvailability = (props: IBuyboxViewProps) => {\r\n let productAvailableQuantity = props.state.productAvailableQuantity;\r\n\r\n if (!productAvailableQuantity && ArrayExtensions.hasElements(props.data.productAvailableQuantity.result)) {\r\n productAvailableQuantity = props.data.productAvailableQuantity.result.find(\r\n shipping => shipping.deliveryType === DeliveryMode.shipping\r\n );\r\n }\r\n const extensionProperties = (props.state.productVariantData ?? props.data.product.result)?.ExtensionProperties;\r\n\r\n const availDate = extensionProperties?.find(ep => ep.Key === 'AvailDate')?.Value?.StringValue;\r\n const isBopisOnly = Boolean(extensionProperties?.find(ep => ep.Key === 'Bopis' && ep.Value?.StringValue === 'Yes'));\r\n\r\n process.env.NODE_ENV === 'development' && console.log('_renderAvailability', availDate, isBopisOnly);\r\n\r\n if (isBopisOnly || !availDate || !productAvailableQuantity) {\r\n return undefined;\r\n }\r\n\r\n if (productAvailableQuantity) {\r\n process.env.NODE_ENV === 'development' && console.log('_renderAvailability', productAvailableQuantity.StockLevelCode);\r\n if (productAvailableQuantity.StockLevelCode === 'AVAIL') {\r\n return (\r\n

\r\n {props.resources.expectedAvailabilityLabel}:\r\n
\r\n {availDate}\r\n

\r\n );\r\n }\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n// @ts-ignore\r\nconst _renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\r\n const { ContainerProps, errors, input } = shopSimilarItem;\r\n\r\n return (\r\n \r\n {errors}\r\n {input}\r\n \r\n );\r\n};\r\nexport default BuyboxView;\r\n","import { IRequestContext } from '@msdyn365-commerce/core';\r\nimport axios from 'axios';\r\n\r\ntype Profile = {\r\n email: string;\r\n properties?: {};\r\n};\r\n\r\nexport const subscribeToList = async (context: IRequestContext, profile: Profile, listId?: string) => {\r\n const publicKey = context.app.config.heiKlaviyoPublicKey;\r\n if (!publicKey) {\r\n return;\r\n }\r\n\r\n const endpoint = `https://a.klaviyo.com/client/subscriptions/?company_id=${publicKey}`;\r\n const apiRev = context.app.config.heiKlaviyoApiRevision ?? '2024-05-15';\r\n if (!listId) {\r\n listId = context.app.config.heiKlaviyoDefaultList ?? 'Tvx3cs';\r\n }\r\n return axios.post(\r\n endpoint,\r\n {\r\n data: {\r\n type: 'subscription',\r\n attributes: {\r\n profile: {\r\n data: {\r\n type: 'profile',\r\n attributes: profile\r\n }\r\n }\r\n },\r\n relationships: {\r\n list: {\r\n data: {\r\n type: 'list',\r\n id: listId\r\n }\r\n }\r\n }\r\n }\r\n },\r\n {\r\n headers: {\r\n revision: apiRev\r\n }\r\n }\r\n );\r\n};\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['hei-buybox-v2'] = {\n c: () => require('partner/modules/hei-buybox-v2/hei-buybox-v2.tsx'),\n $type: 'containerModule',\n da: [{name:'allDimensions', path:'actions/get-all-dimensions-for-product', runOn: 0},{name:'applicableWarranties', path:'actions/get-applicable-warranties.action', runOn: 0},{name:'attributeValues', path:'actions/get-attributes-for-selected-variant.action', runOn: 0},{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'categoryPaths', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productAvailableQuantity', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant', runOn: 0},{name:'productPrice', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant', runOn: 0},{name:'productPromotions', path:'actions/get-product-promotions.action', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'hei-buybox-v2',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/hei-buybox-v2'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-category-paths');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-all-dimensions-for-product';\n let dataAction = require('partner/actions/get-all-dimensions-for-product');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-applicable-warranties.action';\n let dataAction = require('partner/actions/get-applicable-warranties.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-attributes-for-selected-variant.action';\n let dataAction = require('partner/actions/get-attributes-for-selected-variant.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/get-product-promotions.action';\n let dataAction = require('partner/actions/get-product-promotions.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|hei-buybox-v2|hei-buybox-v2'] = {\n c: () => require('partner/modules/hei-buybox-v2/hei-buybox-v2.view.tsx'),\n cn: '__local__-__local__-hei-buybox-v2'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["AttributesForSelectedVariantInput","constructor","productId","channelId","selectedProduct","catalogId","getCacheKey","getCacheObjectType","dataCacheType","this","createAttributesForSelectedVariantInput","inputData","getSelectedProductIdFromActionInput","getCatalogId","requestContext","apiSettings","undefined","Error","async","getAttributesForSelectedVariantAction","input","ctx","Promise","resolve","then","activeProduct","selectedVariantInput","SelectedVariantInput","getSelectedVariantActionDataAction","productResult","ProductsDataActions","callerContext","RecordId","attributeValues","catch","error","trace","message","telemetry","exception","debug","getAttributesForSelectedVariantActionDataAction","createObservableDataAction","id","action","MediaLocationsForSelectedVariantInput","createMediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariantAction","AsyncResult","getSelectedVariant","_activeProduct$Extens","newProductRecId","ExtensionProperties","find","ep","Key","Value","StringValue","split","getAllDimensionsForProductInput","GetAllDimensionsForProductInput","getAllDimensionsForProductActionDataAction","dimensions","validProducts","forEach","d","_d$dimensionValuesWit","dimensionValuesWithInventory","inv","_inv$ProductIds","ProductIds","variantId","_validProducts$varian","_inv$DimensionValue$V","_inv$DimensionValue","DimensionTypeValue","DimensionValue","ArrayExtensions","firstOrDefault","Object","keys","filter","length","_activeProduct$Dimens","Dimensions","_d$DimensionValue$Val","_d$DimensionValue","_validProducts$varian2","toLowerCase","product","_ctx$requestContext$a","app","config","OmniChannelMedia","mediaLocationsInput","MediaLocationsInput","getMediaLocationsForProductAction","getMediaLocationsAsync","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","response","map","mediaLocation","Uri","generateImageUrl","AltText","Name","getMediaLocationsForSelectedVariantActionDataAction","getProductVariantUrl","productDetails","context","_productDetails$Name","_productDetails$Maste","_productDetails$Dimen","title","normalizedCanonicalUrl","createCanonicalUrl","MasterProductId","dimParams","dim","_dim$DimensionValue","_dim$DimensionValue2","_dim$DimensionValue3","encodeURIComponent","replace","p","join","makeAbsUrl","url","origin","window","location","host","sitePath","SwatchComponent","props","_props$isSelectionEna","containerClassName","selectedItemId","setSelectedItemId","React","isSelectionEnabled","onSelectItemCallback","onSelectItem","item","itemId","ObjectExtensions","isNullOrUndefined","defaultItem","list","isDefault","assign","role","className","classnames","isRefineItem","isSelected","SwatchItemComponent","key","isDisabled","Dropdown","state","super","selectMenu","_selectSwatch","setState","selectedIndex","onChange","dropdownId","selectId","selectedValue","value","_onChanged","event","target","innerText","selectedItem","dropdownList","toString","payLoad","getPayloadObject","telemetryContent","dropdownName","render","selectionType","SelectionType","swatch","_renderSwatch","_renderDropdown","dropdownToggleName","attribute","getTelemetryAttributes","ref","selected","hidden","disabled","swatchItems","_objectSpread","dimensionType","getDimensionCombinations","memoize","allDimensions","productIdsToDimensions","dimension","dimensionValueWithInventory","_dimension$dimensionV","_dimensionValueWithIn","_productIdsToDimensio","_dimensionValueWithIn2","_dimensionValueWithIn3","_dimensionValueWithIn4","_dimensionValueWithIn5","getDimensionValuesFromQueryMemoized","getDimensionValuesFromQuery","URL","mapDimensionsInfo","productDimensions","matchedDimensions","enableStockCheck","inventoryLevel","getDropdownName","resources","dimensionsInfo","productDimensionFull","_ref","_productDimensionFull","DimensionValues","_value$DimensionValue","_value$DimensionValue2","_dimensionValuesWithI","_dimensionValue$Value","dimensionValue","inventoryLevelCode","getInventoryLevelCodeFromDimensionValue","colorHexCode","ColorHexCode","imageUrl","ImageUrl","InventoryLevelValues","outOfStock","swatchItemAriaLabel","dimensionInfo","currentDimensionsFromQuery","dimensionFromQuery","hasElements","currentDimensionFromQuery","selectedDimensionItem","dimensionItem","_currentDimensionFrom","toLocaleLowerCase","dimensionCombinations","otherDimensionsFromQuery","validDimensionValues","dc","od","_dc$od$DimensionTypeV","_dc$od$DimensionTypeV2","_od$DimensionValue$Va","_od$DimensionValue","dl","val","getBuyboxProductConfigure","callbacks","selectedDimensions","_props$data$product","_ref2","_props$data$productDi","typeName","errorState","configureErrors","data","result","productDimensionsData","hasProductDimensions","_getClassNamePrefix","getTelemetryObject","request","telemetryPageName","requestUrl","onChanged","possibleDimensions","_dc$notification$drop","notification","otherDimensions","isOtherDimensionsValid","pd","_pd$od$DimensionTypeV","_pd$od$DimensionTypeV2","_od$DimensionValue$Va2","_od$DimensionValue2","dimensionsSelected","nextDimensions","dimensionTypeValue","dimensionsSelectedAsync","dropdowns","dimensionId","Number","parseInt","format","selectDimensionFormatString","errorMessage","dimensionSelectionType","dropdown","convertProductDimensionTypeToDimensionTypes","dimensionsAsSwatchConfiguration","dimensionsAsSwatchType","includes","DimensionTypes","none","ContainerProps","LabelContainerProps","tag","htmlFor","errors","heading","select","dropdownCallback","mapProductDimensionFullToDropdownViewProps","modalCloseButtonReference","onClickFindInStoreHandler","_props$data","storeSelectorStateManager","cart","productAvailableQuantity","modules","quantity","dataProduct","multiplePickupStoreSwitchName","retailMulitplePickupMFeatureState","featureState","IsEnabled","missingDimensions","storeSelectorId","storeSelector","updateErrorState","errorHost","getConfigureErrors","openDialog","parentElementRef","deliveryOptions","onLocationSelected","orgUnitLocation","deliveryMode","_props$context","_props$data$productPr","_cart$cart$CartLines$","_cart$cart$CartLines","productsToAdd","push","count","behavior","addToCartBehavior","selectedWarranty","warrantyProduct","additionalProperties","bonusItemIds","productPromotions","FreeItemProductIds","bonusItems","getBonusItemsForAddToCart","warehouseParams","_context$request$chan","_context$request$chan2","ProductId","InventLocationId","InventoryLocationId","DataAreaId","channel","InventLocationDataAreaId","warehouseAvailability","actionContext","_warehouseAvailabilit","storeStock","ProductWarehouseInventoryAvailabilities","a","shoppingInfo","PhysicalAvailableInventoryLevelCode","isBonus","currentCartLinesCount","CartLines","addProductsToCart","status","substatus","productAvailability","changeModalOpen","ProductAvailableQuantity","shippingInventory","shipping","deliveryType","DeliveryMode","pickup","failureResult","failureReason","cartActionResult","otherError","getGenericError","_cart$cart$CartLines2","cartLines","_state$selectedWarran","productLine","updatedCartLinesObject","warrantyLine","WarrantableLineNumber","LineNumber","IsWarrantyLine","productLineId","productLineUpdated","getLineIdFromExtProps","idx","bonusCartLine","updateCartLines","sendGoogleAnalyticsEvent","navigationUrl","getUrlSync","AddToCartBehavior","goToCart","showModal","showNotification","_props$data$productPr2","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","friendlyName","dialogStrings","goToCartText","buyBoxGoToCartText","continueShoppingText","buyBoxContinueShoppingText","closeNotificationLabel","headerItemOneText","buyBoxSingleItemText","headerItemFormatText","buyBoxMultiLineItemFormatText","headerMessageText","buyBoxHeaderMessageText","freePriceText","priceFree","originalPriceText","currentPriceText","addedQuantityText","ItemSuccessfullyAddedToCartNotification","gridSettings","productPrice","NotificationsManager","instance","addNotification","findInStoreOnClick","PopupComponent","buyBoxProps","buyBoxState","modalOpen","bonusProducts","setBonusProducts","bonusProductIds","resp","productVariant","setProductVariant","price","priceComponent","PriceComponent","popupProps","imageSettings","productQuantity","setModalOpen","Popup","getBuyboxFindInStore","_data$product","_data$storeSelectorSt","_data$cart","_data$deliveryOptions","_data$productAvailabl","_data$featureState","_data$channelDelivery","_product$Dimensions","slots","unavailableForPickupText","availableForPickupText","PickupDeliveryModeCode","storeAvailabilities","openFindInStoreDialog","Heading","headingTag","text","channelDeliveryOptionConfig","_dimension$DimensionV","quantityError","isSectionDisabled","buttonText","isStockCheck","buyboxResources","isLoading","description","pickupInventory","findInStoreLinkText","findInStoreDescriptionText","isAggregatedInventory","_pickupInventory","IsProductAvailable","findInStoreNotAvailableTextButton","findInStoreNotAvailableDescription","getFindInStoreInventorySettings","DeliveryOptions","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","delivery","deliveryCode","Code","PickupDeliveryModeCodes","option","productPickupOptionList","BuyboxErrorBlock","showError","button","onClick","color","modal","showStrikethroughPricing","originalPrice","getOriginalPrice","CustomerContextualPrice","TradeAgreementPrice","BasePrice","renderCurrentPrice","initialPrice","formatCurrency","itemProp","cultureFormatter","renderCurrentPriceWithOriginalPrice","discountAmount","DiscountAmount","discountPrice","_attr$BooleanValue","attr","av","BooleanValue","seePriceInCartLabel","getBuyboxProductPrice","Price","Buybox","dimensionUpdateQueue","FinitePromiseQueue","buyboxCallbacks","updateQuantity","newQuantity","newErrorState","updateSelectedProduct","newSelectedProduct","newInventory","newPrice","newDeliveryOptions","productDeliveryOptions","_updatePrice","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","selecedDimensions","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","_getDropdownName","isModalOpen","changeUpdatingDimension","isUpdatingDimension","changeUpdatingDeliveryOptions","isUpdatingDeliveryOptions","updateKeyInPrice","customPrice","customAmountError","isPriceKeyedIn","keyInPriceAmount","setSelectedWarranty","warranty","mountCategories","packSizeCategories","_onBulkPurchaseLinkClick","bulkPurchaseModule","boundingRect","getBoundingClientRect","scrollTo","left","top","dimensionsToUpdate","clearErrorState","previousState","_getProductVariant","productVariantPromise","promises","_getDimensionsForSelectedVariant","mappedDimensions","_hydrateInventoryInfo","_hydratePrice","_hydrateDeliveryOptions","_updateQuantitiesInState","_updateAvailableForPickup","_updatePromotions","_updateWarranties","_updateSelectedProduct","_mediaLocations","all","_this$props$data$prod","_this$props$data$prod2","isGiftCard","IsGiftCard","leafCategories","productDimensionTypeColor","productDimensionTypeConfiguration","leafCategory","productDimensionTypeMount","productDimensionTypeSize","productDimensionTypePackSize","productDimensionTypeAmount","productDimensionTypeStyle","min","max","applicableWarranties","mediaLocations","c","dimensionUpdated","autoSelectValue","dvi","_productDimensionFull2","dv","ItemTypeValue","ReleasedProductType","Service","isServiceItem","maxRecentlyViewedItemsCount","RecentlyViewedState","_this$props$data$allD","_product$Behavior","_this$state$productPr","mediaGallery","productComparisonButton","flatten","validValues","hasAvailableProducts","some","hasSerialNumber","Behavior","HasSerialNumber","viewProps","ModuleProps","moduleProps","ProductInfoContainerProps","MediaGalleryContainerProps","getBuyboxProductTitle","getBuyboxProductDescription","bulkPurchaseLink","_renderBuyboxBulkPurchaseLink","unitOfMeasure","getBuyboxProductUnitOfMeasure","configure","findInStore","addToCart","getBuyboxAddToCart","getBuyboxProductComparisonButton","addToOrderTemplate","getBuyboxProductAddToOrderTemplate","addToWishlist","getBuyboxProductAddToWishlist","rating","hideRating","getBuyboxProductRating","getBuyboxProductQuantity","inventoryLabel","getBuyBoxInventoryLabel","shopSimilarLook","enableShopSimilarLooks","getBuyboxShopSimilarButton","ShopSimiliarButtonType","Looks","shopSimilarDescription","enableShopSimilarDescription","Description","keyInPrice","enableKeyInPrice","isCustomPriceSelected","getBuyboxKeyInPrice","quantityLimitsMessages","getQuantityLimitsMessages","catalogs","_validateCatalogDetails","renderView","isBulkPurchaseEnabled","msdyn365Commerce","isBrowser","bulkPurchaseModules","Array","from","document","getElementsByClassName","BulkPurchase","Button","bulkPurchaseLinkText","arguments","_dimensions$find$Dime","_dimensions$find","setDimensionValuesToQuery","selectedProductPromise","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","_productVariant$Dimen","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","newShippingQuantity","getPriceForSelectedVariant","PriceForSelectedVariantInput","_this$props$data$feat","retailMultiplePickupFeatureState","getDeliveryOptionsForSelectedVariant","GetDeliveryOptionsForSelectedVariantInput","_product$Behavior2","_product$Behavior3","_product$Behavior4","_product$Behavior5","_isOrderQuantityLimitsFeatureEnabled","MinimumQuantity","MaximumQuantity","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","_this$props$context","_featureStatuses$find","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","featureStatuses","RetailDefaultOrderQuantityLimitsFeatureName","customerInfo","customerInformation","information","IsB2b","_this$props$data$cata","_this$state$productVa","searchCriteria","createInventoryAvailabilitySearchCriteria","productInventoryInformation","mapProductInventoryInformation","productWarehouseInformation","productVariantData","_a$ProductAvailableQu","AvailableQuantity","_productVariant$Dimen2","promotions","getProductPromotionsAction","GetProductPromotionsInput","productPromotionsChangeEvent","CustomEvent","detail","dispatchEvent","_productVariant$Dimen3","getApplicableWarrantiesAction","getApplicableWarrantiesInput","_applicableWarranties","Boolean","Warranties","aw","AuthorizedDealerBadge","brand","_product$ExtensionPro","brandFromExt","locale","fileName","toUpperCase","categoryImageUrl","ImageData","src","Msdyn365","altText","loadFailureBehavior","ProductCode","mfrCode","ItemId","webCodeLabel","String","fromCharCode","mfrCodeLabel","ProductBadge","badgeValue","useMemo","_badgeAttr$TextValue","badgeAttr","TextValue","badgeUrl","buildProductBadgeUrl","baseImageUrl","badgeName","alt","Promotions","importantPromos","_promotions$filter","IsImportant","o","_o$OfferId","OfferId","href","WarrantyOptionButton","_warranty$DurationUni","_warranty$Duration","coreContext","unit","DurationUnitValue","duration","Duration","label","formatedPrice","AdjustedPrice","active","type","WarrantySection","warrantyGroups","logo","warranties","Image","bypassHideOnFailure","_w$ItemId","ShopUsed","_resources$shopUsedTe","usedProductUrl","setUsedProductUrl","useState","recId","values","useEffect","shopUsedText","FloatingSummary","_product$result","isInViewport","image","fallbackImageUrl","getFallbackImageUrl","fallBackSrc","_renderAddToCart","errorBlock","Node","SubscriptionConfirmationModal","closeModal","Modal","isOpen","onClosed","toggle","ModalHeader","ModalBody","BackInStockSubscriptionModal","_context$requestConte","isUpdating","setIsUpdating","isSubmitted","setIsSubmitted","email","setEmail","user","emailAddress","subscribeToNewsletter","setSubscribeToNewsletter","errMsg","setErrMsg","placeholder","evt","currentTarget","handleSubscription","test","publicKey","heiKlaviyoPublicKey","_context$requestConte2","_product$ProductNumbe","endpoint","apiRev","heiKlaviyoApiRevision","axios","attributes","channels","profile","customerAccountNumber","relationships","variant","encodeKlaviyoItemId","ProductNumber","headers","revision","err","subscribeToList","checked","KlaviyoBackInStockSubscription","_productAvailableQuan","_productAvailableQuan2","backInStockModalOpen","setBackInStockModalOpen","btnRef","StockLevelCode","UncontrolledTooltip","trigger","v","PriceDropSubscriptionModal","handleSubmit","_window","_product$ProductNumbe2","_productPrice$Custome","encodedSku","klaviyo","identify","ProductName","ProductID","SKU","properties","metric","name","meta","patch_properties","append","price_drop_ids","KlaviyoPriceDropSubscription","_renderAddToWishlist","_renderConfigure","_renderConfigureDropdown","_renderFindInStore","_renderQuantity","_renderAvailability","_props$state$productV","_extensionProperties$","extensionProperties","availDate","_ep$Value","expectedAvailabilityLabel","categoryPaths","helpLogo","_productPromotions$Pr","targetRef","useIsInViewport","gaPayload","_productVariantData$D","_productVariantData$E","_categoryPaths$result","_categoryPaths$result2","_productVariantData$D2","_productPrice$Discoun","_productVariantData$P","_productVariantData$N","_productPrice$BasePri","_productVariantData$I","paths","discount","ecommerce","currency","CurrencyCode","items","item_id","item_name","item_brand","item_variant","item_category","item_category2","item_category3","item_category4","item_category5","pid","index","useGoogleAnalytics","Module","MediaGalleryOverlay","Bazzarvoice","widgetType","rating_summary","actionBlocks","b","JsonLinkingData","productInfo","listId","_context$app$config$h","_context$app$config$h2","heiKlaviyoDefaultList","binding","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","require","$type","da","path","runOn","iNM","ns","n","pdp","md","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}