{"version":3,"file":"static/js/9.99e2bb702f6fa6ba3ed5.chunk.js","mappings":"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","sources":["webpack://lds-commerce/./src/modules/lds-buybox/components/utilities/error-utilities.ts?4572","webpack://lds-commerce/./src/themes/fabrikam/views/components/addtocart.component.tsx?c59f","webpack://lds-commerce/./src/invoice-summary-lineitem.tsx?5f61","webpack://lds-commerce/./src/order-summary-lineitem.tsx?8a98","webpack://lds-commerce/./src/eden/eden-style-constants/lib/es/index.js?8ac0"],"sourcesContent":["/* eslint-disable security/detect-object-injection */\r\n/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport { IAddToCartFailureResult } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { OrgUnitLocation, ProductAvailableQuantity, ProductDimension, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IBuyboxCommonResources } from '../buyboxInterface';\r\n\r\n/**\r\n * Get the quantity limit.\r\n * @param context - The context.\r\n * @param productAvailability - The product availability.\r\n * @returns The quantity limit.\r\n */\r\nexport function getQuantityLimit(context: ICoreContext>, productAvailability: ProductAvailableQuantity | undefined): number {\r\n // Get the quantity limit for the product\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- need read from config.\r\n const maxQuantityForCartLineItem: number | undefined = context.app.config.maxQuantityForCartLineItem;\r\n const availableQty = productAvailability?.AvailableQuantity;\r\n const defaultQuantityLimit = 10;\r\n\r\n let quantityLimit: number;\r\n\r\n if (maxQuantityForCartLineItem === undefined && availableQty === undefined) {\r\n quantityLimit = defaultQuantityLimit;\r\n } else if (availableQty === undefined) {\r\n quantityLimit = maxQuantityForCartLineItem ?? defaultQuantityLimit;\r\n } else if (maxQuantityForCartLineItem === undefined) {\r\n quantityLimit = availableQty;\r\n } else {\r\n quantityLimit = Math.min(maxQuantityForCartLineItem, availableQty);\r\n }\r\n\r\n return quantityLimit;\r\n}\r\n\r\n/**\r\n * Get the element index.\r\n * @param cart - The cart.\r\n * @param product - The product.\r\n * @param location - The location.\r\n * @returns The index of the element.\r\n */\r\nexport function getElementIndex(\r\n cart: ICartState | undefined,\r\n product: SimpleProduct | undefined,\r\n location: OrgUnitLocation | undefined\r\n): number {\r\n // Get the quantity of the product in cart\r\n let elementFoundAt: number = -1;\r\n\r\n const productIdToFind = product?.RecordId;\r\n\r\n for (let index = 0; index < cart!.cart.CartLines!.length; index++) {\r\n if (\r\n cart!.cart.CartLines![index].ProductId === productIdToFind &&\r\n (cart!.cart.CartLines![index].FulfillmentStoreId || '') === (location?.OrgUnitNumber || '')\r\n ) {\r\n elementFoundAt = index;\r\n\r\n break;\r\n }\r\n }\r\n\r\n return elementFoundAt;\r\n}\r\n\r\nexport function getQuantityError(stockLeft: number | undefined, resources: IBuyboxCommonResources): string | undefined {\r\n if (!stockLeft || stockLeft <= 0) {\r\n return resources.errorMessageOutOfStock;\r\n } else if (stockLeft === 1) {\r\n return resources.errorMessageOutOfRangeOneLeft;\r\n }\r\n return resources.errorMessageOutOfRangeFormat.replace('{numLeft}', stockLeft.toString());\r\n}\r\n\r\nexport function getGenericError(\r\n result: IAddToCartFailureResult,\r\n cart: ICartState | undefined,\r\n resources: IBuyboxCommonResources,\r\n context: ICoreContext>,\r\n product: SimpleProduct | undefined,\r\n productAvailability: ProductAvailableQuantity | undefined,\r\n location: OrgUnitLocation | undefined\r\n): string | undefined {\r\n if (result.failureReason === 'EMPTYINPUT') {\r\n return resources.addedToCartFailureMessage;\r\n } else if (result.failureReason === 'CARTACTIONFAILED') {\r\n if (result.cartActionResult && result.cartActionResult.substatus === 'MAXQUANTITY') {\r\n // Get the quantity of the product in cart\r\n const elementFoundAt: number = getElementIndex(cart, product, location);\r\n\r\n let currentQuantity: number = 0;\r\n if (elementFoundAt !== -1) {\r\n const cartLineToUpdate = { ...cart!.cart.CartLines![elementFoundAt] };\r\n currentQuantity = cartLineToUpdate.Quantity ?? 0;\r\n }\r\n\r\n // Get the quantity limit for the product\r\n const quantityLimit = getQuantityLimit(context, productAvailability);\r\n return resources.maxQuantityLimitText\r\n .replace('{curQuantity}', currentQuantity.toString())\r\n .replace('{maxQuantity}', quantityLimit.toString());\r\n } else if (\r\n result.cartActionResult &&\r\n (result.cartActionResult.substatus === 'QUANTITYLIMITS' || result.cartActionResult.substatus === 'INVOICEINCART')\r\n ) {\r\n return result.cartActionResult.errorDetails?.LocalizedMessage;\r\n }\r\n\r\n if (result.cartActionResult?.validationResults && ArrayExtensions.hasElements(result.cartActionResult.validationResults)) {\r\n return result.cartActionResult.validationResults\r\n .map(item => {\r\n return StringExtensions.isNullOrEmpty(item.LocalizedMessage)\r\n ? item.ErrorContext ?? item.ErrorResourceId\r\n : item.LocalizedMessage;\r\n })\r\n .toString();\r\n }\r\n\r\n return resources.addedToCartFailureMessage;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function getConfigureErrors(\r\n result: ProductDimension[] | undefined,\r\n resources: any,\r\n isGiftCard?: boolean,\r\n customError?: any,\r\n customColorError?: any,\r\n customStyleError?: any,\r\n cartCheckError?: any\r\n): { [configureId: string]: string | undefined } {\r\n // if (!result && cartCheckError) {\r\n // return {\r\n // 5: 'Can not add to order as Shipping method is currently active on cart. Please complete your current order or adjust the method of delivery to continue'\r\n // };\r\n // }\r\n // if (!result) {\r\n // return {};\r\n // }\r\n\r\n const dimensions: { [configureId: string]: string | undefined } = {};\r\n\r\n if (!result && cartCheckError && Object.keys(dimensions).length === 0) {\r\n return {\r\n //Need to make sure this works on all products\r\n 5: `${cartCheckError}`\r\n };\r\n } else if (!result) {\r\n return {};\r\n }\r\n for (const dimension of result) {\r\n customError\r\n ? (dimensions[dimension.DimensionTypeValue] = getDimensionErrorString(\r\n dimension.DimensionTypeValue,\r\n resources,\r\n isGiftCard,\r\n customError,\r\n customColorError,\r\n customStyleError\r\n ))\r\n : (dimensions[dimension.DimensionTypeValue] = getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard));\r\n }\r\n\r\n return dimensions;\r\n}\r\n\r\nexport function getDimensionErrorString(\r\n dimensionTypeValue: number,\r\n resources: any,\r\n isGiftCard?: boolean,\r\n customError?: any,\r\n customColorError?: any,\r\n customStyleError?: any\r\n): string {\r\n const bookSizeError =\r\n customError && customColorError ? customError.filter((type: any) => type.TextValue === customColorError.TextValue) : null;\r\n const languageError =\r\n customError && customStyleError ? customError.filter((type: any) => type.TextValue === customStyleError.TextValue) : null;\r\n\r\n switch (dimensionTypeValue) {\r\n case 1: // ProductDimensionType.Color\r\n return bookSizeError\r\n ? `${bookSizeError[0].TextValue} ${resources.productDimensionTypeColorErrorMessage} ${bookSizeError[0].TextValue}`\r\n : `${resources.productDimensionTypeColor} ${resources.productDimensionTypeColorErrorMessage} ${resources.productDimensionTypeColor}`;\r\n case 2: // ProductDimensionType.Configuration\r\n return `${resources.productDimensionTypeConfiguration} ${resources.productDimensionTypeConfigurationErrorMessage} ${resources.productDimensionTypeConfiguration}`;\r\n case 3: // ProductDimensionType.Size\r\n return `${resources.productDimensionTypeSize} ${resources.productDimensionTypeSizeErrorMessage} ${resources.productDimensionTypeSize}`;\r\n case 4: // ProductDimensionType.Style\r\n if (isGiftCard) {\r\n return resources.productDimensionTypeAmountErrorMessage;\r\n } else if (languageError) {\r\n return `${languageError[0].TextValue} ${resources.productDimensionTypeStyleErrorMessage} ${languageError[0].TextValue}`;\r\n } else {\r\n return `${resources.productDimensionTypeStyle} ${resources.productDimensionTypeStyleErrorMessage} ${resources.productDimensionTypeStyle}`;\r\n }\r\n default:\r\n return '';\r\n }\r\n}\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport MsDyn365, {\r\n getCatalogId,\r\n IComponent,\r\n IComponentProps,\r\n IGridSettings,\r\n IImageSettings,\r\n msdyn365Commerce,\r\n TelemetryEvent\r\n} from '@msdyn365-commerce/core';\r\nimport { getCartState, ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLineValidationResults,\r\n CartsDataActions,\r\n format,\r\n ProductAvailableQuantity,\r\n ProductDimension,\r\n ProductPrice,\r\n ProductsDataActions,\r\n ProductSearchCriteria,\r\n ProductType,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\r\nimport { ArrayExtensions, generateProductImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IPopupProps, ITelemetryContent, Popup } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n// @ts-ignore\r\nimport { Primary } from '@churchofjesuschrist/eden-buttons';\r\n\r\nimport {\r\n PriceComponent,\r\n IItemsAddedToCartResources,\r\n ItemsAddedToCartDialogComponent,\r\n ItemSuccessfullyAddedToCartNotification,\r\n MultiItemsSuccessfullyAddedToCartNotification,\r\n OrderDetailsProduct\r\n} from '@msdyn365-commerce/components';\r\n\r\nimport { updateCartLineAttributeValues, updateLineDeliverySpecifications } from '../../../../helpers/utilities/cart-line-utilities';\r\nimport { getConfigureErrors } from '../../../../modules/lds-buybox/components/utilities/error-utilities';\r\n//@ts-ignore\r\nimport { Error, Modal } from '@churchofjesuschrist/eden-alert';\r\n\r\n// import { IItemsAddedToCartResources } from './items-added-to-cart';\r\n// import { ItemsAddedToCartDialogComponent } from './items-added-to-cart-dialog-component';\r\n// import { ItemSuccessfullyAddedToCartNotification } from './notifications/item-successfully-added-to-cart-notification';\r\n// import { MultiItemsSuccessfullyAddedToCartNotification } from './notifications/multi-items-successfully-added-to-cart-notification';\r\n// import { OrderDetailsProduct } from './product-model';\r\n\r\n/**\r\n * Interface for add to cart resources.\r\n */\r\nexport interface IAddToCartResources {\r\n goToCartText: string;\r\n continueShoppingText: string;\r\n closeNotificationLabel: string;\r\n headerItemOneText: string;\r\n headerItemFormatText: string;\r\n headerLinesFormatText?: string;\r\n headerMessageText: string;\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n addedQuantityText: string;\r\n buyAgainNotificationTitle?: string;\r\n buyAgainNotificationCloseAriaLabel?: string;\r\n validationErrorMessage?: string;\r\n oneErrorText?: string;\r\n multiErrorsText?: string;\r\n}\r\n\r\n/**\r\n * Interface for add to cart components props.\r\n */\r\nexport interface IAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice } | undefined> {\r\n className?: string;\r\n addToCartText: string;\r\n validationErrorText?: string;\r\n stockErrorText?: string;\r\n shippingAvailable?: string;\r\n outOfStockText?: string;\r\n signInText?: string;\r\n disabled?: boolean;\r\n quantity?: number;\r\n navigationUrl?: string;\r\n productAvailability?: ProductAvailableQuantity;\r\n getSelectedProduct?: Promise;\r\n isNavigationToCartPageDisabled?: boolean;\r\n shouldSkipSiteSettings?: boolean;\r\n addToCartArialLabel?: string;\r\n products?: {\r\n productId: number;\r\n quantity: number;\r\n catalogId?: number;\r\n }[];\r\n orderDetailsProducts?: OrderDetailsProduct[];\r\n hasAvailableProducts?: boolean;\r\n imageSettings?: IImageSettings;\r\n gridSettings?: IGridSettings;\r\n\r\n isLoading?: boolean;\r\n isUpdatingDimension?: boolean;\r\n isLoadingDeliveryOptions?: boolean;\r\n isUpdatingDeliveryOptions?: boolean;\r\n isAddServiceItemToCart?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n customPriceAmount?: number;\r\n isOrderQuantityLimitsFeatureEnabled?: boolean;\r\n\r\n dialogStrings?: IAddToCartResources;\r\n\r\n telemetryContent?: ITelemetryContent;\r\n\r\n catalogId?: number;\r\n\r\n isCustomPriceSelected?: boolean;\r\n maximumKeyInPrice?: number;\r\n minimumKeyInPrice?: number;\r\n defaultMaximumKeyInPrice?: number;\r\n defaultMinimumKeyInPrice?: number;\r\n isProductQuantityLoading?: boolean;\r\n\r\n onAdd?(result: ICartActionResult): void;\r\n onError?(result: IAddToCartFailureResult): void;\r\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\r\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\r\n setSubscriptionError?(): void;\r\n subscription?: any;\r\n subscriptionAddress?: any;\r\n subscriptionUserCountry?: any;\r\n active?: boolean;\r\n errorCallback?: any;\r\n resources?: any;\r\n cart?: any;\r\n}\r\n\r\n/**\r\n * Cart action Failure reason type.\r\n */\r\nexport declare type ICartActionFailureReason =\r\n | 'EMPTYINPUT'\r\n | 'MISSINGDIMENSION'\r\n | 'OUTOFSTOCK'\r\n | 'CARTACTIONFAILED'\r\n | 'INVALIDCUSTOMAMOUNT';\r\n\r\n/**\r\n * Interface for add to cart failure result.\r\n */\r\nexport interface IAddToCartFailureResult {\r\n failureReason: ICartActionFailureReason;\r\n\r\n stockLeft?: number;\r\n cartActionResult?: ICartActionResult;\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\n/**\r\n * This setting defines the experience when a product is added to cart. Corresponds to the configuration in Fabrikam.\r\n */\r\nexport enum AddToCartBehavior {\r\n /**\r\n * Navigate to cart page.\r\n */\r\n goToCart = 'goToCart',\r\n\r\n /**\r\n * Show item added to cart popup.\r\n */\r\n showModal = 'showModal',\r\n\r\n /**\r\n * Show mini cart popup.\r\n */\r\n showMiniCart = 'showMiniCart',\r\n\r\n /**\r\n * Show item added to cart notification.\r\n */\r\n showNotification = 'showNotification',\r\n\r\n /**\r\n * Do nothing and stay on the page.\r\n */\r\n nothing = 'nothing'\r\n}\r\n\r\nconst zero = 0;\r\nconst defaultQuantity = 1;\r\n\r\n/**\r\n * The propagate result.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The cart action result.\r\n */\r\nconst propagateResult = (props: IAddToCartComponentProps, result: ICartActionResult): void => {\r\n if (props.onAdd) {\r\n props.onAdd(result);\r\n }\r\n};\r\n\r\n/**\r\n * The propagate error.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The add to cart failure result.\r\n */\r\nconst propagateError = (props: IAddToCartComponentProps, result: IAddToCartFailureResult): void => {\r\n if (props.onError) {\r\n props.onError(result);\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves add to cart input from the component props.\r\n * @param props - Add to cart component props.\r\n * @returns Add to cart input.\r\n */\r\nconst getAddToCartInputFromProps = async (props: IAddToCartComponentProps) => {\r\n const products = props.orderDetailsProducts?.filter(product => !ObjectExtensions.isNullOrUndefined(product.simpleProduct));\r\n const input = products?.map(product => {\r\n return {\r\n product: product.simpleProduct!,\r\n count: ObjectExtensions.isNullOrUndefined(product.salesLine.Quantity) ? defaultQuantity : product.salesLine.Quantity,\r\n catalogId: product.salesLine.CatalogId\r\n };\r\n });\r\n\r\n if (ArrayExtensions.hasElements(input)) {\r\n return input;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(props.products)) {\r\n const actionContext = props.context.actionContext;\r\n const apiSettings = actionContext.requestContext.apiSettings;\r\n\r\n const searchCriteriaInput: ProductSearchCriteria = {\r\n Context: {\r\n ChannelId: apiSettings.channelId,\r\n CatalogId: props.catalogId ?? getCatalogId(props.context.actionContext.requestContext)\r\n },\r\n IncludeAttributes: false,\r\n Ids: props.products.map(product => product.productId)\r\n };\r\n\r\n const searchResult = await ProductsDataActions.searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\r\n const productSearchResultsWithImages = searchResult.map(productSearchResult => {\r\n const newProductSearchResult = { ...productSearchResult };\r\n const newImageUrl = generateProductImageUrl(newProductSearchResult, apiSettings);\r\n\r\n if (newImageUrl) {\r\n newProductSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return newProductSearchResult;\r\n });\r\n\r\n return props.products.map(item => {\r\n const productData = productSearchResultsWithImages.find(product => product.RecordId === item.productId);\r\n let simpleProduct: SimpleProduct;\r\n if (productData) {\r\n simpleProduct = {\r\n ...productData,\r\n ProductTypeValue: ProductType.Variant,\r\n AdjustedPrice: productData.Price,\r\n BasePrice: productData.BasePrice ?? productData.Price\r\n };\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Cast to simple product since only record id is available.\r\n simpleProduct = {\r\n RecordId: item.productId\r\n } as SimpleProduct;\r\n }\r\n\r\n return {\r\n product: simpleProduct,\r\n count: item.quantity,\r\n catalogId: item.catalogId\r\n };\r\n });\r\n }\r\n\r\n if (props.data?.product) {\r\n return [\r\n {\r\n product: props.data.product,\r\n count: props.quantity ?? defaultQuantity,\r\n catalogId: props.catalogId\r\n }\r\n ];\r\n }\r\n\r\n return [];\r\n};\r\n\r\n/**\r\n * Add one item to cart when it is not buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param openModal -- The open modal call back.\r\n */\r\nconst addOneItemToCart = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void,\r\n setIsOpen?: (open: boolean) => void,\r\n stockError?: (open: boolean, message: string) => void\r\n): Promise => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n const data = props.data;\r\n\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n const product = addToCartInput[0].product;\r\n const quantity = addToCartInput[0].count;\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n let existingProduct = cartState.cart.CartLines?.find((cartLine: any) => {\r\n return cartLine.ProductId === product.RecordId;\r\n });\r\n\r\n let addToCartResult: any;\r\n let copyQuantity = quantity;\r\n if (existingProduct) {\r\n let newQuantity = (copyQuantity += existingProduct.Quantity!);\r\n if (\r\n props.productAvailability &&\r\n props.productAvailability.AvailableQuantity &&\r\n newQuantity <= props.productAvailability.AvailableQuantity\r\n ) {\r\n addToCartResult = await cartState.updateCartLineQuantity({\r\n cartLineId: existingProduct.LineId!,\r\n newQuantity: newQuantity,\r\n additionalProperties: { isUsingDefaultOrderSettingsMax: props.isOrderQuantityLimitsFeatureEnabled }\r\n });\r\n } else {\r\n addToCartResult = { errorDetails: { LocalizedMessage: 'Stock Error' }, validationResults: [] };\r\n }\r\n } else {\r\n addToCartResult = await cartState.addProductToCart({\r\n product,\r\n count: quantity,\r\n availableQuantity: props.productAvailability?.AvailableQuantity,\r\n additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n isPriceKeyedIn: props.isPriceKeyedIn,\r\n customPrice: props.isPriceKeyedIn ? props.customPriceAmount : undefined,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\r\n shouldSkipSiteSettings: props.shouldSkipSiteSettings,\r\n catalogId: addToCartInput[0].catalogId\r\n });\r\n }\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n if (props.subscription && props.subscriptionAddress) {\r\n const ctx = { callerContext: props.context.actionContext };\r\n\r\n let cartIndex: any;\r\n const cartLineId = cartState.cart.CartLines!.filter((cartLine: any, index: any) => {\r\n cartIndex = index;\r\n return cartLine.ExtensionProperties[0].Value?.BooleanValue === true;\r\n });\r\n\r\n if (props.subscriptionAddress.Street) {\r\n props.subscriptionAddress.Street = props.subscriptionAddress.Street.replace(/\\n/g, '');\r\n }\r\n //@ts-ignore\r\n delete props.subscriptionAddress.SubscriptionAccountNumber;\r\n\r\n const addressToBePassedIn = {\r\n LineId: cartLineId[cartIndex].LineId!,\r\n DeliverySpecification: {\r\n DeliveryModeId: (props.config && props.config.deliveryMode) || 'MAG',\r\n DeliveryPreferenceTypeValue: 1,\r\n DeliveryAddress: { ...props.subscriptionAddress }\r\n }\r\n };\r\n await updateCartLineAttributeValues(\r\n cartLineId[cartIndex].LineId!,\r\n 'SubscriptionAccountNumber',\r\n props.subscription.subscriptionAccountNumber,\r\n props.context.actionContext,\r\n cartState.cart\r\n );\r\n await updateLineDeliverySpecifications(ctx, cartState.cart.Id, [addressToBePassedIn]);\r\n }\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n openModal(true);\r\n } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const notification = new ItemSuccessfullyAddedToCartNotification(\r\n props.context,\r\n props.dialogStrings,\r\n props.imageSettings,\r\n props.gridSettings,\r\n product,\r\n data?.price,\r\n quantity,\r\n props.navigationUrl,\r\n props.telemetryContent!,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n propagateResult(props, addToCartResult);\r\n } else {\r\n if (\r\n setIsOpen &&\r\n addToCartResult &&\r\n addToCartResult.errorDetails &&\r\n addToCartResult.errorDetails &&\r\n addToCartResult.errorDetails.LocalizedMessage &&\r\n addToCartResult.validationResults &&\r\n !addToCartResult.validationResults[0]\r\n ) {\r\n if (\r\n addToCartResult.errorDetails.LocalizedMessage === 'A validation error occurred.'\r\n // addToCartResult.errorDetails.LocalizedMessage === 'Error de validación.' ||\r\n // addToCartResult.errorDetails.LocalizedMessage === `Une erreur de contrôle s'est produite.` ||\r\n // addToCartResult.errorDetails.LocalizedMessage === `Errore di convalida.` ||\r\n // addToCartResult.errorDetails.LocalizedMessage === `유효성 검사 오류가 발생했습니다.` ||\r\n // addToCartResult.errorDetails.LocalizedMessage === `Erro na validação.` ||\r\n // addToCartResult.errorDetails.LocalizedMessage === `Произошла ошибка проверки.` ||\r\n // addToCartResult.errorDetails.LocalizedMessage === `Überprüfungsfehler` ||\r\n // addToCartResult.errorDetails.LocalizedMessage === `検証エラーが発生しました。`\r\n ) {\r\n setIsOpen(true);\r\n }\r\n }\r\n if (\r\n stockError &&\r\n addToCartResult &&\r\n addToCartResult.errorDetails &&\r\n addToCartResult.errorDetails &&\r\n addToCartResult.errorDetails.LocalizedMessage &&\r\n addToCartResult.errorDetails.LocalizedMessage === 'Stock Error' &&\r\n addToCartResult.validationResults &&\r\n !addToCartResult.validationResults[0] &&\r\n props.productAvailability &&\r\n props.productAvailability.AvailableQuantity\r\n ) {\r\n stockError(true, JSON.stringify(props.productAvailability.AvailableQuantity));\r\n }\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n addToCartResult.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n// const addOneItemToCart = async (\r\n// props: IAddToCartComponentProps,\r\n// setDisabled: (disabled: boolean) => void,\r\n// openModal: (opened: boolean) => void,\r\n// setIsOpen?: (open: boolean) => void,\r\n// stockError?: (open: boolean, message: string) => void\r\n// ): Promise => {\r\n// console.log(props);\r\n// // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n// const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n// const data = props.data;\r\n\r\n// const addToCartInput = await getAddToCartInputFromProps(props);\r\n// const product = addToCartInput[0].product;\r\n// const quantity = addToCartInput[0].count;\r\n\r\n// const cartState = await getCartState(props.context.actionContext);\r\n// console.log(cartState);\r\n// console.log(product);\r\n// console.log(quantity);\r\n// let testing = cartState.cart.CartLines?.find((cartLine: any) => {\r\n// return cartLine.ProductId === product.RecordId;\r\n// });\r\n\r\n// //WORKING NEED TO CREATE NEW ERROR TO SHOW WHY PRODUCT NOT ADDED TO CART IF LIMIT IS EXCEEDED\r\n\r\n// console.log(testing);\r\n// console.log(props.productAvailability?.AvailableQuantity);\r\n// console.log('propsQuantitySettings: ', props.isOrderQuantityLimitsFeatureEnabled);\r\n// console.log(setIsOpen);\r\n// let addToCartResult: any;\r\n// let copyQuantity = quantity;\r\n// if (testing) {\r\n// let newQuantity = (copyQuantity += testing.Quantity!);\r\n// if (\r\n// props.productAvailability &&\r\n// props.productAvailability.AvailableQuantity &&\r\n// newQuantity <= props.productAvailability.AvailableQuantity\r\n// ) {\r\n// addToCartResult = await cartState.updateCartLineQuantity({\r\n// cartLineId: testing.LineId!,\r\n// newQuantity: newQuantity,\r\n// additionalProperties: { isUsingDefaultOrderSettingsMax: props.isOrderQuantityLimitsFeatureEnabled }\r\n// });\r\n// } else {\r\n// addToCartResult = { errorDetails: { LocalizedMessage: 'Stock Error' }, validationResults: [] };\r\n// }\r\n// } else {\r\n// addToCartResult = await cartState.addProductToCart({\r\n// product,\r\n// count: quantity,\r\n// availableQuantity: props.productAvailability?.AvailableQuantity,\r\n// additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\r\n// // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n// enableStockCheck: props.context.app.config.enableStockCheck,\r\n// isPriceKeyedIn: props.isPriceKeyedIn,\r\n// customPrice: props.isPriceKeyedIn ? props.customPriceAmount : undefined,\r\n// isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\r\n// shouldSkipSiteSettings: props.shouldSkipSiteSettings,\r\n// catalogId: addToCartInput[0].catalogId\r\n// });\r\n// }\r\n// // addToCartResult = await cartState.addProductToCart({\r\n// // product,\r\n// // count: quantity,\r\n// // availableQuantity: props.productAvailability?.AvailableQuantity,\r\n// // additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\r\n// // // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n// // enableStockCheck: props.context.app.config.enableStockCheck,\r\n// // isPriceKeyedIn: props.isPriceKeyedIn,\r\n// // customPrice: props.isPriceKeyedIn ? props.customPriceAmount : undefined,\r\n// // isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\r\n// // shouldSkipSiteSettings: props.shouldSkipSiteSettings,\r\n// // catalogId: addToCartInput[0].catalogId\r\n// // });\r\n// console.log(addToCartResult);\r\n\r\n// if (addToCartResult && addToCartResult.status === 'SUCCESS') {\r\n// if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n// setDisabled(false);\r\n// openModal(true);\r\n// } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n// setDisabled(false);\r\n// const notification = new ItemSuccessfullyAddedToCartNotification(\r\n// props.context,\r\n// props.dialogStrings,\r\n// props.imageSettings,\r\n// props.gridSettings,\r\n// product,\r\n// data?.price,\r\n// quantity,\r\n// props.navigationUrl,\r\n// props.telemetryContent!,\r\n// props.id,\r\n// props.typeName\r\n// );\r\n// NotificationsManager.instance().addNotification(notification);\r\n// } else if (\r\n// MsDyn365.isBrowser &&\r\n// props.navigationUrl &&\r\n// !props.isNavigationToCartPageDisabled &&\r\n// (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n// ) {\r\n// window.location.assign(props.navigationUrl);\r\n// } else {\r\n// setDisabled(false);\r\n// }\r\n// propagateResult(props, addToCartResult);\r\n// } else {\r\n// if (\r\n// setIsOpen &&\r\n// addToCartResult &&\r\n// addToCartResult.errorDetails &&\r\n// addToCartResult.errorDetails &&\r\n// addToCartResult.errorDetails.LocalizedMessage &&\r\n// addToCartResult.errorDetails.LocalizedMessage === 'A validation error occurred.' &&\r\n// addToCartResult.validationResults &&\r\n// !addToCartResult.validationResults[0]\r\n// ) {\r\n// setIsOpen(true);\r\n// }\r\n// if (\r\n// stockError &&\r\n// addToCartResult &&\r\n// addToCartResult.errorDetails &&\r\n// addToCartResult.errorDetails &&\r\n// addToCartResult.errorDetails.LocalizedMessage &&\r\n// addToCartResult.errorDetails.LocalizedMessage === 'Stock Error' &&\r\n// addToCartResult.validationResults &&\r\n// !addToCartResult.validationResults[0] &&\r\n// props.productAvailability &&\r\n// props.productAvailability.AvailableQuantity\r\n// ) {\r\n// stockError(true, JSON.stringify(props.productAvailability.AvailableQuantity));\r\n// }\r\n// NotificationsManager.instance().addNotification(\r\n// new ErrorNotification(\r\n// addToCartResult?.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n// props.dialogStrings?.closeNotificationLabel ?? ''\r\n// )\r\n// );\r\n\r\n// propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n// setDisabled(false);\r\n// }\r\n// };\r\n\r\n/**\r\n * Callback to handle success of adding to cart.\r\n * @param props - Add to cart component props.\r\n * @param setDisabled - Callback to update disabled state of the component.\r\n * @param setItemsAddedToCartDialogOpen - Callback to update disabled state of the component.\r\n * @param setErrorMessage - Callback to update error message state of the component.\r\n * @param cartState - Current cart state.\r\n * @param addToCartInput - Input used for adding to cart.\r\n * @param addToCartResult - Result of adding to cart.\r\n */\r\nconst handleAddItemsToCartSuccess = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void,\r\n cartState: ICartState,\r\n addToCartInput: {\r\n product: SimpleProduct;\r\n count: number;\r\n }[],\r\n addToCartResult: ICartActionResult\r\n) => {\r\n // Validate cart for line errors.\r\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\r\n { callerContext: props.context.actionContext, bypassCache: 'none' },\r\n cartState.cart.Id,\r\n cartState.cart.Version\r\n );\r\n const errorCount = (validationResult.ValidationFailuresByCartLines ?? []).length;\r\n const singleErrorCount = 1;\r\n const errorText = errorCount === singleErrorCount ? props.dialogStrings?.oneErrorText : props.dialogStrings?.multiErrorsText;\r\n const errorMessage =\r\n errorCount > zero ? format(props.dialogStrings?.validationErrorMessage ?? '', errorCount.toString(), errorText) : '';\r\n\r\n setErrorMessage(errorMessage);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n setItemsAddedToCartDialogOpen(true);\r\n } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const itemsAddedResource: IItemsAddedToCartResources = {\r\n viewCartButtonText: props.dialogStrings.goToCartText,\r\n closeButtonLabel: props.dialogStrings.closeNotificationLabel,\r\n itemsAddedToCartHeaderText: props.dialogStrings.headerMessageText,\r\n itemsAddedToCartFormatText: props.dialogStrings.headerItemFormatText,\r\n linesAddedToCartFormatText: props.dialogStrings.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const notification = new MultiItemsSuccessfullyAddedToCartNotification(\r\n props.context,\r\n itemsAddedResource,\r\n props.imageSettings,\r\n props.gridSettings,\r\n addToCartInput,\r\n props.navigationUrl,\r\n props.telemetryContent!,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n propagateResult(props, addToCartResult);\r\n};\r\n\r\n/**\r\n * Add one or multi item to cart from buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param setItemsAddedToCartDialogOpen -- The open modal call back.\r\n * @param setErrorMessage -- The set error message call back.\r\n */\r\nconst addItemsToCart = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise => {\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n\r\n if (!ArrayExtensions.hasElements(addToCartInput)) {\r\n return;\r\n }\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n const addToCartResult = await cartState.addProductsToCart(addToCartInput);\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n await handleAddItemsToCartSuccess(\r\n props,\r\n setDisabled,\r\n setItemsAddedToCartDialogOpen,\r\n setErrorMessage,\r\n cartState,\r\n addToCartInput,\r\n addToCartResult\r\n );\r\n } else {\r\n if (props.dialogStrings?.buyAgainNotificationTitle) {\r\n // For buy again show simple error notification.\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n props.dialogStrings.buyAgainNotificationTitle,\r\n props.dialogStrings.buyAgainNotificationCloseAriaLabel ?? ''\r\n )\r\n );\r\n } else {\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n addToCartResult.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n }\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n/**\r\n * Interface for add to cart component.\r\n */\r\nexport interface IAddtoCartComponent extends IComponent {\r\n onClick(): (event: React.MouseEvent, props: IAddToCartComponentProps) => void;\r\n}\r\n\r\n/**\r\n * On click function.\r\n * @param _event - The mouse event.\r\n * @param props - The props.\r\n * @param setDisabled - Flag to define whether the element is disabled.\r\n * @param openModal - Flag to specify if it should open in a modal window.\r\n * @param setItemsAddedToCartDialogOpen - Sets items added to cart while dialog is open.\r\n * @param setErrorMessage - Error message.\r\n */\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void,\r\n errorCallback: any,\r\n cart: any,\r\n setIsOpen: (open: boolean) => void,\r\n stockError?: (open: boolean, message: string) => void\r\n): Promise => {\r\n if (!ArrayExtensions.hasElements(props.products)) {\r\n const cartError = addToCartError(props);\r\n\r\n if (cartError) {\r\n propagateError(props, cartError);\r\n return false;\r\n }\r\n\r\n setDisabled(true);\r\n }\r\n let itemAdded: boolean = false;\r\n const hasOrderDetailsProducts =\r\n ArrayExtensions.hasElements(props.orderDetailsProducts) && props.orderDetailsProducts.length > defaultQuantity;\r\n const hasProducts = ArrayExtensions.hasElements(props.products) && props.products.length > defaultQuantity;\r\n\r\n const hasMultipleProducts = hasOrderDetailsProducts || hasProducts;\r\n\r\n if (cart && cart.cart && cart.cart.CartLines && cart.cart.CartLines[0]) {\r\n if (\r\n // @ts-ignore\r\n cart.cart.CartLines[0].DeliveryMode === 'PICKUP' ||\r\n // @ts-ignore\r\n cart.cart.CartLines[0].DeliveryMode === 'Pickup' ||\r\n // @ts-ignore\r\n cart.cart.CartLines[0].DeliveryMode === 'Curbside' ||\r\n // @ts-ignore\r\n cart.cart.CartLines[0].DeliveryMode === 'CURBSIDE'\r\n ) {\r\n errorCallback({\r\n errorHost: 'ADDTOCART',\r\n configureErrors: getConfigureErrors(\r\n undefined,\r\n props.resources,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n props.resources.pickupCartError\r\n )\r\n });\r\n itemAdded = false;\r\n } else {\r\n if (props.shouldSkipSiteSettings && hasMultipleProducts) {\r\n await addItemsToCart(props, setDisabled, setItemsAddedToCartDialogOpen, setErrorMessage);\r\n } else {\r\n await addOneItemToCart(props, setDisabled, openModal, setIsOpen, stockError);\r\n }\r\n errorCallback({\r\n errorHost: 'ADDTOCART',\r\n configureErrors: getConfigureErrors(undefined, props.resources, undefined, undefined, undefined, undefined, false)\r\n });\r\n itemAdded = true;\r\n }\r\n } else {\r\n if (props.shouldSkipSiteSettings && hasMultipleProducts) {\r\n await addItemsToCart(props, setDisabled, setItemsAddedToCartDialogOpen, setErrorMessage);\r\n } else {\r\n await addOneItemToCart(props, setDisabled, openModal, setIsOpen);\r\n }\r\n itemAdded = true;\r\n }\r\n return itemAdded;\r\n};\r\n\r\n/**\r\n * Add to cart component action constant.\r\n */\r\nconst AddToCartComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * Add to cart component.\r\n * @param props - The props.\r\n * @returns - The add to cart component.\r\n */\r\nexport const AddToCartFunctionalComponent: React.FC = (props: IAddToCartComponentProps) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [stockErrorOpen, setStockErrorOpen] = useState(false);\r\n const [stockErrorMessage, setStockErrorMessage] = useState('');\r\n const [disabled, setDisabled] = useState(false);\r\n const [modalOpen, setModalOpen] = useState(false);\r\n const [isItemsAddedToCartDialogOpen, setItemsAddedToCartDialogOpen] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [addToCartInput, setAddToCartInput] = useState<\r\n {\r\n product: SimpleProduct;\r\n count: number;\r\n }[]\r\n >([]);\r\n const stockError = (isVisible: boolean, message: string) => {\r\n setStockErrorOpen(isVisible);\r\n setStockErrorMessage(message);\r\n };\r\n const onClickHandler = async (event: React.MouseEvent) => {\r\n if (props.subscription && props.subscriptionAddress && props.subscriptionUserCountry && props.setSubscriptionError) {\r\n if (props.subscription.CountryRegionId !== props.subscriptionUserCountry) {\r\n return props.setSubscriptionError();\r\n }\r\n }\r\n // console.log(props.context.request.telemetryData.activeCart?.CartLines[0].DeliveryMode);\r\n // props.errorCallback({\r\n // errorHost: 'FINDINSTORE',\r\n // configureErrors: getConfigureErrors(undefined, props.resources, undefined, undefined, undefined, undefined, 'shipping')\r\n // });\r\n // Adobe Analytics for Add To Cart\r\n const { Name, Dimensions, ItemId } = addToCartInput[0].product;\r\n\r\n const language = Dimensions?.filter((dimension: any) => {\r\n return dimension.DimensionTypeValue === 4;\r\n });\r\n const Style = Dimensions?.filter((dimension: any) => {\r\n return dimension.DimensionTypeValue === 1;\r\n });\r\n const Size = Dimensions?.filter((dimension: any) => {\r\n return dimension.DimensionTypeValue === 3;\r\n });\r\n let currentCategories = sessionStorage.getItem('ProductCategory');\r\n let categories = currentCategories?.split(',');\r\n\r\n const addToCart = await AddToCartComponentActions.onClick(\r\n event,\r\n props,\r\n setDisabled,\r\n setModalOpen,\r\n setItemsAddedToCartDialogOpen,\r\n setErrorMessage,\r\n props.errorCallback,\r\n props.cart,\r\n setIsOpen,\r\n stockError\r\n );\r\n\r\n let productSku = sessionStorage.getItem('productSku');\r\n\r\n if (addToCart === true) {\r\n // @ts-ignore\r\n if (window && window['digitalData']) {\r\n // @ts-ignore\r\n window['digitalData'].push({\r\n event: 'Add to Cart',\r\n product: [\r\n {\r\n info: {\r\n sku: productSku,\r\n id: ItemId,\r\n name: Name,\r\n language: language && language[0] && language[0].DimensionValue ? language[0].DimensionValue.Value : '',\r\n style: Style && Style[0] && Style[0].DimensionValue ? Style[0].DimensionValue.Value : '',\r\n size: Size && Size[0] && Size[0].DimensionValue ? Size[0].DimensionValue.Value : '',\r\n categories: categories\r\n },\r\n quantity: addToCartInput[0].count\r\n }\r\n ]\r\n });\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Close dialog.\r\n */\r\n const closeItemsAddedToCartDialog = React.useCallback(() => {\r\n setItemsAddedToCartDialogOpen(false);\r\n }, []);\r\n\r\n const priceComponent = props.data?.price ? (\r\n \r\n ) : (\r\n ''\r\n );\r\n\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'msc-add-to-cart',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: { product: props.data?.product, price: props.data?.price },\r\n dialogStrings: props.dialogStrings,\r\n imageSettings: props.imageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: props.quantity !== undefined ? props.quantity : defaultQuantity,\r\n priceComponent,\r\n navigationUrl: props.navigationUrl,\r\n modalOpen,\r\n setModalOpen,\r\n telemetryContent: props.telemetryContent\r\n };\r\n\r\n const itemsAddedResource: IItemsAddedToCartResources = {\r\n viewCartButtonText: props.dialogStrings?.goToCartText ?? '',\r\n closeButtonLabel: props.dialogStrings?.closeNotificationLabel ?? 'Close',\r\n itemsAddedToCartHeaderText: props.dialogStrings?.headerMessageText ?? '',\r\n itemsAddedToCartFormatText: props.dialogStrings?.headerItemFormatText ?? '',\r\n linesAddedToCartFormatText: props.dialogStrings?.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const renderModalPopup = ;\r\n const label = getLinkText(props);\r\n const payload = getPayloadObject(TelemetryEvent.AddToCart, props.telemetryContent!, label, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n // const buttonClassName = props.shouldSkipSiteSettings ? '' : 'msc-add-to-cart ';\r\n let isLoadingData;\r\n\r\n React.useEffect(() => {\r\n /**\r\n * Retrieves add to cart input and updates the state.\r\n */\r\n const retrieveAddToCartInput = async () => {\r\n const retrievedInput = await getAddToCartInputFromProps(props);\r\n setAddToCartInput(retrievedInput);\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call async method as per the documentation of react useEffect.\r\n retrieveAddToCartInput();\r\n }, [props, setAddToCartInput]);\r\n if (props.data?.product.Dimensions) {\r\n if (props.data.product.Dimensions.find((dimension: any) => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n isLoadingData = false;\r\n }\r\n }\r\n if (!props.isLoading && !props.isUpdatingDimension && !props.isLoadingDeliveryOptions && !props.isUpdatingDeliveryOptions) {\r\n isLoadingData = false;\r\n } else {\r\n isLoadingData = true;\r\n }\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n {isOpen && (\r\n \r\n setIsOpen(false)}>\r\n
{props.validationErrorText}
\r\n
\r\n
\r\n )}\r\n {stockErrorOpen && props.stockErrorText && (\r\n \r\n setStockErrorOpen(false)}>\r\n
{props.stockErrorText.replace('{numLeft}', stockErrorMessage)}
\r\n
\r\n
\r\n )}\r\n\r\n {\r\n window.location.replace(`${props.context.request.user.signInUrl}`);\r\n }\r\n }\r\n disabled={props.disabled || disabled || isIntermediateState(props) || shouldShowOutOfStock(props, false) || isLoadingData}\r\n style={{ backgroundImage: shouldShowOutOfStock(props, false) ? 'initial' : '', minWidth: '215.84px' }}\r\n // onMouseEnter={() => props.mouseEnter()}\r\n // onMouseLeave={() => props.mouseLeave()}\r\n >\r\n {props.context.request.user.isAuthenticated ? props.shippingAvailable : props.signInText}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Set default props\r\nAddToCartFunctionalComponent.defaultProps = {\r\n quantity: defaultQuantity\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns Gets the link text.\r\n */\r\nconst getLinkText = (props: IAddToCartComponentProps): string => {\r\n return shouldShowOutOfStock(props, false) && props.outOfStockText ? props.outOfStockText : props.addToCartText;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns The add to cart failure result.\r\n */\r\nconst addToCartError = (props: IAddToCartComponentProps): IAddToCartFailureResult | undefined => {\r\n const {\r\n data,\r\n productAvailability,\r\n isCustomPriceSelected,\r\n customPriceAmount,\r\n maximumKeyInPrice,\r\n minimumKeyInPrice,\r\n defaultMaximumKeyInPrice = 100,\r\n defaultMinimumKeyInPrice = 10\r\n } = props;\r\n\r\n if (!data || !data.product.RecordId) {\r\n // No product exists, won't be able to add to cart\r\n return { failureReason: 'EMPTYINPUT' };\r\n }\r\n\r\n if (data.product.Dimensions) {\r\n const missingDimensions = data.product.Dimensions.filter(\r\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\r\n );\r\n\r\n if (ArrayExtensions.hasElements(missingDimensions)) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n return { failureReason: 'MISSINGDIMENSION', missingDimensions };\r\n }\r\n }\r\n\r\n if (shouldShowOutOfStock(props, true)) {\r\n const defaultAvailableQuantity = 0; // Showing as out of stock if no available products found.\r\n const availableQuantity = productAvailability?.AvailableQuantity ?? defaultAvailableQuantity;\r\n const stockLeft = Math.max(availableQuantity, defaultAvailableQuantity);\r\n\r\n return { failureReason: 'OUTOFSTOCK', stockLeft };\r\n }\r\n\r\n // When Custom price is selected, if there is no keyed-in price or keyed-in price is out of limit, should return error.\r\n if (\r\n isCustomPriceSelected &&\r\n (!customPriceAmount ||\r\n customPriceAmount > (maximumKeyInPrice || defaultMaximumKeyInPrice) ||\r\n customPriceAmount < (minimumKeyInPrice || defaultMinimumKeyInPrice))\r\n ) {\r\n return { failureReason: 'INVALIDCUSTOMAMOUNT' };\r\n }\r\n\r\n // Only allow adding to cart if not showing out of stock\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @param includeCurrentQuantity - Flag to specify whether current quantity should be included.\r\n * @returns The dialog element.\r\n */\r\nconst shouldShowOutOfStock = (props: IAddToCartComponentProps, includeCurrentQuantity: boolean): boolean => {\r\n if (props.context.app.config.enableStockCheck === undefined || props.context.app.config.enableStockCheck === false) {\r\n return false;\r\n }\r\n\r\n // When skip site settings do not need show out of stock on adding to cart\r\n if (props.shouldSkipSiteSettings) {\r\n return false;\r\n }\r\n\r\n if (\r\n props.isLoading ||\r\n props.isProductQuantityLoading ||\r\n props.isUpdatingDimension ||\r\n props.isLoadingDeliveryOptions ||\r\n props.isUpdatingDeliveryOptions ||\r\n props.isAddServiceItemToCart\r\n ) {\r\n // Out of stock turn off, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (!props.data || !props.data.product.RecordId) {\r\n // No product exists, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n const hasAvailableProducts = props.hasAvailableProducts ?? true;\r\n if (!hasAvailableProducts) {\r\n return true;\r\n }\r\n\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also don't show out of stock\r\n return false;\r\n }\r\n }\r\n\r\n const includedQuantityNumber = includeCurrentQuantity && props.quantity ? props.quantity : defaultQuantity;\r\n\r\n return !(\r\n props.productAvailability &&\r\n props.productAvailability.AvailableQuantity !== undefined &&\r\n props.productAvailability.AvailableQuantity >= includedQuantityNumber\r\n );\r\n};\r\n\r\nconst isIntermediateState = (props: IAddToCartComponentProps): boolean => {\r\n if (props.data?.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n return false;\r\n }\r\n }\r\n\r\n if (!props.isLoading && !props.isUpdatingDimension && !props.isLoadingDeliveryOptions && !props.isUpdatingDeliveryOptions) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nexport const AddToCartComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n // @ts-expect-error\r\n IAddtoCartComponent\r\n>('AddToCart', { component: AddToCartFunctionalComponent, ...AddToCartComponentActions });\r\n\r\nexport default AddToCartComponent;\r\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","/* Colors */\r\nexport const grey2 = \"#f7f8f8\";\r\nexport const grey3 = \"#eff0f0\"; // onyx10\r\n\r\nexport const grey5 = \"#e0e2e2\"; // onyx20\r\n\r\nexport const grey10 = \"#d0d3d3\"; //quartz\r\n\r\nexport const grey15 = \"#bdc0c0\"; // onyx40\r\n\r\nexport const grey20 = \"#a9adad\"; // granite\r\n\r\nexport const grey25 = \"#9da1a1\";\r\nexport const grey30 = \"#878a8c\"; // slate\r\n\r\nexport const grey35 = \"#676b6e\";\r\nexport const grey40 = \"#53575b\"; // onyx\r\n\r\nexport const grey60 = \"#3a3d40\"; // onyx110\r\n\r\nexport const grey90 = \"#0D0F10\";\r\nexport const yellow5 = \"#ffd61a\";\r\nexport const yellow10 = \"#ffb81c\"; // citrine\r\n\r\nexport const yellow15 = \"#faa61a\";\r\nexport const yellow20 = \"#f68d2e\"; // amber\r\n\r\nexport const yellow25 = \"#e66a1f\";\r\nexport const yellow30 = \"#d45311\"; // topaz\r\n\r\nexport const yellow35 = \"#974a07\";\r\nexport const yellow40 = \"#674730\"; // bronzite\r\n\r\nexport const red5 = \"#fda1b2\";\r\nexport const red10 = \"#fc7473\"; // coral\r\n\r\nexport const red15 = \"#e10f5a\";\r\nexport const red20 = \"#bd0057\"; // ruby\r\n\r\nexport const red25 = \"#a6004e\";\r\nexport const red30 = \"#8f124a\"; // jasper\r\n\r\nexport const red35 = \"#7d003f\";\r\nexport const red40 = \"#6e0d33\"; // garnet\r\n\r\nexport const blue5 = \"#b0eefc\";\r\nexport const blue10 = \"#7de3f4\"; // larimar\r\n\r\nexport const blue15 = \"#49cce6\";\r\nexport const blue20 = \"#01b6d1\"; // turquiose / Link hover\r\n\r\nexport const blue25 = \"#007da5\";\r\nexport const blue30 = \"#006184\"; // sapphire\r\n\r\nexport const blue35 = \"#005175\";\r\nexport const blue40 = \"#003057\"; // azurite\r\n\r\nexport const green5 = \"#d3e952\";\r\nexport const green10 = \"#bed21e\"; // olivine\r\n\r\nexport const green15 = \"#93c742\";\r\nexport const green20 = \"#6db344\"; // beryl\r\n\r\nexport const green25 = \"#50a83e\";\r\nexport const green30 = \"#318d43\"; // emerald\r\n\r\nexport const green35 = \"#206b3f\";\r\nexport const green40 = \"#235c35\"; // jade\r\n\r\nexport const text120 = \"#212225\"; // onyxtext\r\n\r\nexport const black = \"#000000\";\r\nexport const white = \"#fff\";\r\nexport const info10 = \"#20abd7\";\r\nexport const info40 = \"#157493\"; // Link\r\n\r\nexport const info60 = \"#105970\";\r\nexport const confirmation10 = \"#a3d287\";\r\nexport const confirmation40 = \"#74bb49\";\r\nexport const confirmation60 = \"#375a22\";\r\nexport const warning10 = \"#ffd072\";\r\nexport const warning40 = \"#ffae0c\";\r\nexport const warning60 = \"#8f4200\";\r\nexport const danger10 = \"#fc7473\";\r\nexport const danger40 = \"#DC3838\";\r\nexport const danger60 = \"#b00504\";\r\nexport const highlightBlue = \"#e9f7fc\";\r\nexport const highlightCyan = \"#ddfafb\";\r\nexport const highlightGreen = \"#eff7ea\";\r\nexport const highlightYellow = \"#fff8e9\";\r\nexport const highlightAmber = \"#ffefde\";\r\nexport const highlightRed = \"#fee8e7\";\r\nexport const highlightMagenta = \"#fee8fc\";\r\nexport const highlightViolet = \"#f3e9ff\";\r\nexport const colorFacebook = \"#3b5998\";\r\nexport const colorInstagram = \"#3c5a96\";\r\nexport const colorTwitter = \"#00b6f1\";\r\nexport const colorPinterest = \"#cb2027\";\r\nexport const colorYoutube = \"#cd201f\";\r\nexport const colorOdnok = \"#ed812b\";\r\nexport const colorVk = \"#45668e\";\r\n/* Box shadows */\r\n\r\nexport const boxShadowRaised = \"0 2px 4px 0 rgba(0, 0, 0, 0.20)\";\r\nexport const boxShadowDetached = \"0 4px 8px 0 rgba(0, 0, 0, 0.20)\";\r\nexport const boxShadowOverlaid = \"0 8px 16px 0 rgba(0, 0, 0, 0.20)\";\r\nexport const boxShadowPoppedOut = \"0 16px 32px 0 rgba(0, 0, 0, 0.20)\";\r\n/* Font families */\r\n\r\nexport const sans = `\"Ensign:Sans\", Arial, \"noto sans\" , sans-serif`;\r\nexport const serif = `\"Ensign:Serif\", \"Georgia\", \"Times New Roman\", serif`;\r\nexport const monospace = `Courier, \"Courier New\", monospace`;\r\n/* Font Weights */\r\n\r\nexport const fontWeightLight = 300;\r\nexport const fontWeightNormal = 400;\r\nexport const fontWeightSemiBold = 600;\r\nexport const fontWeightBold = 700;\r\n/* Font sizes */\r\n\r\nexport const fontSizeRoot = `100%`; // effectively 16px (16px * 100% = 16px) but respects users' special needs, then desired px / 16px (root size) = rem\r\n\r\nexport const fontSize11 = \"0.6875rem\";\r\nexport const fontSize13 = \"0.8125rem\";\r\nexport const fontSize14 = \"0.875rem\";\r\nexport const fontSize16 = \"1rem\";\r\nexport const fontSize18 = \"1.125rem\";\r\nexport const fontSize20 = \"1.25rem\";\r\nexport const fontSize28 = \"1.75rem\";\r\nexport const fontSize32 = \"2rem\";\r\nexport const fontSize42 = \"2.625rem\";\r\n/* Line heights */\r\n\r\nexport const lineHeightTight = 1.2;\r\nexport const lineHeight = 1.4;\r\nexport const lineHeightLoose = 1.6;\r\n/* Spacings */\r\n\r\nexport const spacing4 = \"0.25rem\"; // 4px\r\n\r\nexport const spacing8 = \"0.5rem\"; // 8px\r\n\r\nexport const spacing16 = \"1rem\"; // 16px\r\n\r\nexport const spacing24 = \"1.5rem\"; // 24px\r\n\r\nexport const spacing32 = \"2rem\"; // 32px\r\n\r\nexport const spacing48 = \"3rem\"; // 48px\r\n\r\nexport const spacing64 = \"4rem\"; // 64px\r\n\r\nexport const spacing96 = \"6rem\"; // 96px\r\n\r\nexport const spacing128 = \"8rem\"; // 128px\r\n\r\n/* Breakpoints */\r\n\r\nexport const breakWidth480 = \"480px\";\r\nexport const breakWidth600 = \"600px\";\r\nexport const breakWidth840 = \"840px\";\r\nexport const breakWidth960 = \"960px\";\r\nexport const breakWidth1280 = \"1280px\";\r\nexport const breakWidth1440 = \"1440px\";\r\nexport const breakWidth1600 = \"1600px\";\r\n/* Aspect ratios */\r\n\r\nexport const aspectRatio1By1 = {\r\n width: 1,\r\n height: 1,\r\n key: \"1:1\"\r\n};\r\nexport const aspectRatio5By6 = {\r\n width: 5,\r\n height: 6,\r\n key: \"5:6\"\r\n};\r\nexport const aspectRatio5By8 = {\r\n width: 5,\r\n height: 8,\r\n key: \"5:8\"\r\n};\r\nexport const aspectRatio6By5 = {\r\n width: 6,\r\n height: 5,\r\n key: \"6:5\"\r\n};\r\nexport const aspectRatio8By3 = {\r\n width: 8,\r\n height: 3,\r\n key: \"8:3\"\r\n};\r\nexport const aspectRatio8By5 = {\r\n width: 8,\r\n height: 5,\r\n key: \"8:5\"\r\n};\r\nexport const aspectRatio16By9 = {\r\n width: 16,\r\n height: 9,\r\n key: \"16:9\"\r\n};\r\nexport const aspectRatios = [aspectRatio1By1, aspectRatio5By6, aspectRatio5By8, aspectRatio6By5, aspectRatio8By3, aspectRatio8By5, aspectRatio16By9];\r\n/* Z indexes */\r\n\r\nexport const zIndexHigherThanPlatform = 200;"],"names":["getQuantityError","stockLeft","resources","errorMessageOutOfStock","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","replace","toString","getGenericError","result","cart","context","product","productAvailability","location","failureReason","addedToCartFailureMessage","_result$cartActionRes2","_result$cartActionRes","cartActionResult","substatus","elementFoundAt","productIdToFind","RecordId","index","CartLines","length","ProductId","FulfillmentStoreId","OrgUnitNumber","getElementIndex","currentQuantity","_cartLineToUpdate$Qua","_objectSpread","Quantity","quantityLimit","maxQuantityForCartLineItem","app","config","availableQty","AvailableQuantity","undefined","Math","min","getQuantityLimit","maxQuantityLimitText","validationResults","ArrayExtensions","hasElements","map","item","_item$ErrorContext","StringExtensions","isNullOrEmpty","LocalizedMessage","ErrorContext","ErrorResourceId","errorDetails","getConfigureErrors","isGiftCard","customError","customColorError","customStyleError","cartCheckError","dimensions","Object","keys","5","dimension","DimensionTypeValue","getDimensionErrorString","dimensionTypeValue","bookSizeError","filter","type","TextValue","languageError","productDimensionTypeColorErrorMessage","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeConfigurationErrorMessage","productDimensionTypeSize","productDimensionTypeSizeErrorMessage","productDimensionTypeAmountErrorMessage","productDimensionTypeStyleErrorMessage","productDimensionTypeStyle","AddToCartBehavior","propagateResult","props","onAdd","propagateError","onError","getAddToCartInputFromProps","async","_props$orderDetailsPr","_props$data","products","orderDetailsProducts","ObjectExtensions","isNullOrUndefined","simpleProduct","input","count","salesLine","catalogId","CatalogId","_props$catalogId","actionContext","apiSettings","requestContext","searchCriteriaInput","Context","ChannelId","channelId","getCatalogId","IncludeAttributes","Ids","productId","productSearchResultsWithImages","ProductsDataActions","callerContext","productSearchResult","newProductSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","productData","find","_productData$BasePric","ProductTypeValue","ProductType","Variant","AdjustedPrice","Price","BasePrice","quantity","_props$quantity","data","addOneItemToCart","setDisabled","openModal","setIsOpen","stockError","_cartState$cart$CartL","addToCartBehavior","addToCartInput","cartState","getCartState","addToCartResult","existingProduct","cartLine","copyQuantity","newQuantity","updateCartLineQuantity","cartLineId","LineId","additionalProperties","isUsingDefaultOrderSettingsMax","isOrderQuantityLimitsFeatureEnabled","_props$productAvailab","addProductToCart","availableQuantity","orderQuantityLimitsFeatureIsEnabled","enableStockCheck","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","shouldSkipSiteSettings","status","subscription","subscriptionAddress","ctx","cartIndex","_cartLine$ExtensionPr","ExtensionProperties","Value","BooleanValue","Street","SubscriptionAccountNumber","addressToBePassedIn","DeliverySpecification","DeliveryModeId","deliveryMode","DeliveryPreferenceTypeValue","DeliveryAddress","updateCartLineAttributeValues","subscriptionAccountNumber","updateLineDeliverySpecifications","Id","dialogStrings","showModal","showNotification","notification","ItemSuccessfullyAddedToCartNotification","imageSettings","gridSettings","price","navigationUrl","telemetryContent","id","typeName","NotificationsManager","instance","addNotification","MsDyn365","isBrowser","isNavigationToCartPageDisabled","goToCart","window","assign","_addToCartResult$erro","_addToCartResult$erro2","_props$dialogStrings$","_props$dialogStrings","JSON","stringify","ErrorNotification","closeNotificationLabel","addItemsToCart","setItemsAddedToCartDialogOpen","setErrorMessage","addProductsToCart","_validationResult$Val","_props$dialogStrings2","_props$dialogStrings3","_props$dialogStrings$2","_props$dialogStrings4","errorCount","CartsDataActions","bypassCache","Version","ValidationFailuresByCartLines","errorText","oneErrorText","multiErrorsText","errorMessage","format","validationErrorMessage","_props$dialogStrings$3","itemsAddedResource","viewCartButtonText","goToCartText","closeButtonLabel","itemsAddedToCartHeaderText","headerMessageText","itemsAddedToCartFormatText","headerItemFormatText","linesAddedToCartFormatText","headerLinesFormatText","itemsAddedValidationErrorMessage","MultiItemsSuccessfullyAddedToCartNotification","handleAddItemsToCartSuccess","_props$dialogStrings5","_props$dialogStrings$4","_addToCartResult$erro3","_addToCartResult$erro4","_props$dialogStrings$5","_props$dialogStrings6","buyAgainNotificationTitle","buyAgainNotificationCloseAriaLabel","AddToCartComponentActions","onClick","_event","errorCallback","cartError","addToCartError","itemAdded","hasOrderDetailsProducts","hasProducts","hasMultipleProducts","DeliveryMode","errorHost","configureErrors","pickupCartError","AddToCartFunctionalComponent","_props$data2","_props$dialogStrings7","_props$dialogStrings8","_props$dialogStrings9","_props$data3","_props$data4","_props$dialogStrings$6","_props$dialogStrings10","_props$dialogStrings$7","_props$dialogStrings11","_props$dialogStrings$8","_props$dialogStrings12","_props$dialogStrings$9","_props$dialogStrings13","_props$dialogStrings$10","_props$dialogStrings14","_props$data5","_props$addToCartArial","_props$addToCartArial2","isOpen","useState","stockErrorOpen","setStockErrorOpen","stockErrorMessage","setStockErrorMessage","disabled","modalOpen","setModalOpen","isItemsAddedToCartDialogOpen","setAddToCartInput","isVisible","message","closeItemsAddedToCartDialog","React","priceComponent","PriceComponent","freePriceText","originalPriceText","currentPriceText","popupProps","className","request","productQuantity","renderModalPopup","Popup","label","getLinkText","payload","getPayloadObject","TelemetryEvent","AddToCart","attributes","getTelemetryAttributes","isLoadingData","retrievedInput","retrieveAddToCartInput","Dimensions","DimensionValue","isLoading","isUpdatingDimension","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","Modal","open","Error","onClose","style","marginTop","validationErrorText","stockErrorText","Primary","addToCartArialLabel","title","user","isAuthenticated","subscriptionUserCountry","setSubscriptionError","CountryRegionId","Name","ItemId","language","Style","Size","currentCategories","sessionStorage","getItem","categories","split","addToCart","event","productSku","push","info","sku","name","size","signInUrl","isIntermediateState","shouldShowOutOfStock","backgroundImage","minWidth","shippingAvailable","signInText","ItemsAddedToCartDialogComponent","isModalOpen","defaultProps","outOfStockText","addToCartText","isCustomPriceSelected","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","missingDimensions","_productAvailability$","defaultAvailableQuantity","max","includeCurrentQuantity","_props$hasAvailablePr","isProductQuantityLoading","isAddServiceItemToCart","hasAvailableProducts","includedQuantityNumber","_props$data6","AddToCartComponent","msdyn365Commerce","createComponentOverride","component","InvoiceSummaryLine","_ref","toBeCalculatedText","freeText","cssLabel","CustomerContextualPrice","_buildPaymentSummarySection","telemetry","_computedLoyaltyAmount","checkoutState","loyaltyAmount","InvoiceSummary","TotalAmount","invoiceLines","IsInvoiceLine","reactNodes","invoices","invoiceLine","InvoiceAmount","invoiceLabel","InvoiceId","orderTotal","orderTotalLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","reduce","giftCardCounter","giftCard","Balance","amount","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","OrderSummaryLine","priceCurrency","currencyCode","_buildOrderSummarySection","arguments","channelConfiguration","Currency","getDeliveryMode","_channelDeliveryOptio","featureSate","channelDeliveryOptionConfig","pickupDeliveryMode","PickupDeliveryModeCodes","dM","OrderSummary","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","retailMultiplePickUpOptionEnabled","isTaxIncludedInPrice","isShowTaxBreakup","pickupDeliveryModeCode","PickupDeliveryModeCode","emailDeliveryModeCode","EmailDeliveryModeCode","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","some","subtotal","subTotalLabel","tax","taxLabel","otherCharge","otherChargeLabel","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","shipping","shippingLabel","customerAccountAmount","customerAccount","customerAccountLabel","totalDiscounts","totalDiscountsLabel","grey2","grey3","grey5","grey10","grey15","grey20","grey25","grey30","grey35","grey40","grey60","grey90","yellow5","yellow10","yellow15","yellow20","yellow25","yellow30","yellow35","yellow40","red5","red10","red15","red20","red25","red30","red35","red40","blue5","blue10","blue15","blue20","blue25","blue30","blue35","blue40","green5","green10","green15","green20","green25","green30","green35","green40","text120","black","white","info10","info40","info60","confirmation10","confirmation40","confirmation60","warning10","warning40","warning60","danger10","danger40","danger60","highlightBlue","highlightCyan","highlightGreen","highlightYellow","highlightAmber","highlightRed","highlightMagenta","highlightViolet","colorFacebook","colorInstagram","colorTwitter","colorPinterest","colorYoutube","colorOdnok","colorVk","boxShadowRaised","boxShadowDetached","boxShadowOverlaid","boxShadowPoppedOut","sans","serif","monospace","fontWeightLight","fontWeightNormal","fontWeightSemiBold","fontWeightBold","fontSizeRoot","fontSize11","fontSize13","fontSize14","fontSize16","fontSize18","fontSize20","fontSize28","fontSize32","fontSize42","lineHeightTight","lineHeight","lineHeightLoose","spacing4","spacing8","spacing16","spacing24","spacing32","spacing48","spacing64","spacing96","spacing128","breakWidth480","breakWidth600","breakWidth840","breakWidth960","breakWidth1280","breakWidth1440","breakWidth1600","aspectRatio1By1","width","height","key","aspectRatio5By6","aspectRatio5By8","aspectRatio6By5","aspectRatio8By3","aspectRatio8By5","aspectRatio16By9","aspectRatios","zIndexHigherThanPlatform"],"sourceRoot":""}