{"version":3,"file":"static/js/6f3feb2aae73791d07d7.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/custom-get-simple-products.ts?5fc7","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-cart-icon/dlvry-cart-icon.props.autogenerated.ts?9fe0","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-cart-icon/components/flyout-cart-line-items.tsx?7742","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-cart-icon/utils/get-products-in-active-cart.ts?d03e","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-cart-icon/utils/get-products-in-mini-cart.ts?9bb3","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-cart-icon/dlvry-cart-icon.tsx?1e5b","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-cart-icon/dlvry-cart-icon.view.tsx?e92b","webpack://Msdyn365.Commerce.Online/./src/themes/dlvry-adventureworks/views/components/carticon.component.tsx?c30e","webpack://Msdyn365.Commerce.Online/./lib/dlvry-cart-icon/module-registration.js?6dc7","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 in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n getCatalogId,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IDictionary,\r\n IGeneric,\r\n IRequestContext\r\n} from '@msdyn365-commerce/core';\r\nimport { getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport {\r\n ArrayExtensions,\r\n generateCacheKey,\r\n QueryResultSettingsProxy,generateProductImageUrl\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Product Input.\r\n */\r\nexport class ProductInput implements IActionInput {\r\n public productId: number;\r\n\r\n public channelId: number;\r\n\r\n public warehouseId?: string;\r\n\r\n public catalogId?: number;\r\n\r\n private readonly apiSettings: ICommerceApiSettings;\r\n\r\n public constructor(\r\n productId: number | string,\r\n apiSettings: ICommerceApiSettings,\r\n channelId?: number,\r\n warehouseId?: string,\r\n requestContext?: IRequestContext,\r\n catalogId?: number\r\n ) {\r\n this.apiSettings = apiSettings;\r\n this.productId = +productId;\r\n this.channelId = channelId || apiSettings.channelId;\r\n this.warehouseId = warehouseId;\r\n this.catalogId = catalogId;\r\n\r\n if (requestContext && catalogId === undefined) {\r\n this.catalogId = getCatalogId(requestContext);\r\n }\r\n }\r\n\r\n public getCacheKey = () =>\r\n generateCacheKey(\r\n this.apiSettings,\r\n { key: 'ProductRecordId', value: this.productId },\r\n { key: 'ChannelId', value: this.channelId },\r\n { key: 'WarehouseId', value: this.warehouseId },\r\n { key: 'CatalogId', value: this.catalogId }\r\n );\r\n\r\n public getCacheObjectType = () => 'SimpleProduct';\r\n\r\n public dataCacheType = (): CacheType => 'none'; //'application';\r\n}\r\n\r\n/**\r\n * Creates the input required to make the retail api call.\r\n * @param inputData\r\n */\r\nexport const createSimpleProductsInput = (inputData: ICreateActionContext>): IActionInput[] => {\r\n let productIds = inputData.config && inputData.config.productIds;\r\n if (!productIds) {\r\n return [];\r\n }\r\n\r\n productIds = typeof productIds === 'string' ? productIds.split(',') : productIds;\r\n return !Array.isArray(productIds)\r\n ? []\r\n : productIds.map((productId: string) => {\r\n return new ProductInput(productId, inputData.requestContext.apiSettings, undefined, undefined, inputData.requestContext);\r\n });\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns the product based on the passed ProductInput.\r\n * @param inputs\r\n * @param ctx\r\n */\r\nexport async function getSimpleProductsAction(inputs: ProductInput[], ctx: IActionContext): Promise {\r\n if (!ArrayExtensions.hasElements(inputs)) {\r\n ctx.trace('[getSimpleProductsAction] Invalid or empty inputs passed.');\r\n return [];\r\n }\r\n\r\n const productIdMapping: IDictionary = {};\r\n\r\n for (let index = 0; index < inputs.length; ++index) {\r\n productIdMapping[inputs[index].productId] = index;\r\n }\r\n\r\n const queryResultSettings = QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx);\r\n queryResultSettings.Paging!.Top = 1000;\r\n\r\n const getProductPromises: Promise[] = [];\r\n const catalogIds = ArrayExtensions.unique(inputs.map(input => input.catalogId));\r\n for (const catalogId of catalogIds) {\r\n const productInputs = inputs.filter(input => input.catalogId === catalogId);\r\n getProductPromises.push(\r\n getByIdsAsync(\r\n { callerContext: ctx, queryResultSettings },\r\n inputs[0].channelId,\r\n productInputs.map(input => input.productId),\r\n inputs[0].warehouseId ?? null,\r\n catalogId ?? 0\r\n )\r\n .then(response => {\r\n return response;\r\n })\r\n .catch(error => {\r\n ctx.telemetry.debug(`[getSimpleProductsAction] Error in getting response from server. ${error}`);\r\n return {};\r\n })\r\n );\r\n }\r\n\r\n const products = ArrayExtensions.flatten(await Promise.all(getProductPromises));\r\n const mappedProducts = products\r\n .map(product => {\r\n try {\r\n const newImageUrl = generateProductImageUrl(product, ctx.requestContext.apiSettings);\r\n\r\n if (newImageUrl) {\r\n product.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return product;\r\n } catch {\r\n ctx.trace('[getSimpleProductsAction] Unable to update ImageURL for Product');\r\n return undefined;\r\n }\r\n })\r\n .reduce((memo: SimpleProduct[], product: SimpleProduct | undefined) => {\r\n if (!product) {\r\n return memo;\r\n }\r\n const index = productIdMapping[product.RecordId];\r\n memo[index] = product;\r\n return memo;\r\n }, []);\r\n\r\n // NOTE: This is not an ideal fix, but will resolve all current issues\r\n return inputs.map(input => {\r\n const foundProduct = mappedProducts.find(product => product && product.RecordId === input.productId);\r\n return foundProduct || {};\r\n });\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-simple-products',\r\n action: >getSimpleProductsAction,\r\n input: createSimpleProductsInput,\r\n isBatched: true\r\n});\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IDlvryCartIcon 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\nimport * as React from 'react';\r\n\r\nexport const enum cartLinesSortOrder {\r\n ascending = 'ascending',\r\n descending = 'descending'\r\n}\r\n\r\nexport interface IDlvryCartIconConfig 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 IDlvryCartIconResources {\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 continueShoppingButtonTitle: string;\r\n subTotalMessage: string;\r\n item: string;\r\n items: string;\r\n emptyPrice: string;\r\n emptyCartButtonText: string;\r\n searchPlaceholderText: string;\r\n emptyCartDescriptionText: string;\r\n emptyCartConfirmButtonText: string;\r\n emptyCartCancelButtonText: string;\r\n}\r\n\r\nexport interface IDlvryCartIconProps extends Msdyn365.IModule {\r\n resources: IDlvryCartIconResources;\r\n config: IDlvryCartIconConfig;\r\n slots: {\r\n emptyCart: React.ReactNode[];\r\n promoContentItem: React.ReactNode[];\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { 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\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\r\nimport { Cart, CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { ArrayExtensions, createGetFeatureStateInput, getCustomer, GetCustomerInput, getFeatureState } from '@msdyn365-commerce-modules/retail-actions';\r\nimport getSimpleProducts, { ProductInput } from '../../../actions/custom-get-simple-products';\r\n\r\n/**\r\n * Input class for activeCartWithProducts data action.\r\n */\r\nexport class ActiveCartProductsInput implements IActionInput {\r\n public getCacheKey = () => 'ActiveCartProducts';\r\n\r\n public getCacheObjectType = () => 'ActiveCartProducts';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext) => {\r\n return new ActiveCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a cart object based on the passed GetCartInput.\r\n * @param input\r\n * @param ctx\r\n */\r\nexport async function getActiveCartProductsAction(input: ActiveCartProductsInput, ctx: IActionContext): Promise {\r\n // If no cart ID is provided in input, we need to create a cart object\r\n if (!input) {\r\n throw new Error('[getActiveCartWithProducts]No valid Input was provided, failing');\r\n }\r\n\r\n const cartState = await getCartState(ctx);\r\n const cart = cartState.cart;\r\n\r\n const isQuantityLimitsFeatureIsOn: boolean = await isOrderQuantityLimitsFeatureEnabled(ctx);\r\n\r\n if (isQuantityLimitsFeatureIsOn) {\r\n return getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn(cart, ctx);\r\n }\r\n\r\n // If there are cart lines, make call to get products\r\n if (!cartState.hasInvoiceLine && cart && cart.CartLines && cart.CartLines.length > 0) {\r\n ctx.trace('Getting cart product information...');\r\n return getSimpleProducts(\r\n cart.CartLines.map(cartLine => {\r\n if (cartLine.ProductId) {\r\n return new ProductInput(\r\n cartLine.ProductId,\r\n ctx.requestContext.apiSettings,\r\n undefined,\r\n undefined,\r\n ctx.requestContext,\r\n cartLine.CatalogId\r\n );\r\n }\r\n return undefined;\r\n }).filter(Boolean),\r\n ctx\r\n )\r\n .then((products: SimpleProduct[]) => {\r\n if (products) {\r\n return products;\r\n }\r\n return [];\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(error.toString());\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug('[getActiveCartWithProducts]Unable to hydrate cart with product information');\r\n throw new Error('[getActiveCartWithProducts]Unable to hydrate cart with product information');\r\n });\r\n }\r\n\r\n ctx.trace('[getActiveCartWithProducts]No Products Found in cart');\r\n return [];\r\n}\r\n\r\nexport const getActiveCartProductsActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-products-in-active-cart',\r\n action: >getActiveCartProductsAction,\r\n input: createInput\r\n});\r\nexport default getActiveCartProductsActionDataAction;\r\n\r\nasync function getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn(cart: Cart, ctx: IActionContext): Promise {\r\n const productIdsByWarehouseId: Map = new Map();\r\n let resultProducts: SimpleProduct[] = [];\r\n cart.CartLines?.forEach(cartLine =>\r\n productIdsByWarehouseId.has(cartLine.WarehouseId!)\r\n ? productIdsByWarehouseId.get(cartLine.WarehouseId!)?.push(cartLine)\r\n : productIdsByWarehouseId.set(cartLine.WarehouseId!, [cartLine])\r\n );\r\n return Promise.all(\r\n [...productIdsByWarehouseId].map(([entryWarehouseId, entryProductIds]) => {\r\n return getSimpleProducts(\r\n entryProductIds\r\n .map(cartLine => {\r\n if (cartLine.ProductId) {\r\n return new ProductInput(\r\n cartLine.ProductId,\r\n ctx.requestContext.apiSettings,\r\n undefined,\r\n entryWarehouseId,\r\n ctx.requestContext,\r\n cartLine.CatalogId\r\n );\r\n }\r\n return undefined;\r\n })\r\n .filter(Boolean),\r\n ctx\r\n ).then((products: SimpleProduct[]) => {\r\n if (products) {\r\n resultProducts = products.reduce((accum, product) => {\r\n if (product) {\r\n accum.push(product);\r\n }\r\n return accum;\r\n }, resultProducts);\r\n }\r\n });\r\n })\r\n ).then(() => resultProducts);\r\n}\r\n\r\nasync function isOrderQuantityLimitsFeatureEnabled(ctx: IActionContext): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = ctx.requestContext.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const featureStates = await getFeatureState(createGetFeatureStateInput(ctx), ctx);\r\n let isQuantityLimitsFeatureEnabledInHq = false;\r\n if (ArrayExtensions.hasElements(featureStates)) {\r\n isQuantityLimitsFeatureEnabledInHq =\r\n featureStates.find(\r\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n }\r\n\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return Promise.resolve(true);\r\n }\r\n\r\n return getCustomer(new GetCustomerInput(ctx.requestContext.apiSettings), ctx)\r\n .then(customerInfo => {\r\n return (\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n })\r\n .catch((error: Error) => {\r\n ctx.telemetry.warning(error.message);\r\n ctx.telemetry.debug('Unable to get customer info');\r\n return false;\r\n });\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { 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 // @ts-expect-error\r\n getAvailabilitiesForCartLineItems,\r\n // @ts-expect-error\r\n getDeliveryOptionsForCartLineItems,\r\n IProductInventoryInformation,\r\n // @ts-expect-error\r\n ProductAvailabilitiesForCartLineItems,\r\n // @ts-expect-error\r\n ProductDeliveryOptionsForCartLineItems\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getActiveCartProductsAction } from './get-products-in-active-cart';\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 const productsPromise = getActiveCartProductsAction(new ActiveCartProductsInput(), ctx);\r\n const availabilityPromise = Promise.resolve(undefined); // getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx);\r\n const deliveryOptionsPromise = Promise.resolve(undefined); // getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx);\r\n\r\n await Promise.all([productsPromise, availabilityPromise, deliveryOptionsPromise])\r\n .then(([products, availability, deliveryOptions]) => {\r\n if (products) {\r\n miniCartData.products = products;\r\n }\r\n if (availability) {\r\n miniCartData.productAvailabilites = availability;\r\n }\r\n if (deliveryOptions) {\r\n miniCartData.deliveryOptions = deliveryOptions;\r\n }\r\n return miniCartData;\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 { IDlvryCartIconData } from './dlvry-cart-icon.data';\r\nimport { cartLinesSortOrder, IDlvryCartIconProps } from './dlvry-cart-icon.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 IDlvryCartIconProps {\r\n className: string;\r\n telemetryContent?: ITelemetryContent;\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: IDlvryCartIconProps) {\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: IDlvryCartIconProps): void {\r\n this._validateCart();\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IDlvryCartIconProps, 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 const priceString = price\r\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\r\n : '';\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 { Button, Node, KeyCodes, onTelemetryClick, getPayloadObject, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport * as React from 'react';\r\nimport classnames from 'classnames';\r\n\r\nimport { ICartIconViewProps } from './dlvry-cart-icon';\r\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\r\nimport CartLineItemComponent from '../../themes/dlvry-adventureworks/views/components/cartlineitem.component';\r\nimport CartIconComponent from '../../themes/dlvry-adventureworks/views/components/carticon.component';\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\r\n // Component override stopped working in mini-cart after 9.48, force it here\r\n const cartLineProps = (cartLine.cartline as React.ReactElement).props;\r\n const cartLineComp = ;\r\n\r\n return (\r\n \r\n \r\n {cartLineComp}\r\n {/* {cartLine.cartline} */}\r\n \r\n {cartLine.storeLocation}\r\n {cartLine.remove}\r\n \r\n );\r\n });\r\n};\r\n\r\nconst renderTotalPrice = (props: ICartIconViewProps): JSX.Element | null => {\r\n const cart = props.data.cart.result ?? undefined;\r\n // Calculate total price from cart lines instead of cart object\r\n const sumPrice = props.data.cart.result?.cart.CartLines\r\n ?.map(x => (x.NetAmountWithoutTax || (x.Price! * (x.Quantity || 1))))\r\n .reduce((sum, price) => sum + price, 0);\r\n const sumPriceFormatString = sumPrice\r\n ? props.context.cultureFormatter.formatCurrency(sumPrice)\r\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n\r\n return cart && !cart.hasInvoiceLine ? (\r\n
\r\n \r\n {props.resources.totalPriceFormatString}\r\n {sumPriceFormatString}\r\n \r\n
\r\n ) : (\r\n <>\r\n );\r\n};\r\n\r\nconst getModalContainerProps = (isModalOpen: boolean, closeModal: () => void): 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: isModalOpen,\r\n toggle: closeModal\r\n };\r\n};\r\n\r\nconst CartIconView: React.FC = (props: ICartIconViewProps) => {\r\n const cartIconRef = React.useRef(null);\r\n const isAutoDisplayTriggered = React.useRef(false);\r\n const [isModalOpen, setIsModalOpen] = React.useState(false);\r\n const [filter, setFilter] = React.useState('');\r\n const [showEmptyCartConfirmation, setShowEmptyCartConfirmation] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n const escHandler = (event: KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Escape) {\r\n if (showEmptyCartConfirmation) {\r\n setShowEmptyCartConfirmation(false);\r\n } else if (isModalOpen) {\r\n cartIconRef.current?.focus();\r\n setIsModalOpen(false);\r\n }\r\n }\r\n };\r\n\r\n window.addEventListener('keydown', escHandler, false);\r\n\r\n return () => {\r\n window.removeEventListener('keydown', escHandler, false);\r\n };\r\n }, [isModalOpen, setIsModalOpen, cartIconRef, showEmptyCartConfirmation, setShowEmptyCartConfirmation]);\r\n\r\n const cart = props.data.cart.result ?? undefined;\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n\r\n if (shouldShowMiniCart) {\r\n if (!isAutoDisplayTriggered.current) {\r\n // First time trigger auto mini cart.\r\n setIsModalOpen(true);\r\n isAutoDisplayTriggered.current = true;\r\n } else if (!isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n isAutoDisplayTriggered.current = false;\r\n }\r\n }\r\n\r\n const totalItemsInCart = cart && cart.cart.CartLines ? cart.cart.CartLines.length : 0;\r\n const goToCartButtonText = props.resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\r\n\r\n const _openModal = React.useCallback(() => {\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(props.telemetryContent!, payLoad, 'cart-icon');\r\n setIsModalOpen(true);\r\n }, [props.telemetryContent, setIsModalOpen]);\r\n\r\n const _closeModal = React.useCallback(() => {\r\n cartIconRef.current?.focus();\r\n setIsModalOpen(false);\r\n }, [cartIconRef, setIsModalOpen]);\r\n\r\n const _renderCartItemCount = () => {\r\n const defaultCartItemCount: number = 0;\r\n\r\n const cartItemlength = cart && cart.cart.CartLines ? cart.cart.CartLines.length : defaultCartItemCount;\r\n const cartItemCount = `${cartItemlength} ${props.resources.items}`;\r\n\r\n return {cartItemCount};\r\n };\r\n\r\n const doFilter = React.useCallback((cartLine: IFlyoutCartLineItemViewProps) => {\r\n if (!filter) {\r\n return true;\r\n }\r\n\r\n const product = cartLine.data.product;\r\n\r\n return product.Name?.toLocaleLowerCase().includes(filter.toLocaleLowerCase()) ||\r\n product.ItemId?.toLocaleLowerCase().includes(filter.toLocaleLowerCase());\r\n }, [filter]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {props.flyoutTitle}\r\n {_renderCartItemCount()}\r\n \r\n \r\n \r\n )}\r\n \r\n {renderCartlines(props.cartlines?.filter(doFilter), props)}\r\n \r\n \r\n \r\n {props.slots.promoContentItem}\r\n {renderTotalPrice(props)}\r\n

{props.resources.subTotalMessage}

\r\n {/* Removed per Task 4253\r\n {props.checkoutAsSignInUserButton &&\r\n React.cloneElement(props.checkoutAsSignInUserButton as React.ReactElement,{disabled:hasError})} */}\r\n {props.checkoutAsGuestButton}\r\n {props.goToCartButton && React.cloneElement(props.goToCartButton as React.ReactElement, {\r\n 'children': goToCartButtonText\r\n })}\r\n {/* Removed per Task 5216 */}\r\n {/* \r\n {props.data.cart.result?.isEmpty ? (\r\n \r\n {props.resources.continueShoppingButtonTitle}\r\n \r\n ) : null}\r\n */}\r\n
\r\n
\r\n\r\n {showEmptyCartConfirmation && (\r\n setShowEmptyCartConfirmation(!showEmptyCartConfirmation)}\r\n fade={false}\r\n >\r\n \r\n
{props.resources.emptyCartButtonText}
\r\n
\r\n \r\n
{props.resources.emptyCartDescriptionText}
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n )}\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\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { format, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\n/**\r\n * ICartIconData: Interface for Cart Icon Data.\r\n */\r\nexport interface ICartIconData {\r\n cart?: ICartState;\r\n}\r\n\r\n/**\r\n * ICartIconComponentProps: Interface for Cart Icon component props.\r\n */\r\nexport interface ICartIconComponentProps extends IComponentProps {\r\n className?: string;\r\n cartLabel: string;\r\n cartQtyLabel: string;\r\n telemetryContent?: ITelemetryContent;\r\n salesAgreementPricePrompt?: string;\r\n}\r\n\r\n/**\r\n * ICartIconComponent: Interface for Cart Icon component.\r\n */\r\nexport interface ICartIconComponent extends IComponent {}\r\n\r\nconst CartIconComponentActions = {};\r\n\r\n/**\r\n *\r\n * CartIcon component.\r\n * @extends {React.FC}\r\n */\r\nconst CartIcon: React.FC = observer((props: ICartIconComponentProps) => {\r\n const {\r\n cartLabel,\r\n cartQtyLabel,\r\n data: { cart }\r\n } = props;\r\n const defaultCartItemCount: number = 0;\r\n\r\n const cartItem = cart && cart.cart.CartLines ? cart.cart.CartLines.length : defaultCartItemCount;\r\n let qtyLabel: string = '';\r\n const cartMaxQuantity: number = 99;\r\n const maxQuantityLabel: string = '99+';\r\n if (cartItem > cartMaxQuantity) {\r\n qtyLabel = maxQuantityLabel;\r\n } else {\r\n qtyLabel = format(cartQtyLabel, cartItem);\r\n }\r\n const label = format(cartLabel, cartItem);\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, 'cart-icon', '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n const style: React.CSSProperties = {\r\n visibility: cart ? 'visible' : 'hidden'\r\n };\r\n return (\r\n
\r\n
\r\n {qtyLabel}\r\n
\r\n
\r\n );\r\n});\r\n\r\nexport const CartIconComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n // @ts-expect-error -- Compatible issue with the component override.\r\n ICartIconComponent\r\n>('CartIcon', { component: CartIcon, ...CartIconComponentActions });\r\n\r\nexport default CartIconComponent;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['dlvry-cart-icon'] = {\n c: () => require('partner/modules/dlvry-cart-icon/dlvry-cart-icon.tsx'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action', runOn: 1},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'customerBalances', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'dlvry-cart-icon',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dlvry-cart-icon'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/get-cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|dlvry-cart-icon|dlvry-cart-icon'] = {\n c: () => require('partner/modules/dlvry-cart-icon/dlvry-cart-icon.view.tsx'),\n cn: '__local__-__local__-dlvry-cart-icon'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["ProductInput","constructor","productId","apiSettings","channelId","warehouseId","requestContext","catalogId","getCacheKey","generateCacheKey","this","key","value","getCacheObjectType","dataCacheType","undefined","getCatalogId","createObservableDataAction","id","action","async","inputs","ctx","ArrayExtensions","hasElements","trace","productIdMapping","index","length","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","Paging","Top","getProductPromises","catalogIds","unique","map","input","_inputs$0$warehouseId","productInputs","filter","push","getByIdsAsync","callerContext","then","response","catch","error","telemetry","debug","mappedProducts","flatten","Promise","all","product","newImageUrl","generateProductImageUrl","PrimaryImageUrl","_unused","reduce","memo","RecordId","find","inputData","productIds","config","split","Array","isArray","isBatched","cartLinesSortOrder","_renderDeliveryLocation","cartLine","props","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","deliveryOption","ProductId","delivery","DeliveryOptions","option","Code","DeliveryMode","location","Description","resources","shippingText","_renderStoreLocation","React","className","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","cartlines","products","reactNodes","cartline","foundProductAvailability","_foundProductAvailabi","isQuantityLimitsFeatureEnabled","getProductByProductIdAndWarehouse","WarehouseId","cartState","getProductByProductId","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","_assembleNode","foundProductDeliveryOptions","_product$Behavior","imageSettings","gridSettings","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","MsDyn365","isBrowser","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","data","hasError","Quantity","CartLineItemComponent","catalogs","currentQuantity","isOutOfStock","isQuantityEditable","primaryImageUrl","displayMode","channelDeliveryOptionConfig","deliveryLocation","remove","Button","Object","assign","onClick","title","storeLocation","ActiveCartProductsInput","getActiveCartProductsAction","Error","getCartState","cart","_ctx$requestContext$a","defaultOrderQuantityLimitsFeatureConfig","app","platform","enableDefaultOrderQuantityLimits","resolve","featureStates","getFeatureState","createGetFeatureStateInput","isQuantityLimitsFeatureEnabledInHq","_featureStates$find","featureState","Name","IsEnabled","getCustomer","GetCustomerInput","customerInfo","IsB2b","warning","message","isOrderQuantityLimitsFeatureEnabled","_cart$CartLines","productIdsByWarehouseId","Map","resultProducts","CartLines","forEach","_productIdsByWarehous","has","get","_ref","entryWarehouseId","entryProductIds","getSimpleProducts","Boolean","accum","getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn","hasInvoiceLine","toString","getMiniCartData","miniCartData","productsPromise","availabilityPromise","deliveryOptionsPromise","availability","deliveryOptions","exception","CartIcon","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","result","cartLineIds","LineId","removeCartLines","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","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","getUrlSync","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","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","feature","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","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","_featureStatuses$find2","customerInformation","__decorate","observer","_props$data$cart$resu3","_props$cartlines","cartIconRef","isAutoDisplayTriggered","isModalOpen","setIsModalOpen","setFilter","showEmptyCartConfirmation","setShowEmptyCartConfirmation","escHandler","event","keyCode","KeyCodes","Escape","_cartIconRef$current","current","focus","addEventListener","removeEventListener","_openModal","onTelemetryClick","_closeModal","_cartIconRef$current2","doFilter","_product$Name","_product$ItemId","toLocaleLowerCase","ItemId","Node","renderModuleAttributes","ref","getModalContainerProps","closeModal","Modal","wrapClassName","isOpen","toggle","_renderCartItemCount","cartItemCount","items","isEmpty","slots","emptyCart","type","placeholder","searchPlaceholderText","onChange","e","style","marginTop","textAlign","emptyCartButtonText","renderCartlines","cartLineIndex","cartLineProps","cartLineComp","promoContentItem","_props$data$cart$resu","_props$data$cart$resu2","sumPrice","x","NetAmountWithoutTax","Price","sum","sumPriceFormatString","emptyPrice","renderTotalPrice","subTotalMessage","modalClassName","backdropClassName","fade","ModalHeader","ModalBody","emptyCartDescriptionText","ModalFooter","emptyCartConfirmButtonText","emptyCartCancelButtonText","cartItem","qtyLabel","format","label","attributes","visibility","role","createComponentOverride","component","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","module","exports","ReactDOM"],"sourceRoot":""}