{"version":3,"file":"static/js/6e0349f301149e1d9d93.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/britax-mini-cart/britax-mini-cart.props.autogenerated.ts?7bf1","webpack://Msdyn365.Commerce.Online/./src/modules/britax-mini-cart/components/flyout-cart-line-items.tsx?1935","webpack://Msdyn365.Commerce.Online/./src/modules/britax-mini-cart/utils/get-products-in-mini-cart.ts?9c31","webpack://Msdyn365.Commerce.Online/./src/modules/britax-mini-cart/britax-mini-cart.tsx?7e41","webpack://Msdyn365.Commerce.Online/./src/modules/britax-mini-cart/britax-mini-cart.view.tsx?125b","webpack://Msdyn365.Commerce.Online/./src/themes/britax-adventureworks/views/britax-mini-cart.view.tsx?283f","webpack://Msdyn365.Commerce.Online/./lib/britax-mini-cart/module-registration.js?c015","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IBritaxMiniCart containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const enum cartLinesSortOrder {\r\n ascending = 'ascending',\r\n descending = 'descending'\r\n}\r\n\r\nexport interface IBritaxMiniCartConfig extends Msdyn365.IModuleConfig {\r\n imageSettings?: Msdyn365.IImageSettings;\r\n enableHoverCart?: boolean;\r\n cartLinesSortOrder?: cartLinesSortOrder;\r\n isAnonymousCheckout?: boolean;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IBritaxMiniCartResources {\r\n goToCartButtonTitle: string;\r\n totalPriceFormatString: string;\r\n guestCheckoutButtonTitle: string;\r\n checkoutButtonTitle: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeSize: string;\r\n productDimensionTypeStyle: string;\r\n productDimensionTypeConfiguration: string;\r\n quantityDisplayText: string;\r\n removeCartButtonText: string;\r\n cartLabel: string;\r\n cartQtyLabel: string;\r\n flyoutTitle: string;\r\n salesAgreementPricePrompt: string;\r\n shippingText: string;\r\n checkoutBlockedDueToUnavailableFundsTitle: string;\r\n checkoutBlockedDueToUnavailableFundsMessage: string;\r\n}\r\n\r\nexport interface IBritaxMiniCartProps extends Msdyn365.IModule {\r\n resources: IBritaxMiniCartResources;\r\n config: IBritaxMiniCartConfig;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n OrgUnitLocation,\r\n ProductAvailableQuantity,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '@msdyn365-commerce-modules/cart';\r\n\r\nexport interface IFlyoutCartLineItemsProps {\r\n cartlines: CartLine[];\r\n cartState: ICartState | undefined;\r\n orgUnitLocations: OrgUnitLocation[] | undefined;\r\n resources: ICartlineResourceString;\r\n productAvailabilites: IProductInventoryInformation[] | undefined;\r\n products: SimpleProduct[] | undefined;\r\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\r\n pickupDeliveryModeCode?: string;\r\n catalogs?: ProductCatalog[];\r\n\r\n /**\r\n * GridSettings for the product image in cartline\r\n */\r\n gridSettings: IGridSettings;\r\n\r\n /**\r\n * ImageSettings for the product image in cartline\r\n */\r\n imageSettings: IImageSettings;\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n removeButtonText: string;\r\n outOfStockText: string;\r\n outOfRangeOneText: string;\r\n outOfRangeFormatText: string;\r\n maxCartlineQuantity: number;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n\r\n outOfStockThreshold: number;\r\n isStockCheckEnabled: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n}\r\n\r\nexport interface IFlyoutCartLineItemViewProps {\r\n cartline: React.ReactNode;\r\n remove: React.ReactNode;\r\n storeLocation: React.ReactNode;\r\n hasError: boolean;\r\n\r\n data: {\r\n product: SimpleProduct;\r\n cartline: CartLine;\r\n };\r\n}\r\n\r\nconst _getCartItemAvailableQuantity = (\r\n isStockCheckEnabled: boolean,\r\n outOfStockThreshold: number,\r\n productAvailability?: ProductAvailableQuantity\r\n): number => {\r\n if (isStockCheckEnabled) {\r\n if (\r\n !productAvailability ||\r\n !productAvailability.AvailableQuantity ||\r\n productAvailability.AvailableQuantity <= 0 ||\r\n productAvailability.AvailableQuantity <= outOfStockThreshold\r\n ) {\r\n return 0;\r\n }\r\n return productAvailability.AvailableQuantity - outOfStockThreshold;\r\n }\r\n\r\n return 0;\r\n};\r\n\r\nconst _getCartItemMaxQuantity = (\r\n maxQuantityByConfig: number,\r\n isStockCheckEnabled: boolean,\r\n availableQuantityInStock: number,\r\n isQuantityLimitsFeatureEnabled: boolean,\r\n maxByQuantityLimitsFeature: number\r\n) => {\r\n if (isQuantityLimitsFeatureEnabled) {\r\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\r\n\r\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\r\n // and consider available qty if stock check enabled and max from config in site settings.\r\n if (!maxByQuantityLimitsFeature) {\r\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\r\n }\r\n\r\n return isStockCheckEnabled\r\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\r\n ? maxByQuantityLimitsFeatureResult\r\n : availableQuantityInStock\r\n : maxByQuantityLimitsFeatureResult;\r\n }\r\n if (isStockCheckEnabled) {\r\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\r\n }\r\n return maxQuantityByConfig;\r\n};\r\n\r\n/**\r\n * On Remove Click functionality.\r\n * @param removeItemClickHandler -Remove item click function.\r\n * @param cartline -CartLine.\r\n * @returns Remove change value.\r\n */\r\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\r\n removeItemClickHandler(cartline);\r\n};\r\nconst _assembleNode = (\r\n cartline: CartLine,\r\n product: SimpleProduct,\r\n props: IFlyoutCartLineItemsProps,\r\n index: number,\r\n foundProductAvailability?: ProductAvailableQuantity,\r\n foundProductDeliveryOptions?: ProductDeliveryOptions\r\n): IFlyoutCartLineItemViewProps => {\r\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\r\n\r\n const availableQuantityInStock = _getCartItemAvailableQuantity(\r\n props.isStockCheckEnabled,\r\n props.outOfStockThreshold,\r\n foundProductAvailability\r\n );\r\n const maxQuantity =\r\n product &&\r\n _getCartItemMaxQuantity(\r\n props.maxCartlineQuantity,\r\n props.isStockCheckEnabled,\r\n availableQuantityInStock,\r\n props.isQuantityLimitsFeatureEnabled,\r\n product?.Behavior?.MaximumQuantity || 0\r\n );\r\n\r\n // Check if the product is service or not by product type\r\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\r\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n\r\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\r\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\r\n const fullUrl = new URL(productUrl, window.location.href);\r\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\r\n productUrl = fullUrl.href;\r\n }\r\n\r\n return {\r\n data: {\r\n product,\r\n cartline\r\n },\r\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\r\n cartline: (\r\n \r\n ),\r\n remove: (\r\n \r\n {removeButtonText}\r\n \r\n ),\r\n storeLocation: _renderStoreLocation(cartline, props)\r\n };\r\n};\r\n\r\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\r\n let deliverylocation;\r\n if (cartLine && cartLine.FulfillmentStoreId) {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\r\n\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\r\n });\r\n }\r\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\r\n const location = delivery?.Description;\r\n\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n if (location) {\r\n deliverylocation = `${location}, ${orgUnitName}`;\r\n } else {\r\n deliverylocation = `${orgUnitName}`;\r\n }\r\n } else {\r\n deliverylocation = props.resources.shippingText;\r\n }\r\n return deliverylocation;\r\n};\r\n\r\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\r\n if (cartLine && cartLine.FulfillmentStoreId) {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\r\n\r\n if (orgUnitName) {\r\n return (\r\n
\r\n {orgUnitName}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\r\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\r\n return '';\r\n }\r\n\r\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\r\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\r\n });\r\n\r\n if (foundLocation) {\r\n return foundLocation.OrgUnitName;\r\n }\r\n return fulfillmentStoreId;\r\n};\r\n\r\nconst _assembleCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: IFlyoutCartLineItemsProps\r\n): IFlyoutCartLineItemViewProps[] | null => {\r\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\r\n\r\n if (!products || products.length === 0) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n cartlines.map((cartline, index) => {\r\n let product;\r\n if (props.isQuantityLimitsFeatureEnabled) {\r\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\r\n // to check productId and WarehouseId for identification.\r\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\r\n } else {\r\n product = getProductByProductId(cartline.ProductId, products);\r\n }\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\r\n });\r\n }\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n if (product) {\r\n reactNodes.push(\r\n _assembleNode(\r\n cartline,\r\n product,\r\n props,\r\n index,\r\n foundProductAvailability?.ProductAvailableQuantity,\r\n foundProductDeliveryOption\r\n )\r\n );\r\n }\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n */\r\n\r\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return _assembleCartlines(cartlines, products, props);\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ActiveCartProductsInput,\r\n getActiveCartProductsAction,\r\n getAvailabilitiesForCartLineItems,\r\n getDeliveryOptionsForCartLineItems,\r\n IProductInventoryInformation,\r\n ProductAvailabilitiesForCartLineItems,\r\n ProductDeliveryOptionsForCartLineItems\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IMiniCartData entity interface.\r\n */\r\nexport interface IMiniCartData {\r\n products?: SimpleProduct[];\r\n productAvailabilites?: IProductInventoryInformation[];\r\n deliveryOptions?: ProductDeliveryOptions[];\r\n}\r\n\r\nexport const createInput = () => {\r\n return new ActiveCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a mini cart data.\r\n * @param ctx\r\n * @param cartState\r\n */\r\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\r\n const miniCartData: IMiniCartData = {};\r\n\r\n const cart = cartState.cart;\r\n\r\n // If there are cart lines, make call to get products\r\n // If there are invocie linese, then there is no products, so don't make call to get products\r\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\r\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\r\n .then(products => {\r\n if (products) {\r\n miniCartData.products = products;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\r\n .then(availableQuantity => {\r\n if (availableQuantity) {\r\n miniCartData.productAvailabilites = availableQuantity;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\r\n .then(deliveryOptions => {\r\n if (deliveryOptions) {\r\n miniCartData.deliveryOptions = deliveryOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n }\r\n\r\n return miniCartData;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\r\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n CartLineValidationResultsByLineId,\r\n OrgUnitLocation\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n INodeProps,\r\n ITelemetryContent,\r\n TelemetryConstant,\r\n UncontrolledTooltip,\r\n updateMaxQuantityForCartLineItem,\r\n urlCheck\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\n\r\nimport { IBritaxMiniCartData } from './britax-mini-cart.data';\r\nimport { cartLinesSortOrder, IBritaxMiniCartProps } from './britax-mini-cart.props.autogenerated';\r\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\r\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\r\n\r\nexport interface IMiniCartState {\r\n miniCartData: IMiniCartData;\r\n orgUnitLocations?: OrgUnitLocation[];\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n isCartValid: boolean;\r\n}\r\n\r\nexport interface ICartIconViewProps extends IBritaxMiniCartProps {\r\n className: string;\r\n cartIcon: React.ReactNode;\r\n FlyoutContainer?: INodeProps;\r\n CartlinesWrapper: INodeProps;\r\n miniCartWrapper: INodeProps;\r\n miniCartItemWrapper: INodeProps;\r\n cartlines?: IFlyoutCartLineItemViewProps[];\r\n flyoutTitle: React.ReactNode;\r\n totalPrice: React.ReactNode;\r\n checkoutAsGuestButton?: React.ReactNode;\r\n checkoutAsSignInUserButton?: React.ReactNode;\r\n goToCartButton?: React.ReactNode;\r\n waitingComponent?: React.ReactNode;\r\n isCartLoading: boolean;\r\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\r\n\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n}\r\n\r\n/**\r\n *\r\n * Cart component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass CartIcon extends React.Component, IMiniCartState> {\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\r\n\r\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\r\n\r\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n private lastValidatedCartVersion: number | undefined;\r\n\r\n constructor(props: IBritaxMiniCartProps) {\r\n super(props);\r\n this.state = {\r\n miniCartData: {},\r\n isCartValid: true,\r\n isQuantityLimitsFeatureEnabled: false\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\r\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\r\n\r\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\r\n\r\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\r\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const context = this.props.context.actionContext;\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n this.setState({\r\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\r\n });\r\n }\r\n );\r\n await this._setQuantityLimitsFeatureFlag();\r\n\r\n this.setState({\r\n orgUnitLocations: this.props.data.orgUnitLocations?.result\r\n });\r\n\r\n this._validateCart();\r\n }\r\n\r\n public componentDidUpdate(prevProps: IBritaxMiniCartProps): void {\r\n this._validateCart();\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IBritaxMiniCartProps, nextState: IMiniCartState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\r\n public render(): JSX.Element | null {\r\n const {\r\n id,\r\n typeName,\r\n config: { enableHoverCart, isAnonymousCheckout },\r\n context: {\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n },\r\n context,\r\n resources\r\n } = this.props;\r\n\r\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\r\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n const hasInvoiceLine = cart?.hasInvoiceLine;\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n const cartLines = this._getCartLines();\r\n const validInventoryAcrossCartLines = validateCartLinesInventory(\r\n cart?.cart.CartLines ?? [],\r\n this.state.miniCartData.productAvailabilites ?? [],\r\n this.props.context.actionContext,\r\n this.state.miniCartData.products ?? [],\r\n emailDeliveryModeCode\r\n );\r\n const hasError =\r\n !validInventoryAcrossCartLines?.isValid ||\r\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\r\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\r\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\r\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\r\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\r\n const flyoutTitle = resources.flyoutTitle;\r\n const flyoutTooltip = {\r\n tag: UncontrolledTooltip,\r\n shouldShowMiniCart,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__flyout-container',\r\n trigger: 'hover',\r\n displayMode: 'FLYOUT',\r\n target: id,\r\n shouldShowCloseButton: true,\r\n cartPageUrl: cartUrl,\r\n hideAriaHidden: true\r\n };\r\n\r\n // If there are invoice lines, don't update mini cart price\r\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\r\n let priceString = price\r\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\r\n : resources.totalPriceFormatString.replace('{price}', '{price}');\r\n priceString = priceString.replace('{price}', 'price');\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\r\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\r\n feature => feature.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n cartIcon: (\r\n \r\n ),\r\n cartlines: cartLines,\r\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\r\n CartlinesWrapper: {\r\n className: 'ms-cart-icon__cart-lines'\r\n },\r\n miniCartWrapper: {\r\n className: classnames('ms-cart-icon'),\r\n id: this.props.id\r\n },\r\n miniCartItemWrapper: {\r\n className: classnames('msc-cart-lines-item')\r\n },\r\n\r\n // If there are invoice lines, don't update mini cart checkout button\r\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\r\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\r\n checkoutAsSignInUserButton:\r\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\r\n \r\n {resources.checkoutButtonTitle}\r\n \r\n ) : null,\r\n checkoutAsGuestButton:\r\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\r\n \r\n {resources.guestCheckoutButtonTitle}\r\n \r\n ) : null,\r\n goToCartButton: (\r\n \r\n {goToCartButtonText}\r\n \r\n ),\r\n checkoutBlockedDueToUnavailableFunds: null,\r\n flyoutTitle: {flyoutTitle},\r\n totalPrice:
{priceString}
\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _validateCart(): void {\r\n const {\r\n data: { cart }\r\n } = this.props;\r\n const cartVersion = cart.result?.cart?.Version ?? undefined;\r\n if (this.lastValidatedCartVersion === cartVersion) {\r\n return;\r\n }\r\n\r\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\r\n\r\n if (this.state.isQuantityLimitsFeatureEnabled) {\r\n validateCartAsync(cart, this.props.telemetry, this.props.context)\r\n .then((result: CartLineValidationResultsByLineId | undefined) => {\r\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\r\n })\r\n .catch(() => {\r\n this.setState({ isCartValid: false });\r\n });\r\n } else {\r\n this.setState({ isCartValid: true });\r\n }\r\n }\r\n\r\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n\r\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\r\n }\r\n\r\n /**\r\n * Sort cartline items.\r\n * @param cartlines - Cartlines to be sorted.\r\n * @param sortOrder - Ascending or descending.\r\n * @returns - Sorted cartlines.\r\n */\r\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\r\n const lines: CartLine[] = [...cartlines];\r\n const zero: number = 0;\r\n\r\n if (sortOrder === cartLinesSortOrder.descending) {\r\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\r\n }\r\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\r\n };\r\n\r\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\r\n const {\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const imageSettings = this._getImageSettings(config.imageSettings);\r\n const cart = this.props.data.cart && this.props.data.cart.result;\r\n\r\n // Cart-icon could be placed in each page\r\n // so we check cart content to reduce number of RS calls\r\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\r\n ? FlyoutCartLineItems({\r\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\r\n products: this.state.miniCartData.products,\r\n productAvailabilites: this.state.miniCartData.productAvailabilites,\r\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\r\n imageSettings,\r\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\r\n inputQuantityAriaLabel: '', // Not used\r\n discountStringText: '', // Not used\r\n originalPriceText: '',\r\n currentPriceText: '',\r\n shippingChargesText: '',\r\n shippingText: resources.shippingText\r\n },\r\n telemetry,\r\n removeButtonText: resources.removeCartButtonText,\r\n outOfStockText: '', // Not used\r\n outOfRangeOneText: '', // Not used\r\n outOfRangeFormatText: '', // Not used\r\n cartState: cart,\r\n orgUnitLocations: this.state.orgUnitLocations,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n telemetryContent: this.telemetryContent,\r\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\r\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\r\n catalogs: this.props.data.catalogs?.result\r\n })\r\n : null;\r\n }\r\n\r\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\r\n return (\r\n imageSettings || {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n }\r\n );\r\n };\r\n\r\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n if (this.props.data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n this.props.data.cart.result.removeCartLines(input).catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n\r\n private async _setQuantityLimitsFeatureFlag(): Promise {\r\n const featureStatuses = await this.props.data.featureState;\r\n\r\n const isChannelQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\r\n )?.IsEnabled || false;\r\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\r\n this.setState({ isQuantityLimitsFeatureEnabled: true });\r\n return;\r\n }\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n\r\n try {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get feature states');\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: true });\r\n } else {\r\n this.props.data.customerInformation\r\n .then(customerInfo => {\r\n const result =\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\r\n this.setState({ isQuantityLimitsFeatureEnabled: result });\r\n })\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to get customer info');\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default CartIcon;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartIconViewProps } from './britax-mini-cart';\r\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\r\n\r\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n return (\r\n \r\n {cartLine.cartline}\r\n {cartLine.storeLocation}\r\n {cartLine.remove}\r\n \r\n );\r\n });\r\n};\r\n\r\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\r\n \r\n {props.cartIcon}\r\n {props.FlyoutContainer ? (\r\n \r\n {props.flyoutTitle}\r\n {props.checkoutBlockedDueToUnavailableFunds}\r\n {_renderCartlines(props.cartlines, props)}\r\n {props.totalPrice}\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n {props.goToCartButton}\r\n \r\n ) : (\r\n false\r\n )}\r\n \r\n);\r\n\r\nexport default CartIconView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n// import { Node } from '@msdyn365-commerce-modules/utilities';\r\n// import * as React from 'react';\r\n\r\nimport { ICartIconViewProps } from '../../../modules/britax-mini-cart/./britax-mini-cart';\r\nimport { IFlyoutCartLineItemViewProps } from '../../../modules/britax-mini-cart/./components/flyout-cart-line-items';\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 { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { ICartViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\nimport { IBritaxMiniCartProps as ICartIconExtensionProps } from '../definition-extensions/britax-mini-cart.ext.props.autogenerated';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n}\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.-\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n return (\r\n \r\n {cartLine.cartline}\r\n {cartLine.storeLocation}\r\n {cartLine.remove}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n const cart = props.data.cart.result ?? undefined;\r\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n const totalPrice = price\r\n ? props.context.cultureFormatter.formatCurrency(price)\r\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n return cart && !cart.hasInvoiceLine ? (\r\n
\r\n \r\n {props.resources.totalPriceFormatString}\r\n {totalPrice}\r\n \r\n
\r\n ) : (\r\n <>\r\n );\r\n};\r\n\r\n/**\r\n * Initiate subtotal message.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderSubtotalMessage = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n const cart = props.data.cart.result ?? undefined;\r\n return cart && !cart.hasInvoiceLine ?

{??props.resources.subTotalMessage}

: null;\r\n};\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent<\r\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\r\n ICartIconViewState\r\n> {\r\n private isAutoDisplayTriggered: boolean;\r\n\r\n private readonly cartIconRef: React.RefObject = React.createRef();\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n const cart = this.props.data.cart.result ?? undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n {this.props.flyoutTitle}\r\n {/*{this._renderCartItemCount(this.props)}*/}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\r\n {this.props.checkoutBlockedDueToUnavailableFunds}\r\n {renderCartlines(this.props.cartlines, this.props)}\r\n \r\n \r\n {this.props.slots.promoContentItem}\r\n {renderTotalPrice(this.props)}\r\n {renderSubtotalMessage(this.props)}\r\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\r\n {this.props.checkoutAsSignInUserButton}\r\n {this.props.checkoutAsGuestButton}\r\n \r\n {this.props.data.cart.result?.isEmpty ? (\r\n \r\n {this.props.resources.continueShoppingButtonTitle}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = (): void => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.cartIconRef.current?.focus();\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
{priceString}
\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
\n {orgUnitName}\n
\n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","module.exports = React;","module.exports = ReactDOM;"],"names":["cartLinesSortOrder","_renderDeliveryLocation","cartLine","props","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","length","find","deliveryOption","ProductId","delivery","DeliveryOptions","option","Code","DeliveryMode","location","Description","resources","shippingText","_renderStoreLocation","React","className","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","cartlines","products","reactNodes","map","cartline","index","product","foundProductAvailability","_foundProductAvailabi","isQuantityLimitsFeatureEnabled","getProductByProductIdAndWarehouse","WarehouseId","cartState","getProductByProductId","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","push","_assembleNode","foundProductDeliveryOptions","_product$Behavior","imageSettings","gridSettings","id","typeName","context","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","Behavior","MaximumQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","RemoveCartItem","removeCartItemAttribute","getTelemetryAttributes","productUrl","getProductUrlSync","actionContext","undefined","MsDyn365","isBrowser","isChannelTypeB2B","requestContext","_cartline$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","data","hasError","Quantity","CartLineItemComponent","catalogs","currentQuantity","isOutOfStock","key","primaryImageUrl","PrimaryImageUrl","displayMode","channelDeliveryOptionConfig","deliveryLocation","remove","Button","Object","assign","onClick","title","storeLocation","telemetry","error","async","getMiniCartData","ctx","miniCartData","cart","CartLines","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","then","catch","exception","Error","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","apiSettings","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","constructor","super","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","lines","descending","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","_removeItemFromCartHandler","cartlineToRemove","this","result","input","cartLineIds","LineId","toString","removeCartLines","warning","debug","state","isCartValid","getTelemetryObject","request","telemetryPageName","friendlyName","payload","TelemetryEvent","CheckOut","Checkout","checkoutBySignInAttributes","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","reaction","_this$props$data$cart","setState","_setQuantityLimitsFeatureFlag","_validateCart","componentDidUpdate","prevProps","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","_this$props$data$feat","config","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","getUrlSync","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","app","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","channel","EmailDeliveryModeCode","cartLines","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","includeFlyout","status","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","replace","flyoutTitle","flyoutTooltip","tag","UncontrolledTooltip","placement","hideArrow","trigger","target","shouldShowCloseButton","cartPageUrl","hideAriaHidden","price","TotalAmount","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","featureState","feature","Name","IsEnabled","viewProps","_objectSpread","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","CartlinesWrapper","miniCartWrapper","classnames","miniCartItemWrapper","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","goToCartButton","checkoutBlockedDueToUnavailableFunds","totalPrice","renderView","_cart$result$cart$Ver","_cart$result","cartVersion","Version","lastValidatedCartVersion","validateCartAsync","ArrayExtensions","hasElements","ValidationResultsPairs","isAbsoluteUrl","urlCheck","returnURL","msdyn365Commerce","origin","includes","_this$props$data$cata","PickupDeliveryModeCode","FlyoutCartLineItems","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","quantityDisplayString","quantityDisplayText","salesAgreementPricePrompt","inputQuantityAriaLabel","discountStringText","originalPriceText","currentPriceText","shippingChargesText","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","pickupDeliveryModeCode","_featureStatuses$find","_this$props$context","featureStatuses","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find2","customerInformation","customerInfo","IsB2b","__decorate","observer","Node","renderModuleAttributes","_renderCartlines","CartIconView","cartIconRef","_modalContainer","Modal","wrapClassName","isOpen","isModalOpen","toggle","closeModal","_openModal","onTelemetryClick","_this$cartIconRef$cur","current","focus","_renderCartCloseIcon","_escFunction","event","keyCode","KeyCodes","Escape","isAutoDisplayTriggered","componentDidMount","addEventListener","componentWillUnmount","removeEventListener","_this$props$data$cart2","_this$props$data$cart3","_this$props$data$cart4","ref","isEmpty","slots","emptyCart","cartLineIndex","promoContentItem","_props$data$cart$resu","emptyPrice","renderTotalPrice","_props$data$cart$resu2","_React$createElement","Msdyn365","text","subTotalMessageConfig","subTotalMessage","renderSubtotalMessage","continueShoppingButtonTitle","renderCartlines","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","isQuantityEditable","module","exports","ReactDOM"],"sourceRoot":""}