{"version":3,"file":"static/js/9.3160d7e601b09c63cfd6.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 deliveryLocation?: any;\r\n storeSelectorStateManager?: 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 let DeliveryWarehouseId;\r\n if (props && props.deliveryLocation && props.deliveryLocation[0] && props.deliveryLocation[0].InventLocationId)\r\n DeliveryWarehouseId = {\r\n OrgUnitNumber: props.deliveryLocation[0].InventLocationId,\r\n InventoryLocationId: props.deliveryLocation[0].InventLocationId,\r\n Latitude: 0,\r\n Longitude: 0\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 deliveryMode: '',\r\n location: DeliveryWarehouseId\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","DeliveryWarehouseId","deliveryLocation","InventLocationId","InventoryLocationId","Latitude","Longitude","addProductToCart","availableQuantity","orderQuantityLimitsFeatureIsEnabled","enableStockCheck","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","shouldSkipSiteSettings","deliveryMode","status","subscription","subscriptionAddress","ctx","cartIndex","_cartLine$ExtensionPr","ExtensionProperties","Value","BooleanValue","Street","SubscriptionAccountNumber","addressToBePassedIn","DeliverySpecification","DeliveryModeId","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":""}