{"version":3,"file":"static/js/ede9f08e2184b1983e36.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b","webpack://Msdyn365.Commerce.Online/../../src/search-org-unit-locations.ts?d18d","webpack://Msdyn365.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Msdyn365.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Msdyn365.Commerce.Online/./lib/cart-icon/module-registration.js?4d28","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://Msdyn365.Commerce.Online/./src/themes/cirrus/views/cart-icon.view.tsx?bcea","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/cart-icon.view.tsx?7ec9"],"sourcesContent":["module.exports = React;","module.exports = ReactDOM;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IAny,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\n/**\n * Input for search-org-unit-locations data action.\n */\nexport class SearchOrgUnitLocationsInput implements IActionInput {\n public getCacheKey = () => 'SearchOrgUnitLocations';\n\n public getCacheObjectType = () => 'SearchOrgUnitLocations';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- Input data.\n * @returns -- IActionInput.\n */\nexport const createSearchOrgUnitLocationsInputFunc = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchOrgUnitLocationsInput();\n};\n\n/**\n * Calls the Retail API and returns all the orgUnitLocations as array.\n * @param input - Input.\n * @param ctx - Context.\n * @returns - orgUnitLocations.\n */\nexport async function getSearchOrgUnitLocationsAction(\n input: SearchOrgUnitLocationsInput,\n context: IActionContext\n): Promise {\n const OrgUnitLocations = await searchOrgUnitLocationsAsync(\n {\n callerContext: context\n },\n {}\n );\n\n return OrgUnitLocations;\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >getSearchOrgUnitLocationsAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\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['cart-icon'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon'),\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: true,\n ns: '@msdyn365-commerce-modules',\n n: 'cart-icon',\n p: 'cart',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/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__|themes|cirrus|views|cart-icon'] = {\n c: () => require('partner/themes/cirrus/views/cart-icon.view.tsx'),\n cn: '__local__-__local__-cart-icon'\n };\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart-icon|cart-icon'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart-icon/cart-icon.view.js'),\n cn: '@msdyn365-commerce-modules-cart-cart-icon'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|cart-icon'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/cart-icon.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-cart-icon'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
\n {orgUnitName}\n
\n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', this.props.context.actionContext) || '';\n const checkoutURL = this._getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
{priceString}
\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\n\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\n\n private readonly _getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly _removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\n }\n }\n}\n\nexport default CartIcon;\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ICartViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartIconViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React from 'react';\r\n\r\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\r\n\r\n/**\r\n * ICartIconViewState: Interface for Cart Icon View State.\r\n */\r\ninterface ICartIconViewState {\r\n isModalOpen: boolean;\r\n}\r\n\r\n/**\r\n * Render Cart lines.\r\n * @param cartLines - Flyout cart line view props.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n const cartLineIndex = index;\r\n return (\r\n \r\n \r\n {cartLine.cartline}\r\n \r\n {cartLine.remove}\r\n {cartLine.storeLocation}\r\n \r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Initiate total price.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n const cart = props.data.cart.result ?? undefined;\r\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\r\n const totalPrice = price ? props.context.cultureFormatter.formatCurrency(price) : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\r\n return (\r\n
\r\n \r\n {props.resources.totalPriceFormatString.replace('{price}','')}\r\n \r\n {totalPrice}\r\n \r\n \r\n
\r\n );\r\n};\r\n\r\n/**\r\n *\r\n * CartIconView component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CartIconView extends React.PureComponent, ICartIconViewState> {\r\n\r\n private isAutoDisplayTriggered: boolean;\r\n\r\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\r\n super(props);\r\n this.isAutoDisplayTriggered = false;\r\n this.state = {\r\n isModalOpen: false\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.addEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser) {\r\n window.removeEventListener('keydown', this._escFunction, false);\r\n }\r\n }\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @returns JSX Element.\r\n */\r\n public render(): JSX.Element | null {\r\n const cart = this.props.data.cart.result ?? undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart = cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n if (shouldShowMiniCart) {\r\n if (!this.isAutoDisplayTriggered) {\r\n // First time trigger auto mini cart.\r\n this.setState({ isModalOpen: true });\r\n this.isAutoDisplayTriggered = true;\r\n } else if (!this.state.isModalOpen) {\r\n // If modal is closed, reset the flag.\r\n this.isAutoDisplayTriggered = false;\r\n }\r\n }\r\n return (\r\n \r\n \r\n {this.props.cartIcon}\r\n \r\n \r\n \r\n {this.props.flyoutTitle}\r\n {this._renderCartItemCount(this.props)}\r\n {this._renderCartCloseIcon()}\r\n \r\n \r\n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\r\n \r\n {renderCartlines(this.props.cartlines, this.props)}\r\n \r\n \r\n \r\n {this.props.slots.promoContentItem}\r\n {renderTotalPrice(this.props)}\r\n

\r\n {this.props.resources.subTotalMessage}\r\n

\r\n {this.props.checkoutAsSignInUserButton}\r\n {this.props.checkoutAsGuestButton}\r\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\r\n \r\n {\r\n this.props.data.cart.result?.isEmpty ? \r\n {this.props.resources.continueShoppingButtonTitle}\r\n : null\r\n }\r\n \r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n /**\r\n * Initiate modal container.\r\n * @returns Inode props.\r\n */\r\n private readonly _modalContainer = (): INodeProps => {\r\n return {\r\n tag: Modal,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__minicartmodal-container',\r\n wrapClassName: 'ms-cart-icon__minicartmodal',\r\n isOpen: this.state.isModalOpen,\r\n toggle: this.closeModal\r\n };\r\n };\r\n\r\n /**\r\n * Initiate open modal.\r\n */\r\n private readonly _openModal = (): void => {\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\r\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\r\n this.setState({\r\n isModalOpen: true\r\n });\r\n };\r\n\r\n /**\r\n * Initiate close modal.\r\n */\r\n private readonly closeModal = (): void => {\r\n this.setState({\r\n isModalOpen: false\r\n });\r\n\r\n };\r\n\r\n /**\r\n * Initiate cart close Icon.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n /**\r\n * Render Cart Item count.\r\n * @param props - Cart icon view props.\r\n * @returns JSX Element.\r\n */\r\n private readonly _renderCartItemCount = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\r\n let cartItemCount;\r\n const defaultCartItemCount: number = 0;\r\n const defaultCartItemCountOne: number = 1;\r\n\r\n if (ArrayExtensions.hasElements(props.cartlines)) {\r\n if (props.cartlines.length === defaultCartItemCountOne) {\r\n cartItemCount = `${defaultCartItemCountOne} ${props.resources.item}`;\r\n } else {\r\n cartItemCount = `${props.cartlines.length} ${props.resources.items}`;\r\n }\r\n } else {\r\n cartItemCount = `${defaultCartItemCount} ${props.resources.items}`;\r\n }\r\n return (\r\n \r\n {cartItemCount}\r\n \r\n );\r\n };\r\n\r\n /**\r\n * Handle escape click to close modal.\r\n * @param event - On press of any key.\r\n */\r\n private readonly _escFunction = (event: KeyboardEvent) => {\r\n if (event.keyCode === KeyCodes.Escape && this.state.isModalOpen) {\r\n this.closeModal();\r\n }\r\n };\r\n\r\n}\r\n\r\nexport default CartIconView;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {props.checkoutBlockedDueToUnavailableFunds}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior } from '@msdyn365-commerce/components';\nimport MsDyn365, { getUrlSync } from '@msdyn365-commerce/core';\nimport { ICartIconViewProps, ICartViewProps, IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart';\nimport { Button, getPayloadObject, INodeProps, KeyCodes, Modal, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { ICartIconProps as ICartIconExtensionProps } from '../definition-extensions/cart-icon.ext.props.autogenerated';\n\n/**\n * ICartIconViewState: Interface for Cart Icon View State.\n */\ninterface ICartIconViewState {\n isModalOpen: boolean;\n}\n\n/**\n * Render Cart lines.\n * @param cartLines - Flyout cart line view props.\n * @param props - Cart icon view props.-\n * @returns JSX Element.\n */\nconst renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n return cartLines.map((cartLine, index) => {\n const cartLineIndex = index;\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\n/**\n * Initiate total price.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderTotalPrice = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n const price = cart && !cart.hasInvoiceLine && (cart.cart.TotalAmount || undefined);\n const totalPrice = price\n ? props.context.cultureFormatter.formatCurrency(price)\n : props.context.cultureFormatter.formatCurrency(props.resources.emptyPrice);\n return cart && !cart.hasInvoiceLine ? (\n
\n \n {props.resources.totalPriceFormatString}\n {totalPrice}\n \n
\n ) : (\n <>\n );\n};\n\n/**\n * Initiate subtotal message.\n * @param props - Cart icon view props.\n * @returns JSX Element.\n */\nconst renderSubtotalMessage = (props: ICartIconViewProps & ICartIconExtensionProps<{}>): JSX.Element | null => {\n const cart = props.data.cart.result ?? undefined;\n return cart && !cart.hasInvoiceLine ?

{props.resources.subTotalMessage}

: null;\n};\n\n/**\n *\n * CartIconView component.\n * @extends {React.PureComponent}\n */\nexport class CartIconView extends React.PureComponent<\n ICartViewProps & ICartIconViewProps & ICartIconExtensionProps<{}>,\n ICartIconViewState\n> {\n private isAutoDisplayTriggered: boolean;\n\n private readonly cartIconRef: React.RefObject = React.createRef();\n\n public constructor(props: ICartViewProps & ICartIconViewState & ICartIconViewProps & ICartIconExtensionProps<{}>) {\n super(props);\n this.isAutoDisplayTriggered = false;\n this.state = {\n isModalOpen: false\n };\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n window.addEventListener('keydown', this._escFunction, false);\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('keydown', this._escFunction, false);\n }\n }\n\n /**\n * Render Cart Item count.\n * @returns JSX Element.\n */\n public render(): JSX.Element | null {\n const cart = this.props.data.cart.result ?? undefined;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n if (shouldShowMiniCart) {\n if (!this.isAutoDisplayTriggered) {\n // First time trigger auto mini cart.\n this.setState({ isModalOpen: true });\n this.isAutoDisplayTriggered = true;\n } else if (!this.state.isModalOpen) {\n // If modal is closed, reset the flag.\n this.isAutoDisplayTriggered = false;\n }\n }\n return (\n \n \n \n \n {this.props.flyoutTitle}\n {this._renderCartItemCount(this.props)}\n {this._renderCartCloseIcon()}\n \n \n {this.props.data.cart.result?.isEmpty ? this.props.slots.emptyCart : null}\n {this.props.checkoutBlockedDueToUnavailableFunds}\n {renderCartlines(this.props.cartlines, this.props)}\n \n \n {this.props.slots.promoContentItem}\n {renderTotalPrice(this.props)}\n {renderSubtotalMessage(this.props)}\n {this.props.checkoutAsSignInUserButton}\n {this.props.checkoutAsGuestButton}\n {this.props.data.cart.result?.isEmpty ? null : this.props.goToCartButton}\n \n {this.props.data.cart.result?.isEmpty ? (\n \n {this.props.resources.continueShoppingButtonTitle}\n \n ) : null}\n \n \n \n \n );\n }\n\n /**\n * Initiate modal container.\n * @returns Inode props.\n */\n private readonly _modalContainer = (): INodeProps => {\n return {\n tag: Modal,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__minicartmodal-container',\n wrapClassName: 'ms-cart-icon__minicartmodal',\n isOpen: this.state.isModalOpen,\n toggle: this.closeModal\n };\n };\n\n /**\n * Initiate open modal.\n */\n private readonly _openModal = (): void => {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'cart-icon', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'cart-icon');\n this.setState({\n isModalOpen: true\n });\n };\n\n /**\n * Initiate close modal.\n */\n private readonly closeModal = (): void => {\n this.cartIconRef.current?.focus();\n this.setState({\n isModalOpen: false\n });\n };\n\n /**\n * Initiate cart close Icon.\n * @returns JSX Element.\n */\n private readonly _renderCartCloseIcon = (): JSX.Element | null => {\n return