{"version":3,"file":"static/js/663ee3ee8d43c433bc50.bundle.js","mappings":"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","sources":["webpack://bestseller.commerce.online/./src/shared/functions/get-commercial-name.ts?6aba","webpack://bestseller.commerce.online/../../src/search-org-unit-locations.ts?d18d","webpack://bestseller.commerce.online/./src/invoice-summary-lineitem.tsx?5f61","webpack://bestseller.commerce.online/./src/order-summary-lineitem.tsx?8a98","webpack://bestseller.commerce.online/./src/validate-cart.ts?cd50","webpack://bestseller.commerce.online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://bestseller.commerce.online/./src/Common/get-product.ts?0a21","webpack://bestseller.commerce.online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://bestseller.commerce.online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://bestseller.commerce.online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://bestseller.commerce.online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://bestseller.commerce.online/./src/modules/cart/cart.tsx?d4e4","webpack://bestseller.commerce.online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://bestseller.commerce.online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://bestseller.commerce.online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://bestseller.commerce.online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://bestseller.commerce.online/./src/actions/get-products-in-active-cart.ts?e00d"],"sourcesContent":["/**\r\n * Centralised location for checkout generic data updates\r\n */\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * Gets the CommercialName from a list of attributes - returns the product name if no commercial name attribute is present\r\n * @param attributes\r\n * @param productName\r\n * @param commercialStyleNameAttribute\r\n * @returns\r\n */\r\nexport const getCommercialName = (\r\n attributes: AttributeValue[] = [],\r\n productName: string = '',\r\n commercialStyleNameAttribute: string = 'CommercialStyleName'\r\n): string => {\r\n var styleName = attributes.find(x => x.Name === commercialStyleNameAttribute);\r\n var productBrand = productName?.split(' ')[0] ?? '';\r\n if (styleName?.TextValue) {\r\n return `${productBrand} ${styleName?.TextValue}`;\r\n }\r\n\r\n return productName;\r\n};\r\n","/*!\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 { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n customerAccountLabel?: string;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n customerAccount?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n priceCurrency?: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\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 {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\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","/*!\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 { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _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\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\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 retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\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 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\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\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};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, 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 // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\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 } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\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\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\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 { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(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 { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\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';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', 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 const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

,\n cart: this.props.data.cart.result,\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\n cartlines: cartLines,\n cartLinesGroup,\n promoCode: this._getPromoCode(),\n promotionOptions: this._getPromotions(),\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry: this.props.telemetry,\n id: this.props.id,\n multiplePickUpEnabled,\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\n cart?.hasInvoiceLine ? (\n

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\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 (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\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 /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\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\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n this.setState({\n cartlinesErrors: {}\n });\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\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 === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\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 amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\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.\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, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\r\nimport { Cart, CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nimport {\r\n createGetFeatureStateInput,\r\n getCustomer,\r\n GetCustomerInput,\r\n getFeatureState,\r\n getSimpleProducts,\r\n ProductInput,\r\n ArrayExtensions,\r\n QueryResultSettingsProxy\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getCommercialName } from '../shared/functions/get-commercial-name';\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 var products: SimpleProduct[];\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 products = await 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 if (products) {\r\n if (ctx.requestContext.app.config?.useCommercialStyleName) {\r\n for (var product of products) {\r\n var cartLine = cart.CartLines.find(x => x.ProductId === product.RecordId);\r\n var attributes = await ProductsDataActions.getAttributeValuesAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n product.RecordId,\r\n Number(ctx.requestContext.channel?.RecordId),\r\n cartLine?.CatalogId ?? 0\r\n );\r\n product.Name = getCommercialName(attributes, product.Name, ctx.requestContext.app.config?.commercialStyleNameAttribute);\r\n }\r\n }\r\n return products;\r\n }\r\n }\r\n\r\n ctx.trace('[getActiveCartWithProducts]No Products Found in cart');\r\n return [];\r\n}\r\n\r\nexport const getActiveCartProductsActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-products-in-active-cart',\r\n action: >getActiveCartProductsAction,\r\n input: createInput\r\n});\r\nexport default getActiveCartProductsActionDataAction;\r\n\r\nasync function getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn(cart: Cart, ctx: IActionContext): Promise {\r\n const productIdsByWarehouseId: Map = new Map();\r\n let resultProducts: SimpleProduct[] = [];\r\n cart.CartLines?.forEach(cartLine =>\r\n productIdsByWarehouseId.has(cartLine.WarehouseId!)\r\n ? productIdsByWarehouseId.get(cartLine.WarehouseId!)?.push(cartLine)\r\n : productIdsByWarehouseId.set(cartLine.WarehouseId!, [cartLine])\r\n );\r\n return Promise.all(\r\n [...productIdsByWarehouseId].map(([entryWarehouseId, entryProductIds]) => {\r\n return getSimpleProducts(\r\n entryProductIds\r\n .map(cartLine => {\r\n if (cartLine.ProductId) {\r\n return new ProductInput(\r\n cartLine.ProductId,\r\n ctx.requestContext.apiSettings,\r\n undefined,\r\n entryWarehouseId,\r\n ctx.requestContext,\r\n cartLine.CatalogId\r\n );\r\n }\r\n return undefined;\r\n })\r\n .filter(Boolean),\r\n ctx\r\n ).then((products: SimpleProduct[]) => {\r\n if (products) {\r\n resultProducts = products.reduce((accum, product) => {\r\n if (product) {\r\n accum.push(product);\r\n }\r\n return accum;\r\n }, resultProducts);\r\n }\r\n });\r\n })\r\n ).then(() => resultProducts);\r\n}\r\n\r\nasync function isOrderQuantityLimitsFeatureEnabled(ctx: IActionContext): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = ctx.requestContext.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const featureStates = await getFeatureState(createGetFeatureStateInput(ctx), ctx);\r\n let isQuantityLimitsFeatureEnabledInHq = false;\r\n if (ArrayExtensions.hasElements(featureStates)) {\r\n isQuantityLimitsFeatureEnabledInHq =\r\n featureStates.find(\r\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n }\r\n\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return Promise.resolve(true);\r\n }\r\n\r\n return getCustomer(new GetCustomerInput(ctx.requestContext.apiSettings), ctx)\r\n .then(customerInfo => {\r\n return (\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n })\r\n .catch((error: Error) => {\r\n ctx.telemetry.warning(error.message);\r\n ctx.telemetry.debug('Unable to get customer info');\r\n return false;\r\n });\r\n}\r\n"],"names":["getCommercialName","_productName$split$","attributes","arguments","length","undefined","productName","commercialStyleNameAttribute","styleName","find","x","Name","productBrand","split","TextValue","SearchOrgUnitLocationsInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","createSearchOrgUnitLocationsInputFunc","inputData","async","getSearchOrgUnitLocationsAction","input","context","searchOrgUnitLocationsAsync","callerContext","retailActionDataAction","createObservableDataAction","id","action","InvoiceSummaryLine","_ref","price","label","typeName","toBeCalculatedText","freeText","cssLabel","React","className","PriceComponent","data","CustomerContextualPrice","freePriceText","_buildPaymentSummarySection","props","telemetry","_computedLoyaltyAmount","checkoutState","loyaltyAmount","InvoiceSummary","TotalAmount","CartLines","cart","invoiceLines","filter","cartLine","IsInvoiceLine","reactNodes","invoices","map","invoiceLine","InvoiceAmount","format","invoiceLabel","InvoiceId","orderTotal","orderTotalLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","reduce","giftCardCounter","count","giftCard","Balance","amount","Math","min","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","_objectSpread","OrderSummaryLine","priceCurrency","currencyCode","_buildOrderSummarySection","channelConfiguration","Currency","getDeliveryMode","deliveryMode","_channelDeliveryOptio","featureSate","channelDeliveryOptionConfig","pickupDeliveryMode","PickupDeliveryModeCodes","dM","OrderSummary","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","retailMultiplePickUpOptionEnabled","isTaxIncludedInPrice","isShowTaxBreakup","pickupDeliveryModeCode","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","deliveryModes","DeliveryMode","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","some","subtotal","subTotalLabel","tax","taxLabel","otherCharge","otherChargeLabel","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","shipping","shippingLabel","customerAccountAmount","customerAccount","customerAccountLabel","totalDiscounts","totalDiscountsLabel","validateCartAsync","propsContext","cartResult","cartVersion","shouldRetry","Version","error","warning","debug","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","actionContext","bypassCache","Id","ValidationResultsByLineId","name","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","ArrayExtensions","hasElements","_modifiedProduct$Beha2","modifiedProduct","product","RecordId","ProductId","Behavior","MaximumQuantity","cartLineId","LineId","toString","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","ProductPickUpOptionsForCartLineItems","apiSettings","buildCacheKey","this","getPickUpOptionsForCartLineItems","channelId","Error","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","response","Promise","ProductsDataActions","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","requestContext","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","PickUpInStore","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","cartline","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","orgUnitLocation","updateCartLinePickupLocation","location","then","result","status","locationChangedHandler","catch","_onLocationChangedCallback","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","foundLocation","OrgUnitName","DeliveryOptions","_props$channelDeliver","retailMulitplePickupFeatureState","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","delivery","pickup","deliveryCode","Code","push","option","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","type","onChange","value","checked","key","onClick","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","Description","ContainerProps","_assembleNode","index","foundProductAvailability","productPickUpOptions","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","imageSettings","gridSettings","resources","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","isAuthenticated","request","user","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","errorMessage","ObjectExtensions","isNullOrUndefined","_getErrorMessage","currentQuantity","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","replace","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","i","ValidationFailures","forEach","validation","ErrorContext","join","Quantity","onRemoveClickHandler","onRemoveClickFunction","payload","getPayloadObject","TelemetryEvent","RemoveFromCart","telemetryContent","getTelemetryAttributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","toLowerCase","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","productUrl","getProductUrlSync","MsDyn365","isBrowser","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","getInvoiceDetailsPageUrlSync","cartlineId","hasError","StringExtensions","isNullOrEmpty","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","channel","pickUpInStore","pickitUpText","remove","Button","Object","assign","title","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","classnames","shouldShowButtonFailedTooltip","disableButton","app","config","disableTooltip","catalogId","assembleCartlines","cartlines","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","hasInvoiceLine","_assembleGroupInvoiceCartlines","cartLines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","items","groupBy","item","groupDelivery","cartLinesGroup","entries","deliveryType","groupByDeliveryType","keys","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","exception","Cart","super","_isMounted","promotionPopupId","promotionLinkClick","event","setState","showPromotionDialog","state","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","validateCart","updateCartlineQuantity","cartlineToUpdate","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","getTelemetryObject","telemetryPageName","friendlyName","payLoad","bind","isCartValid","_this$props$data$cart","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","reaction","_this$props$data$cart2","_this$props$data$cart3","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$props$data$prod","_this$props$data$feat","_featureState$result","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","RetailMultiplePickupFeatureState","featureState","multiplePickUpEnabled","IsEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCatalogId","validateCatalogId","getCartLinesGroup","contentAction","etext","TelemetryConstant","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","viewProps","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","orderSummaryHeading","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","showGuestCheckoutButton","guestCheckoutButtonTitle","expressCheckoutButton","slots","paymentExpress","ExpressCheckoutSectionWrapper","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","storeSelector","waitingComponent","Waiting","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","isEmpty","OrderSummaryErrors","_getOrderSummaryErrors","renderView","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","tabIndex","role","promotionDialog","Modal","isOpen","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","line","Wrapper","tag","Alert","color","assertive","outOfStockErrorMessageHeader","header","errors","totalAmountLabel","_this$props","_featureState$result2","_this$props$context$r2","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","itemsWithCountLabel","estimatedShippingLabel","otherCharges","estimatedTaxLabel","yetToBeCalculatedText","priceFree","IsTaxIncludedInPrice","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","originalPriceText","currentPriceText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$cata","modules","storeSelectorId","CartLineItems","productDeliveryOptions","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","salesAgreementPricePrompt","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","origin","includes","_featureStatuses$find2","featureStatuses","_featureStatuses$find","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","IsB2b","_featureStatuses$find3","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","__decorate","observer","_renderDeliveryLocation","deliverylocation","_foundProductDelivery","foundProductDeliveryOption","shippingText","_renderStoreLocation","_assembleCartlines","foundProductDeliveryOptions","outOfStockThreshold","isServiceItem","RemoveCartItem","removeCartItemAttribute","displayMode","deliveryLocation","storeLocation","getMiniCartData","miniCartData","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","CartIcon","getSortedCartLines","sortOrder","lines","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","_removeItemFromCartHandler","CheckOut","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","_setQuantityLimitsFeatureFlag","_validateCart","componentDidUpdate","prevProps","_this$state$miniCartD","_this$state$miniCartD2","enableHoverCart","isAnonymousCheckout","cartUrl","_getCheckoutURL","shouldShowMiniCart","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","includeFlyout","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","flyoutTitle","flyoutTooltip","UncontrolledTooltip","placement","hideArrow","trigger","target","shouldShowCloseButton","cartPageUrl","hideAriaHidden","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","feature","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","miniCartWrapper","miniCartItemWrapper","goToCartButton","totalPrice","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","msdyn365Commerce","FlyoutCartLineItems","cartLinesSortOrder","_ctx$requestContext$a3","featureStates","getFeatureState","createGetFeatureStateInput","isQuantityLimitsFeatureEnabledInHq","_featureStates$find","getCustomer","GetCustomerInput","isOrderQuantityLimitsFeatureEnabled","_cart$CartLines","productIdsByWarehouseId","Map","resultProducts","_productIdsByWarehous","has","get","all","entryWarehouseId","entryProductIds","getSimpleProducts","ProductInput","Boolean","accum","getActiveCartProductsActionWhenQuantityLimitsFeatureIsOn","trace","_ctx$requestContext$a","useCommercialStyleName","_ctx$requestContext$c","_cartLine$CatalogId","_cartLine","_ctx$requestContext$a2","Number","getActiveCartProductsActionDataAction"],"sourceRoot":""}