{"version":3,"file":"static/js/b2e913ea39a4e85f9971.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/shared-utils/cart-utils.ts?220b","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\nimport { _mergeDuplicateCartlines } from '../../../shared-utils/cart-utils';\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 const mergedCartlines = _mergeDuplicateCartlines(cartlines);\r\n\r\n mergedCartlines.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 {\r\n ArrayExtensions,\r\n createGetFeatureStateInput,\r\n CartConfigurationInput,\r\n getCartConfiguration,\r\n getCustomer,\r\n GetCustomerInput,\r\n getFeatureState\r\n} 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 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 const useSiteBuilderSettings = featureStates?.find(\r\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\r\n )?.IsEnabled;\r\n\r\n if (useSiteBuilderSettings) {\r\n const defaultOrderQuantityLimitsFeatureConfig = ctx.requestContext.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return Promise.resolve(false);\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 } else {\r\n return getCartConfiguration(new CartConfigurationInput(), ctx)\r\n .then(cartConfiguration => {\r\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\r\n })\r\n .catch((error: Error) => {\r\n ctx.telemetry.warning(error.message);\r\n ctx.telemetry.debug('Unable to get cart configuration');\r\n return false;\r\n });\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\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\r\n const useSiteBuilderSettings = featureStatuses?.find(\r\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\r\n )?.IsEnabled;\r\n\r\n if (useSiteBuilderSettings) {\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 } else {\r\n const cartConfiguration = await this.props.data.cartConfiguration;\r\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\r\n return;\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\nimport { _mergeDuplicateCartlines } from '../../shared-utils/cart-utils';\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 = React.useMemo(() => {\r\n return cart?.cart.CartLines ? _mergeDuplicateCartlines(cart.cart.CartLines).length : 0;\r\n }, [cart?.cart.CartLines]);\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 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 {totalItemsInCart} {props.resources.items}\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","import { CartLine } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\n/**\r\n * Merge duplicate cartlines for same product. Sums up quantity and prices to its own cartline.\r\n */\r\nexport function _mergeDuplicateCartlines(cartlines: CartLine[]): CartLine[] {\r\n return cartlines;\r\n\r\n // @ts-expect-error\r\n const mergedCartlines: CartLine[] = [];\r\n\r\n cartlines.forEach(cartline => {\r\n const existingCartline = mergedCartlines.find(cl => cl.ProductId === cartline.ProductId);\r\n\r\n if (existingCartline) {\r\n const quantity = (existingCartline.Quantity || 0) + (cartline.Quantity || 0);\r\n const netAmountWithoutTax = cartline.NetAmountWithoutTax\r\n ? (existingCartline.NetAmountWithoutTax || 0) + cartline.NetAmountWithoutTax\r\n : (existingCartline.NetAmountWithoutTax || 0) + (cartline.Price || 0) * (cartline.Quantity || 0);\r\n\r\n mergedCartlines[mergedCartlines.indexOf(existingCartline)] = {\r\n ...existingCartline,\r\n Quantity: quantity,\r\n NetAmountWithoutTax: netAmountWithoutTax\r\n };\r\n } else {\r\n mergedCartlines.push({ ...cartline });\r\n }\r\n });\r\n\r\n return mergedCartlines;\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 { 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 * as React from 'react';\r\nimport { _mergeDuplicateCartlines } from '../../../../shared-utils/cart-utils';\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 = (props: ICartIconComponentProps) => {\r\n const {\r\n cartLabel,\r\n cartQtyLabel,\r\n data: { cart }\r\n } = props;\r\n\r\n const cartItemsCount = React.useMemo(() => {\r\n return cart?.cart.CartLines ? _mergeDuplicateCartlines(cart.cart.CartLines).length : 0;\r\n }, [cart?.cart.CartLines]);\r\n const qtyLabel = format(cartQtyLabel, cartItemsCount);\r\n const label = format(cartLabel, cartItemsCount);\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:'cartConfiguration', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'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-cart-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-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","trace","productIdMapping","index","length","queryResultSettings","QueryResultSettingsProxy","Paging","Top","getProductPromises","catalogIds","map","input","_inputs$0$warehouseId","productInputs","filter","push","getByIdsAsync","callerContext","then","response","catch","error","telemetry","debug","mappedProducts","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","_foundProductDelivery2","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","context","_mergeDuplicateCartlines","cartline","foundProductAvailability","_foundProductAvailabi","isQuantityLimitsFeatureEnabled","getProductByProductIdAndWarehouse","WarehouseId","cartState","getProductByProductId","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","_assembleNode","foundProductDeliveryOptions","_product$Behavior","imageSettings","gridSettings","typeName","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","Behavior","MaximumQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","onRemoveClickHandler","onRemoveClickFunction","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","removeCartItemAttribute","getTelemetryAttributes","productUrl","getProductUrlSync","actionContext","MsDyn365","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","_featureStates$find2","featureStates","getFeatureState","createGetFeatureStateInput","isQuantityLimitsFeatureEnabledInHq","_featureStates$find","featureState","Name","IsEnabled","_ctx$requestContext$a","_ctx$requestContext$a2","defaultOrderQuantityLimitsFeatureConfig","app","platform","enableDefaultOrderQuantityLimits","resolve","getCustomer","GetCustomerInput","customerInfo","IsB2b","warning","message","getCartConfiguration","CartConfigurationInput","cartConfiguration","_cartConfiguration$Ig","IgnoreOrderSettings","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","checkoutBySignInAttributes","contentAction","etext","checkoutByGuestAttributes","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","_this$props$data$feat2","_this$props$data$feat3","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","getUrlSync","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","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","_cart$result$cart","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","_featureStatuses$find2","featureStatuses","_this$props$context","_this$props$context$r2","_this$props$context$r3","_this$props$context$r4","_featureStatuses$find3","customerInformation","__decorate","observer","_props$data$cart$resu4","_props$cartlines","cartIconRef","isAutoDisplayTriggered","isModalOpen","setIsModalOpen","setFilter","showEmptyCartConfirmation","setShowEmptyCartConfirmation","escHandler","event","keyCode","KeyCodes","_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","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","_props$data$cart$resu3","sumPrice","x","NetAmountWithoutTax","Price","sum","sumPriceFormatString","emptyPrice","renderTotalPrice","subTotalMessage","modalClassName","backdropClassName","fade","ModalHeader","ModalBody","emptyCartDescriptionText","ModalFooter","emptyCartConfirmButtonText","emptyCartCancelButtonText","component","cartItemsCount","qtyLabel","format","label","attributes","visibility","role","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":""}