{"version":3,"file":"static/js/ce3d16c60512c67e48c0.bundle.js","mappings":"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","sources":["webpack://jansen-adventureworks/./src/actions/get-product-availabilities-for-selected-variant-copy.action.ts?e41c","webpack://jansen-adventureworks/./src/themes/jansen-adventureworks/views/components/buybox-add-to-order-template.tsx?f583","webpack://jansen-adventureworks/./src/themes/jansen-adventureworks/views/buybox.view.tsx?292d","webpack://jansen-adventureworks/./src/themes/jansen-adventureworks/views/components/IncrementalQuantity.tsx?9858","webpack://jansen-adventureworks/./lib/buybox/module-registration.js?bcce","webpack://jansen-adventureworks/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://jansen-adventureworks/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://jansen-adventureworks/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://jansen-adventureworks/./src/modules/adventureworks/views/components/buybox-add-to-order-template.tsx?ceb4","webpack://jansen-adventureworks/./src/modules/adventureworks/views/buybox.view.tsx?98cf","webpack://jansen-adventureworks/external var \"React\"?0d3b","webpack://jansen-adventureworks/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\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 ArrayExtensions,\r\n createInventoryAvailabilitySearchCriteria,\r\n DeliveryMode,\r\n getSelectedProductIdFromActionInput,\r\n getSelectedVariant,\r\n IProductInventoryInformation,\r\n mapAggregatedProductInventoryInformation,\r\n SelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\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 {\r\n ProductAvailableQuantity,\r\n ProductsDataActions,\r\n ProductType,\r\n ProductWarehouseInventoryAvailability,\r\n ReleasedProductType,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport enum Availability {\r\n outOfStock = 'Out of stock',\r\n available = 'Available',\r\n outOfStockClass = 'out-of-stock',\r\n availableClass = 'available',\r\n loading = 'loading',\r\n loadingClass = 'loading'\r\n}\r\n\r\n/**\r\n * Input class for the getProductAvailabilitiesForSelectedVariant Data Action.\r\n */\r\nexport class ProductAvailabilitiesForSelectedVariantInput implements IActionInput {\r\n public productId: number;\r\n\r\n public channelId: number;\r\n\r\n public selectedProduct: SimpleProduct | undefined;\r\n\r\n public constructor(productId: number | string, channelId: number, selectedProduct?: SimpleProduct) {\r\n this.productId = typeof productId === 'string' ? +productId : productId;\r\n this.channelId = channelId;\r\n this.selectedProduct = selectedProduct;\r\n }\r\n\r\n /**\r\n * GetCacheKey.\r\n * @returns - Returns string.\r\n */\r\n public getCacheKey = (): string => 'ProductAvailabilitiesForSelectedVariant';\r\n\r\n /**\r\n * GetCacheObjectType.\r\n * @returns - Cache Object Type string.\r\n */\r\n public getCacheObjectType = (): string => 'ProductAvailabilities';\r\n\r\n /**\r\n * DataCacheType.\r\n * @returns - CacheType string.\r\n */\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the getProductAvailabilitiesForSelectedVariant data action.\r\n * @param inputData - The input data passed to the createInput method.\r\n * @returns - ProductAvailabilitiesForSelectedVariant or error.\r\n */\r\nexport const createProductAvailabilitiesForSelectedVariantInput = (\r\n inputData: ICreateActionContext>\r\n): ProductAvailabilitiesForSelectedVariantInput => {\r\n const productId = getSelectedProductIdFromActionInput(inputData);\r\n\r\n if (productId) {\r\n return new ProductAvailabilitiesForSelectedVariantInput(+productId, +inputData.requestContext.apiSettings.channelId);\r\n }\r\n throw new Error('Unable to create ProductAvailabilitiesForSelectedVariantInput, no productId found on module config or query');\r\n};\r\n\r\n/**\r\n * The action method for the getProductAvailabilitiesForSelectedVariant data action.\r\n * @param input - ProductAvailabilitiesForSelectedVariant.\r\n * @param ctx - Action Context.\r\n * @returns - Product inventory information.\r\n */\r\nexport async function getProductAvailabilitiesForSelectedVariantAction(\r\n input: ProductAvailabilitiesForSelectedVariantInput,\r\n ctx: IActionContext\r\n): Promise {\r\n const productInventoryInformation: IProductInventoryInformation[] = [];\r\n try {\r\n let productResult: SimpleProduct | null = input.selectedProduct ?? null;\r\n\r\n if (!productResult) {\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 productResult = await getSelectedVariant(selectedVariantInput, ctx);\r\n }\r\n\r\n // Don't get availability if it is service item && enableStockCheck is disbaled.\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Reading config.\r\n if (\r\n ctx.requestContext.app.config.enableStockCheck &&\r\n productResult &&\r\n productResult.ItemTypeValue !== ReleasedProductType.Service &&\r\n productResult.ProductTypeValue !== ProductType.Master\r\n ) {\r\n const shippingSearchCriteria = createInventoryAvailabilitySearchCriteria(\r\n ctx,\r\n [productResult.RecordId],\r\n true,\r\n undefined,\r\n undefined,\r\n DeliveryMode.shipping\r\n );\r\n const pickupSearchCriteria = createInventoryAvailabilitySearchCriteria(\r\n ctx,\r\n [input.productId],\r\n false,\r\n true,\r\n undefined,\r\n DeliveryMode.pickup\r\n );\r\n const shippingAvailability = await ProductsDataActions.getEstimatedAvailabilityAsync(\r\n { callerContext: ctx },\r\n shippingSearchCriteria\r\n );\r\n if (shippingAvailability.ProductWarehouseInventoryAvailabilities) {\r\n const shippingInventory = mapAggregatedProductInventoryInformation(ctx, shippingAvailability);\r\n if (ArrayExtensions.hasElements(shippingInventory)) {\r\n shippingInventory[0].deliveryType = DeliveryMode.shipping;\r\n productInventoryInformation.push(shippingInventory[0]);\r\n }\r\n }\r\n const pickupAvailability = await ProductsDataActions.getEstimatedAvailabilityAsync(\r\n { callerContext: ctx },\r\n pickupSearchCriteria\r\n );\r\n if (pickupAvailability.ProductWarehouseInventoryAvailabilities) {\r\n const pickupInventory = mapAggregatedProductInventoryInformation(ctx, pickupAvailability);\r\n if (ArrayExtensions.hasElements(pickupInventory)) {\r\n pickupInventory[0].deliveryType = DeliveryMode.pickup;\r\n productInventoryInformation.push(pickupInventory[0]);\r\n }\r\n }\r\n return productInventoryInformation;\r\n } else if (\r\n productResult &&\r\n productResult.ItemTypeValue !== ReleasedProductType.Service &&\r\n productResult.ProductTypeValue !== ProductType.Master\r\n ) {\r\n const shippingSearchCriteria = createInventoryAvailabilitySearchCriteria(\r\n ctx,\r\n [productResult.RecordId],\r\n true,\r\n undefined,\r\n undefined,\r\n DeliveryMode.shipping\r\n );\r\n const shippingAvailability = await ProductsDataActions.getEstimatedAvailabilityAsync(\r\n { callerContext: ctx },\r\n shippingSearchCriteria\r\n );\r\n if (\r\n shippingAvailability.ProductWarehouseInventoryAvailabilities &&\r\n shippingAvailability.AggregatedProductInventoryAvailabilities\r\n ) {\r\n return shippingAvailability.AggregatedProductInventoryAvailabilities[0];\r\n }\r\n }\r\n return undefined;\r\n } catch (error) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- cann't assign type to the error variable.\r\n // ctx.telemetry.exception(error);\r\n ctx.telemetry.debug('[getPriceForSelectedVariantAction]Error executing action');\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * The function that maps a ProductWareHouse object into a ProductAvailabilityQuantity.\r\n * @param productsWarehouseInventory - Product warehouse inventory.\r\n * @returns Product Available quantity.\r\n */\r\nexport function mergeProductWarehouseToProductAvailabities(\r\n productsWarehouseInventory: ProductWarehouseInventoryAvailability[]\r\n): ProductAvailableQuantity[] {\r\n const productAvailable: ProductAvailableQuantity[] = [];\r\n if (ArrayExtensions.hasElements(productsWarehouseInventory)) {\r\n for (const product of productsWarehouseInventory) {\r\n if (product.TotalAvailable !== undefined && product.ProductId !== undefined) {\r\n productAvailable.push({ ProductId: product.ProductId, AvailableQuantity: product.TotalAvailable });\r\n }\r\n }\r\n }\r\n return productAvailable;\r\n}\r\n\r\n/**\r\n * The complete getProductAvailabilitiesForSelectedVariant data action\r\n * Get the currently selected variant via the getSelectedVariant data action, and\r\n * then gets the availabilities for the variant via the getProductAvailabilities RetailServer API.\r\n */\r\nexport const getProductAvailabilitiesForSelectedVariantActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-product-availabilities-for-selected-variant',\r\n action: >getProductAvailabilitiesForSelectedVariantAction,\r\n input: createProductAvailabilitiesForSelectedVariantInput\r\n});\r\n\r\nexport default getProductAvailabilitiesForSelectedVariantActionDataAction;\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 AddToOrderTemplateComponent,\r\n IAddToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateActionErrorResult,\r\n IOrderTemplateNameDialogResources\r\n} from '@msdyn365-commerce/components';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getConfigureErrors,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxData,\r\n IBuyboxState,\r\n IBuyboxViewProps\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport * as React from 'react';\r\n\r\nimport { IBuyboxProps as IBuyboxExtentionProps } from '../../definition-extensions/buybox.ext.props.autogenerated';\r\n\r\n/**\r\n * To generate AddToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of AddToOrderTemplateDialog resources..\r\n */\r\nfunction generateAddToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText\r\n };\r\n}\r\n\r\n/**\r\n * To generate OrderTemplateNameDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of OrderTemplateNameDialog resources..\r\n */\r\nfunction generateOrderTemplateNameDialogResources(resources: IBuyboxCommonResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n}\r\n\r\n/**\r\n * To generate ItemAddedToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of ItemAddedToOrderTemplateDialog resources..\r\n */\r\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n}\r\n\r\n/**\r\n * To generate DuplicateItemsWhenAddingToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of DuplicateItemsWhenAddingToOrderTemplateDialog resources..\r\n */\r\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources: IBuyboxCommonResources\r\n): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\r\n };\r\n}\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToOrderTemplateFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\r\n result: IOrderTemplateActionErrorResult\r\n) => {\r\n callbacks.updateErrorState({\r\n errorHost: 'ORDER_TEMPLATE',\r\n configureErrors:\r\n result.status === 'MISSING_DIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToOrderTemplateButton.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns JSX element.\r\n */\r\nexport const renderAddToOrderTemplateButton = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n product: SimpleProduct\r\n): React.ReactNode => {\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\r\n id,\r\n typeName,\r\n context,\r\n data: {\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n resources,\r\n config\r\n } = props;\r\n\r\n const { quantity } = state;\r\n\r\n const isShowButtonText = true;\r\n const isMultipleCatalogsFeatureEnabled = props.isChannelMultipleCatalogsFeatureEnabled || false;\r\n return (\r\n orderTemplates && (\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 { AsyncResult, format, ItemAvailability, ProductBehavior } from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxData,\r\n IBuyboxFindInStoreViewProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxResources as IBuyboxExtentionResources,\r\n IBuyboxState,\r\n IBuyboxViewProps\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport {\r\n ArrayExtensions,\r\n getFullAvailableInventoryNearby,\r\n GetFullAvailableInventoryNearbyInput,\r\n getProductAvailabilitiesForSelectedVariant,\r\n IFullOrgUnitAvailability,\r\n ProductAvailabilitiesForSelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport IncrementalQuantity from './components/IncrementalQuantity';\r\nimport { reaction } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { IBuyboxProps as IBuyboxExtentionProps, IBuyboxProps } from '../definition-extensions/buybox.ext.props.autogenerated';\r\nimport { renderAddToOrderTemplateButton } from './components/buybox-add-to-order-template';\r\nimport { Availability } from '../../../actions/get-product-availabilities-for-selected-variant-copy.action';\r\n\r\n/**\r\n * BuyBoxConstants enum.\r\n */\r\nexport enum BuyBoxConstants {\r\n zero = 0\r\n}\r\n\r\n/**\r\n * On Change function.\r\n * @param callbacks -Callbacks.\r\n * @returns Update quantity.\r\n */\r\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\r\n if (callbacks.updateQuantity) {\r\n return callbacks.updateQuantity(newValue);\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * RenderQuantity.\r\n * @param quantityComponent - QuantityComponent.\r\n * @param callbacks - Callbacks.\r\n * @param props - Props.\r\n * @param state - State.\r\n * @param extentionResources - ExtentionResources.\r\n * @param quantityLimitsMessages - QuantityLimitsMessages.\r\n * @param max - Max.\r\n * @param telemetryContent - TelemetryContent.\r\n * @param unitOfMeasure - Unit Of Measure.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuantity = (\r\n quantityComponent: IBuyboxProductQuantityViewProps,\r\n callbacks: IBuyboxCallbacks,\r\n props: IBuyboxProps,\r\n state: IBuyboxState,\r\n extentionResources: IBuyboxExtentionResources,\r\n quantityLimitsMessages: React.ReactNode,\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n min: number | undefined,\r\n max: number | undefined,\r\n applyDefaultOrderSettings?: boolean,\r\n telemetryContent?: ITelemetryContent,\r\n unitOfMeasure?: React.ReactNode,\r\n productBehavior?: ProductBehavior\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, LabelContainerProps, heading } = quantityComponent;\r\n\r\n const { resources } = props;\r\n\r\n const { quantity } = state;\r\n\r\n return (\r\n \r\n {heading}\r\n\r\n \r\n\r\n {unitOfMeasure}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render key in price function.\r\n * @param keyInPrice - KeyInPrice.\r\n * @returns -- Returns.\r\n */\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\n/**\r\n * RenderAddToCart.\r\n * @param addToCart - AddToCart.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\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/**\r\n * RenderFindInStore.\r\n * @param findInStore - FindInStore.\r\n * @returns -- Returns.\r\n */\r\nconst renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\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\n/**\r\n * RenderAddToOrderTemplate.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToOrderTemplate = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): JSX.Element | null => {\r\n const product = props.data.product.result;\r\n if (!props.addToOrderTemplate || !product) {\r\n return null;\r\n }\r\n\r\n const orderTemplateButton = renderAddToOrderTemplateButton(props, state, callbacks, product);\r\n\r\n return (\r\n \r\n {props.addToOrderTemplate.errorBlock}\r\n {orderTemplateButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderSocialShare.\r\n * @param socialShare - Social share react node array.\r\n * @returns -- Returns.\r\n */\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\n/**\r\n * RenderTextBlocks.\r\n * @param textBlocks - Social share react node array.\r\n * @returns -- Returns.\r\n */\r\nconst _renderTextBlocks = (textBlocks: React.ReactNode[]): JSX.Element | undefined => {\r\n if (!textBlocks || textBlocks.length === 0) {\r\n return undefined;\r\n }\r\n\r\n return <>{textBlocks[0]};\r\n};\r\n\r\n/**\r\n * RenderConfigureDropdown.\r\n * @param dropdown - Buybox product configure dropdown view props.\r\n * @returns -- Returns JSX.Element.\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 {heading}\r\n {select}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigure.\r\n * @param configure - Buybox product configure view props.\r\n * @returns -- Returns JSX.Element.\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/**\r\n * BuyboxView.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst BuyboxView: React.FC> = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const {\r\n ModuleProps,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n MediaGalleryContainerProps,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n ProductInfoContainerProps,\r\n addToCart,\r\n addToOrderTemplate,\r\n productComparisonButton,\r\n configure,\r\n description,\r\n findInStore,\r\n quantity,\r\n price,\r\n title,\r\n rating,\r\n inventoryLabel,\r\n keyInPrice,\r\n min,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n max,\r\n applyDefaultOrderSettings,\r\n unitOfMeasure,\r\n callbacks,\r\n state,\r\n resources,\r\n quantityLimitsMessages,\r\n telemetryContent,\r\n app: { config: appConfig },\r\n catalogs\r\n } = props;\r\n let skuText: string = props.resources.skuText;\r\n skuText += props.data.product.result?.ItemId;\r\n const preferredStoreInfo: IStoreInfo | undefined = props.data.storeSelectorStateManager.result?.preferredStore;\r\n const preferredStoreId = preferredStoreInfo?.StoreId ? preferredStoreInfo.StoreId : '';\r\n const preferredStoreName = preferredStoreInfo?.StoreName ? preferredStoreInfo.StoreName : '';\r\n const product = props.data.product.result;\r\n const productBehavior = product?.Behavior;\r\n\r\n const [availability, setAvailability] = React.useState('');\r\n const [isLoadingAvailability, setIsLoadingAvailability] = React.useState(true);\r\n const [totalAvailability, setTotalAvailability] = React.useState('');\r\n const [isStoreChange, setIsStoreChange] = React.useState(false);\r\n\r\n /**\r\n * GetStockInventoryLabel.\r\n * @param availabilityWithHours - Stock availability with hours.\r\n * @returns -- Returns.\r\n */\r\n const getStockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\r\n for (const productInventoryInformation of availabilityWithHours.ProductInventoryInformation) {\r\n if (\r\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\r\n productInventoryInformation.InventLocationId\r\n ) {\r\n return productInventoryInformation.StockLevelLabel;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const getInventory = React.useCallback(async () => {\r\n const input = new GetFullAvailableInventoryNearbyInput(\r\n props.data.product.result?.RecordId,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n true\r\n );\r\n\r\n /**\r\n * IsProductInStock.\r\n * @param itemAvailabilities - Item availability array.\r\n * @returns -- Returns.\r\n */\r\n const isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\r\n if (!appConfig.enableStockCheck) {\r\n return true;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\r\n return itemAvailabilities[BuyBoxConstants.zero].AvailableQuantity! > BuyBoxConstants.zero;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n await getFullAvailableInventoryNearby(input, props.context.actionContext).then(response => {\r\n if (response && ArrayExtensions.hasElements(response)) {\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\r\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreId;\r\n const filteredFullOrgUnitAvailability = response.filter(isPreferredStore);\r\n const preferredStoreAvailability = ArrayExtensions.hasElements(filteredFullOrgUnitAvailability)\r\n ? filteredFullOrgUnitAvailability[BuyBoxConstants.zero]\r\n : undefined;\r\n const stockStatusLabel: string | undefined = getStockInventoryLabel(preferredStoreAvailability);\r\n const isInStock = isProductInStock(preferredStoreAvailability?.OrgUnitAvailability?.ItemAvailabilities);\r\n const resourceLabel = isInStock ? props.resources.inStockText : props.resources.outOfStockText;\r\n const stockText: string | undefined = stockStatusLabel ? stockStatusLabel : resourceLabel;\r\n const preferredStoreAvailabilityText = `${format(\r\n props.resources.availabilityAtPreferredStoreText,\r\n preferredStoreName\r\n )} ${stockText}`;\r\n setAvailability(preferredStoreAvailabilityText);\r\n }\r\n });\r\n\r\n setIsStoreChange(false);\r\n }, [\r\n props.data.product.result?.RecordId,\r\n appConfig.enableStockCheck,\r\n preferredStoreId,\r\n preferredStoreName,\r\n props.context.actionContext,\r\n props.resources.availabilityAtPreferredStoreText,\r\n props.resources.inStockText,\r\n props.resources.outOfStockText,\r\n props.telemetry\r\n ]);\r\n\r\n const newAvailableQuantity = async (product: any, context: any): Promise | null> => {\r\n try {\r\n const availability = await getProductAvailabilitiesForSelectedVariant(\r\n new ProductAvailabilitiesForSelectedVariantInput(\r\n Number(product.ProductNumber),\r\n Number(context.actionContext.requestContext.channel.RecordId),\r\n product\r\n ),\r\n context.actionContext\r\n );\r\n return availability;\r\n } catch (error) {\r\n return null;\r\n }\r\n };\r\n\r\n React.useEffect(() => {\r\n const minQuantity = productBehavior?.MinimumQuantity ?? 0;\r\n const multipleOfQuantity = productBehavior?.MultipleOfQuantity ?? 0;\r\n const quantityToSet = minQuantity > 0 ? minQuantity : multipleOfQuantity > 0 ? multipleOfQuantity : 1;\r\n callbacks.updateQuantity(Number(quantityToSet));\r\n\r\n const fetchAvailabilities = async () => {\r\n if (product) {\r\n const availability = await newAvailableQuantity(product, props.context);\r\n setTotalAvailability(availability?.TotalAvailableInventoryLevelLabel);\r\n setIsLoadingAvailability(false);\r\n }\r\n };\r\n\r\n fetchAvailabilities();\r\n\r\n getInventory().catch((error: Error) => {\r\n props.telemetry.error(error.message);\r\n });\r\n }, [getInventory, isStoreChange, props.telemetry, props.config.displayStockAvailability, props.data.product]);\r\n\r\n reaction(\r\n () => props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n () => {\r\n setIsStoreChange(true);\r\n }\r\n );\r\n\r\n /**\r\n * RenderAvailabiltyAtPreferredStore.\r\n * @returns -- Returns.\r\n */\r\n const renderAvailabilityAtPreferredStore = (): JSX.Element | undefined => {\r\n const hasProductDimensions = ArrayExtensions.hasElements(props.data.product.result?.Dimensions);\r\n if (hasProductDimensions && props.data.product.result?.MasterProductId === undefined) {\r\n return undefined;\r\n }\r\n const containerProps: INodeProps = {\r\n className: 'ms-buybox__preferred-store-availability',\r\n tag: 'span'\r\n };\r\n\r\n return {availability};\r\n };\r\n\r\n const renderAvailability = (): JSX.Element | undefined => {\r\n const { product } = props.data;\r\n const hasProductDimensions = ArrayExtensions.hasElements(product.result?.Dimensions);\r\n\r\n if (hasProductDimensions && !product.result?.MasterProductId) {\r\n return undefined;\r\n }\r\n\r\n const isAvailable = totalAvailability === Availability.available;\r\n const indicator = isAvailable ? Availability.availableClass : Availability.outOfStockClass;\r\n const availabilityLabel = isAvailable\r\n ? props.resources.availabilityIndicatorAvailable\r\n : props.resources.availabilityIndicatorOutOfStock;\r\n\r\n const containerProps: INodeProps = {\r\n className: `ms-buybox__availability ms-buybox__availability-${indicator}`,\r\n tag: 'span',\r\n title: availabilityLabel\r\n };\r\n\r\n return ;\r\n };\r\n\r\n return (\r\n \r\n {props.mediaGallery}\r\n \r\n {catalogs && catalogs[0].Name}\r\n {title}\r\n \r\n
{skuText}
\r\n {!isLoadingAvailability && renderAvailability()}\r\n {rating}\r\n
\r\n \r\n
{props.resources.priceText}
\r\n {price}\r\n
\r\n {configure && renderConfigure(configure)}\r\n {keyInPrice && renderKeyInPrice(keyInPrice)}\r\n \r\n
\r\n {quantity &&\r\n renderQuantity(\r\n quantity,\r\n callbacks,\r\n props,\r\n state,\r\n resources,\r\n quantityLimitsMessages,\r\n min,\r\n max,\r\n applyDefaultOrderSettings,\r\n telemetryContent,\r\n unitOfMeasure,\r\n productBehavior\r\n )}\r\n {props.bulkPurchaseLink}\r\n
\r\n
\r\n {props.config.displayStockAvailability && preferredStoreId && renderAvailabilityAtPreferredStore()}\r\n {inventoryLabel}\r\n {renderAddToCart(addToCart)}\r\n {findInStore && renderFindInStore(findInStore)}\r\n {productComparisonButton}\r\n {addToOrderTemplate && renderAddToOrderTemplate(props, state, callbacks)}\r\n {findInStore?.productPickupOptionList ? (\r\n
{findInStore.productPickupOptionList}
\r\n ) : null}\r\n {_renderSocialShare(props.slots && props.slots.socialShare)}\r\n {_renderTextBlocks(props.slots && props.slots.textBlocks)}\r\n \r\n
{props.resources.descriptionText}
\r\n {description}\r\n
\r\n {ArrayExtensions.hasElements(props.slots.productSpecification) ? (\r\n {props.slots.productSpecification[0]}\r\n ) : null}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default BuyboxView;\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 { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { debounce } from 'lodash';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\r\nimport { IDictionary } from '@msdyn365-commerce/core';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ProductBehavior } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport enum VariantType {\r\n Browser,\r\n Viewport\r\n}\r\n\r\n/**\r\n * Returns the payload Object.\r\n * @param {string} contentCategory - Content Category.\r\n * @param {IModule} props - Module props.\r\n * @param {string} moduleName - Module Name.\r\n * @param eventType\r\n * @param telemetryContent\r\n * @param {string} etext - Etext Name.\r\n * @param {string} recid - Recid Name.\r\n */\r\nexport function getPayloadObject(eventType: string, telemetryContent: ITelemetryContent, etext: string, recid?: string): IPayLoad {\r\n const pageName = telemetryContent && telemetryContent.pageName ? telemetryContent.pageName : '';\r\n const moduleName = telemetryContent && telemetryContent.moduleName ? telemetryContent.moduleName : '';\r\n const payload: IPayLoad = {\r\n contentCategory: eventType,\r\n contentAction: {\r\n pgname: pageName,\r\n mname: moduleName,\r\n etext,\r\n recid,\r\n etype: eventType\r\n }\r\n };\r\n return payload;\r\n}\r\n\r\nexport interface IMobileProps {\r\n variant?: VariantType;\r\n context?: IRequestContext;\r\n}\r\n\r\nexport const isMobile = (props: IMobileProps) => {\r\n const { variant, context } = props;\r\n switch (variant) {\r\n case VariantType.Browser:\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context?.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'lg';\r\n case VariantType.Viewport:\r\n const viewport = context?.device?.Type === 'Mobile' ? 'xs' : 'lg';\r\n return viewport;\r\n default:\r\n return 'lg';\r\n }\r\n};\r\n\r\n/**\r\n * Returns the telemetry Attributes.\r\n * @param {IModule} props - Module Props.\r\n * @param telemetryContent\r\n * @param {IPayLoad} payLoad - Pay Load.\r\n */\r\nexport function getTelemetryAttributes(telemetryContent: ITelemetryContent, payLoad: IPayLoad): IDictionary | undefined {\r\n const contentData = payLoad.contentAction.recid ? payLoad.contentAction.recid : payLoad.contentAction.etext;\r\n const attributes: IDictionary | undefined =\r\n telemetryContent &&\r\n telemetryContent.telemetry &&\r\n telemetryContent.telemetry.setTelemetryAttribute &&\r\n telemetryContent.telemetry.setTelemetryAttribute(contentData!, payLoad.contentAction);\r\n return attributes;\r\n}\r\n\r\nexport interface IContentAction {\r\n pgname: string;\r\n mname: string;\r\n etext?: string;\r\n recid?: string;\r\n etype?: string;\r\n}\r\n\r\nexport interface IPayLoad {\r\n contentCategory: string;\r\n contentAction: IContentAction;\r\n}\r\n\r\nexport enum TelemetryConstant {\r\n ShopSimliarLooks = 'shop similar looks',\r\n ShopSimliarDescription = 'shop similar description',\r\n PickupInStore = 'pick up in store',\r\n PreferredStore = 'set as preferred store',\r\n RemovePreferredStore = 'remove preferred store',\r\n IncrementQuantity = 'Increment quantity',\r\n DecrementQuantity = 'Decrement quantity',\r\n Checkout = 'Checkout',\r\n GuestCheckout = 'Guest checkout',\r\n BackToShopping = 'Back to shopping',\r\n ApplyPromoCode = 'Apply promo code',\r\n ViewMore = 'View more',\r\n OrderDetails = 'Order details',\r\n AvailablePoints = 'Available points',\r\n ExpiringPoints = 'Expiring points',\r\n AddUser = 'Add user',\r\n BuyItAgain = 'Buy it again',\r\n ContactNumber = 'ContactNumber',\r\n CheckoutChange = 'Change',\r\n Save = 'Save',\r\n SaveContinue = 'Save and Continue',\r\n Cancel = 'Cancel',\r\n DeliveryOptions = 'Delivery options',\r\n CheckoutTermsAndConditions = 'Checkout terms and conditions',\r\n ExpandAll = 'Expand all',\r\n CollapseAll = 'Collapse all',\r\n Expand = 'Expand',\r\n Collapse = 'Collapse',\r\n SignIn = 'Sign in',\r\n SignUp = 'Sign up',\r\n SignOut = 'Sign out',\r\n SwitchCustomer = 'Switch Customer',\r\n LoyaltyDetailLink = 'Loyalty detail ink',\r\n LoyaltyTermsLink = 'Loyalty terms link',\r\n LoyaltyTermsCancel = 'Loyalty terms cancel',\r\n LoyaltyTermsSubmit = 'Loyalty terms submit',\r\n LoyaltyTermsAgree = 'Loyalty terms agree',\r\n RemoveCartItem = 'Remove cart item',\r\n EditCart = 'Edit cart',\r\n BackToTop = 'Back to top',\r\n Logo = 'Logo',\r\n NavIcon = 'Navigation icon',\r\n ViewBagAndCheckout = 'View bag and checkout',\r\n ContinueShopping = 'Continue shopping',\r\n AddOrderTemplateToCart = 'Add order template to cart',\r\n PromoBannerClose = 'Close promo banner',\r\n WriteReview = 'Write Review',\r\n Next = 'Next',\r\n Previous = 'Previous',\r\n SubmitReview = 'Submit review',\r\n SuccessButton = 'Success',\r\n SearchStore = 'Search store',\r\n ShowAllStore = 'Show all store',\r\n ToggleMapView = 'Toggle map view',\r\n PrivacyPolicy = 'Privacy policy',\r\n ViewShoppingBag = 'View shopping bag',\r\n MyProfile = 'My profile',\r\n seeDetails = 'See Details',\r\n CurrentDistributor = 'Set as current distributor',\r\n ViewMode = 'View mode',\r\n ApplyRefiner = 'Apply Refiner',\r\n Search = 'Search'\r\n}\r\n\r\ninterface ITelemetryContent {\r\n pageName: string;\r\n moduleName: string;\r\n telemetry?: ITelemetry;\r\n}\r\n\r\ninterface IIncrementalQuantityState {\r\n isUpdating: boolean;\r\n currentInput: string;\r\n}\r\n\r\ninterface IIncrementalQuantityProps {\r\n min?: number;\r\n max: number;\r\n multipleOfQuantity: number;\r\n currentCount?: number;\r\n disabled?: boolean;\r\n incrementGlyphClass?: string;\r\n decrementGlyphClass?: string;\r\n decrementButtonAriaLabel?: string;\r\n incrementButtonAriaLabel?: string;\r\n minQuantityText: string;\r\n maxQuantityText: string;\r\n inputQuantityAriaLabel?: string;\r\n isGiftCard?: boolean;\r\n id?: string;\r\n telemetryContent?: ITelemetryContent;\r\n applyDefaultOrderSettings?: boolean;\r\n onChange?(newValue: number): boolean;\r\n productBehavior: ProductBehavior;\r\n}\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity.\r\n */\r\n@observer\r\nexport default class IncrementalQuantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1,\r\n max: 999,\r\n multipleOfQuantity: 0.01,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private _minValue: number;\r\n private _maxValue: number;\r\n private _multipleQuantityValue: number;\r\n\r\n private readonly inputRef: React.RefObject = React.createRef();\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n public static getDerivedStateFromProps(\r\n props: Readonly,\r\n state: IIncrementalQuantityState\r\n ): IIncrementalQuantityState {\r\n const nextState = { ...state };\r\n\r\n if (props.disabled && !state.isUpdating) {\r\n nextState.isUpdating = true;\r\n }\r\n\r\n let updatedValue = parseFloat(state.currentInput);\r\n\r\n if (\r\n (!props.disabled && state.isUpdating) ||\r\n ((props.applyDefaultOrderSettings ?? false) &&\r\n updatedValue === 1.0 &&\r\n props.currentCount &&\r\n props.currentCount > IncrementalQuantity.defaultProps.min!)\r\n ) {\r\n updatedValue = props.currentCount ?? 1.0;\r\n nextState.isUpdating = false;\r\n }\r\n\r\n return nextState;\r\n }\r\n\r\n constructor(props: IIncrementalQuantityProps) {\r\n super(props);\r\n\r\n let minQuantity = IncrementalQuantity.defaultProps.min!;\r\n let maxQuantity = IncrementalQuantity.defaultProps.max!;\r\n let multipleOfQuantity = IncrementalQuantity.defaultProps.multipleOfQuantity!;\r\n\r\n if (props.productBehavior) {\r\n minQuantity = props.productBehavior.MinimumQuantity ?? IncrementalQuantity.defaultProps.min!;\r\n multipleOfQuantity = props.productBehavior.MultipleOfQuantity ?? IncrementalQuantity.defaultProps.multipleOfQuantity!;\r\n }\r\n\r\n this.state = {\r\n isUpdating: false,\r\n currentInput: props.productBehavior\r\n ? minQuantity > 0\r\n ? minQuantity.toFixed(2)\r\n : multipleOfQuantity > 0\r\n ? multipleOfQuantity.toFixed(2)\r\n : '1.00'\r\n : props.currentCount?.toFixed(2) ?? '1.00'\r\n };\r\n this._onIncrement = this._onIncrement.bind(this);\r\n this._onDecrement = this._onDecrement.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n this._minValue = minQuantity ?? IncrementalQuantity.defaultProps.min!;\r\n this._maxValue = maxQuantity ?? IncrementalQuantity.defaultProps.max!;\r\n this._multipleQuantityValue = multipleOfQuantity ?? IncrementalQuantity.defaultProps.multipleOfQuantity!;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const currentValue1 = this.state.currentInput;\r\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\r\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\r\n const nextDecrementValue = parseFloat(currentValue1) - this._multipleQuantityValue;\r\n const decrementDisabled = parseFloat(currentValue1) <= this._minValue + 1 || this.props.isGiftCard || nextDecrementValue === 0;\r\n const incrementDisabled = parseFloat(currentValue1) >= Number(this._maxValue) || this.props.isGiftCard;\r\n const currentValue = parseFloat(currentValue1);\r\n this.payLoad.contentAction.etext = TelemetryConstant.DecrementQuantity;\r\n const decrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.IncrementQuantity;\r\n const incrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n const ariaLablelText = `${this.props.inputQuantityAriaLabel ?? ''} ${parseFloat(currentValue1)}`;\r\n\r\n let extraClassDecrement = '';\r\n if (decrementDisabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClassDecrement = 'disabled';\r\n } else if (this.props.disabled) {\r\n // This.props.disabled shows if the state is not succeded yet\r\n extraClassDecrement = 'transition';\r\n }\r\n let extraClassIncrement = '';\r\n if (incrementDisabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClassIncrement = 'disabled';\r\n } else if (this.props.disabled) {\r\n // This.props.disabled shows if the state is not succeded yet\r\n extraClassIncrement = 'transition';\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n /**\r\n * It checks if its in mobile view or not.\r\n * @returns Boolean.\r\n */\r\n private readonly isMobileView = (): boolean => {\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Added gridsetting values.\r\n const context = {\r\n gridSettings: {\r\n xs: { w: 767 },\r\n sm: { w: 991 },\r\n md: { w: 1199 },\r\n lg: { w: 1599 },\r\n xl: { w: 1600 }\r\n }\r\n } as IRequestContext;\r\n\r\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\r\n return isMobileCheck === 'xs' || isMobileCheck === 'sm';\r\n };\r\n\r\n private _onIncrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = parseFloat(this.state.currentInput);\r\n\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity < this.props.max) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity + 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = this.props.max;\r\n }\r\n\r\n if (this._multipleQuantityValue && updatedQuantity % this._multipleQuantityValue !== 0) {\r\n updatedQuantity = Math.ceil(updatedQuantity / this._multipleQuantityValue) * this._multipleQuantityValue;\r\n }\r\n\r\n if (invokeCallback && this.props.onChange) {\r\n if (this.props.onChange(updatedQuantity)) {\r\n this.setState({ currentInput: updatedQuantity.toFixed(2) });\r\n }\r\n }\r\n }\r\n\r\n private _onDecrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = parseFloat(this.state.currentInput);\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity > this._minValue) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity - 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = this._minValue;\r\n }\r\n\r\n if (this._multipleQuantityValue && updatedQuantity % this._multipleQuantityValue !== 0) {\r\n updatedQuantity = Math.floor(updatedQuantity / this._multipleQuantityValue) * this._multipleQuantityValue;\r\n if (updatedQuantity < this._minValue) {\r\n updatedQuantity = this._minValue;\r\n }\r\n }\r\n\r\n if (invokeCallback && this.props.onChange) {\r\n if (this.props.onChange(updatedQuantity)) {\r\n this.setState({ currentInput: updatedQuantity.toFixed(2) });\r\n }\r\n }\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n let value = e.target.value;\r\n\r\n // If the input field is empty, we update the state to an empty field.\r\n if (value === '') {\r\n this.setState({ currentInput: '' });\r\n } else if (/^[0-9]*[.]?[0-9]{0,2}$/.test(value)) {\r\n // Converts the comma to a dot and stores the valid value in the state.\r\n const formattedValue = value.replace(',', '.');\r\n this.setState({ currentInput: formattedValue });\r\n\r\n debounce(() => {\r\n this.props.onChange && this.props.onChange(parseFloat(this.state.currentInput));\r\n\r\n const inputElement =\r\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', this.state.currentInput);\r\n inputElement.setAttribute('value', this.state.currentInput);\r\n }\r\n }, 1000)();\r\n }\r\n }\r\n\r\n /**\r\n * Validates min and updates.\r\n */\r\n private readonly _validateMin = (): void => {\r\n // If the input field is empty, we update the state to an empty field.\r\n if (this.state.currentInput === '') {\r\n this.setState({ currentInput: '1' });\r\n }\r\n\r\n const currentValue = parseFloat(this.state.currentInput);\r\n\r\n if (isNaN(currentValue)) {\r\n // If the value is invalid, we set it to the minimum value.\r\n this.setState({ currentInput: this._minValue.toFixed(2) });\r\n } else {\r\n let validValue = Math.min(this.props.max, Math.max(this._minValue, currentValue));\r\n\r\n // Check if the value is a multiple of multipleOfQuantity\r\n if (this._multipleQuantityValue && validValue % this._multipleQuantityValue !== 0) {\r\n validValue = Math.ceil(validValue / this._multipleQuantityValue) * this._multipleQuantityValue;\r\n }\r\n\r\n if (validValue !== currentValue) {\r\n this.setState({ currentInput: validValue.toFixed(2) });\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['buybox'] = {\n c: () => require('@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'cartConfiguration', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', 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:'productDimensions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant', runOn: 0},{name:'productPrice', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant', runOn: 0},{name:'ratingsSummary', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary', runOn: 1},{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: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'buybox',\n p: 'buybox',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox'\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-cart-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration');\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-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-dimensions-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-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-ratings-summary';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\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 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__|themes|jansen-adventureworks|views|buybox'] = {\n c: () => require('partner/themes/jansen-adventureworks/views/buybox.view.tsx'),\n cn: '__local__-__local__-buybox'\n };\nviewDictionary['@msdyn365-commerce-modules|buybox|modules|buybox|buybox'] = {\n c: () => require('@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox.view.js'),\n cn: '@msdyn365-commerce-modules-buybox-buybox'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|buybox'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/buybox.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-buybox'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n if (window) {\n const currentWindowAPI = window.mapAPIReady;\n window.mapAPIReady = () => {\n if (currentWindowAPI) {\n currentWindowAPI();\n }\n this.isMapApiLoaded = true;\n };\n }\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateActionErrorResult,\n IOrderTemplateNameDialogResources\n} from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n getConfigureErrors,\n IBuyboxCallbacks,\n IBuyboxCommonResources,\n IBuyboxData,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport * as React from 'react';\n\nimport { IBuyboxProps as IBuyboxExtentionProps } from '../../definition-extensions/buybox.ext.props.autogenerated';\n\n/**\n * To generate AddToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of AddToOrderTemplateDialog resources..\n */\nfunction generateAddToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n}\n\n/**\n * To generate OrderTemplateNameDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of OrderTemplateNameDialog resources..\n */\nfunction generateOrderTemplateNameDialogResources(resources: IBuyboxCommonResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n}\n\n/**\n * To generate ItemAddedToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of ItemAddedToOrderTemplateDialog resources..\n */\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.priceFree,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n}\n\n/**\n * To generate DuplicateItemsWhenAddingToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of DuplicateItemsWhenAddingToOrderTemplateDialog resources..\n */\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: IBuyboxCommonResources\n): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n}\n\n/**\n * Add to wishlist failed function.\n * @param callbacks -Buybox callbacks.\n * @param resources -Buybox resources.\n * @param product -Simple product.\n * @returns Update error state.\n */\nconst onAddToOrderTemplateFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\n result: IOrderTemplateActionErrorResult\n) => {\n callbacks.updateErrorState({\n errorHost: 'ORDER_TEMPLATE',\n configureErrors:\n result.status === 'MISSING_DIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\n });\n};\n\n/**\n * RenderAddToOrderTemplateButton.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @param product - Product data.\n * @returns -- Returns JSX element.\n */\nexport const renderAddToOrderTemplateButton = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n product: SimpleProduct\n): React.ReactNode => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\n id,\n typeName,\n context,\n data: {\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n resources,\n config\n } = props;\n\n const { quantity } = state;\n\n const isShowButtonText = true;\n const isMultipleCatalogsFeatureEnabled = props.isChannelMultipleCatalogsFeatureEnabled || false;\n return (\n orderTemplates && (\n \n )\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\nimport { format, ItemAvailability, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n getConfigureErrors,\n IBuyboxAddToCartViewProps,\n IBuyboxCallbacks,\n IBuyboxCommonResources,\n IBuyboxData,\n IBuyboxFindInStoreViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxResources as IBuyboxExtentionResources,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { IncrementalQuantity, INodeProps, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IBuyboxProps as IBuyboxExtentionProps, IBuyboxProps } from '../definition-extensions/buybox.ext.props.autogenerated';\nimport { renderAddToOrderTemplateButton } from './components/buybox-add-to-order-template';\n\n/**\n * BuyBoxConstants enum.\n */\nexport enum BuyBoxConstants {\n zero = 0\n}\n\n/**\n * On Change function.\n * @param callbacks -Callbacks.\n * @returns Update quantity.\n */\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\n if (callbacks.updateQuantity) {\n return callbacks.updateQuantity(newValue);\n }\n return true;\n};\n\n/**\n * RenderQuantity.\n * @param quantityComponent - QuantityComponent.\n * @param callbacks - Callbacks.\n * @param props - Props.\n * @param state - State.\n * @param extentionResources - ExtentionResources.\n * @param quantityLimitsMessages - QuantityLimitsMessages.\n * @param max - Max.\n * @param telemetryContent - TelemetryContent.\n * @param unitOfMeasure - Unit Of Measure.\n * @returns -- Returns.\n */\nconst renderQuantity = (\n quantityComponent: IBuyboxProductQuantityViewProps,\n callbacks: IBuyboxCallbacks,\n props: IBuyboxProps,\n state: IBuyboxState,\n extentionResources: IBuyboxExtentionResources,\n quantityLimitsMessages: React.ReactNode,\n\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n min: number | undefined,\n max: number | undefined,\n applyDefaultOrderSettings?: boolean,\n telemetryContent?: ITelemetryContent,\n unitOfMeasure?: React.ReactNode\n): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\n\n const { resources } = props;\n\n const { quantity } = state;\n\n return (\n \n \n {heading}\n {errors}\n \n\n \n {unitOfMeasure}\n {quantityLimitsMessages}\n \n );\n};\n\n/**\n * Render key in price function.\n * @param keyInPrice - KeyInPrice.\n * @returns -- Returns.\n */\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n {heading}\n {input}\n \n );\n};\n\n/**\n * RenderAddToCart.\n * @param addToCart - AddToCart.\n * @returns -- Returns.\n */\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\n/**\n * RenderFindInStore.\n * @param findInStore - FindInStore.\n * @returns -- Returns.\n */\nconst renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\n\n return (\n \n {storeSelector}\n {heading}\n {productPickupOptionList}\n {description}\n {errors}\n {button}\n {modal}\n \n );\n};\n\n/**\n * RenderAddToOrderTemplate.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @returns -- Returns.\n */\nconst renderAddToOrderTemplate = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): JSX.Element | null => {\n const product = props.data.product.result;\n if (!props.addToOrderTemplate || !product) {\n return null;\n }\n\n const orderTemplateButton = renderAddToOrderTemplateButton(props, state, callbacks, product);\n\n return (\n \n {props.addToOrderTemplate.errorBlock}\n {orderTemplateButton}\n \n );\n};\n\n/**\n * Add to wishlist failed function.\n * @param callbacks -Buybox callbacks.\n * @param resources -Buybox resources.\n * @param product -Simple product.\n * @returns Update error state.\n */\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\n result: IWishlistActionErrorResult\n) => {\n callbacks.updateErrorState({\n errorHost: 'WISHLIST',\n configureErrors:\n result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\n });\n};\n\n/**\n * RenderAddToWishlist.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @param product - Product data.\n * @returns -- Returns.\n */\nconst renderAddtoWishlistButton = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n product: SimpleProduct\n): React.ReactNode => {\n const { context, resources } = props;\n const wishlists = props.data.wishlists.result;\n const isShowWishlitButtonText = true;\n return (\n \n );\n};\n\n/**\n * RenderAddToWishlist.\n * @param props - Buybox viewprops.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @returns -- Returns.\n */\nconst renderAddToWishlist = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): JSX.Element | null => {\n const product = props.data.product.result;\n if (!props.addToWishlist || !product) {\n return null;\n }\n\n if (!props.config.enableWishlist) {\n return null;\n }\n\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\n return (\n \n {props.addToWishlist.errorBlock}\n {wishlistButton}\n \n );\n};\n\n/**\n * RRenderShopSimilarItem.\n * @param shopSimilarItem - ShopSimilarItem.\n * @returns -- Returns.\n */\nconst renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, errors, input } = shopSimilarItem;\n\n return (\n \n {errors}\n {input}\n \n );\n};\n\n/**\n * RenderSocialShare.\n * @param socialShare - Social share react node array.\n * @returns -- Returns.\n */\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\n if (!socialShare || socialShare.length === 0) {\n return undefined;\n }\n\n return <>{socialShare[0]};\n};\n\n/**\n * RenderConfigureDropdown.\n * @param dropdown - Buybox product configure dropdown view props.\n * @returns -- Returns JSX.Element.\n */\nconst renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {select}\n {errors}\n \n );\n};\n\n/**\n * RenderConfigure.\n * @param configure - Buybox product configure view props.\n * @returns -- Returns JSX.Element.\n */\nconst renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n};\n\n/**\n * BuyboxView.\n * @param props - Props.\n * @returns -- Returns.\n */\nconst BuyboxView: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const {\n ModuleProps,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n MediaGalleryContainerProps,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n ProductInfoContainerProps,\n addToCart,\n addToOrderTemplate,\n addToWishlist,\n productComparisonButton,\n configure,\n description,\n findInStore,\n quantity,\n price,\n title,\n rating,\n inventoryLabel,\n shopSimilarLook,\n keyInPrice,\n shopSimilarDescription,\n min,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n max,\n applyDefaultOrderSettings,\n unitOfMeasure,\n callbacks,\n state,\n resources,\n quantityLimitsMessages,\n telemetryContent,\n app: { config: appConfig },\n catalogs\n } = props;\n let skuText: string = props.resources.skuText;\n skuText += props.data.product.result?.ItemId;\n const preferredStoreInfo: IStoreInfo | undefined = props.data.storeSelectorStateManager.result?.preferredStore;\n const preferredStoreId = preferredStoreInfo?.StoreId ? preferredStoreInfo.StoreId : '';\n const preferredStoreName = preferredStoreInfo?.StoreName ? preferredStoreInfo.StoreName : '';\n\n const [availability, setAvailability] = React.useState('');\n const [isStoreChange, setIsStoreChange] = React.useState(false);\n\n /**\n * GetStockInventoryLabel.\n * @param availabilityWithHours - Stock availability with hours.\n * @returns -- Returns.\n */\n const getStockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (const productInventoryInformation of availabilityWithHours.ProductInventoryInformation) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n productInventoryInformation.InventLocationId\n ) {\n return productInventoryInformation.StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n const getInventory = React.useCallback(async () => {\n const input = new GetFullAvailableInventoryNearbyInput(\n props.data.product.result?.RecordId,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n true\n );\n\n /**\n * IsProductInStock.\n * @param itemAvailabilities - Item availability array.\n * @returns -- Returns.\n */\n const isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!appConfig.enableStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[BuyBoxConstants.zero].AvailableQuantity! > BuyBoxConstants.zero;\n }\n\n return false;\n };\n\n await getFullAvailableInventoryNearby(input, props.context.actionContext)\n .catch((error: Error) => {\n props.telemetry.error(error.message);\n })\n .then(response => {\n if (response && ArrayExtensions.hasElements(response)) {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreId;\n const filteredFullOrgUnitAvailability = response.filter(isPreferredStore);\n const preferredStoreAvailability = ArrayExtensions.hasElements(filteredFullOrgUnitAvailability)\n ? filteredFullOrgUnitAvailability[BuyBoxConstants.zero]\n : undefined;\n const stockStatusLabel: string | undefined = getStockInventoryLabel(preferredStoreAvailability);\n const isInStock = isProductInStock(preferredStoreAvailability?.OrgUnitAvailability?.ItemAvailabilities);\n const resourceLabel = isInStock ? props.resources.inStockText : props.resources.outOfStockText;\n const stockText: string | undefined = stockStatusLabel ? stockStatusLabel : resourceLabel;\n const preferredStoreAvailabilityText = `${format(\n props.resources.availabilityAtPreferredStoreText,\n preferredStoreName\n )} ${stockText}`;\n setAvailability(preferredStoreAvailabilityText);\n }\n });\n\n setIsStoreChange(false);\n }, [\n props.data.product.result?.RecordId,\n appConfig.enableStockCheck,\n preferredStoreId,\n preferredStoreName,\n props.context.actionContext,\n props.resources.availabilityAtPreferredStoreText,\n props.resources.inStockText,\n props.resources.outOfStockText,\n props.telemetry\n ]);\n\n React.useEffect(() => {\n if (props.config.displayStockAvailability) {\n getInventory().catch((error: Error) => {\n props.telemetry.error(error.message);\n });\n }\n }, [getInventory, isStoreChange, props.telemetry, props.config.displayStockAvailability]);\n\n reaction(\n () => props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\n () => {\n setIsStoreChange(true);\n }\n );\n\n /**\n * RenderAvailabiltyAtPreferredStore.\n * @returns -- Returns.\n */\n const renderAvailabilityAtPreferredStore = (): JSX.Element | undefined => {\n const hasProductDimensions = ArrayExtensions.hasElements(props.data.product.result?.Dimensions);\n if (hasProductDimensions && props.data.product.result?.MasterProductId === undefined) {\n return undefined;\n }\n const containerProps: INodeProps = {\n className: 'ms-buybox__preferred-store-availability',\n tag: 'span'\n };\n\n return {availability};\n };\n return (\n \n {props.mediaGallery}\n \n {catalogs && catalogs[0].Name}\n {title}\n \n
{skuText}
\n {rating}\n
\n \n
{props.resources.priceText}
\n {price}\n
\n {configure && renderConfigure(configure)}\n {keyInPrice && renderKeyInPrice(keyInPrice)}\n \n
\n {quantity &&\n renderQuantity(\n quantity,\n callbacks,\n props,\n state,\n resources,\n quantityLimitsMessages,\n min,\n max,\n applyDefaultOrderSettings,\n telemetryContent,\n unitOfMeasure\n )}\n {props.bulkPurchaseLink}\n
\n
\n {props.config.displayStockAvailability && preferredStoreId && renderAvailabilityAtPreferredStore()}\n {inventoryLabel}\n {renderAddToCart(addToCart)}\n {findInStore && renderFindInStore(findInStore)}\n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\n {productComparisonButton}\n {addToOrderTemplate && renderAddToOrderTemplate(props, state, callbacks)}\n {findInStore?.productPickupOptionList ? (\n
{findInStore.productPickupOptionList}
\n ) : null}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n
{props.resources.shopText}
\n \n {shopSimilarLook && renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && renderShopSimilarItem(shopSimilarDescription)}\n \n \n
{props.resources.descriptionText}
\n {description}\n
\n {ArrayExtensions.hasElements(props.slots.productSpecification) ? (\n {props.slots.productSpecification[0]}\n ) : null}\n
\n
\n );\n};\n\nexport default BuyboxView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["Availability","ProductAvailabilitiesForSelectedVariantInput","constructor","productId","channelId","selectedProduct","getCacheKey","getCacheObjectType","dataCacheType","this","createProductAvailabilitiesForSelectedVariantInput","inputData","getSelectedProductIdFromActionInput","requestContext","apiSettings","Error","async","getProductAvailabilitiesForSelectedVariantAction","input","ctx","productInventoryInformation","_input$selectedProduc","productResult","selectedVariantInput","SelectedVariantInput","undefined","getSelectedVariant","app","config","enableStockCheck","ItemTypeValue","ReleasedProductType","Service","ProductTypeValue","ProductType","Master","shippingSearchCriteria","createInventoryAvailabilitySearchCriteria","RecordId","DeliveryMode","shipping","pickupSearchCriteria","pickup","shippingAvailability","ProductsDataActions","callerContext","ProductWarehouseInventoryAvailabilities","shippingInventory","mapAggregatedProductInventoryInformation","ArrayExtensions","hasElements","deliveryType","push","pickupAvailability","pickupInventory","AggregatedProductInventoryAvailabilities","error","telemetry","debug","mergeProductWarehouseToProductAvailabities","productsWarehouseInventory","productAvailable","product","TotalAvailable","ProductId","AvailableQuantity","getProductAvailabilitiesForSelectedVariantActionDataAction","createObservableDataAction","id","action","generateAddToOrderTemplateDialogResources","resources","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","generateOrderTemplateNameDialogResources","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","priceFree","originalPriceText","currentPriceText","generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","onAddToOrderTemplateFailed","callbacks","result","updateErrorState","errorHost","configureErrors","status","getConfigureErrors","missingDimensions","IsGiftCard","BuyBoxConstants","onChangeHandler","newValue","updateQuantity","renderAddToOrderTemplate","props","state","data","addToOrderTemplate","orderTemplateButton","renderAddToOrderTemplateButton","typeName","context","orderTemplates","customerInformation","quantity","isMultipleCatalogsFeatureEnabled","isChannelMultipleCatalogsFeatureEnabled","React","AddToOrderTemplateComponent","Object","assign","className","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","onError","shouldShowButtonFailedTooltip","isCustomPriceSelected","showButtonTooltip","showButtonText","imageSettings","isMultipleCatalogFeatureEnabledInHq","catalogId","currentCatalogId","Node","ContainerProps","errorBlock","renderConfigureDropdown","dropdown","LabelContainerProps","heading","errors","select","_props$data$product$r","_props$data$storeSele","_props$data$product$r3","ModuleProps","MediaGalleryContainerProps","ProductInfoContainerProps","addToCart","productComparisonButton","configure","description","findInStore","price","title","rating","inventoryLabel","keyInPrice","min","max","applyDefaultOrderSettings","unitOfMeasure","quantityLimitsMessages","telemetryContent","appConfig","catalogs","skuText","ItemId","preferredStoreInfo","storeSelectorStateManager","preferredStore","preferredStoreId","StoreId","preferredStoreName","StoreName","productBehavior","Behavior","availability","setAvailability","isLoadingAvailability","setIsLoadingAvailability","totalAvailability","setTotalAvailability","isStoreChange","setIsStoreChange","getInventory","_props$data$product$r2","GetFullAvailableInventoryNearbyInput","zero","getFullAvailableInventoryNearby","actionContext","then","response","_preferredStoreAvaila","isPreferredStore","value","_value$OrgUnitAvailab","OrgUnitAvailability","OrgUnitLocation","OrgUnitNumber","filteredFullOrgUnitAvailability","filter","preferredStoreAvailability","stockStatusLabel","availabilityWithHours","ProductInventoryInformation","_availabilityWithHour","InventoryLocationId","InventLocationId","StockLevelLabel","getStockInventoryLabel","resourceLabel","itemAvailabilities","ItemAvailabilities","inStockText","outOfStockText","stockText","preferredStoreAvailabilityText","format","availabilityAtPreferredStoreText","_productBehavior$Mini","_productBehavior$Mult","minQuantity","MinimumQuantity","multipleOfQuantity","MultipleOfQuantity","quantityToSet","Number","getProductAvailabilitiesForSelectedVariant","ProductNumber","channel","newAvailableQuantity","TotalAvailableInventoryLevelLabel","fetchAvailabilities","catch","message","displayStockAvailability","reaction","_props$data$storeSele2","selectedStoreLocationId","Module","mediaGallery","Name","renderAvailability","_product$result","_product$result2","Dimensions","MasterProductId","isAvailable","available","containerProps","availableClass","outOfStockClass","tag","availabilityIndicatorAvailable","availabilityIndicatorOutOfStock","priceText","dropdowns","map","renderConfigure","renderKeyInPrice","renderQuantity","quantityComponent","extentionResources","IncrementalQuantity","currentCount","onChange","decrementButtonAriaLabel","incrementButtonAriaLabel","minQuantityText","maxQuantityText","bulkPurchaseLink","renderAvailabilityAtPreferredStore","_props$data$product$r4","_props$data$product$r5","button","renderAddToCart","storeSelector","modal","productPickupOptionList","renderFindInStore","socialShare","length","_renderSocialShare","slots","textBlocks","_renderTextBlocks","descriptionText","productSpecification","VariantType","getTelemetryAttributes","payLoad","contentData","contentAction","recid","etext","setTelemetryAttribute","TelemetryConstant","IncrementalQuantity_1","_props$currentCount$t","_props$currentCount","_minQuantity","_multipleOfQuantity","super","inputRef","isMobileView","isMobileCheck","_context$device","variant","Browser","MsDyn365","isBrowser","window","innerWidth","gridSettings","xs","w","sm","md","lg","Viewport","device","Type","isMobile","xl","_validateMin","currentInput","setState","currentValue","parseFloat","isNaN","_minValue","toFixed","validValue","Math","_multipleQuantityValue","ceil","defaultProps","maxQuantity","_props$productBehavio","_props$productBehavio2","eventType","isUpdating","_onIncrement","bind","_onDecrement","_handleChange","contentCategory","pgname","pageName","mname","moduleName","etype","_maxValue","_props$applyDefaultOr","nextState","_objectSpread","disabled","updatedValue","_props$currentCount2","render","_this$props$inputQuan","_this$props$inputQuan2","currentValue1","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","nextDecrementValue","decrementDisabled","isGiftCard","incrementDisabled","DecrementQuantity","decrementAttributes","IncrementQuantity","incrementAttributes","ariaLablelText","inputQuantityAriaLabel","extraClassDecrement","extraClassIncrement","onClick","color","type","onBlur","role","ref","invokeCallback","currQuantity","updatedQuantity","floor","e","target","test","formattedValue","replace","_debounce","inputElement","current","HTMLInputElement","setAttribute","__decorate","observer","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","_readFromToCookie","storeInfo","JSON","parse","_unused","_context","storeId","storeName","writeToCookie","arguments","Latitude","Longitude","_writeToCookie","stringify","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","key","localStorage","removeItem","setItem","cookieValue","getItem","computed","observable","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","trim","query","encodeURI","geolocationApiUrl","requestUrl","Promise","resolve","script","document","createElement","remove","resourceSets","point","coordinates","body","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","currentWindowAPI","mapAPIReady","isMapApiLoaded","url","lang","market","reject","_document2","_document3","defer","src","addEventListener","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","onAddToWishlistFailed","renderAddToWishlist","addToWishlist","enableWishlist","wishlistButton","renderAddtoWishlistButton","wishlists","AddToWishlistComponent","addToWishlistButtonText","removeFromWishlistButtonText","addToWishlistMessage","removedFromWishlistMessage","addItemToWishlistError","removeItemFromWishlistError","nameOfWishlist","ariaRole","getSelectedProduct","renderShopSimilarItem","shopSimilarItem","shopSimilarLook","shopSimilarDescription","shopText","module","exports","ReactDOM"],"sourceRoot":""}