{"version":3,"file":"static/js/2f82f9ece0afea4b8899.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/./src/utilities/showToastMessage.tsx?d4ce","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\nimport { Toaster } from 'sonner';\r\nimport { IBuyboxResources } from '../definition-extensions/buybox.ext.props.autogenerated';\r\nimport { _showToast } from '../../../utilities/showToastMessage';\r\n\r\n/**\r\n * BuyBoxConstants enum.\r\n */\r\nexport enum BuyBoxConstants {\r\n zero = 0\r\n}\r\n\r\ninterface IBuyboxAddToCartViewExtendedProps extends IBuyboxAddToCartViewProps {\r\n resources: IBuyboxResources;\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: IBuyboxAddToCartViewExtendedProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, errorBlock, button, resources } = addToCart;\r\n\r\n const error = errorBlock as React.ReactElement;\r\n if (error.props.otherError === 'RequiredAttribute_ValidationError') {\r\n _showToast(resources.errorMessageForAddToCart, '');\r\n }\r\n\r\n return {button};\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 const extendedAddToCart = { ...addToCart, resources };\r\n\r\n const isAuthenticated = props.context.request.user.isAuthenticated;\r\n\r\n return (\r\n <>\r\n \r\n\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 {isAuthenticated && (\r\n <>\r\n
{props.resources.priceText}
\r\n {price}\r\n \r\n )}\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(extendedAddToCart)}\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\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 reset?: boolean;\r\n handleReset?: () => void;\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 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\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 if (this.props.reset === true) {\r\n this.setState({ currentInput: '1.00' });\r\n if (this.props.handleReset) {\r\n this.props.handleReset();\r\n }\r\n }\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","import React from 'react';\r\nimport { toast } from 'sonner';\r\n\r\nexport const _showToast = (heading: string, description: string) => {\r\n toast.error(\r\n
\r\n
\r\n

{heading}

\r\n
\r\n
\r\n {description}\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","extendedAddToCart","_objectSpread","isAuthenticated","request","user","Toaster","richColors","position","toastOptions","classNames","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","otherError","_showToast","errorMessageForAddToCart","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","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","reset","handleReset","extraClassDecrement","extraClassIncrement","onClick","color","type","onBlur","role","ref","invokeCallback","currQuantity","updatedQuantity","floor","e","target","test","formattedValue","replace","_debounce","inputElement","current","HTMLInputElement","setAttribute","__decorate","observer","toast","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":""}