{"version":3,"file":"static/js/7.b600650ffdeeec489b43.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/themes/krannich/views/components/cartlineitem.component.tsx?b421","webpack://Msdyn365.Commerce.Online/./src/themes/krannich/views/components/price.component.tsx?7e44","webpack://Msdyn365.Commerce.Online/./src/utils/badges.tsx?5a27","webpack://Msdyn365.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Msdyn365.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Msdyn365.Commerce.Online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Msdyn365.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://Msdyn365.Commerce.Online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { CartLinePriceEditor, ICartLinePriceEditorResources } from '@msdyn365-commerce/components';\r\nimport { PriceComponent } from './price.component';\r\nimport MsDyn365, {\r\n IComponentProps,\r\n IGridSettings,\r\n IImageSettings,\r\n Image,\r\n isChannelTypeB2B,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { AttributeValue, CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport {\r\n ArrayExtensions,\r\n getFallbackImageUrl,\r\n ObjectExtensions,\r\n StringExtensions,\r\n validateCatalogId\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, IncrementalQuantity } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\nimport { trafficLightsAtpaction, TrafficLightsAtpInput } from '../../../../actions/traffic-lights-atp.action';\r\nimport { IKRV_ATPLeadTimePropertiesDate } from '../../../../actions/customProxy/ATP1/DataServiceEntities.g';\r\n\r\n// import { CalculateEstDateAtpInput, estimatedAvailabilityAction } from '../../../../actions/calculate-est-date-atp.action';\r\nimport { IKrannichCCartConfig } from '../../../../modules/krannich-c-cart/krannich-c-cart.props.autogenerated';\r\nimport { PromotionBadges } from '../../../../utils/badges';\r\nimport { formatUrlPath } from '../../../../utils/helper';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n /**\r\n * Display string for discount label.\r\n */\r\n discountStringText: string;\r\n\r\n /**\r\n * String for size key.\r\n */\r\n sizeString: string;\r\n\r\n /**\r\n * String for color key.\r\n */\r\n colorString: string;\r\n\r\n /**\r\n * String associated with the configuration product dimension.\r\n */\r\n configString: string;\r\n\r\n /**\r\n * String for style key.\r\n */\r\n styleString: string;\r\n\r\n /**\r\n * String for amount key.\r\n */\r\n amountString?: string;\r\n\r\n /**\r\n * Display string for quantity label.\r\n */\r\n quantityDisplayString: string;\r\n\r\n /**\r\n * Display string for quantity label.\r\n */\r\n inputQuantityAriaLabel: string;\r\n\r\n /**\r\n * Aria label for the decrement button in quantity component.\r\n */\r\n decrementButtonAriaLabel?: string;\r\n\r\n /**\r\n * Aria label for the increment button in quantity component.\r\n */\r\n incrementButtonAriaLabel?: string;\r\n\r\n /**\r\n * Original text screen reader.\r\n */\r\n originalPriceText: string;\r\n\r\n /**\r\n * Current text screen reader.\r\n */\r\n currentPriceText: string;\r\n\r\n /**\r\n * Shipping Charges Text.\r\n */\r\n shippingChargesText: string;\r\n\r\n priceEditorResources?: ICartLinePriceEditorResources;\r\n\r\n /**\r\n * Sales agreement price prompt text.\r\n */\r\n salesAgreementPricePrompt?: string;\r\n\r\n /**\r\n * Shipping text.\r\n */\r\n shippingText?: string;\r\n /**\r\n * Shipping text.\r\n */\r\n confirmedShipDateLabel?: string;\r\n}\r\n\r\n/**\r\n * The data about the cart line and products.\r\n */\r\nexport interface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n cartState?: ICartState;\r\n product?: SimpleProduct;\r\n catalogs?: ProductCatalog[];\r\n config?: IKrannichCCartConfig;\r\n}\r\n\r\nexport type CartLineDisplayMode = 'DEFAULT' | 'COMPACT';\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n /**\r\n * The flag to change the quantity component from interactivity to static.\r\n */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /**\r\n * The primary image url.\r\n */\r\n primaryImageUrl?: string;\r\n\r\n /**\r\n * The product url.\r\n */\r\n productUrl?: string;\r\n\r\n /**\r\n * GridSettings for the product image in cartLine.\r\n */\r\n gridSettings: IGridSettings;\r\n\r\n /**\r\n * ImageSettings for the product image in cartLine.\r\n */\r\n imageSettings: IImageSettings;\r\n\r\n /**\r\n * Boolean flag to indicate if the item is out of stock.\r\n */\r\n isOutOfStock?: boolean;\r\n\r\n /**\r\n * Flag to make quantity section editable.\r\n */\r\n isQuantityEditable?: boolean;\r\n\r\n /**\r\n * Max quantity for line item.\r\n */\r\n maxQuantity?: number;\r\n\r\n /**\r\n * Current quantity for line item.\r\n */\r\n currentQuantity?: number;\r\n\r\n /**\r\n * Resource string for the component.\r\n */\r\n resources: ICartlineResourceString;\r\n\r\n /**\r\n * SalesLine flag.\r\n */\r\n isSalesLine?: boolean;\r\n\r\n /**\r\n * Error message to show in place of quantity.\r\n */\r\n errorMessage?: string;\r\n\r\n /**\r\n * Display mode to use.\r\n */\r\n displayMode?: CartLineDisplayMode;\r\n\r\n /**\r\n * Inventory information label.\r\n */\r\n inventoryInformationLabel?: string;\r\n\r\n /**\r\n * Inventory information class name.\r\n */\r\n inventoryLabelClassName?: string;\r\n\r\n /**\r\n * Flag to show/hide shipping charges for line items.\r\n */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /**\r\n * Boolean flag to indicate if cart state status is ready.\r\n */\r\n isCartStateReady?: boolean;\r\n\r\n /**\r\n * Chanel Delivery Option configuration is from api.\r\n */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /**\r\n * The telemetry content.\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /**\r\n * The cart line index.\r\n */\r\n lineIndex?: number;\r\n\r\n /**\r\n * The cart line delivery location.\r\n */\r\n deliveryLocation?: string;\r\n\r\n /**\r\n * Quantity onChange callback.\r\n */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): void;\r\n\r\n priceCurrency?: string;\r\n customerTaxPercentage: number;\r\n\r\n /**\r\n * Sales line confirmed ship date.\r\n */\r\n confirmedShipDate?: string;\r\n /**\r\n * VSI customization\r\n */\r\n mainCartQuantity?: string;\r\n}\r\n\r\ninterface IDimensionStrings {\r\n /**\r\n * String for size key.\r\n */\r\n sizeString: string;\r\n\r\n /**\r\n * String for color key.\r\n */\r\n colorString: string;\r\n\r\n /**\r\n * String associated with the configuration product dimension.\r\n */\r\n configString: string;\r\n\r\n /**\r\n * String for style key.\r\n */\r\n styleString: string;\r\n\r\n /**\r\n * String for amount key.\r\n */\r\n amountString?: string;\r\n}\r\n\r\n/**\r\n * Renders catalog label for the cart line.\r\n * @param props - Cart line props.\r\n * @returns Catalog label.\r\n */\r\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\r\n const catalogId = props.data.cartLine.CatalogId;\r\n validateCatalogId(catalogId);\r\n\r\n if (!isChannelTypeB2B(props.context.actionContext.requestContext) || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\r\n return null;\r\n }\r\n\r\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\r\n\r\n if (!catalog || !catalog.Name) {\r\n return null;\r\n }\r\n\r\n return
{catalog.Name}
;\r\n};\r\n\r\nconst CartLineItemFunctions = {\r\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\r\n if (!Product || !Product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return Product.Dimensions.map(productDimension => {\r\n if (productDimension.DimensionTypeValue === 1) {\r\n return (\r\n
\r\n \r\n {DimensionStrings.colorString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 3) {\r\n return (\r\n
\r\n \r\n {DimensionStrings.sizeString}:{productDimension.DimensionValue?.Value}\r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 4) {\r\n return (\r\n
\r\n \r\n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\r\n {productDimension.DimensionValue?.Value}\r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\r\n return null;\r\n }\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n if (discountLine.OfferName?.toLowerCase().trim() === 'Voucher Discount'.toLowerCase().trim()) {\r\n return (\r\n
\r\n \r\n Voucher DiscountApplied\r\n {' '}\r\n
\r\n\r\n //
\r\n // \r\n // {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\r\n // \r\n // \r\n // {discountLine.DiscountCost && (\r\n // <>\r\n // \r\n // \r\n // )}\r\n // \r\n // {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\r\n //
\r\n );\r\n }\r\n //NOTE ********** Please UNcomment below block to display Product discount in place of voucher discount according to condition\r\n else if (discountLine.OfferName?.toLowerCase().trim() === 'Product Discount'.toLowerCase().trim()) {\r\n return (\r\n
\r\n \r\n Product DiscountApplied\r\n {' '}\r\n
\r\n );\r\n } else {\r\n return null;\r\n }\r\n });\r\n },\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n if (!props.inventoryInformationLabel) {\r\n return null;\r\n }\r\n const inventoryCssName = props.inventoryLabelClassName\r\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\r\n : 'msc-cart-line__product-inventory-label';\r\n return {props.inventoryInformationLabel};\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @param props - ICartLineProps props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderUnitOfMeasure: (props: ICartLineProps) => {\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (\r\n props.context.app.config &&\r\n (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none')\r\n ) {\r\n return undefined;\r\n }\r\n\r\n const product = props.data.product;\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n {product.DefaultUnitOfMeasure}\r\n
\r\n );\r\n },\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(\r\n cartline.DeliveryMode &&\r\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\r\n );\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (shippingChargeLines.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\r\n }, 0);\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n {priceComponent}\r\n \r\n );\r\n },\r\n renderConfirmedShipDate: (props: ICartLineProps) => {\r\n if (!props.isSalesLine || props.confirmedShipDate === undefined || StringExtensions.isNullOrEmpty(props.confirmedShipDate)) {\r\n return null;\r\n }\r\n const shipDateCssName = 'msc-cart-line__confirmed-ship-date';\r\n return (\r\n <>\r\n {props.resources.confirmedShipDateLabel}\r\n {props.confirmedShipDate}\r\n \r\n );\r\n },\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\r\n return (\r\n (otherCharges &&\r\n otherCharges.map((otherCharge, key) => {\r\n return otherCharge && otherCharge.CalculatedAmount ? (\r\n
\r\n
{`Voucher Discount Applied`}
\r\n \r\n \r\n \r\n \r\n
\r\n ) : (\r\n ''\r\n );\r\n })) ||\r\n undefined\r\n );\r\n }\r\n // /**\r\n // * Render the sales agreement prompt.\r\n // * @param props - The ICartLineProps.\r\n // * @returns The JSX.Element.\r\n // */\r\n // renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\r\n // if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\r\n // return null;\r\n // }\r\n // return
{props.resources.salesAgreementPricePrompt}
;\r\n // ,\r\n\r\n //renderConfirmedShipDate: (props: ICartLineProps) => {\r\n // if (!props.isSalesLine || props.confirmedShipDate === undefined || StringExtensions.isNullOrEmpty(props.confirmedShipDate)) {\r\n // return null;\r\n // }\r\n // const shipDateCssName = 'msc-cart-line__confirmed-ship-date';\r\n // return (\r\n // <>\r\n // {props.resources.confirmedShipDateLabel}\r\n // {props.confirmedShipDate}\r\n // \r\n // );\r\n //}\r\n // }\r\n};\r\n\r\n// eslint-disable-next-line no-redeclare\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, resources, mainCartQuantity } = props;\r\n const { product, cartLine } = props.data;\r\n const [productAttributes, setproductAttributes] = React.useState();\r\n async function getProductAttributes(): Promise {\r\n try {\r\n const attributes: AttributeValue[] = await getAttributeValuesAsync(\r\n { callerContext: props.context?.actionContext!, queryResultSettings: {} },\r\n props.data.product?.RecordId!,\r\n props.context?.request?.apiSettings?.channelId!,\r\n props.context?.request?.apiSettings?.catalogId!\r\n );\r\n setproductAttributes(attributes);\r\n } catch (error) {\r\n telemetry.warning('error');\r\n telemetry.debug('Unable to get attributes values');\r\n }\r\n }\r\n React.useEffect(() => {\r\n getProductAttributes();\r\n }, [product, cartLine]);\r\n const lookupAttributeKey = props.context?.app?.config?.productManufacturarAttribute || 'Manufacturer';\r\n const manufacturer = productAttributes?.find((item: { Name: string }) => item.Name === lookupAttributeKey)?.TextValue || '';\r\n const getManufacturerItemTypeName = (prod: SimpleProduct): string => {\r\n if (!prod) {\r\n return '';\r\n }\r\n return prod?.ExtensionProperties?.find(extension => extension.Key === 'ManufItemTypeName')?.Value?.StringValue || '';\r\n };\r\n const urlPath = formatUrlPath(manufacturer, getManufacturerItemTypeName(product!));\r\n const pathName = props.context.actionContext.requestContext.url.requestUrl.pathname.split('/');\r\n const isAddingPathWithUrl = props.context.actionContext.requestContext.app.config.addPathWithUrl ?? false;\r\n let productUrl: string | undefined;\r\n productUrl = isAddingPathWithUrl\r\n ? `${props.context.actionContext.requestContext.url.requestUrl.origin}/${pathName[1]}/${urlPath}/${product!.RecordId}.p`\r\n : `${props.context.actionContext.requestContext.url.requestUrl.origin}/${urlPath}/${product!.RecordId}.p`;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n const fallbackImageUrl =\r\n product &&\r\n getFallbackImageUrl(\r\n product.ItemId,\r\n props.context.actionContext.requestContext.apiSettings,\r\n props.context.app?.config?.OmniChannelMedia\r\n );\r\n const imageSettings = props.imageSettings;\r\n imageSettings.cropFocalRegion = !ObjectExtensions.isNullOrUndefined(imageSettings);\r\n // const { inputQuantityAriaLabel } = props.resources;\r\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderDiscountLines = CartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\r\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\r\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\r\n const renderConfirmedShipDate = CartLineItemFunctions.renderConfirmedShipDate(props);\r\n // const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const prodAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n const productName = product?.Name || cartLine.Description;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n //VSI Customization for Min Max of Product\r\n const [isMax, setIsMax] = React.useState(false);\r\n const [isMin, setIsMin] = React.useState(false);\r\n // const [noFurtherSuppliesErrorStockErrMsg, setNoFurtherSuppliesErrorStockErrMsg] = React.useState(false);\r\n\r\n //VSI Customization for setState of min Max\r\n React.useEffect(() => {\r\n props.currentQuantity && props.currentQuantity < props.data.product?.Behavior?.MinimumQuantity! ? setIsMin(true) : setIsMin(false);\r\n props.currentQuantity && props.currentQuantity === propMax! ? setIsMax(true) : setIsMax(false);\r\n }, [props.currentQuantity]);\r\n\r\n //VSI Customization Start\r\n //*********** ATP WORK START **************//\r\n const itemNumber = props.data.product?.ItemId;\r\n const telemetry = props.context.telemetry;\r\n const [trafficLightsResponse, settrafficLightsResponse] = React.useState();\r\n const [propMax, setPropMax] = React.useState(props.maxQuantity!);\r\n\r\n //Create date according to API\r\n const objectDate = new Date();\r\n const day = objectDate.getDate();\r\n const month = objectDate.getMonth();\r\n const year = objectDate.getFullYear();\r\n const requestedDate = `${month + 1}/${day}/${year}`;\r\n\r\n //Call Traffic Light Data Action\r\n async function trafficLightsDataActionCall() {\r\n const requestBody = {\r\n itemId: itemNumber!,\r\n requestedDate: requestedDate\r\n };\r\n try {\r\n const trafficLightsParams = new TrafficLightsAtpInput(requestBody.itemId, requestBody.requestedDate);\r\n const trafficLightsSlots = await trafficLightsAtpaction(trafficLightsParams, props.context.actionContext);\r\n settrafficLightsResponse(trafficLightsSlots);\r\n } catch (error) {\r\n telemetry.warning('error');\r\n telemetry.debug('Unable to get response for traffic lights slots');\r\n }\r\n }\r\n\r\n React.useEffect(() => {\r\n if (requestedDate && itemNumber) trafficLightsDataActionCall();\r\n }, [requestedDate, itemNumber]);\r\n\r\n React.useEffect(() => {\r\n if (props.maxQuantity) {\r\n setPropMax(props.maxQuantity);\r\n }\r\n }, [props.maxQuantity]);\r\n\r\n //Use this Effect for set max values of product in state according to status\r\n React.useEffect(() => {\r\n if (trafficLightsResponse) {\r\n if (trafficLightsResponse.StatusCode === '500') {\r\n setPropMax(trafficLightsResponse?.Quantity);\r\n } else if (trafficLightsResponse.StatusCode === '501') {\r\n if (trafficLightsResponse.POQuantity > props.maxQuantity!) {\r\n setPropMax(props.maxQuantity!);\r\n } else {\r\n setPropMax(trafficLightsResponse.POQuantity!);\r\n }\r\n } else if (trafficLightsResponse.StatusCode === '502') {\r\n setPropMax(trafficLightsResponse?.Quantity);\r\n } else if (trafficLightsResponse.StatusCode === '503') {\r\n if (trafficLightsResponse?.Quantity + trafficLightsResponse.POQuantity > props.maxQuantity!) {\r\n setPropMax(props.maxQuantity!);\r\n } else {\r\n setPropMax(trafficLightsResponse?.Quantity + trafficLightsResponse.POQuantity);\r\n }\r\n } else if (trafficLightsResponse.StatusCode === '204') {\r\n setPropMax(trafficLightsResponse?.Quantity!);\r\n props?.currentQuantity! > trafficLightsResponse?.Quantity! ? setIsMax(true) : null;\r\n } else {\r\n setPropMax(props.maxQuantity!);\r\n }\r\n }\r\n }, [trafficLightsResponse]);\r\n\r\n // ****** ATP WORK END *****//\r\n //VSI Customization END\r\n\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\r\n }\r\n return true;\r\n };\r\n const _generateErrorMessage = (): JSX.Element | null => {\r\n return (\r\n
\r\n {isMin && (\r\n
\r\n \r\n {`The minimum quantity to purchase for this product is ${props.data.product?.Behavior\r\n ?.MinimumQuantity!}`}\r\n
\r\n )}\r\n\r\n {isMax && (\r\n
\r\n \r\n {`The maximum quantity to purchase for this product is ${propMax}`}\r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n //Comment this code maybe this code will be used in future for messages\r\n // const _generateStockErrorMessage = (): JSX.Element | null => {\r\n // return (\r\n //
\r\n // {noFurtherSuppliesErrorStockErrMsg && (\r\n //
\r\n // \r\n // {`The maximum quantity to purchase for this product is ${props.maxQuantity} but for now we have only ${propMax} in stock and no further supplies`}\r\n //
\r\n // )}\r\n //
\r\n // );\r\n // };\r\n\r\n // const _updateQuantity = (event: React.ChangeEvent) => {\r\n // if (props.quantityOnChange) {\r\n // props.quantityOnChange(props.data.cartLine, Number.parseInt(event.target.value, 10), props.lineIndex);\r\n // }\r\n // };\r\n\r\n // const _generateMenu = (quantity: number) => {\r\n // const nodes = [];\r\n\r\n // for (let i = 1; i <= quantity; i++) {\r\n // nodes.push(\r\n // \r\n // );\r\n // }\r\n\r\n // return nodes;\r\n // };\r\n\r\n // const _generateSelectMenu = (quantity: number, currentQuantity: number | undefined): JSX.Element => {\r\n // return (\r\n // \r\n // {_generateMenu(quantity)}\r\n // \r\n // );\r\n // };\r\n\r\n const _generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n let nodes = [];\r\n if (props.isOutOfStock) {\r\n return null;\r\n }\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.isQuantityEditable && !props.data.product?.IsGiftCard && props.data.product) {\r\n nodes.push(\r\n
\r\n
{mainCartQuantity}
\r\n\r\n {\r\n propMax\r\n ? propMax\r\n : props.currentQuantity\r\n }\r\n onChange={onChange}\r\n inputQuantityAriaLabel={resources.inputQuantityAriaLabel}\r\n decrementButtonAriaLabel={resources.decrementButtonAriaLabel}\r\n incrementButtonAriaLabel={resources.incrementButtonAriaLabel}\r\n key={props.data.cartLine.LineId}\r\n disabled={!props.isCartStateReady}\r\n isGiftCard={props.data.product.IsGiftCard}\r\n telemetryContent={props.telemetryContent}\r\n />\r\n }\r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n \r\n {props.data.cartLine.Quantity}\r\n
\r\n );\r\n }\r\n }\r\n nodes.push(\r\n
\r\n \r\n
\r\n );\r\n return nodes;\r\n };\r\n const extensionsProps = product?.ExtensionProperties;\r\n let promotionBadge = '';\r\n if (extensionsProps?.find(e => e?.Key === 'PromotionBadge')) {\r\n promotionBadge = extensionsProps?.find(e => e?.Key === 'PromotionBadge')?.Value?.StringValue || '';\r\n }\r\n\r\n if (props.displayMode === 'COMPACT') {\r\n const reducedDimensions: string = product?.Dimensions\r\n ? product.Dimensions.reduce((str, productDimension) => {\r\n if (productDimension.DimensionValue?.Value) {\r\n if (str) {\r\n return `${str}, ${productDimension.DimensionValue.Value}`;\r\n }\r\n\r\n return `${productDimension.DimensionValue.Value}`;\r\n }\r\n\r\n return str;\r\n }, '')\r\n : '';\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {MsDyn365.isBrowser ? (\r\n \r\n {productName}\r\n \r\n ) : null}\r\n {reducedDimensions !== '' ?
{reducedDimensions}
: ''}\r\n {renderUnitOfMeasure}\r\n {_generateQuantityAndPrice()}\r\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\r\n \r\n )}\r\n
\r\n {_generateErrorMessage()}\r\n
\r\n );\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {MsDyn365.isBrowser ? (\r\n \r\n {productName}\r\n \r\n ) : null}\r\n {ArrayExtensions.hasElements(productDimensions) ? (\r\n
{productDimensions}
\r\n ) : (\r\n ''\r\n )}\r\n {renderUnitOfMeasure}\r\n {renderDiscountLines}\r\n
\r\n \r\n
\r\n {renderDiscountLines}\r\n {renderInventoryLabel}\r\n {props.showShippingChargesForLineItems &&
{renderShippingLabel}
}\r\n {renderOtherCharges}\r\n {/* {renderSalesAgreementPrompt} */}\r\n {renderConfirmedShipDate}\r\n
\r\n {_generateQuantityAndPrice()}\r\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\r\n \r\n )}\r\n
\r\n
\r\n {_generateErrorMessage()}\r\n {/* {_generateStockErrorMessage()} */}\r\n \r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const CartLineItemComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'CartLineItem',\r\n { component: CartLine, ...CartLineItemFunctions }\r\n);\r\n\r\nexport default CartLineItemComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { PriceLine, ProductPrice, SalesAgreementPriceLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { Button, Collapse, format, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { incExcPriceFormat } from '../../../../utils/helper';\r\n\r\nconst defaultPrice: number = 0;\r\nconst freePrice: number = 0;\r\n\r\n/**\r\n * Interface for price component resources.\r\n * @param {string} priceRangeSeparator - The price range separator.\r\n */\r\nexport interface IPriceComponentResources {\r\n priceRangeSeparator?: string;\r\n salesAgreementPricePrompt?: string;\r\n salesAgreementExpirationDatePrompt?: string;\r\n salesAgreementCommittedQuantityPrompt?: string;\r\n salesAgreementRemainingQuantityPrompt?: string;\r\n}\r\n\r\n/**\r\n * Interface for price component props.\r\n * @param {boolean} isPriceMinMaxEnabled - Whether the price range feature is enabled or not.\r\n * @param {IPriceComponentResources} priceResources - The price range resources.\r\n */\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n isSalesAgreementPriceFeatureEnabled?: boolean;\r\n useLegacySalesAgreementHTMLFeature?: boolean;\r\n salesAgreementLineId?: number;\r\n priceResources?: IPriceComponentResources;\r\n salesAgreementDetailCollapseProps?: ICollapseProps;\r\n salesAgreementDetailOnClick?(event: React.MouseEvent | React.KeyboardEvent): void;\r\n isIncExPriceFormatEnabled?: boolean;\r\n wpPrice?: JSX.Element;\r\n currencyCode?: string;\r\n customerTaxPercentage?: number;\r\n}\r\n\r\n/**\r\n * The interface of price component.\r\n */\r\nexport interface IPriceComponent extends IComponent {}\r\n\r\nconst priceComponentActions = {};\r\n\r\n/**\r\n * Get the original price from price component props.\r\n * @param props - The IPriceComponentProps.\r\n * @returns The original price.\r\n */\r\nconst getOriginalPrice = (props: IPriceComponentProps): number => {\r\n return Math.max(\r\n props.data.price.BasePrice ?? defaultPrice,\r\n props.data.price.TradeAgreementPrice ?? defaultPrice,\r\n props.data.price.AdjustedPrice ?? defaultPrice\r\n );\r\n};\r\n\r\n/**\r\n * Get the formatted currency.\r\n * @param props - The props.\r\n * @param price - The price.\r\n * @param shouldUseFreePriceText - The shouldUseFreePriceText.\r\n * @returns The formatted currency.\r\n */\r\nconst formatCurrency = (\r\n props: IPriceComponentProps,\r\n price: number | undefined,\r\n shouldUseFreePriceText: boolean | undefined,\r\n currencyCode?: string | undefined\r\n): string | JSX.Element => {\r\n if (price === undefined) {\r\n return '';\r\n }\r\n\r\n if (shouldUseFreePriceText && price === freePrice && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n const { enabledIncExPrices } = props.context.app.config;\r\n // modify the below return statement of price with currency format\r\n // return props.context.cultureFormatter.formatCurrency(price);\r\n return props.isIncExPriceFormatEnabled\r\n ? incExcPriceFormat(price, props.context, enabledIncExPrices, props.customerTaxPercentage || 0)\r\n : props.context.cultureFormatter.formatCurrency(price, currencyCode);\r\n};\r\n\r\n/**\r\n * ShowStrikethroughPricing.\r\n * @param props - The props.\r\n * @returns True if showStrikethroughPricing, false otherwise.\r\n */\r\nconst showStrikethroughPricing = (props: IPriceComponentProps): boolean => {\r\n const originalPrice = getOriginalPrice(props);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return props.data.price.MinVariantPrice < originalPrice;\r\n }\r\n\r\n if (originalPrice && props.data.price?.CustomerContextualPrice) {\r\n return originalPrice > props.data.price?.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Render current price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst renderCurrentPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const maxVariantPrice: string | JSX.Element = formatCurrency(props, props.data.price.MaxVariantPrice, false, props.currencyCode);\r\n const minVariantPrice: string | JSX.Element = formatCurrency(props, props.data.price.MinVariantPrice, false, props.currencyCode);\r\n if (\r\n props.isPriceMinMaxEnabled &&\r\n props.data.price.MaxVariantPrice &&\r\n props.data.price.MinVariantPrice &&\r\n props.data.price.MaxVariantPrice > props.data.price.MinVariantPrice\r\n ) {\r\n return (\r\n \r\n \r\n {minVariantPrice}\r\n \r\n \r\n {props.priceResources?.priceRangeSeparator}\r\n \r\n \r\n {maxVariantPrice}\r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n {formatCurrency(props, props.data.price?.CustomerContextualPrice, true, props.currencyCode)}\r\n {props?.wpPrice && props?.wpPrice}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render current price with original price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element => {\r\n const originalPrice: number = getOriginalPrice(props);\r\n const initialPrice: string | JSX.Element = formatCurrency(props, originalPrice, true);\r\n return (\r\n <>\r\n \r\n {` `}\r\n {props.originalPriceText}\r\n {` `}\r\n {initialPrice}\r\n {` `}\r\n {props.currentPriceText}\r\n {` `}\r\n {renderCurrentPrice(props)}\r\n \r\n {/* */}\r\n \r\n {props.savingsText && {props.savingsText}}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The state of sales agreement details.\r\n * @deprecated This will be removed with SalesAgreementPrice class soon.\r\n */\r\nexport interface ISalesAgreementDetailState {\r\n isOpen: boolean;\r\n}\r\n\r\n/**\r\n * The SalesAgreementPrice class.\r\n * @deprecated This implementation is deprecated. It will be removed soon. Please use the implementation in the Price function component.\r\n */\r\n// eslint-disable-next-line react/require-optimization -- Not needed.\r\nclass SalesAgreementPrice extends React.Component {\r\n public constructor(props: IPriceComponentProps) {\r\n super(props);\r\n this._toggle = this._toggle.bind(this);\r\n this.state = {\r\n isOpen: true\r\n } as ISalesAgreementDetailState;\r\n }\r\n\r\n public render(): React.ReactElement {\r\n const priceLines: PriceLine[] = this.props.data.price.AttainablePriceLines ?? [];\r\n const firstPriceLine: SalesAgreementPriceLine = priceLines[0] as SalesAgreementPriceLine;\r\n if (this.props.salesAgreementDetailCollapseProps) {\r\n this.props.salesAgreementDetailCollapseProps.isOpen = this.state.isOpen;\r\n }\r\n return (\r\n \r\n

\r\n {formatCurrency(\r\n this.props,\r\n this.props.data.price.SalesAgreementPrice ?? this.props.data.price?.CustomerContextualPrice,\r\n true\r\n )}\r\n

\r\n \r\n {this.props.priceResources?.salesAgreementPricePrompt}\r\n

\r\n \r\n

\r\n \r\n {/* Available date */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementExpirationDatePrompt ?? '',\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.EffectiveDate as Date),\r\n this.props.context.cultureFormatter.formatDate(firstPriceLine.ExpirationDate as Date)\r\n )}\r\n \r\n \r\n {/* Quantity commitment */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementCommittedQuantityPrompt ?? '',\r\n firstPriceLine.CommittedQuantity\r\n )}\r\n \r\n \r\n {/* Remaining quantity to qualify */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n this.props.priceResources?.salesAgreementRemainingQuantityPrompt ?? '',\r\n firstPriceLine.RemainingQuantity\r\n )}\r\n \r\n

\r\n
\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Callback which toggles collapse mode.\r\n * @param event - The mouse or keyboard event.\r\n */\r\n private _toggle(event: React.MouseEvent | React.KeyboardEvent): void {\r\n event.preventDefault();\r\n // eslint-disable-next-line react/no-access-state-in-setstate -- Copied from other class.\r\n this.setState({ isOpen: !this.state.isOpen });\r\n }\r\n}\r\n\r\nconst renderSalesAgreementDetail = (props: IPriceComponentProps): JSX.Element => {\r\n // In most cases there should be only one sales agreement line.\r\n // If there are more than one, only the first one will be shown.\r\n const firstPriceLine: SalesAgreementPriceLine = (props.data.price.AttainablePriceLines ?? [])[0] as SalesAgreementPriceLine;\r\n return (\r\n

\r\n

\r\n {/* Available date */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' +\r\n format(\r\n props.priceResources?.salesAgreementExpirationDatePrompt ?? '',\r\n props.context.cultureFormatter.formatDate(firstPriceLine.EffectiveDate as Date),\r\n props.context.cultureFormatter.formatDate(firstPriceLine.ExpirationDate as Date)\r\n )}\r\n

\r\n

\r\n {/* Quantity commitment */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' + format(props.priceResources?.salesAgreementCommittedQuantityPrompt ?? '', firstPriceLine.CommittedQuantity)}\r\n

\r\n

\r\n {/* Remaining quantity to qualify */}\r\n {// eslint-disable-next-line prefer-template -- Copied from other class.\r\n ' · ' + format(props.priceResources?.salesAgreementRemainingQuantityPrompt ?? '', firstPriceLine.RemainingQuantity)}\r\n

\r\n

\r\n );\r\n};\r\n\r\n/**\r\n * Price.\r\n * @param props - The props.\r\n * @returns The JSX.Element.\r\n */\r\nconst Price: React.FC = (props: IPriceComponentProps): JSX.Element | null => {\r\n // CustomerContextualPrice could be zero);\r\n if (props.data.price?.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n // Determine if contract price is avaiable/applied by:\r\n // isFeatureEnabled and SA price != 0, for PDP.\r\n // SA line id != 0, for cart line.\r\n if (props.isSalesAgreementPriceFeatureEnabled && props.data.price.SalesAgreementPrice !== 0) {\r\n if (props.useLegacySalesAgreementHTMLFeature) {\r\n const salesAgreementPrice = new SalesAgreementPrice(props);\r\n return {salesAgreementPrice.render()};\r\n } else {\r\n const [isExpanded, setIsExpanded] = React.useState(false);\r\n const toggle = () => {\r\n setIsExpanded(!isExpanded);\r\n };\r\n return (\r\n \r\n \r\n

\r\n {formatCurrency(props, props.data.price.SalesAgreementPrice ?? props.data.price.CustomerContextualPrice, true)}\r\n

\r\n \r\n {props.priceResources?.salesAgreementPricePrompt}\r\n \r\n {isExpanded && renderSalesAgreementDetail(props)}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * The PriceComponent.\r\n */\r\nexport const PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'Price',\r\n {\r\n component: Price,\r\n ...priceComponentActions\r\n }\r\n);\r\n\r\nexport default PriceComponent;\r\n","import React from 'react';\r\nexport const PromotionBadges: React.FC = ({ promotionalBadge, context }) => {\r\n const { enableBadges, badges } = context?.actionContext?.requestContext?.app.config;\r\n const badgeUI = badges?.find((badge: { label: string }) => badge?.label?.trim() === promotionalBadge?.trim());\r\n if (enableBadges && context?.actionContext?.requestContext?.user?.isAuthenticated && promotionalBadge?.length !== 0) {\r\n return (\r\n \r\n {promotionalBadge}\r\n \r\n );\r\n }\r\n return null;\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 { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\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 { 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\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({ 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({ 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 defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\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 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 if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\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 }\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 { 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 const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there is no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n foundProductAvailability\n );\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
\n {orgUnitName}\n
\n );\n }\n }\n\n return null;\n};\n\nconst _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n};\n\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\n const { products, cartlines } = props;\n return _assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Method will render error block.\n * @param errorData -The order summary errors interface.\n * @returns Jsx element.\n */\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Method will render invoice summary lines.\n * @param invoiceSummaryLines -The invoicesummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render order summary lines.\n * @param orderSummaryLines -The ordersummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render cart promotions.\n * @param promotions -The cartline item view props.\n * @returns Jsx element.\n */\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Method will render cartlines group title.\n * @param cartLine -The cartline view props.\n * @param titleSeparate -The title separate.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {titleSeparate}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n
\n \n );\n};\n\n/**\n * Method will render cartlines groups header title.\n * @param pickUpText -The pickup text for group.\n * @param shippingText -The shipping text for group.\n * @param emailShippingText -The email shipping text for group.\n * @param titleSeparate -The title separator.\n * @param cartLine -The cartline view props.\n * @param emailDeliveryModeCode -The email delivery code from channel.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupHeader = (\n pickUpText: string,\n shippingText: string,\n emailShippingText: string,\n titleSeparate: string,\n cartLine: ICartlinesViewProps,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\n
\n \n );\n};\n\n/**\n * Method will render cartlines in groups.\n * @param props -The cartline.\n * @returns Jsx element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n props.resources.pickUpText,\n props.resources.shippingText,\n props.resources.emailshippingText,\n props.resources.titleSeparate,\n cartlines[0],\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\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"],"names":["CatalogLabelComponent","props","catalogId","data","cartLine","CatalogId","validateCatalogId","isChannelTypeB2B","context","actionContext","requestContext","ArrayExtensions","hasElements","catalogs","catalog","find","item","RecordId","Name","React","className","CartLineItemFunctions","renderProductDimensions","Product","DimensionStrings","Dimensions","map","productDimension","DimensionTypeValue","key","colorString","DimensionValue","Value","sizeString","_productDimension$Dim","IsGiftCard","amountString","styleString","_productDimension$Dim2","renderDiscountLines","DiscountLines","length","discountLine","index","_discountLine$OfferNa","_discountLine$OfferNa2","OfferName","toLowerCase","trim","renderInventoryLabel","inventoryInformationLabel","inventoryCssName","inventoryLabelClassName","renderUnitOfMeasure","IsInvoiceLine","app","config","unitOfMeasureDisplayType","product","DefaultUnitOfMeasure","renderShippingLabel","_props$context$reques","pickupDeliveryModeCode","request","channel","PickupDeliveryModeCode","channelDeliveryOptionConfig","cartline","hasShippingMethod","_channelDeliveryOptio","undefined","DeliveryMode","PickupDeliveryModeCodes","some","deliveryMode","shippingChargeLines","ChargeLines","filter","chargeLine","IsShipping","freightFee","reduce","chargeTotal","CalculatedAmount","priceComponent","PriceComponent","price","CustomerContextualPrice","freePriceText","id","typeName","isIncExPriceFormatEnabled","currencyCode","priceCurrency","customerTaxPercentage","resources","shippingChargesText","renderConfirmedShipDate","isSalesLine","confirmedShipDate","StringExtensions","isNullOrEmpty","shipDateCssName","confirmedShipDateLabel","renderOtherCharges","_cartline$ChargeLines","otherCharges","chargeline","otherCharge","Description","CartLineItemComponent","msdyn365Commerce","createComponentOverride","_objectSpread","component","_props$context4","_productAttributes$fi","_props$context$action","_props$context$app","_props$data$product3","_props$primaryImageUr2","mainCartQuantity","productAttributes","setproductAttributes","async","_props$context","_props$data$product","_props$context2","_props$context3","attributes","getAttributeValuesAsync","callerContext","queryResultSettings","apiSettings","channelId","error","telemetry","warning","debug","getProductAttributes","lookupAttributeKey","productManufacturarAttribute","manufacturer","TextValue","urlPath","formatUrlPath","prod","_prod$ExtensionProper","ExtensionProperties","extension","Key","StringValue","pathName","url","requestUrl","pathname","split","productUrl","addPathWithUrl","origin","destructDimensionStrings","configString","fallbackImageUrl","getFallbackImageUrl","ItemId","OmniChannelMedia","imageSettings","cropFocalRegion","ObjectExtensions","isNullOrUndefined","productDimensions","payLoad","getPayloadObject","telemetryContent","toString","prodAttribute","getTelemetryAttributes","productName","imgeClassName","isMax","setIsMax","isMin","setIsMin","_props$data$product2","currentQuantity","Behavior","MinimumQuantity","propMax","itemNumber","trafficLightsResponse","settrafficLightsResponse","setPropMax","maxQuantity","objectDate","Date","day","getDate","requestedDate","getMonth","getFullYear","requestBody","itemId","trafficLightsParams","TrafficLightsAtpInput","trafficLightsSlots","trafficLightsAtpaction","trafficLightsDataActionCall","StatusCode","Quantity","POQuantity","onChange","newValue","quantityOnChange","lineIndex","_generateErrorMessage","_props$data$product4","_generateQuantityAndPrice","nodes","isOutOfStock","_props$data$product5","isQuantityEditable","push","classNames","quantityDisplayString","IncrementalQuantity","LineId","max","currentCount","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","disabled","isCartStateReady","isGiftCard","NetAmountWithAllInclusiveTax","BasePrice","GrossAmount","NetAmountWithoutTax","NetPrice","originalPriceText","currentPriceText","salesAgreementLineId","SalesAgreementLineRecordId","extensionsProps","promotionBadge","_extensionsProps$find","e","displayMode","_props$primaryImageUr","reducedDimensions","str","_productDimension$Dim3","Image","src","primaryImageUrl","fallBackSrc","altText","gridSettings","loadFailureBehavior","MsDyn365","isBrowser","Object","assign","href","cartState","priceEditorResources","CartLinePriceEditor","PromotionBadges","promotionalBadge","NetAmount","Price","ExtendedPrice","showShippingChargesForLineItems","getOriginalPrice","_props$data$price$Bas","_props$data$price$Tra","_props$data$price$Adj","Math","TradeAgreementPrice","AdjustedPrice","formatCurrency","shouldUseFreePriceText","enabledIncExPrices","incExcPriceFormat","cultureFormatter","renderCurrentPrice","_props$data$price3","maxVariantPrice","MaxVariantPrice","minVariantPrice","MinVariantPrice","_props$priceResources","isPriceMinMaxEnabled","itemProp","priceResources","priceRangeSeparator","wpPrice","SalesAgreementPrice","constructor","super","this","_toggle","bind","state","isOpen","render","_this$props$data$pric","_this$props$data$pric2","_this$props$data$pric3","_this$props$priceReso","_this$props$priceReso2","_this$props$priceReso3","_this$props$priceReso4","_this$props$priceReso5","_this$props$priceReso6","_this$props$priceReso7","firstPriceLine","AttainablePriceLines","salesAgreementDetailCollapseProps","classnames","onClick","salesAgreementPricePrompt","Collapse","format","salesAgreementExpirationDatePrompt","formatDate","EffectiveDate","ExpirationDate","salesAgreementCommittedQuantityPrompt","CommittedQuantity","salesAgreementRemainingQuantityPrompt","RemainingQuantity","event","preventDefault","setState","_props$data$price4","isSalesAgreementPriceFeatureEnabled","useLegacySalesAgreementHTMLFeature","salesAgreementPrice","_props$data$price$Sal","_props$priceResources8","_props$priceResources9","isExpanded","setIsExpanded","toggle","Button","tabIndex","_props$data$price$Att","_props$priceResources2","_props$priceResources3","_props$priceResources4","_props$priceResources5","_props$priceResources6","_props$priceResources7","renderSalesAgreementDetail","_props$data$price","originalPrice","_props$data$price2","showStrikethroughPricing","initialPrice","savingsText","renderCurrentPriceWithOriginalPrice","_ref","_context$actionContex","_context$actionContex2","enableBadges","badges","badgeUI","badge","_badge$label","label","user","isAuthenticated","title","style","background","bgColor","color","fontColor","validateCartAsync","cart","propsContext","cartResult","cartVersion","shouldRetry","arguments","Version","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","bypassCache","Id","ValidationResultsByLineId","name","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","ProductId","MaximumQuantity","input","cartLineId","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","ProductPickUpOptionsForCartLineItems","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","Error","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","response","Promise","ProductsDataActions","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","createObservableDataAction","action","inputData","PickUpInStore","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","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","option","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","type","value","checked","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","ContainerProps","_assembleNode","foundProductAvailability","productPickUpOptions","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","errorMessage","_getErrorMessage","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","replace","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","i","ValidationFailures","forEach","validation","ErrorContext","join","onRemoveClickHandler","onRemoveClickFunction","payload","TelemetryEvent","RemoveFromCart","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","isCustomPriceSelected","dimension","getProductUrlSync","_cartline$CatalogId","fullUrl","URL","window","searchParams","set","getInvoiceDetailsPageUrlSync","cartlineId","hasError","updateCartLinesQuantitySuccessHandler","PrimaryImageUrl","Currency","pickUpInStore","pickitUpText","remove","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","shouldShowButtonFailedTooltip","disableButton","disableTooltip","assembleCartlines","cartlines","reactNodes","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","hasInvoiceLine","_assembleGroupInvoiceCartlines","cartLines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","items","groupBy","groupDelivery","cartLinesGroup","entries","deliveryType","groupByDeliveryType","keys","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","exception","Cart","_isMounted","promotionPopupId","promotionLinkClick","showPromotionDialog","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","isCartValid","_this$props$data$cart","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","CartLines","reaction","_this$props$data$cart2","_this$props$data$cart3","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","_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","emailDeliveryModeCode","EmailDeliveryModeCode","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","RetailMultiplePickupFeatureState","featureState","multiplePickUpEnabled","IsEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCatalogId","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","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","role","promotionDialog","Modal","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","line","Wrapper","tag","Alert","assertive","outOfStockErrorMessageHeader","header","errors","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","_featureState$result2","_this$props$context$r2","channelConfiguration","retailMultiplePickUpOptionEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","taxLabel","estimatedTaxLabel","orderTotal","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","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","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","productDimensionTypeSize","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeStyle","productDimensionTypeAmount","quantityDisplayText","discountStringText","shippingCharges","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","includes","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find","featureStatuses","customerInfo","IsB2b","_featureStatuses$find2","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","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","TotalAmount","priceString","totalPriceFormatString","feature","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","miniCartWrapper","miniCartItemWrapper","goToCartButton","totalPrice","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","FlyoutCartLineItems","cartLinesSortOrder","outOfStockThreshold","shippingText","_renderDeliveryLocation","deliverylocation","_foundProductDelivery","foundProductDeliveryOption","_renderStoreLocation","_assembleCartlines","foundProductDeliveryOptions","isServiceItem","RemoveCartItem","removeCartItemAttribute","deliveryLocation","storeLocation","_renderCartlines","cartEmptyText","_cartLine$cartlineId","Node","renderCartLinesGroupHeader","pickUpText","emailShippingText","titleSeparate","_cartLine$pickUpInSto4","groupTitle","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_props$cart","_props$cart2","errorData","renderModuleAttributes","emailshippingText","emptyCartText","renderCartLinesGroup","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","_renderOrderSummarylines","orderSummaryLines","subtotal","shipping","tax","totalDiscounts","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","checkoutState","loyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","giftCardCounter","count","Balance","amount","min","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","canShip","hasDeliveryMethod","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","customerAccountAmount","customerAccount","customerAccountLabel"],"sourceRoot":""}