{"version":3,"file":"static/js/abdbac492c3f41de4c31.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/modules/bulk-purchase/bulk-purchase.tsx?9fd5","webpack://mattressfirm/./src/modules/buybox/components/buybox-find-in-store.tsx?3ef8","webpack://mattressfirm/./src/modules/buybox/buybox.tsx?e22d","webpack://mattressfirm/./src/modules/buybox/buybox.view.tsx?376b"],"sourcesContent":["/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { ProductDimensionsMatrix } from '@msdyn365-commerce/components';\nimport { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ICoreContext } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Collapse, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IBulkPurchaseData } from './bulk-purchase.data';\nimport { IBulkPurchaseProps } from './bulk-purchase.props.autogenerated';\n\n/**\n * Additional optional props for the bulk purchase.\n */\nexport interface IBulkPurchaseExtendedProps extends IBulkPurchaseProps {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps {\n container: IModuleProps;\n content: React.ReactElement;\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseState {\n isExpanded: boolean;\n}\n\n/**\n * Bulk-purchase module.\n */\nexport class BulkPurchase extends React.PureComponent {\n public static readonly className = 'ms-bulk-purchase';\n\n public constructor(props: IBulkPurchaseExtendedProps) {\n super(props);\n\n this.state = {\n isExpanded: false\n };\n }\n\n public render(): React.ReactElement | null {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const hasDimensionsInData = ArrayExtensions.hasElements(this.props.data.productDimensions?.result);\n if (!hasDimensionsInProps && !hasDimensionsInData) {\n return null;\n }\n\n const viewProps: IBulkPurchaseViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className: classnames(BulkPurchase.className, this.props.config.className)\n },\n content: this._renderCollapseContent(`${BulkPurchase.className}__content`)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderCollapseContent(className: string): React.ReactElement {\n return (\n
\n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n
\n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n \n {this.props.resources.bulkPurchaseHeaderTitle}\n \n );\n }\n\n private _renderCollapse(className: string): React.ReactElement {\n return (\n \n {this._renderMainContent(`${className}__main-content`)}\n \n );\n }\n\n private _renderMainContent(className: string): React.ReactElement {\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n\n return (\n
\n {\n !isMobileDevice &&\n
\n \n
\n }\n {this._renderMatrix(`${className}__matrix-container`)}\n
\n );\n }\n\n private _renderMatrix(className: string): React.ReactElement {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n\n return (\n }\n data={{\n dimensions: hasDimensionsInProps ? this.props.productDimensions! : this.props.data.productDimensions!.result!,\n orderTemplates: this.props.data.orderTemplates?.result,\n customerInformation: this.props.data.customerInformation?.result\n }}\n resources={this.props.resources}\n />\n );\n }\n\n /**\n * Callback which toggles collapse mode.\n */\n private readonly _toggleCollapse = () => {\n this.setState(state => ({\n isExpanded: !state.isExpanded\n }));\n };\n}\n\nexport default BulkPurchase;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport {\n AddToCartBehavior,\n IAddToCartFailureResult,\n IAddToCartResources,\n ItemSuccessfullyAddedToCartNotification,\n PriceComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { DeliveryOption, FeatureState, OrgUnitLocation, ProductAvailableQuantity, ProductDimension } from '@msdyn365-commerce/retail-proxy';\nimport { NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions, DeliveryMode, IProductInventoryInformation, isAggregatedInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, Heading, INodeProps, IPopupProps, Popup } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { BuyboxErrorBlock } from '../../../common/buybox-components';\nimport { IBuyboxCallbacks, IBuyboxState } from '../../../common/buyboxInterface';\nimport { getConfigureErrors, getGenericError } from '../../../common/utilities/error-utilities';\nimport { IBuyboxData } from '../buybox.data';\nimport { IBuyboxProps, IBuyboxResources } from '../buybox.props.autogenerated';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * FindinStore failure Interface.\n */\nexport interface IFindInStoreFailureResult {\n missingDimensions?: ProductDimension[];\n}\n\n/**\n * BuyBoxFindinStore View Props Interface.\n */\nexport interface IBuyboxFindInStoreViewProps {\n storeSelector?: React.ReactNode;\n heading?: React.ReactNode;\n description?: React.ReactNode;\n errors?: React.ReactNode;\n button?: React.ReactNode;\n productPickupOptionList?: React.ReactNode;\n\n modal?: React.ReactNode;\n\n ContainerProps: INodeProps;\n\n openFindInStoreDialog(): Promise;\n}\n\n/**\n * On click find store handler.\n * @param props -Buybox data.\n * @param state -Buybox state.\n * @param callbacks -Buybox callbacks.\n * @returns Find in store.\n */\nconst onClickFindInStoreHandler = (props: IBuyboxProps, state: IBuyboxState, callbacks: IBuyboxCallbacks) => async () => {\n await findInStoreOnClick(props, state, callbacks);\n};\n\n/**\n * Inventory settings based on the inventory policy for aggregated availability.\n */\ninterface IInventorySettingsProps {\n isSectionDisabled: boolean;\n description: string;\n buttonText: string;\n}\n\n/**\n * The function defines the settings values for a given inventory configuration.\n * @param context - The context.\n * @param isStockCheck - Flag to enable inventory validation.\n * @param productAvailability - The product inventory information.\n * @param buyboxResources - The buybox string resources.\n * @param isLoading - Is loading.\n * @returns Boolean.\n */\nfunction getFindInStoreInventorySettings(\n context: ICoreContext,\n isStockCheck: boolean,\n productAvailability: IProductInventoryInformation[] | undefined,\n buyboxResources: IBuyboxResources,\n isLoading?: boolean): IInventorySettingsProps {\n\n // If shouldValidateAggregation is true then is required to check for the product inventory, based on this the messaging will change\n // and the find in store button will be ensbled or disabled\n\n let isSectionDisabled: boolean;\n let buttonText; let description: string;\n\n let pickupInventory: IProductInventoryInformation | undefined;\n\n if (!isStockCheck || isLoading) {\n return {\n isSectionDisabled: false,\n buttonText: buyboxResources.findInStoreLinkText,\n description: buyboxResources.findInStoreDescriptionText\n };\n }\n\n if (productAvailability) {\n pickupInventory = productAvailability.find(pickup => pickup.deliveryType === DeliveryMode.pickup);\n }\n\n // If aggregated is enabled, then we need to validate the inventor check for find in store.\n // If an individual is selected, then we will always show a find in store button.\n if (isAggregatedInventory(context.actionContext)) {\n if (productAvailability && (pickupInventory?.IsProductAvailable)) {\n isSectionDisabled = false;\n buttonText = buyboxResources.findInStoreLinkText;\n description = buyboxResources.findInStoreDescriptionText;\n } else {\n isSectionDisabled = true;\n buttonText = buyboxResources.findInStoreNotAvailableTextButton;\n description = buyboxResources.findInStoreNotAvailableDescription;\n }\n\n } else {\n isSectionDisabled = false;\n buttonText = buyboxResources.findInStoreLinkText;\n description = buyboxResources.findInStoreDescriptionText;\n }\n\n return {\n isSectionDisabled,\n description,\n buttonText\n };\n}\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\nconst matchDeliveryOptions = (productdeliveryOptions: DeliveryOption[] | undefined, storePickUpOptionList: string[] | undefined): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = (storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code));\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n};\n\nexport function getBuyboxFindInStore(\n props: IBuyboxProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks): IBuyboxFindInStoreViewProps | undefined {\n const {\n data,\n slots: {\n storeSelector\n },\n resources: {\n priceFree,\n originalPriceText,\n currentPriceText,\n findInStoreHeaderText,\n buyBoxGoToCartText,\n buyBoxContinueShoppingText,\n closeNotificationLabel,\n buyBoxSingleItemText,\n buyBoxMultiLineItemFormatText,\n buyBoxHeaderMessageText,\n descriptionTextToShowAllPickupOptions },\n context: {\n request: {\n channel: {\n PickupDeliveryModeCode\n } = { PickupDeliveryModeCode: undefined }\n }\n }\n } = props;\n\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const product = data?.product?.result;\n const price = data?.productPrice?.result;\n const cart = data?.cart?.result;\n const deliveryOptions = data?.deliveryOptions?.result;\n const productAvailability = data.productAvailableQuantity?.result;\n const retailMulitplePickupMFeatureState = data?.featureState?.result\n ?.find((featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName)?.IsEnabled;\n const channelDeliveryOptionConfig = data?.channelDeliveryOptionConfig?.result;\n\n const missingDimensions = product?.Dimensions?.filter(dimension => !(dimension.DimensionValue?.Value));\n\n const\n {\n errorState: {\n configureErrors,\n quantityError,\n otherError,\n errorHost\n },\n modalOpen,\n quantity\n } = state;\n\n const { isSectionDisabled, buttonText, description } = getFindInStoreInventorySettings(\n props.context,\n props.context.app.config.enableStockCheck,\n productAvailability,\n props.resources,\n props.data.productAvailableQuantity.status === 'LOADING' || ArrayExtensions.hasElements(missingDimensions));\n\n if (!product ||\n !ArrayExtensions.hasElements(storeSelector)) {\n return undefined;\n }\n\n if (!deliveryOptions ||\n !deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (retailMulitplePickupMFeatureState && channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(deliveryOptions.DeliveryOptions, channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (!PickupDeliveryModeCode || !deliveryOptions.DeliveryOptions.find((option: DeliveryOption) => option.Code === PickupDeliveryModeCode)) {\n return undefined;\n }\n\n const dialogStrings = {\n goToCartText: buyBoxGoToCartText,\n continueShoppingText: buyBoxContinueShoppingText,\n closeNotificationLabel,\n headerItemOneText: buyBoxSingleItemText,\n headerItemFormatText: buyBoxMultiLineItemFormatText,\n headerMessageText: buyBoxHeaderMessageText,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText\n };\n\n const priceComponent = price ? (\n ) : '';\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const popupProps: IPopupProps = {\n context: props.context,\n className: 'ms-buybox',\n id: props.id,\n typeName: props.typeName,\n data: { product: props.data.product?.result, price: props.data.productPrice?.result },\n dialogStrings,\n imageSettings: defaultImageSettings,\n gridSettings: props.context.request.gridSettings,\n productQuantity: quantity,\n priceComponent,\n navigationUrl: getUrlSync('cart', props.context.actionContext),\n modalOpen,\n setModalOpen: callbacks.changeModalOpen\n };\n const renderModalPopup = ;\n\n return {\n ContainerProps: {\n className: 'ms-buybox__find-in-store'\n },\n\n storeSelector: storeSelector[0],\n\n openFindInStoreDialog: onClickFindInStoreHandler(props, state, callbacks),\n\n heading: (\n \n ),\n\n description: (\n

\n {description}\n

\n ),\n productPickupOptionList: retailMulitplePickupMFeatureState && !isSectionDisabled ? (\n <>\n

\n {descriptionTextToShowAllPickupOptions}\n

\n
    \n {deliveryOptions.DeliveryOptions.map((item: DeliveryOption) => {\n return (
  • \n {item.Description}\n
  • );\n })}\n
\n \n ) : null,\n errors: (\n \n ),\n\n button: (\n \n {buttonText}\n \n ),\n\n modal: renderModalPopup\n };\n}\n\n/**\n * Handler for find in store button.\n * @param props - BuyBox data.\n * @param state - BuyBox state.\n * @param callbacks - BuyBox callbacks.\n * @returns - Promise.\n */\nasync function findInStoreOnClick(props: IBuyboxProps, state: IBuyboxState, callbacks: IBuyboxCallbacks): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n cart: { result: cart },\n productAvailableQuantity: { result: productAvailableQuantity }\n },\n resources,\n context,\n modules\n } = props;\n\n const {\n selectedProduct,\n quantity\n } = state;\n\n let dataProduct = props.data.product.result;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const retailMulitplePickupMFeatureState = props.data?.featureState?.result\n ?.find((featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName)?.IsEnabled;\n\n if (selectedProduct) {\n dataProduct = (await selectedProduct) || dataProduct;\n }\n\n if (!dataProduct || !storeSelectorStateManager) {\n return;\n }\n\n const product = dataProduct;\n\n const missingDimensions = product.Dimensions && product.Dimensions.filter((dimension: ProductDimension) => !(dimension.DimensionValue && dimension.DimensionValue.Value));\n\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n if (missingDimensions && missingDimensions.length > 0) {\n if (callbacks.updateErrorState) {\n callbacks.updateErrorState(\n {\n errorHost: 'FINDINSTORE',\n configureErrors: getConfigureErrors(missingDimensions, resources)\n }\n );\n }\n } else {\n storeSelectorStateManager.openDialog({\n product,\n id: storeSelectorId,\n parentElementRef: modalCloseButtonReference,\n deliveryOptions: retailMulitplePickupMFeatureState ? props.data.deliveryOptions.result : undefined,\n onLocationSelected: async (orgUnitLocation: OrgUnitLocation, deliveryMode: string) => {\n if (!cart) {\n return Promise.resolve();\n }\n\n const behavior = props.context?.app?.config?.addToCartBehavior;\n\n return cart.addProductToCart({ product, count: quantity, location: orgUnitLocation, deliveryMode })\n .then((result: ICartActionResult) => {\n if (result.status === 'FAILED' && result.substatus === 'MAXQUANTITY') {\n callbacks.changeModalOpen(false);\n let productAvailability: ProductAvailableQuantity | undefined;\n if (state.productAvailableQuantity) {\n productAvailability = state.productAvailableQuantity.ProductAvailableQuantity;\n } else if (productAvailableQuantity && ArrayExtensions.hasElements(productAvailableQuantity)) {\n const shippingInventory = productAvailableQuantity.find(shipping => shipping.deliveryType === DeliveryMode.pickup);\n productAvailability = shippingInventory?.ProductAvailableQuantity;\n } else {\n productAvailability = undefined;\n }\n const failureResult: IAddToCartFailureResult =\n { failureReason: 'CARTACTIONFAILED', cartActionResult: { status: result.status, substatus: result.substatus } };\n callbacks.updateErrorState({\n errorHost: 'ADDTOCART',\n configureErrors: {},\n otherError: getGenericError(failureResult, cart, resources, context, product, productAvailability, orgUnitLocation)\n });\n } else {\n callbacks.updateErrorState({\n configureErrors: {}\n });\n const navigationUrl = getUrlSync('cart', context.actionContext);\n if ((behavior === undefined || behavior === AddToCartBehavior.goToCart)) {\n if (result.status === 'SUCCESS' && navigationUrl) {\n window.location.assign(navigationUrl);\n }\n } else if (behavior === AddToCartBehavior.showModal) {\n callbacks.changeModalOpen(true);\n } else if (behavior === AddToCartBehavior.showNotification) {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n const dialogStrings: IAddToCartResources = {\n goToCartText: resources.buyBoxGoToCartText,\n continueShoppingText: resources.buyBoxContinueShoppingText,\n closeNotificationLabel: resources.closeNotificationLabel,\n headerItemOneText: resources.buyBoxSingleItemText,\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\n headerMessageText: resources.buyBoxHeaderMessageText,\n freePriceText: resources.priceFree,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n addedQuantityText: resources.addedQuantityText\n };\n const notification = new ItemSuccessfullyAddedToCartNotification(\n props.context,\n dialogStrings,\n defaultImageSettings,\n props.context.request.gridSettings,\n product,\n props.data.productPrice?.result,\n quantity,\n navigationUrl,\n telemetryContent,\n props.id,\n props.typeName\n );\n NotificationsManager.instance().addNotification(notification);\n }\n }\n }).catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.exception(error);\n props.telemetry.debug('Unable to add product to cart');\n }\n\n });\n }\n }).catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to find in store');\n }\n\n });\n }\n\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core-internal';\nimport {\n CommerceProperty, ProductDeliveryOptions, ProductDimensionValue,\n ProductPrice, ReleasedProductType, SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { BulkPurchase } from '@msdyn365-commerce-modules/bulk-purchase';\nimport {\n ArrayExtensions, DeliveryMode, FinitePromiseQueue, FinitePromiseQueueError,\n getDeliveryOptionsForSelectedVariant, GetDeliveryOptionsForSelectedVariantInput,\n getDimensionsForSelectedVariant, GetDimensionsForSelectedVariantInput, getInventoryLevelCodeFromDimensionValue,\n getPriceForSelectedVariant, getProductAvailabilitiesForSelectedVariant, getSelectedVariant, IDimensionsApp, IDimensionValueForSelectedVariant,\n InventoryLevelValues, IProductInventoryInformation, IPromiseQueue, PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput, SelectedVariantInput, setDimensionValuesToQuery\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n getBuyboxAddToCart, getBuyBoxInventoryLabel, getBuyboxKeyInPrice,\n getBuyboxProductAddToOrderTemplate, getBuyboxProductAddToWishlist,\n getBuyboxProductDescription, getBuyboxProductPrice, getBuyboxProductQuantity,\n getBuyboxProductRating, getBuyboxProductTitle, getBuyboxProductUnitOfMeasure,\n getBuyboxShopSimilarButton, getQuantityLimitsMessages,\n RetailDefaultOrderQuantityLimitsFeatureName\n} from '../../common/buybox-components';\nimport { getBuyboxProductConfigure } from '../../common/buybox-product-configure';\nimport {\n IBuyboxAddToCartViewProps, IBuyboxAddToOrderTemplateViewProps, IBuyboxAddToWishlistViewProps,\n IBuyboxCallbacks, IBuyboxCommonData, IBuyboxExtentedProps, IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureViewProps, IBuyboxProductQuantityViewProps, IBuyboxShopSimilarLookViewProps,\n IBuyboxState, IErrorState, ShopSimiliarButtonType } from '../../common/buyboxInterface';\nimport { IBuyboxData } from './buybox.data';\nimport { IBuyboxProps, IBuyboxResources } from './buybox.props.autogenerated';\nimport { getBuyboxFindInStore, IBuyboxFindInStoreViewProps } from './components/buybox-find-in-store';\n\nexport interface IBuyboxViewProps extends IBuyboxProps {\n state: IBuyboxState;\n ModuleProps: IModuleProps;\n ProductInfoContainerProps: INodeProps;\n MediaGalleryContainerProps: INodeProps;\n callbacks: IBuyboxCallbacks;\n mediaGallery?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n rating?: React.ReactNode;\n price?: React.ReactNode;\n bulkPurchaseLink?: React.ReactNode;\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps;\n addToWishlist?: IBuyboxAddToWishlistViewProps;\n max: number | undefined;\n addToCart: IBuyboxAddToCartViewProps;\n findInStore?: IBuyboxFindInStoreViewProps;\n quantity?: IBuyboxProductQuantityViewProps;\n configure?: IBuyboxProductConfigureViewProps;\n inventoryLabel?: React.ReactNode;\n shopSimilarLook?: IBuyboxShopSimilarLookViewProps;\n shopSimilarDescription?: IBuyboxShopSimilarLookViewProps;\n quantityLimitsMessages: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n keyInPrice?: IBuyboxKeyInPriceViewProps;\n unitOfMeasure?: React.ReactNode;\n}\n\n/**\n * Buybox Module.\n */\nclass Buybox extends React.PureComponent, IBuyboxState> {\n /**\n * A queue of tasks of processing the changes in the dimensions.\n * Limit to two processes:\n * 1 - for the current process, which is under execution at the moment.\n * 2 - next process, which will process the latest version of data.\n * @remark Enqueueing new promises will discard the previous ones (except the one which is under processing).\n */\n private readonly dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(2);\n\n private dimensions: { [id: number]: string } = {};\n\n private readonly buyboxCallbacks: IBuyboxCallbacks = {\n updateQuantity: (newQuantity: number): boolean => {\n const errorState = { ...this.state.errorState };\n errorState.quantityError = undefined;\n errorState.otherError = undefined;\n\n this.setState({ quantity: newQuantity, errorState });\n return true;\n },\n updateErrorState: (newErrorState: IErrorState): void => {\n this.setState({ errorState: newErrorState });\n },\n updateSelectedProduct: (\n newSelectedProduct: Promise,\n newInventory: IProductInventoryInformation | undefined,\n newPrice: ProductPrice | undefined,\n newDeliveryOptions: ProductDeliveryOptions | undefined\n ): void => {\n this.setState({\n selectedProduct: newSelectedProduct,\n productAvailableQuantity: newInventory,\n productDeliveryOptions: newDeliveryOptions\n });\n this._updatePrice(newPrice);\n },\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this.dimensions[selectedDimensionId] = selectedDimensionValueId;\n return this.dimensionUpdateQueue.enqueue(async () => {\n return this._updateDimensions();\n }).catch((error: any) => { // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw error;\n }\n });\n },\n getDropdownName: (dimensionType: number, resources: IBuyboxResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n changeModalOpen: (isModalOpen: boolean): void => {\n this.setState({ modalOpen: isModalOpen });\n },\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n },\n\n /**\n * Update isUpdatingDeliveryOptions state.\n *\n * @param isUpdatingDeliveryOptions - The status of updating delivery options.\n */\n changeUpdatingDeliveryOptions: (isUpdatingDeliveryOptions: boolean): void => {\n this.setState({ isUpdatingDeliveryOptions });\n },\n\n updateKeyInPrice: (customPrice: number): void => {\n // Remove custom amount error when updating the custom price\n const errorState = { ...this.state.errorState };\n errorState.customAmountError = undefined;\n\n this.setState({ isPriceKeyedIn: true, keyInPriceAmount: customPrice, errorState });\n this._updatePrice(this.state.productPrice, customPrice);\n }\n };\n\n private readonly telemetryContent: ITelemetryContent;\n\n public constructor(props: IBuyboxProps, state: IBuyboxState) {\n super(props);\n this.state = {\n errorState: {\n configureErrors: {}\n },\n quantity: 1,\n min: undefined,\n max: undefined,\n selectedProduct: undefined,\n productPrice: undefined,\n productDeliveryOptions: undefined,\n\n modalOpen: false,\n isUpdatingDimension: false,\n isUpdatingDeliveryOptions: false\n };\n this.telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n }\n\n public async componentDidMount(): Promise {\n const {\n data: {\n product: { result: product },\n productPrice\n }\n } = this.props;\n\n productPrice.then(async (result) => {\n this._updatePrice(result);\n });\n\n if (product) {\n // Check if the product is service or not by product type\n if (product.ItemTypeValue === ReleasedProductType.Service) {\n this.setState({ isServiceItem: true });\n }\n await this._updateQuantitiesInState(product);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n slots: {\n mediaGallery\n },\n data: {\n product: { result: product }\n },\n config: { className = '' }\n } = this.props;\n\n const\n {\n max\n } = this.state;\n\n if (!product) {\n this.props.context.telemetry.error('Product content is empty, module wont render');\n return null;\n }\n\n const props = this.props as IBuyboxExtentedProps;\n const defaultMinimumKeyInPrice = 10;\n const defaultMaximumKeyInPrice = 100;\n\n const context = this.props.context as ICoreContext;\n const inventoryLevel = context.app.config.inventoryLevel;\n const dimensionValuesWithInventory = ArrayExtensions.flatten(\n ArrayExtensions.validValues(this.props.data.productDimensions.result?.map(value => value.dimensionValuesWithInventory)));\n const hasAvailableProducts = !ArrayExtensions.hasElements(dimensionValuesWithInventory) || dimensionValuesWithInventory.some(\n value => {\n const inventoryLevelCode = getInventoryLevelCodeFromDimensionValue(value, inventoryLevel);\n return inventoryLevelCode !== InventoryLevelValues.outOfStock;\n }\n );\n\n const viewProps: IBuyboxViewProps = {\n ...(this.props as IBuyboxProps),\n state: this.state,\n mediaGallery: mediaGallery && mediaGallery.length > 0 ? mediaGallery[0] : undefined,\n ModuleProps: {\n moduleProps: this.props,\n className: classnames('ms-buybox', className)\n },\n ProductInfoContainerProps: {\n className: 'ms-buybox__content'\n },\n MediaGalleryContainerProps: {\n className: 'ms-buybox__media-gallery'\n },\n telemetryContent: this.telemetryContent,\n callbacks: this.buyboxCallbacks,\n title: getBuyboxProductTitle(props),\n description: getBuyboxProductDescription(props),\n bulkPurchaseLink: this._renderBuyboxBulkPurchaseLink(),\n unitOfMeasure: getBuyboxProductUnitOfMeasure(props),\n configure: getBuyboxProductConfigure(props, this.state, this.buyboxCallbacks),\n findInStore: getBuyboxFindInStore(this.props, this.state, this.buyboxCallbacks),\n price: getBuyboxProductPrice(props, this.state),\n addToCart: getBuyboxAddToCart(\n props, this.state, this.buyboxCallbacks, defaultMinimumKeyInPrice, defaultMaximumKeyInPrice, undefined, hasAvailableProducts),\n addToOrderTemplate: getBuyboxProductAddToOrderTemplate(props, this.state, this.buyboxCallbacks),\n addToWishlist: getBuyboxProductAddToWishlist(props, this.state, this.buyboxCallbacks),\n rating: !props.context.app.config.hideRating && getBuyboxProductRating(props),\n quantity: product.IsGiftCard ? undefined : getBuyboxProductQuantity(props, this.state, this.buyboxCallbacks),\n inventoryLabel: getBuyBoxInventoryLabel(props),\n shopSimilarLook: this.props.config.enableShopSimilarLooks && !product.IsGiftCard ? getBuyboxShopSimilarButton(props, ShopSimiliarButtonType.Looks) : undefined,\n shopSimilarDescription: this.props.config.enableShopSimilarDescription && !product.IsGiftCard ? getBuyboxShopSimilarButton(props, ShopSimiliarButtonType.Description) : undefined,\n keyInPrice: this.props.config.enableKeyInPrice && this.state.isCustomPriceSelected ? getBuyboxKeyInPrice(props, this.state, this.buyboxCallbacks) : undefined,\n quantityLimitsMessages: getQuantityLimitsMessages(props, this.state),\n max\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles anchor click event and scrolls to the given bulk purchase module.\n * @param bulkPurchaseModule - Bulk purchase module.\n * @returns Handler.\n */\n private readonly _onBulkPurchaseLinkClick = (bulkPurchaseModule: Element) => () => {\n const boundingRect = bulkPurchaseModule.getBoundingClientRect();\n window.scrollTo(boundingRect.left, boundingRect.top);\n };\n\n private _renderBuyboxBulkPurchaseLink(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!msdyn365Commerce.isBrowser) {\n return null;\n }\n\n const bulkPurchaseModules = Array.from(document.getElementsByClassName(BulkPurchase.className));\n\n if (!ArrayExtensions.hasElements(bulkPurchaseModules)) {\n return null;\n }\n\n return (\n \n {this.props.resources.bulkPurchaseLinkText}\n \n );\n }\n\n private _updatePrice(\n newPrice: ProductPrice | undefined,\n customPrice: number | undefined = this.state.keyInPriceAmount): void {\n\n if (this.state.isCustomPriceSelected && newPrice) {\n newPrice.CustomerContextualPrice = customPrice;\n }\n this.setState({ productPrice: newPrice });\n }\n\n private _getProductVariant(dimensionsToUpdate: { [id: number]: string }) {\n const {\n data: {\n product: { result: product }\n },\n context: {\n actionContext,\n request: {\n apiSettings: {\n channelId\n }\n }\n }\n } = this.props;\n\n const productDimensions = this.props.data.productDimensions.result!;\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions.map(dimension => {\n\n const dimensions = (dimension.dimensionValuesWithInventory ?? dimension.DimensionValues ?? []) as IDimensionValueForSelectedVariant[];\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue: dimensions.find(\n value => value.DimensionValue?.RecordId.toString() === dimensionsToUpdate[dimension.DimensionTypeValue]\n )?.DimensionValue ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n }).filter(dimension => dimension.DimensionValue);\n setDimensionValuesToQuery(this.props.context.actionContext.requestContext.url.requestUrl, mappedDimensions);\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n const selectedProductPromise = getSelectedVariant(\n new SelectedVariantInput(\n product!.MasterProductId ? product!.MasterProductId : product!.RecordId,\n channelId, undefined, undefined,\n this.props.context.request\n ),\n actionContext\n );\n this.setState({ selectedProduct: selectedProductPromise });\n\n return { productVariantPromise: selectedProductPromise, mappedDimensions };\n }\n\n private readonly _updateDimensions = async (): Promise => {\n const product = this.props.data.product.result;\n\n const productDimensions = this.props.data.productDimensions.result;\n\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n\n if (!product || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this.dimensions };\n this.setState({ isUpdatingDimension: true, isUpdatingDeliveryOptions: true });\n\n // Step 1: Clear error state to display relevant errors\n if (this.state.errorState.otherError || this.state.errorState.quantityError) {\n const clearErrorState = { ...this.state.errorState };\n clearErrorState.otherError = undefined;\n if (this.state.errorState.errorHost === 'ADDTOCART') {\n clearErrorState.quantityError = undefined;\n clearErrorState.errorHost = undefined;\n }\n this.setState({ errorState: clearErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const key of Object.keys(dimensionsToUpdate)) {\n if (this.state.errorState.configureErrors[key]) {\n this.setState(previousState => {\n const errorState = previousState.errorState;\n errorState.configureErrors[key] = undefined;\n return { errorState };\n });\n }\n }\n\n const data = this._getProductVariant(dimensionsToUpdate);\n const productVariant: SimpleProduct | null = await data.productVariantPromise;\n\n if (!productVariant) {\n return;\n }\n\n const promises: Promise[] = [\n this._getDimensionsForSelectedVariant(productVariant, data.mappedDimensions),\n this._hydrateInventoryInfo(productVariant),\n this._hydratePrice(productVariant),\n this._hydrateDeliveryOptions(productVariant),\n this._updateQuantitiesInState(productVariant)\n ];\n\n await Promise.all(promises);\n };\n\n private async _getDimensionsForSelectedVariant(productVariant: SimpleProduct, mappedDimensions: {\n /* eslint-disable @typescript-eslint/naming-convention -- Retail proxy values */\n DimensionTypeValue: number;\n DimensionValue: ProductDimensionValue | undefined;\n ExtensionProperties: CommerceProperty[] | undefined;\n /* eslint-enable @typescript-eslint/naming-convention -- Retail proxy values */\n }[]): Promise {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n productVariant.MasterProductId ? productVariant.MasterProductId : productVariant.RecordId,\n this.props.context.request.apiSettings.channelId,\n mappedDimensions,\n this.props.context.request\n ),\n this.props.context.actionContext\n );\n }\n\n private async _hydrateInventoryInfo(productVariant: SimpleProduct): Promise {\n // Step 5. Use these dimensions hydrate the inventory. Wrap this in a promise\n // so that places like add to cart can await it\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(\n new ProductAvailabilitiesForSelectedVariantInput(\n productVariant.RecordId,\n this.props.context.request.apiSettings.channelId\n ),\n this.props.context.actionContext\n );\n\n const newShippingQuantity = newAvailableQuantity?.find(shipping => shipping.deliveryType === DeliveryMode.shipping);\n const isCustomPriceSelected = productVariant.Dimensions?.find(\n dimension => dimension.DimensionTypeValue === 4 && dimension.DimensionValue && dimension.DimensionValue.Value?.toLowerCase() === 'custom');\n if (isCustomPriceSelected) {\n this.setState({ isCustomPriceSelected: true });\n } else {\n this.setState(previousState => {\n const errorState = previousState.errorState;\n errorState.customAmountError = undefined;\n return { isCustomPriceSelected: false, isPriceKeyedIn: false, errorState };\n });\n }\n\n if (newShippingQuantity) {\n this.setState({ productAvailableQuantity: newShippingQuantity });\n } else {\n this.setState({ productAvailableQuantity: undefined });\n }\n }\n\n private async _hydratePrice(productVariant: SimpleProduct): Promise {\n // Step 6. Use these dimensions hydrate the product price.\n const newPrice = await getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n productVariant.RecordId,\n this.props.context.request.apiSettings.channelId\n ),\n this.props.context.actionContext\n );\n\n if (newPrice) {\n this._updatePrice(newPrice);\n }\n }\n\n private async _hydrateDeliveryOptions(productVariant: SimpleProduct): Promise {\n const retailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature');\n\n // Step 7. Use these dimensions hydrate the product delivery options.\n const newDeliveryOptions = await getDeliveryOptionsForSelectedVariant(\n new GetDeliveryOptionsForSelectedVariantInput(\n productVariant.RecordId,\n this.props.context.request.apiSettings.channelId,\n undefined,\n undefined,\n retailMultiplePickupFeatureState?.IsEnabled\n ),\n this.props.context.actionContext\n );\n\n if (newDeliveryOptions) {\n this.setState({ productDeliveryOptions: newDeliveryOptions });\n }\n }\n\n private async _updateQuantitiesInState(product: SimpleProduct): Promise {\n const isOrderQuantityLimitsFeatureEnabled = await this._isOrderQuantityLimitsFeatureEnabled();\n if (isOrderQuantityLimitsFeatureEnabled && product) {\n this.setState({\n min: product.Behavior?.MinimumQuantity || 1,\n\n // If max by feature in default order settings is not defined then use max from site settings or default max 10.\n max: (product.Behavior?.MaximumQuantity && product.Behavior?.MaximumQuantity > 0) ? product.Behavior?.MaximumQuantity : this.props.context.app.config.maxQuantityForCartLineItem || 10\n });\n } else {\n this.setState({\n min: 1,\n max: this.props.context.app.config.maxQuantityForCartLineItem || 10\n });\n }\n }\n\n private readonly _getDropdownName = (dimensionType: number, resources: IBuyboxResources): string => {\n const isGiftCard = this.props.data.product.result?.IsGiftCard;\n\n switch (dimensionType) {\n case 1: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case 2: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case 4: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private async _isOrderQuantityLimitsFeatureEnabled(): Promise {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n const featureStatuses = await this.props.data.featureState;\n const isFeatureEnabledInHq = featureStatuses?.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)?.IsEnabled;\n if (!isFeatureEnabledInHq) {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n let customerInfo;\n try {\n customerInfo = await this.props.data.customerInformation;\n } catch (error) {\n this.props.telemetry.information(error);\n this.props.telemetry.debug('Unable to receive Customer Information. May be user is not authorized');\n return false;\n }\n\n return customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n }\n}\n\nexport default Buybox;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBuyboxAddToCartViewProps, IBuyboxAddToOrderTemplateViewProps, IBuyboxAddToWishlistViewProps, IBuyboxKeyInPriceViewProps, IBuyboxProductConfigureDropdownViewProps, IBuyboxProductConfigureViewProps, IBuyboxProductQuantityViewProps, IBuyboxShopSimilarLookViewProps } from '../../common';\nimport { IBuyboxViewProps } from './buybox';\nimport { IBuyboxFindInStoreViewProps } from './components/buybox-find-in-store';\n\nconst BuyboxView: React.FC = props => {\n const { ModuleProps, MediaGalleryContainerProps, ProductInfoContainerProps, addToCart, addToOrderTemplate, addToWishlist, configure, description, findInStore, quantity, price, title, rating, inventoryLabel, shopSimilarLook, keyInPrice,\n shopSimilarDescription, unitOfMeasure } = props;\n\n return (\n \n \n {props.mediaGallery}\n \n \n {title}\n {price}\n {unitOfMeasure}\n {props.bulkPurchaseLink}\n {description}\n {rating}\n {configure && _renderConfigure(configure)}\n {keyInPrice && _renderKeyInPrice(keyInPrice)}\n {quantity && _renderQuantity(quantity)}\n {inventoryLabel}\n {addToCart && _renderAddToCart(addToCart)}\n {findInStore && _renderFindInStore(findInStore)}\n {addToOrderTemplate && _renderAddToOrderTemplate(addToOrderTemplate)}\n {addToWishlist && _renderAddToWishlist(addToWishlist)}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && _renderShopSimilarItem(shopSimilarDescription)}\n \n \n );\n};\n\nconst _renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\nconst _renderAddToOrderTemplate = (addToOrderTemplate: IBuyboxAddToOrderTemplateViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToOrderTemplate;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\nconst _renderAddToWishlist = (addToWishlist: IBuyboxAddToWishlistViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToWishlist;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return (\n \n {dropdowns.map(_renderConfigureDropdown)}\n \n );\n};\n\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\n if (!socialShare || socialShare.length === 0) {\n return undefined;\n }\n\n return (\n <>\n {socialShare[0]}\n \n );\n};\n\nconst _renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n \n {heading}\n {errors}\n \n {select}\n \n );\n};\n\nconst _renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\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\nconst _renderQuantity = (quantity: IBuyboxProductQuantityViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\n\n return (\n \n \n {heading}\n {errors}\n \n {input}\n \n );\n};\n\nconst _renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n \n {heading}\n \n {input}\n \n );\n};\n\nconst _renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\n const { ContainerProps, errors, input } = shopSimilarItem;\n\n return (\n \n {errors}\n {input}\n \n );\n};\nexport default BuyboxView;\n"],"names":["BulkPurchase","React","constructor","props","super","_toggleCollapse","this","setState","state","isExpanded","render","hasDimensionsInProps","ArrayExtensions","productDimensions","hasDimensionsInData","data","result","viewProps","container","moduleProps","className","classnames","config","content","_renderCollapseContent","renderView","_renderCollapseButton","_renderCollapse","Button","onClick","title","resources","bulkPurchaseHeaderTitle","Collapse","isOpen","_renderMainContent","isMobileDevice","isMobile","variant","VariantType","context","request","RichTextComponent","text","bulkPurchaseDescriptionText","_renderMatrix","ProductDimensionsMatrix","dimensions","orderTemplates","customerInformation","modalCloseButtonReference","onClickFindInStoreHandler","callbacks","async","storeSelectorStateManager","cart","productAvailableQuantity","modules","selectedProduct","quantity","dataProduct","product","multiplePickupStoreSwitchName","retailMulitplePickupMFeatureState","featureState","find","Name","IsEnabled","missingDimensions","Dimensions","filter","dimension","DimensionValue","Value","storeSelectorId","Object","keys","length","storeSelector","id","updateErrorState","errorHost","configureErrors","getConfigureErrors","openDialog","parentElementRef","deliveryOptions","undefined","onLocationSelected","orgUnitLocation","deliveryMode","Promise","resolve","behavior","app","addToCartBehavior","addProductToCart","count","location","then","status","substatus","productAvailability","changeModalOpen","ProductAvailableQuantity","shippingInventory","shipping","deliveryType","DeliveryMode","failureResult","failureReason","cartActionResult","otherError","getGenericError","navigationUrl","getUrlSync","actionContext","AddToCartBehavior","window","assign","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","dialogStrings","goToCartText","buyBoxGoToCartText","continueShoppingText","buyBoxContinueShoppingText","closeNotificationLabel","headerItemOneText","buyBoxSingleItemText","headerItemFormatText","buyBoxMultiLineItemFormatText","headerMessageText","buyBoxHeaderMessageText","freePriceText","priceFree","originalPriceText","currentPriceText","addedQuantityText","notification","ItemSuccessfullyAddedToCartNotification","gridSettings","productPrice","typeName","NotificationsManager","addNotification","catch","error","exception","debug","message","findInStoreOnClick","getBuyboxFindInStore","slots","findInStoreHeaderText","descriptionTextToShowAllPickupOptions","channel","PickupDeliveryModeCode","price","channelDeliveryOptionConfig","errorState","quantityError","modalOpen","isSectionDisabled","buttonText","description","isStockCheck","buyboxResources","isLoading","pickupInventory","findInStoreLinkText","findInStoreDescriptionText","pickup","isAggregatedInventory","IsProductAvailable","findInStoreNotAvailableTextButton","findInStoreNotAvailableDescription","getFindInStoreInventorySettings","enableStockCheck","DeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","map","delivery","deliveryCode","Code","push","matchDeliveryOptions","PickupDeliveryModeCodes","option","priceComponent","PriceComponent","popupProps","imageSettings","productQuantity","setModalOpen","renderModalPopup","Popup","ContainerProps","openFindInStoreDialog","heading","Heading","headingTag","productPickupOptionList","item","Description","key","errors","BuyboxErrorBlock","showError","button","color","ref","disabled","modal","Buybox","dimensionUpdateQueue","FinitePromiseQueue","buyboxCallbacks","updateQuantity","newQuantity","newErrorState","updateSelectedProduct","newSelectedProduct","newInventory","newPrice","newDeliveryOptions","productDeliveryOptions","_updatePrice","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","enqueue","_updateDimensions","FinitePromiseQueueError","getDropdownName","dimensionType","_getDropdownName","isModalOpen","changeUpdatingDimension","isUpdatingDimension","changeUpdatingDeliveryOptions","isUpdatingDeliveryOptions","updateKeyInPrice","customPrice","customAmountError","isPriceKeyedIn","keyInPriceAmount","_onBulkPurchaseLinkClick","bulkPurchaseModule","boundingRect","getBoundingClientRect","scrollTo","left","top","hasProductDimensions","dimensionsToUpdate","clearErrorState","previousState","_getProductVariant","productVariant","productVariantPromise","promises","_getDimensionsForSelectedVariant","mappedDimensions","_hydrateInventoryInfo","_hydratePrice","_hydrateDeliveryOptions","_updateQuantitiesInState","all","isGiftCard","IsGiftCard","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeSize","productDimensionTypeAmount","productDimensionTypeStyle","min","max","ItemTypeValue","ReleasedProductType","isServiceItem","mediaGallery","inventoryLevel","dimensionValuesWithInventory","value","hasAvailableProducts","some","getInventoryLevelCodeFromDimensionValue","InventoryLevelValues","ModuleProps","ProductInfoContainerProps","MediaGalleryContainerProps","getBuyboxProductTitle","getBuyboxProductDescription","bulkPurchaseLink","_renderBuyboxBulkPurchaseLink","unitOfMeasure","getBuyboxProductUnitOfMeasure","configure","getBuyboxProductConfigure","findInStore","getBuyboxProductPrice","addToCart","getBuyboxAddToCart","addToOrderTemplate","getBuyboxProductAddToOrderTemplate","addToWishlist","getBuyboxProductAddToWishlist","rating","hideRating","getBuyboxProductRating","getBuyboxProductQuantity","inventoryLabel","getBuyBoxInventoryLabel","shopSimilarLook","enableShopSimilarLooks","getBuyboxShopSimilarButton","ShopSimiliarButtonType","shopSimilarDescription","enableShopSimilarDescription","keyInPrice","enableKeyInPrice","isCustomPriceSelected","getBuyboxKeyInPrice","quantityLimitsMessages","getQuantityLimitsMessages","isBulkPurchaseEnabled","msdyn365Commerce","bulkPurchaseModules","Array","from","document","getElementsByClassName","bulkPurchaseLinkText","CustomerContextualPrice","apiSettings","channelId","DimensionValues","DimensionTypeValue","RecordId","toString","ExtensionProperties","setDimensionValuesToQuery","requestContext","url","requestUrl","selectedProductPromise","getSelectedVariant","SelectedVariantInput","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","newShippingQuantity","toLowerCase","getPriceForSelectedVariant","PriceForSelectedVariantInput","retailMultiplePickupFeatureState","getDeliveryOptionsForSelectedVariant","GetDeliveryOptionsForSelectedVariantInput","_isOrderQuantityLimitsFeatureEnabled","Behavior","MinimumQuantity","MaximumQuantity","maxQuantityForCartLineItem","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","featureStatuses","RetailDefaultOrderQuantityLimitsFeatureName","customerInfo","information","IsB2b","_renderAddToCart","errorBlock","Node","_renderAddToOrderTemplate","_renderAddToWishlist","_renderConfigure","dropdowns","_renderConfigureDropdown","_renderSocialShare","socialShare","dropdown","LabelContainerProps","select","_renderFindInStore","_renderQuantity","input","_renderKeyInPrice","_renderShopSimilarItem","shopSimilarItem","Module"],"sourceRoot":""}