{"version":3,"file":"static/js/eaa35af2d4a7850e5fa4.bundle.js","mappings":"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","sources":["webpack://henrys-ecommerce/./src/common/createGoogleAnalyticsEvent.ts?b6fa","webpack://henrys-ecommerce/./src/common/pushGoogleAnalyticsEvent.tsx?9c4e","webpack://henrys-ecommerce/./src/common/sailthru-integration/cartActions.ts?63cb","webpack://henrys-ecommerce/./src/common/utilities/createCanonicalUrl.ts?7ccf","webpack://henrys-ecommerce/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?350d","webpack://henrys-ecommerce/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://henrys-ecommerce/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://henrys-ecommerce/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://henrys-ecommerce/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://henrys-ecommerce/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://henrys-ecommerce/./src/modules/cart/cart.tsx?d4e4","webpack://henrys-ecommerce/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://henrys-ecommerce/./src/modules/cart/components/cart-pick-up-in-store.tsx?7be5","webpack://henrys-ecommerce/./src/modules/cart/components/cart-line-items.tsx?2a22","webpack://henrys-ecommerce/./src/modules/cart/components/cart-line-groups.tsx?91ce","webpack://henrys-ecommerce/./src/modules/cart/utils/get-promotion-in-cart.ts?6bcf","webpack://henrys-ecommerce/./src/modules/cart/cart.tsx?f894","webpack://henrys-ecommerce/./src/modules/cart/components/cart-line-items-promotion.tsx?105c","webpack://henrys-ecommerce/./src/modules/cart/cart.view.tsx?013c","webpack://henrys-ecommerce/./src/modules/quickview/utilities/get-product-details.ts?0cc4","webpack://henrys-ecommerce/./src/modules/quickview/utilities/get-valid-product-images.ts?8145","webpack://henrys-ecommerce/./src/themes/henrys/views/cart.view.tsx?4403","webpack://henrys-ecommerce/./src/themes/henrys/views/components/CartGuide.tsx?ff5c","webpack://henrys-ecommerce/./lib/cart/module-registration.js?d21f","webpack://henrys-ecommerce/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://henrys-ecommerce/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://henrys-ecommerce/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://henrys-ecommerce/./src/modules/cart/cart.view.tsx?d8c2","webpack://henrys-ecommerce/./src/modules/fabrikam/views/cart.view.tsx?ac8f","webpack://henrys-ecommerce/./src/invoice-summary-lineitem.tsx?5f61","webpack://henrys-ecommerce/./src/order-summary-lineitem.tsx?8a98","webpack://henrys-ecommerce/./src/modules/adventureworks/views/cart.view.tsx?3909","webpack://henrys-ecommerce/external var \"React\"?0d3b","webpack://henrys-ecommerce/external var \"ReactDOM\"?853b"],"sourcesContent":["import { CacheType, getCatalogId, IActionContext, IActionInput, ICommerceApiSettings, IRequestContext } from '@msdyn365-commerce/core';\r\nimport { Cart, CategoryPathLookup } from '@msdyn365-commerce/retail-proxy';\r\nimport { GaEvent, GaItem, GaPayload } from './pushGoogleAnalyticsEvent';\r\nimport { getProductDetails } from '../modules/quickview/utilities';\r\n\r\nexport const buildCacheKey = (base: string, apiSettings: ICommerceApiSettings, locale?: string): string => {\r\n return `${base}-chanId:${apiSettings.channelId}-catId:${apiSettings.catalogId}${locale ? `-${locale}` : ''}`;\r\n};\r\n\r\n/**\r\n * Category path input.\r\n */\r\nexport class GetCategoryPathsInput implements IActionInput {\r\n public readonly ChannelId: number;\r\n\r\n public readonly CatalogId: number;\r\n\r\n public readonly categoryPathLooksups: CategoryPathLookup[];\r\n\r\n public readonly apiSettings: ICommerceApiSettings;\r\n\r\n private readonly locale: string;\r\n\r\n private constructedCacheKey: string;\r\n\r\n public constructor(context: IRequestContext, categoryPathLooksups: CategoryPathLookup[]) {\r\n this.ChannelId = context.apiSettings.channelId;\r\n this.CatalogId = getCatalogId(context);\r\n this.categoryPathLooksups = categoryPathLooksups;\r\n this.apiSettings = context.apiSettings;\r\n this.constructedCacheKey = '';\r\n categoryPathLooksups.forEach(categoryPath => {\r\n this.constructedCacheKey += `${categoryPath.ProductId && categoryPath.ProductId.toString()}|`;\r\n });\r\n this.constructedCacheKey += `${this.ChannelId.toString()}|`;\r\n this.constructedCacheKey += `${this.CatalogId.toString()}|`;\r\n this.locale = context.locale;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey(this.constructedCacheKey, this.apiSettings, this.locale);\r\n\r\n public getCacheObjectType = () => 'CategoryPath';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n\r\n /**\r\n * Retrieves locale to use for the current API call.\r\n * @returns A string which represents locale.\r\n */\r\n public getLocale = (): string => this.locale;\r\n}\r\n\r\nconst createGoogleAnalyticsEvent = async (cart: Readonly, eventName: GaEvent, actionContext: IActionContext): Promise => {\r\n var channelId = actionContext.requestContext.channel?.RecordId;\r\n\r\n const items: GaItem[] = [];\r\n\r\n if (channelId && cart.CartLines) {\r\n let i = 0;\r\n for (const cartLine of cart.CartLines) {\r\n if (cartLine.ProductId) {\r\n const productDetails = await getProductDetails(cartLine.ProductId, channelId, actionContext);\r\n\r\n const product = productDetails.product;\r\n const variant = product?.Dimensions?.map(d => d.DimensionValue?.Value).join(',');\r\n\r\n process.env.NODE_ENV === 'development' &&\r\n console.log('createGoogleAnalyticsEvent', cartLine.ProductId, JSON.parse(JSON.stringify(product)));\r\n\r\n const discount = (cartLine.DiscountLines ?? []).reduce((a, b) => a + (b.Amount ?? 0), 0);\r\n\r\n var brand = product?.ExtensionProperties?.find(ep => ep.Key === 'Brand')?.Value?.StringValue;\r\n\r\n var item = {\r\n recId: cartLine.ProductId,\r\n item_id: product?.ProductNumber || product?.ItemId || cartLine.ItemId || '',\r\n item_name: product?.Name ?? '',\r\n index: i,\r\n item_variant: variant,\r\n price: (product?.Price ?? cartLine.Price ?? 0) - discount,\r\n discount: discount,\r\n pid: product?.ItemId || cartLine.ItemId || '',\r\n item_brand: brand,\r\n quantity: cartLine.Quantity ?? 0\r\n };\r\n\r\n items.push(item);\r\n }\r\n\r\n i++;\r\n }\r\n }\r\n\r\n const total = items.reduce((a, b) => a + (b.price ?? 0) * b.quantity, 0);\r\n\r\n return {\r\n event: eventName,\r\n ecommerce: {\r\n currency: 'CAD',\r\n value: total,\r\n items: items\r\n }\r\n };\r\n};\r\n\r\nexport { createGoogleAnalyticsEvent };\r\n","import { IActionContext } from '@msdyn365-commerce/core';\r\nimport { GetCategoryPathsInput } from './createGoogleAnalyticsEvent';\r\nimport { getCategoryPaths } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport type GaDataLayer = {\r\n push: (payload: GaPayload) => void;\r\n};\r\n\r\nexport type GaItem = {\r\n item_id: string;\r\n item_name: string;\r\n affiliation?: string;\r\n coupon?: string;\r\n discount?: number;\r\n index: number;\r\n item_brand?: string;\r\n item_category?: string;\r\n item_category2?: string;\r\n item_category3?: string;\r\n item_category4?: string;\r\n item_category5?: string;\r\n item_list_id?: string;\r\n item_list_name?: string;\r\n item_variant?: string;\r\n location_id?: string;\r\n price: number;\r\n quantity: number;\r\n pid?: string;\r\n recId?: number;\r\n};\r\n\r\nexport type GaEvent =\r\n | 'view_item'\r\n | 'view_cart'\r\n | 'purchase'\r\n | 'begin_checkout'\r\n | 'add_to_cart'\r\n | 'add_to_wishlist'\r\n | 'remove_from_cart'\r\n | 'add_shipping_info'\r\n | 'add_payment_info';\r\n\r\nexport type GaPayload = {\r\n event?: GaEvent;\r\n ecommerce?: {\r\n transaction_id?: string;\r\n currency?: string;\r\n value: number;\r\n tax?: number;\r\n shipping?: number;\r\n shipping_tier?: string;\r\n payment_type?: string;\r\n coupon?: string;\r\n items?: GaItem[];\r\n } | null;\r\n};\r\n\r\nexport const pushGoogleAnalyticsEvent = async (payload?: GaPayload, actionContext?: IActionContext) => {\r\n const dataLayer = typeof window !== 'undefined' && (window['dataLayer'] as GaDataLayer);\r\n if (dataLayer) {\r\n process.env.NODE_ENV === 'development' && console.log('pushGoogleAnalyticsEvent', payload);\r\n dataLayer.push({ ecommerce: null });\r\n if (payload) {\r\n for (const gaItem of payload?.ecommerce?.items ?? []) {\r\n if (gaItem.recId) {\r\n if (actionContext) {\r\n const categoryPaths = await getCategoryPaths(\r\n new GetCategoryPathsInput(actionContext.requestContext, [{ ProductId: +gaItem.recId }]),\r\n actionContext\r\n );\r\n\r\n if (categoryPaths.length > 0) {\r\n gaItem.item_category = categoryPaths[0].Name ?? undefined;\r\n }\r\n if (categoryPaths.length > 1) {\r\n gaItem.item_category2 = categoryPaths[1].Name ?? undefined;\r\n }\r\n if (categoryPaths.length > 2) {\r\n gaItem.item_category3 = categoryPaths[2].Name ?? undefined;\r\n }\r\n if (categoryPaths.length > 3) {\r\n gaItem.item_category4 = categoryPaths[3].Name ?? undefined;\r\n }\r\n if (categoryPaths.length > 4) {\r\n gaItem.item_category5 = categoryPaths[4].Name ?? undefined;\r\n }\r\n }\r\n\r\n delete gaItem.recId;\r\n }\r\n }\r\n\r\n dataLayer.push(payload);\r\n }\r\n }\r\n};\r\n","import MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { createCanonicalUrl } from '../utilities/createCanonicalUrl';\r\n\r\ntype SailthruCartItem = {\r\n id?: string;\r\n url: string;\r\n title: string;\r\n qty: number;\r\n price?: number;\r\n images?: {\r\n full?: { url: string };\r\n thumb?: { url: string };\r\n };\r\n};\r\n\r\nconst handleCartChange = async (ctx: IActionContext) => {\r\n if (MsDyn365.isBrowser && window.Sailthru) {\r\n const sailthru = window.Sailthru;\r\n const userEmail = ctx.requestContext.user.emailAddress;\r\n\r\n // TODO: get user email from Sailthru\r\n\r\n process.env.NODE_ENV === 'development' && console.log('sailthru', 'handleCartChange', userEmail ?? 'no email');\r\n\r\n if (sailthru) {\r\n const baseImgUrl = ctx.requestContext.apiSettings.baseImageUrl;\r\n var channelId = ctx.requestContext.channel?.RecordId;\r\n const cart = await getCartState(ctx);\r\n\r\n const items: SailthruCartItem[] = [];\r\n for (const cartLine of cart.cart.CartLines ?? []) {\r\n let productDetails = await getSelectedVariant(new SelectedVariantInput(cartLine.ProductId!, channelId!), ctx);\r\n\r\n // It seems there's cache issue in getSelectedVariant, retry if the return ID not matching\r\n if (cartLine.ProductId !== productDetails?.RecordId) {\r\n productDetails = await getSelectedVariant(new SelectedVariantInput(cartLine.ProductId!, channelId!), ctx);\r\n }\r\n\r\n process.env.NODE_ENV === 'development' && console.log('sailthru', JSON.parse(JSON.stringify(productDetails)), cartLine);\r\n\r\n if (productDetails) {\r\n const title = productDetails.Name ?? cartLine.Description;\r\n let normalizedCanonicalUrl = createCanonicalUrl(\r\n ctx,\r\n [title ?? ''],\r\n `${productDetails.MasterProductId ?? productDetails.RecordId}.p`\r\n ).toLowerCase();\r\n\r\n const dimParams = productDetails.Dimensions?.map(dim => {\r\n if (dim.DimensionTypeValue === 1 && dim.DimensionValue?.Value) {\r\n return `color=${encodeURIComponent(dim.DimensionValue.Value)}`;\r\n }\r\n\r\n if (dim.DimensionTypeValue === 3 && dim.DimensionValue?.Value) {\r\n return `size=${encodeURIComponent(dim.DimensionValue.Value)}`;\r\n }\r\n\r\n if (dim.DimensionTypeValue === 4 && dim.DimensionValue?.Value) {\r\n return `style=${encodeURIComponent(dim.DimensionValue.Value)}`;\r\n }\r\n\r\n return null;\r\n })\r\n .filter(p => !!p)\r\n .join('&');\r\n\r\n if (dimParams) {\r\n normalizedCanonicalUrl = `${normalizedCanonicalUrl}?${dimParams}`;\r\n }\r\n\r\n items.push({\r\n url: normalizedCanonicalUrl,\r\n title: title ?? cartLine.ItemId ?? '',\r\n id: productDetails.ProductNumber ?? cartLine.ItemId,\r\n qty: cartLine.Quantity ?? 1,\r\n images: {\r\n full: {\r\n url: `${baseImgUrl}Products%2F${encodeURIComponent(\r\n productDetails.ProductNumber ?? productDetails.ItemId ?? cartLine.ItemId ?? ''\r\n )}_000_001.png&fallback=/Products/${encodeURIComponent(\r\n productDetails.ItemId ?? cartLine.ItemId ?? ''\r\n )}_000_001.png&q=80&f=jpg`\r\n }\r\n },\r\n price: cartLine.ExtendedPrice ? (cartLine.ExtendedPrice * 100) / (cartLine.Quantity ?? 1) : undefined\r\n });\r\n }\r\n }\r\n\r\n process.env.NODE_ENV === 'development' && console.log('sailthru', 'items', items);\r\n\r\n sailthru.integration('purchase', {\r\n email: userEmail || undefined,\r\n incomplete: 1,\r\n items: items\r\n });\r\n }\r\n }\r\n};\r\n\r\nconst cartActions = {\r\n handleCartChange\r\n};\r\n\r\nexport { cartActions };\r\n","import { IActionContext } from '@msdyn365-commerce/core';\r\n\r\nexport const createCanonicalUrl = (context: IActionContext, paths: string[], page: string) => {\r\n const canonicalDomain = context.requestContext.canonicalDomain;\r\n const sitePath = context.requestContext.sitePath ?? '';\r\n\r\n const url = `https://${canonicalDomain}${sitePath}/${paths\r\n .map(p => toSlug(p))\r\n .filter(s => s.length > 0)\r\n .join('/')}/${page}`;\r\n return url;\r\n};\r\n\r\nconst toSlug = (text: string) => {\r\n const slug = text\r\n .toLowerCase()\r\n .replace(/[^A-Za-z\\u00C0-\\u017F0-9]/g, '-')\r\n .replace(/--+/g, '-')\r\n .replace(/^-/, '')\r\n .replace(/-$/, '');\r\n\r\n return slug;\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICommerceApiSettings,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n ActiveCartProductsInput,\r\n QueryResultSettingsProxy,\r\n buildCacheKey,\r\n getActiveCartProductsAction\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Input class for pickup delivery options for items in cart.\r\n */\r\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\r\n public readonly apiSettings: ICommerceApiSettings;\r\n\r\n public constructor(apiSettings: ICommerceApiSettings) {\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n /**\r\n * Get Cache Key.\r\n * @returns - Cache key string.\r\n */\r\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\r\n\r\n /**\r\n * Get Cachetype Name.\r\n * @returns - Cache name string.\r\n */\r\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\r\n\r\n /**\r\n * Get Cachetype.\r\n * @returns - CacheType enum.\r\n */\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the GetPickUpOptionCartLineItems method.\r\n * @param inputData - The input data passed to the createInput method.\r\n * @returns - Input for data action.\r\n */\r\nconst createInput = (inputData: ICreateActionContext>) => {\r\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\r\n};\r\n\r\n/**\r\n * The action method for the GetPickUpOptionCartLineItems data action.\r\n * @param input - The action input.\r\n * @param context - The action context.\r\n * @returns - Order Template object.\r\n */\r\nexport async function getPickUpOptionsForCartLineItems(\r\n input: ProductPickUpOptionsForCartLineItems,\r\n context: IActionContext\r\n): Promise {\r\n // If no input is provided fail out\r\n if (!input.apiSettings.channelId) {\r\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\r\n }\r\n const cartState = await getCartState(context);\r\n const cart = cartState.cart;\r\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\r\n const filterOption = 4;\r\n const response: ProductDeliveryOptions[] = [];\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\r\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\r\n return Promise.resolve(response);\r\n }\r\n\r\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\r\n {\r\n callerContext: context,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\r\n },\r\n products.map(product => product.RecordId),\r\n {},\r\n filterOption\r\n );\r\n\r\n return pickupoptions;\r\n}\r\n\r\n/**\r\n * The GetPickupOptionCartLineItems Data Action\r\n * Returns pickup options.\r\n */\r\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\r\n action: getPickUpOptionsForCartLineItems as IAction,\r\n input: createInput\r\n});\r\n\r\nexport default getPickUpOptionsForCartLineItemsDataAction;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

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

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n DeliveryOption,\r\n OrgUnitLocation,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IPickUpInStoreViewProps {\r\n callbacks: {\r\n toggleBopis(isBopisSelected: boolean): void;\r\n };\r\n defaultComponent?: React.ReactNode;\r\n orgUnitName?: string;\r\n isBopisSelected: boolean;\r\n ContainerProps: INodeProps;\r\n deliveryOption?: string;\r\n}\r\n\r\nexport interface IPickUpInStoreProps {\r\n cartline: CartLine;\r\n product: SimpleProduct;\r\n shipitText: string;\r\n pickUpInStoreText: string;\r\n changeStoreText: string;\r\n cartState: ICartState | undefined;\r\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\r\n orgUnitLocations?: OrgUnitLocation[] | undefined;\r\n deliveryOptions?: ProductDeliveryOptions;\r\n pickupDeliveryModeCode?: string;\r\n storeSelectorModuleId?: string;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n retailMulitplePickupFeatureState?: boolean;\r\n locationChangedHandler(): void;\r\n}\r\n\r\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\r\n const _onLocationChangedCallback = async (\r\n orgUnitLocation: OrgUnitLocation,\r\n cartState: ICartState | undefined,\r\n cartline: CartLine,\r\n deliveryMode?: string\r\n ) => {\r\n if (!cartState) {\r\n return Promise.resolve();\r\n }\r\n return cartState\r\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n props.locationChangedHandler();\r\n }\r\n })\r\n .catch(error => {});\r\n };\r\n\r\n const _toggleBOPIS = (isBopisSelected: boolean) => {\r\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\r\n\r\n if (isBopisSelected) {\r\n if (!storeSelectorStateManager) {\r\n return;\r\n }\r\n storeSelectorStateManager\r\n .openDialog({\r\n id: storeSelectorModuleId,\r\n product,\r\n alreadySelectedLocation: {\r\n OrgUnitNumber: cartline.FulfillmentStoreId\r\n },\r\n deliveryOptions: props.deliveryOptions,\r\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\r\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\r\n }\r\n })\r\n .catch(error => {});\r\n } else {\r\n if (!cartState) {\r\n return;\r\n }\r\n cartline.DeliveryMode = '';\r\n cartline.FulfillmentStoreId = '';\r\n cartline.ShippingAddress = {};\r\n cartState\r\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n props.locationChangedHandler();\r\n }\r\n })\r\n .catch(error => {});\r\n }\r\n };\r\n\r\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\r\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\r\n return '';\r\n }\r\n\r\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\r\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\r\n });\r\n\r\n if (foundLocation) {\r\n return foundLocation.OrgUnitName;\r\n }\r\n return fulfillmentStoreId;\r\n };\r\n\r\n const _renderShippingMethod = (\r\n cartLine: CartLine,\r\n shipItText: string,\r\n pickupInStoretext: string,\r\n changeStoreText: string,\r\n orgUnitLocations: OrgUnitLocation[] | undefined\r\n ): JSX.Element => {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\r\n const bopisSelected = !!cartLine.FulfillmentStoreId;\r\n\r\n const toggleBOPIS = (isBopisSelected: boolean) => {\r\n return () => {\r\n _toggleBOPIS(isBopisSelected);\r\n };\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {cartLine.FulfillmentStoreId ? (\r\n
\r\n {orgUnitName}\r\n \r\n
\r\n ) : null}\r\n \r\n );\r\n };\r\n\r\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\r\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\r\n return delivery?.Description;\r\n };\r\n\r\n /**\r\n * Method to check if we have atleast one common delivery code between product and channel.\r\n * @param productdeliveryOptions - Product DeliveryOption List.\r\n * @param storePickUpOptionList - Channel DeliveryOption List.\r\n * @returns Boolean flag.\r\n */\r\n const matchDeliveryOptions = (\r\n productdeliveryOptions: DeliveryOption[] | undefined,\r\n storePickUpOptionList: string[] | undefined\r\n ): boolean => {\r\n const deliveryOption: string[] = [];\r\n productdeliveryOptions?.map(delivery => {\r\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\r\n if (pickup) {\r\n deliveryOption.push(pickup);\r\n }\r\n return deliveryOption;\r\n });\r\n\r\n return ArrayExtensions.hasElements(deliveryOption);\r\n };\r\n\r\n // If no delivery options present on the product, or none of the delivery options\r\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\r\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\r\n return undefined;\r\n }\r\n\r\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\r\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\r\n return undefined;\r\n }\r\n } else if (\r\n !props.pickupDeliveryModeCode ||\r\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\r\n ) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n callbacks: {\r\n toggleBopis: _toggleBOPIS\r\n },\r\n defaultComponent: _renderShippingMethod(\r\n props.cartline,\r\n props.shipitText,\r\n props.pickUpInStoreText,\r\n props.changeStoreText,\r\n props.orgUnitLocations\r\n ),\r\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\r\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\r\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\r\n ContainerProps: {\r\n className: 'msc-cart-line__bopis-container'\r\n }\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n AddToOrderTemplateComponent,\r\n AddToWishlistComponent,\r\n CartLineItemComponent,\r\n IAddToOrderTemplateDialogResources,\r\n ICartlineResourceString,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n IWishlistActionSuccessResult\r\n} from '@msdyn365-commerce/components';\r\nimport MsDyn365, {\r\n IAny,\r\n ICoreContext,\r\n IGeneric,\r\n IGridSettings,\r\n IImageSettings,\r\n ITelemetry,\r\n TelemetryEvent,\r\n isChannelTypeB2B\r\n} from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n AsyncResult,\r\n CartLine,\r\n CartLineValidationResultsByLineId,\r\n ChannelDeliveryOptionConfiguration,\r\n CommerceList,\r\n Customer,\r\n OrgUnitLocation,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n ArrayExtensions,\r\n getInvoiceDetailsPageUrlSync,\r\n getProductUrlSync,\r\n IProductInventoryInformation,\r\n isCartLineItemPickUpType,\r\n ObjectExtensions,\r\n OrderTemplate,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '@msdyn365-commerce-modules/cart';\r\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\r\n\r\nexport interface ICartLineItemsProps {\r\n cartlines: CartLine[];\r\n cartlinesErrors: CartLineValidationResultsByLineId;\r\n cartState: ICartState | undefined;\r\n orgUnitLocations: OrgUnitLocation[] | undefined;\r\n resources: ICartlineResourceString;\r\n productAvailabilites: IProductInventoryInformation[] | undefined;\r\n products: SimpleProduct[] | undefined;\r\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\r\n pickupDeliveryModeCode?: string;\r\n catalogs?: ProductCatalog[];\r\n retailMulitplePickupFeatureState?: boolean;\r\n\r\n /* GridSettings for the product image in cartline */\r\n gridSettings: IGridSettings;\r\n\r\n /* ImageSettings for the product image in cartline */\r\n imageSettings: IImageSettings;\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext>;\r\n telemetry: ITelemetry;\r\n removeButtonText: string;\r\n addToWishlistButtonText: string;\r\n removeFromWishlistButtonText: string;\r\n shipItText: string;\r\n pickitUpText: string;\r\n changeStoreText: string;\r\n outOfStockText: string;\r\n outOfRangeOneText: string;\r\n outOfRangeFormatText: string;\r\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\r\n isStockCheckEnabled: boolean;\r\n wishlists: CommerceList[] | undefined;\r\n defaultWishlistName: string;\r\n maxCartlineQuantity: number;\r\n includeErrors?: boolean;\r\n showShippingChargesForLineItems?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n hasInvoiceLine?: boolean;\r\n storeSelectorModuleId?: string;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\r\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\r\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\r\n\r\n addToOrderTemplateButtonText: string;\r\n addToOrderTemplateButtonTooltip: string;\r\n addToOrderTemplateMessage: string;\r\n addItemToOrderTemplateError: string;\r\n orderTemplates: OrderTemplate[] | undefined;\r\n customerInformation: Customer | undefined;\r\n shouldIgnoreWarehouse: boolean | undefined;\r\n productAvailability?: AsyncResult;\r\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\r\n isMultipleCatalogFeatureEnabledInHq: boolean;\r\n catalogId?: number;\r\n\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\r\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\r\n locationChangedHandler(): void;\r\n}\r\n\r\nexport interface ICartlinesViewProps {\r\n cartline: React.ReactNode;\r\n pickUpInStore?: IPickUpInStoreViewProps;\r\n remove: React.ReactNode;\r\n addToWishlist: React.ReactNode | undefined;\r\n addToOrderTemplate: React.ReactNode | undefined;\r\n\r\n error?: string;\r\n cartlineId?: string;\r\n hasError?: boolean;\r\n data?: {\r\n product?: SimpleProduct;\r\n cartline: CartLine;\r\n };\r\n}\r\n\r\nconst _getCartItemAvailableQuantity = (\r\n isStockCheckEnabled: boolean,\r\n productAvailability: IProductInventoryInformation | undefined\r\n): number => {\r\n if (\r\n !isStockCheckEnabled ||\r\n !productAvailability ||\r\n !productAvailability.ProductAvailableQuantity ||\r\n !productAvailability.IsProductAvailable ||\r\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\r\n ) {\r\n return 0;\r\n }\r\n\r\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\r\n};\r\n\r\nconst _getCartItemMaxQuantity = (\r\n maxQuantityByConfig: number,\r\n isStockCheckEnabled: boolean,\r\n availableQuantityInStock: number,\r\n isQuantityLimitsFeatureEnabled: boolean,\r\n maxByQuantityLimitsFeature: number\r\n) => {\r\n if (isQuantityLimitsFeatureEnabled) {\r\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\r\n\r\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\r\n // and consider available qty if stock check enabled and max from config in site settings.\r\n if (!maxByQuantityLimitsFeature) {\r\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\r\n }\r\n\r\n return isStockCheckEnabled\r\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\r\n ? maxByQuantityLimitsFeatureResult\r\n : availableQuantityInStock\r\n : maxByQuantityLimitsFeatureResult;\r\n }\r\n if (isStockCheckEnabled) {\r\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\r\n }\r\n return maxQuantityByConfig;\r\n};\r\n\r\nconst _getErrorMessage = (\r\n availableQuantityInStock: number,\r\n currentQuantity: number,\r\n props: ICartLineItemsProps,\r\n shouldSkipStockCheck: boolean,\r\n cartLine: CartLine,\r\n lineId: string | undefined,\r\n foundProductAvailability?: IProductInventoryInformation\r\n): string | undefined => {\r\n const finalErrorMessages: string[] = [];\r\n\r\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\r\n if (isLoadingDeliveryOptions) {\r\n return undefined;\r\n }\r\n // check availability passed as prop for each cartline\r\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\r\n if (foundProductAvailability === undefined) {\r\n finalErrorMessages.push(props.outOfStockText);\r\n return finalErrorMessages.toString();\r\n }\r\n }\r\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\r\n if (availableQuantityInStock <= 0) {\r\n finalErrorMessages.push(props.outOfStockText);\r\n } else if (availableQuantityInStock < currentQuantity) {\r\n if (availableQuantityInStock === 1) {\r\n finalErrorMessages.push(props.outOfRangeOneText);\r\n } else {\r\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\r\n }\r\n }\r\n }\r\n\r\n // Server-side validation\r\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\r\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\r\n if (errorsFoundByLineId !== undefined) {\r\n for (const i of errorsFoundByLineId) {\r\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\r\n i.ValidationFailures.forEach(validation => {\r\n if (validation.ErrorContext !== undefined) {\r\n finalErrorMessages.push(validation.ErrorContext);\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\r\n return finalErrorMessages.join(' ');\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\n/**\r\n * On Remove Click functionality.\r\n * @param removeItemClickHandler -Remove item click function.\r\n * @param cartline -CartLine.\r\n * @returns Remove change value.\r\n */\r\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\r\n removeItemClickHandler(cartline);\r\n};\r\n\r\n// eslint-disable-next-line complexity -- Auto-suppressed.\r\nconst _assembleNode = (\r\n cartline: CartLine,\r\n product: SimpleProduct | undefined,\r\n props: ICartLineItemsProps,\r\n index: number,\r\n foundProductAvailability?: IProductInventoryInformation,\r\n productPickUpOptions?: ProductDeliveryOptions\r\n): ICartlinesViewProps => {\r\n const {\r\n imageSettings,\r\n gridSettings,\r\n id,\r\n typeName,\r\n context,\r\n resources,\r\n removeButtonText,\r\n removeItemClickHandler,\r\n moveToWishlistSuccessHandler,\r\n addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateDialogResources,\r\n createOrderTemplateDialogResources,\r\n itemAddedToOrderTemplateDialogResources,\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n addToWishlistButtonText,\r\n removeFromWishlistButtonText,\r\n orderTemplates,\r\n customerInformation,\r\n wishlists,\r\n defaultWishlistName,\r\n storeSelectorModuleId,\r\n isMultipleCatalogFeatureEnabledInHq\r\n } = props;\r\n\r\n const isAuthenticated = context.request.user.isAuthenticated;\r\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\r\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\r\n\r\n const maxQuantity =\r\n product &&\r\n _getCartItemMaxQuantity(\r\n props.maxCartlineQuantity,\r\n props.isStockCheckEnabled,\r\n availableQuantityInStock,\r\n props.isQuantityLimitsFeatureEnabled,\r\n product?.Behavior?.MaximumQuantity || 0\r\n );\r\n\r\n // Skip stock check if the cart line is a service item or an invoice line\r\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\r\n\r\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\r\n ? undefined\r\n : _getErrorMessage(\r\n availableQuantityInStock,\r\n cartline.Quantity!,\r\n props,\r\n shouldSkipStockCheck,\r\n cartline,\r\n cartline.LineId,\r\n foundProductAvailability\r\n );\r\n\r\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\r\n\r\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n\r\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\r\n const inventoryCode = foundProductAvailability\r\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\r\n : undefined;\r\n const productDimension = 4;\r\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\r\n const isCustomPriceSelected =\r\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\r\n 'Custom';\r\n\r\n let isQuantityEditable = !ObjectExtensions.isNullOrUndefined(product) && !product?.Behavior?.HasSerialNumber;\r\n\r\n if (product?.ItemTypeValue === 2 && product.ItemServiceTypeValue === 1) {\r\n // make quantity readonly for warranty\r\n isQuantityEditable = false;\r\n }\r\n\r\n let productUrl: string | undefined;\r\n if (product) {\r\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\r\n\r\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\r\n const fullUrl = new URL(productUrl, window.location.href);\r\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\r\n productUrl = fullUrl.href;\r\n }\r\n } else {\r\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\r\n }\r\n\r\n return {\r\n data: {\r\n product,\r\n cartline\r\n },\r\n cartlineId: cartline.LineId,\r\n error: errorMessage,\r\n hasError:\r\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\r\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\r\n cartline: (\r\n \r\n ),\r\n pickUpInStore: product\r\n ? PickUpInStore({\r\n storeSelectorModuleId,\r\n cartState: props.cartState,\r\n cartline,\r\n product,\r\n shipitText: props.shipItText,\r\n pickUpInStoreText: props.pickitUpText,\r\n changeStoreText: props.changeStoreText,\r\n storeSelectorStateManager: props.storeSelectorStateManager,\r\n orgUnitLocations: props.orgUnitLocations,\r\n deliveryOptions: productPickUpOptions,\r\n pickupDeliveryModeCode:\r\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\r\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\r\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\r\n locationChangedHandler: props.locationChangedHandler\r\n })\r\n : undefined,\r\n remove: (\r\n \r\n ),\r\n addToWishlist:\r\n isAuthenticated && product && !isCustomPriceSelected ? (\r\n \r\n ) : (\r\n undefined\r\n ),\r\n addToOrderTemplate:\r\n isAuthenticated && orderTemplates && product ? (\r\n \r\n ) : (\r\n undefined\r\n )\r\n };\r\n};\r\n\r\nexport const assembleCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: ICartLineItemsProps\r\n): ICartlinesViewProps[] | null => {\r\n const reactNodes: ICartlinesViewProps[] = [];\r\n\r\n cartlines.map((cartline, index) => {\r\n let product;\r\n if (props.isQuantityLimitsFeatureEnabled) {\r\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\r\n // to check productId and WarehouseId for identification.\r\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\r\n } else {\r\n product = getProductByProductId(cartline.ProductId, products);\r\n }\r\n let foundProductAvailability;\r\n\r\n // check if cartlineitem is pickup item\r\n const isPickUpItem = isCartLineItemPickUpType(\r\n cartline,\r\n props.retailMulitplePickupFeatureState,\r\n props.channelDeliveryOptionConfig,\r\n props.pickupDeliveryModeCode\r\n );\r\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\r\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\r\n return (\r\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\r\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\r\n );\r\n }\r\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\r\n });\r\n }\r\n\r\n let productPickUpOptions;\r\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\r\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n * @param props\r\n */\r\nexport const CartLineItems = (props: ICartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return assembleCartlines(cartlines, products, props);\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport groupBy from 'lodash/groupBy';\r\n\r\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\r\n\r\nconst _assembleGroupCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: ICartLineItemsProps\r\n): ICartlinesViewProps[][] | null => {\r\n const reactNodes: ICartlinesViewProps[][] = [];\r\n if (!products || products.length === 0) {\r\n props.context.telemetry.error('Products content is empty, module wont render');\r\n return null;\r\n }\r\n\r\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\r\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\r\n const groupDelivery = getGroupByDelivery(cartlines);\r\n const cartLinesGroup: CartLine[] = [];\r\n\r\n // 1) Group by store and pick up mode\r\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\r\n // @ts-expect-error\r\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\r\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\r\n });\r\n\r\n // 2) Create cartlines group\r\n Object.keys(cartLinesGroup).forEach(key => {\r\n const cartLines = cartLinesGroup[key];\r\n Object.keys(cartLines).forEach(index => {\r\n const cartLine = cartLines[index];\r\n const carLineViewProps = assembleCartlines(cartLine, products, props);\r\n if (carLineViewProps !== null) {\r\n reactNodes.push(carLineViewProps);\r\n }\r\n });\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\nconst _assembleGroupInvoiceCartlines = (\r\n cartLines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: ICartLineItemsProps\r\n): ICartlinesViewProps[][] | null => {\r\n const reactNodes: ICartlinesViewProps[][] = [];\r\n if (cartLines && cartLines.length > 0) {\r\n // Create invoice cartLines group\r\n const carLineViewProps = assembleCartlines(cartLines, products, props);\r\n if (carLineViewProps !== null) {\r\n reactNodes.push(carLineViewProps);\r\n }\r\n }\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLine Group component.\r\n * @param props\r\n */\r\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\r\n const { products, cartlines, hasInvoiceLine } = props;\r\n return hasInvoiceLine\r\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\r\n : _assembleGroupCartlines(cartlines, products, props);\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IPromotionData entity interface.\r\n */\r\nexport interface IPromotionData {\r\n promotionOptions?: CartPromotionLine[];\r\n}\r\n\r\n/**\r\n * Calls the Retail API and returns a promotion data.\r\n * @param ctx\r\n */\r\nexport async function getPromotionData(ctx: IActionContext): Promise {\r\n const promotionData: IPromotionData = {};\r\n\r\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\r\n .then(promotionOptions => {\r\n if (promotionOptions) {\r\n promotionData.promotionOptions = promotionOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n return {};\r\n });\r\n\r\n return promotionData;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n IAddToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n ILinesAddedToOrderTemplateDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n IWishlistActionSuccessResult,\r\n PromoCodeComponent,\r\n SaveCartToOrderTemplateComponent\r\n} from '@msdyn365-commerce/components';\r\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\r\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLineValidationResultsByLineId,\r\n AsyncResult,\r\n CartLine,\r\n LineValidationResult,\r\n ReleasedProductType,\r\n Cart as CartType,\r\n ProductDeliveryOptions,\r\n AttributeTextValue,\r\n FeatureState\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport {\r\n ActiveCartProductsInput,\r\n ArrayExtensions,\r\n getActiveCartProductsAction,\r\n GetCheckoutCartInput,\r\n ICartLineInventoryValidationResult,\r\n ObjectExtensions,\r\n validateCartLinesInventory,\r\n ProductPickUpOptionsForCartLineItems,\r\n validateCatalogId\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Alert,\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n INodeProps,\r\n IPayLoad,\r\n ITelemetryContent,\r\n TelemetryConstant,\r\n Waiting,\r\n updateMaxQuantityForCartLineItem,\r\n urlCheck\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\r\n\r\nimport { ICartData } from './cart.data';\r\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\r\nimport { CartLineGroupItems } from './components/cart-line-groups';\r\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\r\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\r\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\r\nimport { pushGoogleAnalyticsEvent } from '../../common/pushGoogleAnalyticsEvent';\r\nimport { createGoogleAnalyticsEvent } from '../../common/createGoogleAnalyticsEvent';\r\nimport { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { cartActions as sailthruCartActions } from '../../common/sailthru-integration/cartActions';\r\n\r\n/**\r\n * Cart view props interface.\r\n */\r\nexport interface ICartViewProps extends ICartProps {\r\n className: string;\r\n title?: React.ReactNode;\r\n CartlinesWrapper: INodeProps;\r\n cartlines?: ICartlinesViewProps[];\r\n cartLinesGroup?: ICartlinesViewProps[][];\r\n cart: ICartState | undefined;\r\n orderSummaryHeading: React.ReactNode;\r\n orderSummaryLineitems?: IOrderSummaryLines;\r\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\r\n OrderSummaryWrapper: INodeProps;\r\n OrderSummaryItems: INodeProps;\r\n OrderSummaryErrors?: IOrderSummaryErrors;\r\n checkoutAsGuestButton: React.ReactNode;\r\n checkoutAsSignInUserButton: React.ReactNode;\r\n storeSelector?: React.ReactNode;\r\n expressCheckoutButton?: React.ReactNode[];\r\n ExpressCheckoutSectionWrapper: INodeProps;\r\n backToShoppingButton: React.ReactNode;\r\n waitingComponent: React.ReactNode;\r\n promotionOptions?: ICartLineItemViewProps;\r\n promoCode: React.ReactNode;\r\n cartLoadingStatus: string;\r\n cartDataResult: boolean;\r\n multiplePickUpEnabled?: boolean;\r\n createTemplateFromCartButton: React.ReactNode;\r\n telemetryContent?: ITelemetryContent;\r\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\r\n}\r\n\r\n/**\r\n * Order summary errors interface.\r\n */\r\nexport interface IOrderSummaryErrors {\r\n Wrapper: INodeProps;\r\n header: React.ReactNode;\r\n errors: React.ReactNode[];\r\n}\r\n\r\n/**\r\n * Cart component state interface.\r\n */\r\ninterface ICartComponentState {\r\n showPromotionDialog: boolean;\r\n cartlinesErrors: CartLineValidationResultsByLineId;\r\n promotionData: IPromotionData;\r\n isCartValid: boolean;\r\n productPickUpOptions?: ProductDeliveryOptions[];\r\n}\r\n\r\n/**\r\n * Cart component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass Cart extends React.Component> {\r\n public state: ICartComponentState;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n private isQuantityLimitsFeatureEnabled: boolean = false;\r\n\r\n private _isMounted: boolean = false;\r\n\r\n private readonly promotionPopupId: string = 'cart-promotion-popup';\r\n\r\n public constructor(props: ICartProps) {\r\n super(props);\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\r\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\r\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\r\n\r\n this.state = {\r\n showPromotionDialog: false,\r\n promotionData: {},\r\n isCartValid: true,\r\n productPickUpOptions: undefined,\r\n cartlinesErrors: {}\r\n };\r\n }\r\n\r\n /**\r\n * Component did mount function.\r\n */\r\n public async componentDidMount(): Promise {\r\n this._isMounted = true;\r\n const {\r\n config,\r\n context: { actionContext }\r\n } = this.props;\r\n\r\n this.isQuantityLimitsFeatureEnabled =\r\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\r\n if (this.isQuantityLimitsFeatureEnabled) {\r\n await this.validateCart();\r\n }\r\n\r\n if (config.showAvailablePromotions) {\r\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\r\n this.setState({ promotionData: await getPromotionData(actionContext) });\r\n }\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n if (this._isMounted) {\r\n this.setState({ promotionData: await getPromotionData(actionContext) });\r\n }\r\n }\r\n );\r\n }\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n if (this._isMounted) {\r\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\r\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\r\n }\r\n }\r\n );\r\n\r\n if (this._isMounted && this.props.data.cart.result?.cart) {\r\n const payload = await createGoogleAnalyticsEvent(\r\n this.props.data.cart.result.cart,\r\n 'view_cart',\r\n this.props.context.actionContext\r\n );\r\n\r\n await pushGoogleAnalyticsEvent(payload, actionContext);\r\n\r\n await this.addOrUpdateSalesOrderAttributes(this.props.data.cart.result.cart);\r\n }\r\n }\r\n\r\n /**\r\n * Component will unmount function.\r\n */\r\n public componentWillUnmount(): void {\r\n this._isMounted = false;\r\n }\r\n\r\n /**\r\n * Should component update function.\r\n * @param nextProps - Next props.\r\n * @param nextState - Next state.\r\n * @returns True if component should update, false otherwise.\r\n */\r\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\r\n if (this.state === nextState && this.props.data === nextProps.data) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n /* eslint-disable complexity -- Disabling complexity for render method */\r\n public render(): JSX.Element | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n products: { result: products }\r\n },\r\n context: {\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n },\r\n resources\r\n } = this.props;\r\n\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\r\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\r\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\r\n const cartLines = this._getCartLines();\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n const validInventoryAcrossCartLines = validateCartLinesInventory(\r\n cart?.cart.CartLines ?? [],\r\n this.props.data.productAvailabilites.result ?? [],\r\n this.props.context.actionContext,\r\n products ?? [],\r\n emailDeliveryModeCode\r\n );\r\n\r\n const hasError =\r\n !validInventoryAcrossCartLines?.isValid ||\r\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\r\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\r\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n );\r\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\r\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\r\n const { featureState } = this.props.data;\r\n const isMultipleCatalogsFeatureEnabled =\r\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\r\n const currentCatalogId = getCatalogId(this.props.context.request);\r\n validateCatalogId(currentCatalogId);\r\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\r\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\r\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\r\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\r\n\r\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\r\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\r\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\r\n for (const cartLineGroup of cartLinesGroup) {\r\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\r\n }\r\n }\r\n\r\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\r\n }\r\n\r\n const viewProps = {\r\n ...this.props,\r\n className: classnames('ms-cart'),\r\n title:

{resources.cartTitle}

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

{resources.invoiceSummaryTitle}

\r\n ) : (\r\n

{resources.orderSummaryTitle}

\r\n )\r\n ) : null,\r\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\r\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\r\n checkoutAsSignInUserButton: !isCartEmpty ? (\r\n \r\n {resources.checkoutButtonTitle}\r\n \r\n ) : null,\r\n checkoutAsGuestButton:\r\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\r\n \r\n {resources.guestCheckoutButtonTitle}\r\n \r\n ) : null,\r\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\r\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\r\n backToShoppingButton: (\r\n \r\n {resources.backToShoppingButtonTitle}\r\n \r\n ),\r\n createTemplateFromCartButton:\r\n this._displayAddCartToTemplate() && products ? (\r\n \r\n ) : null,\r\n checkoutBlockedDueToUnavailableFunds: null,\r\n storeSelector:\r\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\r\n removeItemClickHandler: this.removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\r\n waitingComponent: ,\r\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\r\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\r\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\r\n telemetryContent: this.telemetryContent\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n /* eslint-enable complexity -- Disabling complexity for render method */\r\n\r\n /**\r\n * Promotion click event handler.\r\n * @param event - The mouse event.\r\n */\r\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\r\n this.setState({\r\n showPromotionDialog: !this.state.showPromotionDialog\r\n });\r\n };\r\n\r\n /**\r\n * Promotion close button click.\r\n */\r\n private readonly promotionCloseButtonclick = () => {\r\n this._hidePromotionDialog();\r\n };\r\n\r\n /**\r\n * Hide promotion dialog.\r\n */\r\n private _hidePromotionDialog(): void {\r\n this.setState({\r\n showPromotionDialog: false\r\n });\r\n }\r\n\r\n /**\r\n * Display add to cart template.\r\n * @returns True if should display, false otherwise.\r\n */\r\n private _displayAddCartToTemplate(): boolean {\r\n const cart = this.props.data.cart?.result;\r\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\r\n return false;\r\n }\r\n\r\n if (\r\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\r\n this.props.data.orderTemplates.result &&\r\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\r\n this.props.data.customerInformation.result\r\n ) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Get promotions.\r\n * @returns React node with the promotions.\r\n */\r\n private _getPromotions(): React.ReactNode {\r\n return (\r\n this.props.config.showAvailablePromotions &&\r\n cartPromotions({\r\n id: this.promotionPopupId,\r\n showPromotionPopup: this.state.showPromotionDialog,\r\n onSeeAllClick: this.promotionLinkClick,\r\n onCloseButtonClick: this.promotionCloseButtonclick,\r\n promotions: this.state.promotionData.promotionOptions,\r\n resources: {\r\n promotionStringHeading: this.props.resources.promotionStringHeading,\r\n promotionLinkText: this.props.resources.promotionLinkText,\r\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\r\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\r\n }\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Add error message in cart line in case the quantity exceeds the current inventory.\r\n * @param cartLines - The cart lines.\r\n * @param cartLineInventoryValidationResult - The cart line inventory result.\r\n */\r\n private _updateCartLineErrorForInvalidInventory(\r\n cartLines: ICartlinesViewProps[] | null,\r\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\r\n ) {\r\n const { resources } = this.props;\r\n\r\n if (\r\n ArrayExtensions.hasElements(cartLines) &&\r\n !cartLineInventoryValidationResult.isValid &&\r\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\r\n ) {\r\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\r\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\r\n if (cartLine) {\r\n cartLine.error = resources.outOfStockErrorMessage;\r\n cartLine.hasError = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get order summary errors.\r\n * @param cartLines - The cart lines.\r\n * @returns Order summary errors.\r\n */\r\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\r\n const allErrors =\r\n (cartLines &&\r\n cartLines\r\n .map(cartline => {\r\n // Check if the product is service or not by product type\r\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n if (!isServiceItem && cartline.error) {\r\n const fullError =\r\n cartline.data && cartline.data.product?.Name\r\n ? `${cartline.data.product.Name}: ${cartline.error}`\r\n : cartline.error;\r\n\r\n return (\r\n
\r\n {fullError}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n })\r\n .filter((line): line is JSX.Element => !!line)) ||\r\n [];\r\n\r\n return {\r\n Wrapper: {\r\n tag: Alert,\r\n className: 'msc-alert',\r\n isOpen: allErrors.length > 0,\r\n color: 'danger',\r\n assertive: true,\r\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\r\n },\r\n header: (\r\n \r\n ),\r\n errors: allErrors\r\n };\r\n }\r\n\r\n /**\r\n * Gets invoice summary line items.\r\n * @returns Invoice summary lines.\r\n */\r\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\r\n const {\r\n data: {\r\n cart: { result: cart }\r\n },\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n return cart?.hasInvoiceLine\r\n ? InvoiceSummary({\r\n orderTotalLabel: resources.totalAmountLabel,\r\n invoiceLabel: resources.invoiceLabel,\r\n cart: cart.cart,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n telemetry,\r\n id: this.props.id\r\n })\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Gets order summary line items.\r\n * @returns Order summary lines.\r\n */\r\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n channelDeliveryOptionConfig\r\n },\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const featureState = this.props?.data?.featureState;\r\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\r\n ?.IsEnabled;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\r\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\r\n\r\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\r\n ? OrderSummary({\r\n cart: cart!.cart,\r\n subTotalLabel: resources.itemsWithCountLabel,\r\n shippingLabel: resources.estimatedShippingLabel,\r\n otherChargeLabel: resources.otherCharges,\r\n taxLabel: resources.estimatedTaxLabel,\r\n orderTotalLabel: resources.orderTotal,\r\n totalDiscountsLabel: resources.totalDiscountsLabel,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n toBeCalculatedText: resources.yetToBeCalculatedText,\r\n freeText: resources.priceFree,\r\n channelConfiguration,\r\n retailMultiplePickUpOptionEnabled,\r\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\r\n telemetry,\r\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\r\n isShowTaxBreakup: isShowOrHideTaxEnabled\r\n })\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Gets promo code.\r\n * @returns React node with the promo code.\r\n */\r\n private _getPromoCode(): React.ReactNode {\r\n const {\r\n data: {\r\n cart: { result: cart }\r\n },\r\n resources\r\n } = this.props;\r\n\r\n return (\r\n cart && (\r\n \r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Generate add to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns IAddToOrderTemplateDialogResources.\r\n */\r\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText\r\n };\r\n }\r\n\r\n /**\r\n * Generate item added to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns IItemAddedToOrderTemplateDialogResources.\r\n */\r\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: resources.freePriceText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n }\r\n\r\n /**\r\n * Generate lines added to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns ILinesAddedToOrderTemplateDialogResources.\r\n */\r\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\r\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\r\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\r\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\r\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\r\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\r\n };\r\n }\r\n\r\n /**\r\n * Generate duplicate items when adding to order template dialog resources.\r\n * @param resources - The resources.\r\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\r\n */\r\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources: ICartResources\r\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\r\n };\r\n }\r\n\r\n /**\r\n * Generate order template name dialog resources.\r\n * @param resources - The resources.\r\n * @returns IOrderTemplateNameDialogResources.\r\n */\r\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n }\r\n\r\n /**\r\n * Gets the cart lines view props.\r\n * @returns ICartlinesViewProps [].\r\n */\r\n private _getCartLines(): ICartlinesViewProps[] | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n wishlists: { result: wishlists },\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources,\r\n modules\r\n } = this.props;\r\n\r\n const imageSettings = this.getImageSettings(config.imageSettings);\r\n\r\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n );\r\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\r\n\r\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\r\n const isMultipleCatalogsFeatureEnabled =\r\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\r\n false;\r\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\r\n ? CartLineItems({\r\n cartlines: cart!.cart.CartLines,\r\n storeSelectorModuleId: storeSelectorId,\r\n cartlinesErrors,\r\n products: this.props.data.products.result,\r\n productAvailabilites: this.props.data.productAvailabilites.result,\r\n productDeliveryOptions: this.props.data.deliveryOptions.result,\r\n catalogs: this.props.data.catalogs?.result,\r\n imageSettings,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\r\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n amountString: resources.productDimensionTypeAmount,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\r\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\r\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\r\n discountStringText: resources.discountStringText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n shippingChargesText: resources.shippingCharges,\r\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\r\n priceEditorResources: {\r\n ...resources\r\n }\r\n },\r\n telemetry,\r\n addToWishlistButtonText: resources.addToWishlistButtonText,\r\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\r\n removeButtonText: resources.removeCartButtonText,\r\n shipItText: resources.shipInsteadDisplayText,\r\n pickitUpText: resources.pickItUpDisplayText,\r\n changeStoreText: resources.changeStoreDisplayText,\r\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\r\n outOfStockText: resources.outOfStockErrorMessage,\r\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\r\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\r\n cartState: this.props.data.cart.result,\r\n orgUnitLocations: this.props.data.orgUnitLocations.result,\r\n removeItemClickHandler: this.removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\r\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\r\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\r\n wishlists,\r\n defaultWishlistName: resources.defaultWishlistName,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n includeErrors: config.showOutOfStockErrors,\r\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\r\n telemetryContent: this.telemetryContent,\r\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\r\n\r\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\r\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\r\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources\r\n ),\r\n\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\r\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\r\n orderTemplates,\r\n customerInformation,\r\n productAvailability: this.props.data.productAvailabilites,\r\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\r\n })\r\n : null;\r\n }\r\n\r\n /**\r\n * Gets the checkout URL.\r\n * @param isAuthenticated - Is authenticated flag.\r\n * @param guestCheckoutUrl - Guest checkout URL.\r\n * @param signInUrl -The sign in URL.\r\n * @returns The checkout URL.\r\n */\r\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\r\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\r\n }\r\n\r\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\r\n }\r\n\r\n /**\r\n * Gets the image settings.\r\n * @param imageSettings - Image settings.\r\n * @returns IImageSettings.\r\n */\r\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\r\n return (\r\n imageSettings || {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n }\r\n );\r\n };\r\n\r\n /**\r\n * Remove item from cart handler.\r\n * @param cartlineToRemove - The cart line to remove.\r\n */\r\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\r\n if (this.props.data.cart.result) {\r\n const input = {\r\n cartLineIds: [cartlineToRemove.LineId!.toString()]\r\n };\r\n this.props.data.cart.result\r\n .removeCartLines(input)\r\n .then(() => {\r\n this.validateCart().catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n\r\n sailthruCartActions.handleCartChange(this.props.context.actionContext).catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to upate sailthru');\r\n });\r\n })\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to Remove Cart Line');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Move to wish list handler.\r\n * @param result - The wish list action success result.\r\n * @param cartline - The cart line.\r\n */\r\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\r\n if (result.status === 'ADDED' && cartline) {\r\n this.removeItemFromCartHandler(cartline);\r\n }\r\n };\r\n\r\n /**\r\n * Updates the cart line quantity.\r\n * @param cartlineToUpdate - The cart line.\r\n * @param quantity - The quantity.\r\n * @param lineIndex - The line index.\r\n * @returns True if the cart line was updated, false otherwise.\r\n */\r\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\r\n cartLineQuantityUpdatedAsync(\r\n this.isQuantityLimitsFeatureEnabled,\r\n this.props.data.cart.result,\r\n this.props.telemetry,\r\n this.props.data.products.result,\r\n cartlineToUpdate,\r\n quantity\r\n )\r\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\r\n if (cartActionResult?.status === 'SUCCESS') {\r\n this.validateCart().catch(error => {\r\n this.props.telemetry.warning((error as Error).message);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n\r\n sailthruCartActions.handleCartChange(this.props.context.actionContext).catch(error => {\r\n this.props.telemetry.warning(error);\r\n this.props.telemetry.debug('Unable to upate sailthru');\r\n });\r\n\r\n return true;\r\n }\r\n\r\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\r\n // Show update line error message.\r\n const lineUpdateFailure: LineValidationResult = {\r\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\r\n ValidationFailures: [\r\n {\r\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\r\n ? cartActionResult.validationResults[0].ErrorContext\r\n : '',\r\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\r\n }\r\n ]\r\n };\r\n\r\n this.setState({\r\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\r\n });\r\n }\r\n\r\n return false;\r\n })\r\n .catch(() => {\r\n return false;\r\n });\r\n\r\n return false;\r\n };\r\n\r\n /**\r\n * Fulfillment store id is updated.\r\n */\r\n private readonly fulfillmentStoreIdUpdated = () => {\r\n if (this.isQuantityLimitsFeatureEnabled) {\r\n // Refresh products (in props.data) based on latest cart.\r\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\r\n .then(async () => this.validateCart())\r\n .catch((error: Error) => {\r\n this.props.telemetry.warning(error.message);\r\n this.props.telemetry.debug('Unable to validate Cart');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * Validates cart.\r\n * @returns Void promise.\r\n */\r\n private async validateCart(): Promise {\r\n if (!this.isQuantityLimitsFeatureEnabled) {\r\n this.setState({ isCartValid: true });\r\n return AsyncResult.resolve();\r\n }\r\n\r\n const {\r\n data: { cart },\r\n telemetry,\r\n context\r\n } = this.props;\r\n\r\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\r\n\r\n if (validationResults) {\r\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\r\n this.setState({\r\n cartlinesErrors: validationResults,\r\n isCartValid: isValid\r\n });\r\n } else {\r\n this.setState({ isCartValid: true });\r\n }\r\n\r\n return AsyncResult.resolve();\r\n }\r\n\r\n /**\r\n * Get order quantity limit feature flag.\r\n * @returns True if flag is enabled, false otherwise.\r\n */\r\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return false;\r\n }\r\n\r\n try {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n return false;\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get feature states');\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return true;\r\n }\r\n try {\r\n const customerInfo = await this.props.data.customerInformation;\r\n return (\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get customer info');\r\n return false;\r\n }\r\n }\r\n\r\n private async _isChannelLimitsFeatureEnabled(): Promise {\r\n const featureStatuses = await this.props.data.featureState;\r\n\r\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\r\n )?.IsEnabled;\r\n\r\n return isChannelLimitsFeatureEnabledInHq ?? false;\r\n }\r\n\r\n /**\r\n * Gets the cart lines group.\r\n * @returns ICartlinesViewProps [][].\r\n */\r\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\r\n const {\r\n data: {\r\n cart: { result: cart },\r\n wishlists: { result: wishlists },\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources,\r\n modules\r\n } = this.props;\r\n\r\n const imageSettings = this.getImageSettings(config.imageSettings);\r\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\r\n storeSelectorId = modules.storeSelector[0].id;\r\n }\r\n\r\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n );\r\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\r\n const { featureState } = this.props.data;\r\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\r\n const isMultipleCatalogsFeatureEnabled =\r\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\r\n return this.props.data.products &&\r\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\r\n cart &&\r\n cart.cart.CartLines &&\r\n cart.cart.CartLines.length > 0 &&\r\n this.props.data.channelDeliveryOptionConfig?.result\r\n ? CartLineGroupItems({\r\n cartlines: cart.cart.CartLines,\r\n storeSelectorModuleId: storeSelectorId,\r\n cartlinesErrors,\r\n products: this.props.data.products.result,\r\n productAvailabilites: this.props.data.productAvailabilites.result,\r\n productDeliveryOptions: this.props.data.deliveryOptions.result,\r\n catalogs: this.props.data.catalogs?.result,\r\n imageSettings,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n hasInvoiceLine: cart?.hasInvoiceLine || false,\r\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\r\n typeName: this.props.typeName,\r\n id: this.props.id,\r\n resources: {\r\n sizeString: resources.productDimensionTypeSize,\r\n colorString: resources.productDimensionTypeColor,\r\n configString: resources.productDimensionTypeConfiguration,\r\n styleString: resources.productDimensionTypeStyle,\r\n amountString: resources.productDimensionTypeAmount,\r\n quantityDisplayString: resources.quantityDisplayText,\r\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\r\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\r\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\r\n discountStringText: resources.discountStringText,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n shippingChargesText: resources.shippingCharges,\r\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\r\n priceEditorResources: {\r\n ...resources\r\n }\r\n },\r\n telemetry,\r\n addToWishlistButtonText: resources.addToWishlistButtonText,\r\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\r\n removeButtonText: resources.removeCartButtonText,\r\n shipItText: resources.shipInsteadDisplayText,\r\n pickitUpText: resources.pickItUpDisplayText,\r\n changeStoreText: resources.changeStoreDisplayText,\r\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\r\n outOfStockText: resources.outOfStockErrorMessage,\r\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\r\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\r\n cartState: this.props.data.cart.result,\r\n orgUnitLocations: this.props.data.orgUnitLocations.result,\r\n removeItemClickHandler: this.removeItemFromCartHandler,\r\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\r\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\r\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\r\n wishlists,\r\n defaultWishlistName: resources.defaultWishlistName,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n includeErrors: config.showOutOfStockErrors,\r\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\r\n telemetryContent: this.telemetryContent,\r\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\r\n\r\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\r\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\r\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\r\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\r\n resources\r\n ),\r\n\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\r\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\r\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\r\n orderTemplates,\r\n customerInformation,\r\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\r\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\r\n productAvailability: this.props.data.productAvailabilites,\r\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\r\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\r\n })\r\n : null;\r\n }\r\n\r\n // https://learn.microsoft.com/en-us/dynamics365/commerce/dev-itpro/order-attributes#extend-a-dynamics-365-commerce-e-commerce-site-to-set-values-for-order-attributes-in-the-cart\r\n private addOrUpdateSalesOrderAttributes = (cart: CartType) => {\r\n process.env.NODE_ENV === 'development' && console.log('Sailthru', 'addOrUpdateSalesOrderAttributes');\r\n const sailthruId =\r\n document.cookie\r\n .split(';')\r\n .find(row => row.trim().startsWith('sailthru_bid='))\r\n ?.split('=')[1] ?? '';\r\n\r\n let attributeObj = cart.AttributeValues?.find(a => a.Name === 'SailthruSessionId') as AttributeTextValue | undefined;\r\n if (!attributeObj) {\r\n if (!sailthruId) {\r\n return;\r\n }\r\n\r\n attributeObj = {\r\n // @ts-ignore\r\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue',\r\n Name: 'SailthruSessionId',\r\n ExtensionProperties: [],\r\n TextValueTranslations: []\r\n };\r\n\r\n let attributeArr = cart.AttributeValues;\r\n if (!attributeArr) {\r\n attributeArr = cart.AttributeValues = [];\r\n }\r\n\r\n attributeArr.push(attributeObj!);\r\n }\r\n\r\n attributeObj!.TextValue = sailthruId;\r\n\r\n return updateAsync({ callerContext: this.props.context.actionContext }, cart)\r\n .then(newCart => {\r\n process.env.NODE_ENV === 'development' && console.log('Sailthru', 'update BID', sailthruId);\r\n this.props.context.actionContext.update(new GetCheckoutCartInput(this.props.context.request.apiSettings), newCart);\r\n })\r\n .catch(error => {\r\n process.env.NODE_ENV === 'development' && console.error('Sailthru', error);\r\n });\r\n };\r\n}\r\n\r\nexport default Cart;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport interface ICartLineItemPromotion {\r\n id: string;\r\n showPromotionPopup: boolean;\r\n promotions: CartPromotionLine[] | undefined;\r\n resources: ICartLineItemPromotionResourceString;\r\n onSeeAllClick(event: React.MouseEvent): void;\r\n onCloseButtonClick(): void;\r\n}\r\n\r\nexport interface ICartLineItemViewProps {\r\n promotionMessageWrapper: INodeProps;\r\n promotionMessage: React.ReactNode;\r\n promotionSeeAllLink: React.ReactElement;\r\n promotionDialog: React.ReactNode;\r\n}\r\n\r\nexport interface ICartLineItemPromotionResourceString {\r\n promotionLinkText: string;\r\n promotionStringHeading: string;\r\n promotionPopupHeading: string;\r\n promotionCloseButtonAriaLabel: string;\r\n}\r\n\r\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\r\n const {\r\n id,\r\n showPromotionPopup,\r\n promotions,\r\n resources: { promotionLinkText, promotionPopupHeading },\r\n onCloseButtonClick,\r\n onSeeAllClick\r\n } = props;\r\n\r\n if (!ArrayExtensions.hasElements(promotions)) {\r\n return;\r\n }\r\n\r\n const titleId = `${id}_title`;\r\n const className = 'msc-cart__promotion';\r\n return {\r\n promotionMessageWrapper: {\r\n className: 'msc-cart__promotion'\r\n },\r\n promotionMessage: (\r\n <>\r\n \r\n {props.resources.promotionStringHeading}\r\n \r\n ),\r\n promotionSeeAllLink: (\r\n \r\n {` `}\r\n {promotionLinkText} {` `}\r\n \r\n ),\r\n promotionDialog: (\r\n \r\n \r\n
\r\n {promotionPopupHeading}\r\n
\r\n
\r\n \r\n
    \r\n {promotions.map(_promotion => {\r\n return (\r\n
  • \r\n {_promotion.Promotion?.OfferName} {` `}\r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n \r\n
\r\n )\r\n };\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\r\nimport { ICartlinesViewProps } from './components/cart-line-items';\r\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n cartEmptyText: string,\r\n CartlinesWrapper: INodeProps,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean\r\n): JSX.Element[] | JSX.Element => {\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map(cartLine => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {storeSelector && cartLine.pickUpInStore ? (\r\n {cartLine.pickUpInStore.defaultComponent}\r\n ) : null}\r\n {cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n {cartLine.addToOrderTemplate}\r\n \r\n ) : (\r\n <>\r\n {cartLine.remove}\r\n {cartLine.addToWishlist}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{cartEmptyText}

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

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

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

\r\n

{groupTitle}

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

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n renderCartLinesGroup(props)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources.emptyCartText,\r\n props.CartlinesWrapper,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\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 { IActionContext } from '@msdyn365-commerce/core';\r\nimport { getCartStateData, GetCartStateDataInput } from '@msdyn365-commerce/global-state';\r\nimport { ProductDimension } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getDimensionsForSelectedVariant,\r\n GetDimensionsForSelectedVariantInput,\r\n getPriceForSelectedVariant,\r\n getProductAvailabilitiesForSelectedVariant,\r\n getRatingsSummary,\r\n GetRatingsSummaryInput,\r\n getRnrEndpointId,\r\n getRnrPartnerId,\r\n getSelectedVariant,\r\n PriceForSelectedVariantInput,\r\n ProductAvailabilitiesForSelectedVariantInput,\r\n SelectedVariantInput\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IProductDetails } from '@msdyn365-commerce-modules/buybox';\r\n\r\n/**\r\n * Calls the Retail API and returns the product details.\r\n * @param productId\r\n * @param channelId\r\n * @param ctx\r\n * @param selectedDimensions - Dimensions previously selected for the product variant.\r\n */\r\nexport async function getProductDetails(\r\n productId: number,\r\n channelId: number,\r\n ctx: IActionContext,\r\n selectedDimensions?: ProductDimension[]\r\n): Promise {\r\n const productDetails: IProductDetails = {};\r\n\r\n if (productId > 0 && channelId > 0) {\r\n const tenantId = getRnrPartnerId(ctx);\r\n const serviceEndPoint = getRnrEndpointId(ctx);\r\n\r\n // Get Product Details\r\n await getSelectedVariant(new SelectedVariantInput(productId, channelId, selectedDimensions, 'get'), ctx)\r\n .then(async productResult => {\r\n if (productResult) {\r\n productDetails.product = productResult;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get Product Availability\r\n await getProductAvailabilitiesForSelectedVariant(new ProductAvailabilitiesForSelectedVariantInput(productId, channelId), ctx)\r\n .then(productAvailabilities => {\r\n if (productAvailabilities) {\r\n productDetails.productAvailableQuantity = productAvailabilities;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get Product Price\r\n await getPriceForSelectedVariant(new PriceForSelectedVariantInput(productId, channelId, undefined), ctx)\r\n .then(productPrice => {\r\n if (productPrice) {\r\n productDetails.productPrice = productPrice;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get product dimensions\r\n await getDimensionsForSelectedVariant(new GetDimensionsForSelectedVariantInput(productId, channelId, selectedDimensions), ctx)\r\n .then(productDimensions => {\r\n if (productDimensions) {\r\n productDetails.productDimensions = productDimensions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get Cart State\r\n await getCartStateData(new GetCartStateDataInput(ctx.requestContext.apiSettings), ctx)\r\n .then(cartState => {\r\n productDetails.cart = cartState;\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n\r\n // Get Product Ratings\r\n if (tenantId && serviceEndPoint) {\r\n await getRatingsSummary(new GetRatingsSummaryInput(productId.toString(), tenantId, serviceEndPoint), ctx)\r\n .then(ratingsSummaryData => {\r\n if (ratingsSummaryData) {\r\n productDetails.ratingsSummary = ratingsSummaryData;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n });\r\n }\r\n }\r\n\r\n return productDetails;\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 { IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nexport async function getValidProductImages(\r\n productId: number,\r\n channelId: number,\r\n actionContext: IActionContext,\r\n imageSettings: IImageSettings,\r\n selectedProduct?: SimpleProduct\r\n): Promise {\r\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct);\r\n\r\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\r\n .then(mediaLocations => {\r\n if (mediaLocations) {\r\n return Promise.all(mediaLocations.map(async mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings))).then(\r\n pairs => {\r\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\r\n }\r\n );\r\n }\r\n return [];\r\n })\r\n .catch(error => {\r\n actionContext.telemetry.exception(error);\r\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\r\n return [];\r\n });\r\n}\r\n\r\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation, imageSettings: IImageSettings): Promise<[IImageData, boolean]> {\r\n const imageData = {\r\n src: mediaLocation.Uri || '',\r\n altText: mediaLocation.AltText || ''\r\n };\r\n\r\n const imageSettingsVal = imageSettings.viewports.lg!.q!.replace(/[\"']+/g, '');\r\n\r\n if (imageData.src === '') {\r\n return [imageData, false];\r\n }\r\n\r\n const imageConcatVal = `${imageData.src}` + '&' + `${imageSettingsVal}`;\r\n\r\n return new Promise<[IImageData, boolean]>(resolve => {\r\n try {\r\n const http = new XMLHttpRequest();\r\n http.open('HEAD', imageConcatVal, true);\r\n\r\n http.addEventListener('load', () => {\r\n resolve([imageData, http.status === 200 || http.status === 201]);\r\n });\r\n\r\n http.addEventListener('error', () => {\r\n resolve([imageData, false]);\r\n });\r\n\r\n http.send();\r\n } catch {\r\n resolve([imageData, false]);\r\n }\r\n });\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/dist/types/modules/cart/components/cart-line-items-promotion';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n Node,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { IDictionary } from '@msdyn365-commerce/retail-proxy';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { pushGoogleAnalyticsEvent } from '../../../common/pushGoogleAnalyticsEvent';\r\nimport { CartGuide } from './components/CartGuide';\r\nimport { cartActions as sailthruCartActions } from '../../../common/sailthru-integration/cartActions';\r\n\r\nconst _removeItemFromCartHandler = async (\r\n actionContext: IActionContext,\r\n cartlinesToRemove: string[],\r\n cartState: ICartState,\r\n cartLines: ICartlinesViewProps\r\n) => {\r\n if (cartState) {\r\n const input = {\r\n cartLineIds: cartlinesToRemove\r\n };\r\n\r\n // Gather lines to be removed\r\n const lines = (cartState.cart.CartLines ?? []).filter(cl => cartlinesToRemove.indexOf(cl.LineId ?? '') >= 0);\r\n process.env.NODE_ENV === 'development' && console.log('GoogleAnalytics', '_removeItemFromCartHandler', cartLines, cartState.cart);\r\n\r\n await cartState.removeCartLines(input);\r\n\r\n await sailthruCartActions.handleCartChange(actionContext);\r\n\r\n const gaItems = lines.map((cl, i) => {\r\n const product = (cartLines.data?.cartline.LineId === cl.LineId && cartLines.data?.product) || null;\r\n const variant = product?.Dimensions?.map(d => d.DimensionValue?.Value).join(',');\r\n const brandFromExt = product?.ExtensionProperties?.find(p => p.Key === 'Brand')?.Value?.StringValue;\r\n const discount = (cl.DiscountLines ?? []).reduce((a, b) => a + (b.Amount ?? 0), 0);\r\n\r\n return {\r\n recId: product?.RecordId,\r\n item_id: product?.ProductNumber || product?.ItemId || cl.ItemId || '',\r\n item_name: product?.Name ?? '',\r\n index: i,\r\n item_variant: variant,\r\n price: (cl.Price ?? 0) - discount,\r\n discount: discount,\r\n pid: product?.ItemId || cl.ItemId || '',\r\n item_brand: brandFromExt ?? undefined,\r\n quantity: cl.Quantity ?? 0\r\n };\r\n });\r\n\r\n const totalValue = gaItems.reduce((a, b) => a + (b.price ?? 0) * b.quantity, 0);\r\n\r\n void pushGoogleAnalyticsEvent(\r\n {\r\n event: 'remove_from_cart',\r\n ecommerce: {\r\n currency: 'CAD',\r\n value: totalValue,\r\n items: gaItems\r\n }\r\n },\r\n actionContext\r\n );\r\n }\r\n};\r\n\r\nconst _renderCustomRemove = (\r\n actionContext: IActionContext,\r\n removeButtonText: string,\r\n attributes: IDictionary | undefined,\r\n cartLinesToRemove: string[],\r\n cartState: ICartState,\r\n cartLines: ICartlinesViewProps,\r\n gtmJson: string | null\r\n) => (\r\n _removeItemFromCartHandler(actionContext, cartLinesToRemove, cartState, cartLines)}\r\n title={removeButtonText}\r\n {...attributes}\r\n >\r\n {removeButtonText}\r\n {gtmJson && (\r\n \r\n )}\r\n \r\n);\r\n\r\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n {promotions.promotionSeeAllLink}\r\n {promotions.promotionDialog}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderCartlines = (\r\n actionContext: IActionContext,\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean,\r\n cartState: ICartState | undefined,\r\n telemetryContent: ITelemetryContent,\r\n mulitplePickUp?: boolean,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element[] | JSX.Element => {\r\n const { emptyCartText, removeCartButtonText: removeButtonText } = resources;\r\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, telemetryContent, removeButtonText, '');\r\n const attributes = getTelemetryAttributes(telemetryContent, payload);\r\n\r\n const getPairedCartLine = (cartLine: ICartlinesViewProps) => {\r\n const extensionProperties = cartState?.cart?.ExtensionProperties;\r\n const cartLinesToRemove: string[] = [cartLine.cartlineId!];\r\n if (extensionProperties && extensionProperties.length) {\r\n const prop = extensionProperties.find(ep => ep.Key === 'linked-' + cartLine.data?.product?.RecordId);\r\n if (prop && cartLines) {\r\n const strValue = prop.Value?.StringValue;\r\n if (strValue) {\r\n const linkedItemId = strValue.split('-')[1];\r\n const linkedCartLine = cartLines.find(cl => cl.data?.product?.RecordId.toString() === linkedItemId);\r\n if (linkedCartLine) {\r\n cartLinesToRemove.push(linkedCartLine.cartlineId!);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return cartLinesToRemove;\r\n };\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map((cartLine, index) => {\r\n // TODO: Upgrade GTM\r\n let product = cartLine.data?.product;\r\n let cartline = cartLine.data?.cartline;\r\n\r\n let gtmJson: string | null = null;\r\n if (product) {\r\n const productInfo = product;\r\n const gtmProduct = {\r\n name: productInfo.Name,\r\n id: productInfo.ItemId,\r\n price: cartline?.ExtendedPrice ?? productInfo.Price,\r\n quantity: cartline?.Quantity ?? 1\r\n };\r\n\r\n gtmJson = JSON.stringify(gtmProduct);\r\n }\r\n\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {mulitplePickUp ? null : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {mulitplePickUp ? (\r\n \r\n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartState &&\r\n _renderCustomRemove(\r\n actionContext,\r\n removeButtonText,\r\n attributes,\r\n getPairedCartLine(cartLine),\r\n cartState,\r\n cartLine,\r\n gtmJson\r\n )}\r\n \r\n ) : cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartState &&\r\n _renderCustomRemove(\r\n actionContext,\r\n removeButtonText,\r\n attributes,\r\n getPairedCartLine(cartLine),\r\n cartState,\r\n cartLine,\r\n gtmJson\r\n )}\r\n \r\n ) : (\r\n <>\r\n {cartLine.addToWishlist}\r\n {cartState &&\r\n _renderCustomRemove(\r\n actionContext,\r\n removeButtonText,\r\n attributes,\r\n getPairedCartLine(cartLine),\r\n cartState,\r\n cartLine,\r\n gtmJson\r\n )}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{emptyCartText}

\r\n {backToShoppingButton}\r\n
\r\n ) : (\r\n <>{waitingComponent}\r\n );\r\n};\r\n\r\n/**\r\n * On Toggle function.\r\n * @param cartLine -Cartline.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Set state of button.\r\n */\r\nconst onToggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * On change store function.\r\n * @param cartLine -CartLine items prop.\r\n * @returns Set state of button.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(true);\r\n};\r\n\r\nconst _renderBOPISBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const {\r\n shipInsteadDisplayText,\r\n shipToAddressDisplayText,\r\n pickItUpDisplayText,\r\n pickUpAtStoreWithLocationText,\r\n changeStoreDisplayText\r\n } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n
\r\n {isBopisSelected ? (\r\n {pickUpAtStoreWithLocationText}\r\n ) : (\r\n {shipToAddressDisplayText}\r\n )}\r\n
\r\n {isBopisSelected && (\r\n
\r\n {cartLine.pickUpInStore.orgUnitName}\r\n \r\n
\r\n )}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || errorData.errors.length === 0) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\nconst _renderOrderSummarylines = (\r\n orderSummaryLines: IOrderSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n return null;\r\n }\r\n return (\r\n \r\n {props.promoCode}\r\n {orderSummaryLines.subtotal}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\nconst _renderInvoiceSummarylines = (\r\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\nconst _renderCartLinesGroup = (props: ICartViewProps, resources: ICartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\r\n return (\r\n
\r\n {props.cartLinesGroup.map(cartlines => {\r\n return (\r\n
\r\n {_renderCartLinesGroupHeader(\r\n cartlines[0],\r\n props.storeSelector,\r\n resources,\r\n _countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n {_renderCartlines(\r\n props.context.actionContext,\r\n cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.data.cart.result,\r\n props.telemetryContent!,\r\n props.multiplePickUpEnabled,\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return props.cartDataResult ? (\r\n
\r\n
\r\n

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\nconst _renderCartLinesGroupHeader = (\r\n cartLine: ICartlinesViewProps,\r\n storeSelector: React.ReactNode | undefined,\r\n resources: ICartResources,\r\n count: number,\r\n emailDeliveryModeCode?: string\r\n) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n

{groupTitle}

\r\n {_renderCartLinesGroupTitle(cartLine, resources, count)}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst _renderGroupBOPISBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ? (\r\n \r\n ) : null}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity || 0);\r\n }, 0);\r\n return countItem;\r\n};\r\n\r\nconst _renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ? (\r\n

\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {', '}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n

\r\n ) : null}\r\n

\r\n ({count}\r\n {` `}\r\n {suffix})\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n _renderCartLinesGroup(props, props.resources)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.context.actionContext,\r\n props.cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.data.cart.result,\r\n props.telemetryContent!,\r\n props.multiplePickUpEnabled,\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n
\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\r\n {props.expressCheckoutButton}\r\n ) : null}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n \r\n
\r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nexport default CartView;\r\n","import React from 'react';\r\n\r\nconst CartGuide = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n Having trouble? Contact us!\r\n
\r\n
\r\n {\r\n const iframe = document.getElementById('launcher') as HTMLIFrameElement;\r\n\r\n try {\r\n iframe?.contentWindow?.document.querySelector('button')?.click();\r\n } catch (err) {\r\n console.error(err);\r\n }\r\n }}\r\n >\r\n Live Chat\r\n \r\n
\r\n
\r\n 1 844-976-1699\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Shipping Policy\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport { CartGuide };\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['cart'] = {\n c: () => require('partner/modules/cart/cart.tsx'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'cartLinesPickUpOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'customerBalances', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 0},{name:'productAvailabilites', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines', runOn: 0},{name:'products', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlistItems', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 1}],\n \n iNM: false,\n ns: '__local__',\n n: 'cart',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/cart'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|cart|cart'] = {\n c: () => require('partner/modules/cart/cart.view.tsx'),\n cn: '__local__-__local__-cart'\n };\nviewDictionary['__local__|__local__|themes|henrys|views|cart'] = {\n c: () => require('partner/themes/henrys/views/cart.view.tsx'),\n cn: '__local__-__local__-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart|cart'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart.view.js'),\n cn: '@msdyn365-commerce-modules-cart-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|cart'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/cart.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-cart'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|cart'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/cart.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-cart'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n if (window) {\n const currentWindowAPI = window.mapAPIReady;\n window.mapAPIReady = () => {\n if (currentWindowAPI) {\n currentWindowAPI();\n }\n this.isMapApiLoaded = true;\n };\n }\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

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

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

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

\n

{groupTitle}

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

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/dist/types/modules/cart/components/cart-line-items-promotion';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled ? (\n _renderCartLinesGroup(props, props.resources)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n mulitplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n const { emptyCartText } = resources;\n\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map((cartLine, index) => {\n return (\n
\n {cartLine.cartline}\n {mulitplePickUp ? null : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {mulitplePickUp ? (\n \n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : cartLine.addToOrderTemplate ? (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : (\n <>\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{emptyCartText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * On Toggle function.\n * @param cartLine -Cartline.\n * @param isBopisSelected -Boolean.\n * @returns Set state of button.\n */\nconst onToggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * On change store function.\n * @param cartLine -CartLine items prop.\n * @returns Set state of button.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(true);\n};\n\nconst _renderBOPISBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || errorData.errors.length === 0) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\nconst _renderCartLinesGroup = (props: ICartViewProps, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {_renderCartLinesGroupHeader(\n cartlines[0],\n props.storeSelector,\n resources,\n _countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\nconst _renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n storeSelector: React.ReactNode | undefined,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {_renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\nconst _renderGroupBOPISBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\nconst _countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity || 0);\n }, 0);\n return countItem;\n};\n\nconst _renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

\n ({count}\n {` `}\n {suffix})\n

\n
\n \n );\n};\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

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

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

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

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICartLineItemViewProps,\n ICartlinesViewProps,\n ICartResources,\n ICartViewProps,\n IOrderSummaryErrors\n} from '@msdyn365-commerce-modules/cart';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartProps as ICartExtensionProps } from '../definition-extensions/cart.ext.props.autogenerated';\n\n/**\n * Toggle Bopis Function.\n * @param cartLine -CartLine.\n * @param isBopisSelected -Boolean.\n * @returns Toggle Bopis.\n */\nconst toggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * Change Store Function.\n * @param cartLine -CartLine.\n * @returns Toggle Bopis.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore?.callbacks.toggleBopis(true);\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\n/**\n * Render Bopis block.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderGroupBopisBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - FLag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLine = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element => {\n if (cartLine.error === resources.outOfStockErrorMessage) {\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (isMultiplePickUp) {\n return (\n \n {renderGroupBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n if (cartLine.addToOrderTemplate) {\n return (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n }\n\n return (\n \n {cartLine.addToWishlist}\n {cartLine.remove}\n \n );\n};\n\n/**\n * Render Cart Lines.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlinesInternal = (\n cartLines: ICartlinesViewProps[],\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n return cartLines.map((cartLine, index) => {\n const itemIndex = index;\n return (\n
\n {cartLine.cartline}\n \n {isMultiplePickUp\n ? null\n : renderBopisBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {renderCartLine(cartLine, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n
\n );\n });\n};\n\n/**\n * Render Cart Lines.\n * @param props - The cart line props.\n * @param cartLines - The cart line view props.\n * @param resources - Module resource strings.\n * @param storeSelector - Store selector element.\n * @param waitingComponent - Waiting component element.\n * @param cartLoadingStatus - Cart loading status string.\n * @param isCartDataResult - Flag to check if there is cart data.\n * @param telemetryContent - The telemetry object.\n * @param isMultiplePickUp - Flag to check if there multiple pickups.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartlines = (\n props: ICartViewProps & ICartExtensionProps<{}>,\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n isCartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n isMultiplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n\n // Props.CartlinesWrapper is only required on cart lines and when multiple pickup mode is disabled. This is also required to handle the empty cart styling.\n // Else, empty cart multiple pickup mode is disabled falls under the other cart line wrapper which is creating issue with Empty cart scenario.\n if (cartLines) {\n return props.multiplePickUpEnabled ? (\n renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)\n ) : (\n \n {renderCartlinesInternal(cartLines, resources, storeSelector, telemetryContent, isMultiplePickUp, emailDeliveryModeCode)}\n \n );\n }\n\n return isCartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const itemCountOne: number = 1;\n const suffix = count > itemCountOne ? itemsLabel : itemLabel;\n const countTitle = `(${count} ${suffix})`;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

{countTitle}

\n
\n \n );\n};\n\n/**\n * Render Cart Lines group title.\n * @param cartLine - The cart line view props.\n * @param resources - Module resource strings.\n * @param count - Count of products.\n * @param emailDeliveryModeCode - The email delivery mode code.\n * @returns JSX Element.\n */\nconst renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\n/**\n * Returns count of products.\n * @param cartLine - The cart line view props.\n * @returns Number of products.\n */\nconst countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n const defaultItemCount = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity ?? defaultItemCount);\n }, defaultItemCount);\n return countItem;\n};\n\n/**\n * Render Cart Lines group.\n * @param props - The cart line view props.\n * @param resources - Module resource strings.\n * @returns JSX Element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps & ICartExtensionProps<{}>, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n cartlines[0],\n resources,\n countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {renderCartlines(\n props,\n cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
{props.slots.emptyCart}
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\n/**\n * Render error block.\n * @param errorData - Error component.\n * @returns JSX Element.\n */\nconst renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Render invoice summary.\n * @param invoiceSummaryLines - Invoice summary component.\n * @param orderSummaryItems - Order summary component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render order summary.\n * @param orderSummaryLines - Order summary component.\n * @param orderSummaryItems - Order summary items component.\n * @param props - The module props.\n * @returns JSX Element.\n */\nconst renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n orderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {orderSummaryLines.subtotal}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Render error block.\n * @param promotions - The module view props.\n * @returns JSX Element.\n */\nconst renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Render order summary checkout.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckout = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.cart?.hasInvoiceLine ? null : props.promoCode}\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n \n {props.createTemplateFromCartButton}\n \n );\n};\n\n/**\n * Render order summary checkout button.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst renderOrderSummaryCheckoutButton = (props: ICartViewProps): JSX.Element | undefined => {\n return (\n \n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n \n );\n};\n\n/**\n * Render cart view.\n * @param props - The module view props.\n * @returns JSX Element.\n */\nconst CartView: React.FC> = (props: ICartViewProps & ICartExtensionProps<{}>) => {\n const totalItemCountOne: number = 1;\n const updatedTitle = (\n

\n {props.resources.cartTitle}\n \n {` (${Number(props.cart?.totalItemsInCart)} ${props.cart?.totalItemsInCart !== totalItemCountOne ? 'items' : 'item'})`}\n \n

\n );\n return (\n
\n {props.checkoutBlockedDueToUnavailableFunds}\n {updatedTitle}\n
{props.orderSummaryLineitems?.orderTotal}
\n {renderOrderSummaryCheckoutButton(props)}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled\n ? renderCartLinesGroup(props, props.resources)\n : renderCartlines(\n props,\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n {props.orderSummaryHeading && (\n \n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {renderErrorBlock(props.OrderSummaryErrors)}\n \n {renderOrderSummaryCheckout(props)}\n \n )}\n {props.storeSelector}\n
\n );\n};\n\nexport default CartView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["GetCategoryPathsInput","constructor","context","categoryPathLooksups","getCacheKey","buildCacheKey","base","this","constructedCacheKey","apiSettings","locale","channelId","catalogId","getCacheObjectType","dataCacheType","getLocale","ChannelId","CatalogId","getCatalogId","forEach","categoryPath","ProductId","toString","createGoogleAnalyticsEvent","async","cart","eventName","actionContext","_actionContext$reques","requestContext","channel","RecordId","items","CartLines","i","cartLine","_product$Dimensions","_cartLine$DiscountLin","_product$ExtensionPro","_product$Name","_ref","_product$Price","_cartLine$Quantity","product","getProductDetails","variant","Dimensions","map","d","_d$DimensionValue","DimensionValue","Value","join","discount","DiscountLines","reduce","a","b","_b$Amount","Amount","brand","ExtensionProperties","find","ep","Key","StringValue","item","recId","item_id","ProductNumber","ItemId","item_name","Name","index","item_variant","price","Price","pid","item_brand","quantity","Quantity","push","event","ecommerce","currency","value","_b$price","pushGoogleAnalyticsEvent","payload","dataLayer","window","gaItem","_payload$ecommerce$it","_payload$ecommerce","categoryPaths","getCategoryPaths","_categoryPaths$0$Name","_categoryPaths$1$Name","_categoryPaths$2$Name","_categoryPaths$3$Name","_categoryPaths$4$Name","length","item_category","undefined","item_category2","item_category3","item_category4","item_category5","cartActions","handleCartChange","MsDyn365","isBrowser","Sailthru","sailthru","userEmail","ctx","user","emailAddress","_ctx$requestContext$c","baseImgUrl","baseImageUrl","getCartState","_cart$cart$CartLines","_productDetails","productDetails","getSelectedVariant","SelectedVariantInput","_productDetails$Name","_productDetails$Maste","_productDetails$Dimen","_productDetails$Produ","_ref2","_ref3","_productDetails$Produ2","_ref4","_productDetails$ItemI","_cartLine$Quantity2","title","Description","normalizedCanonicalUrl","createCanonicalUrl","MasterProductId","toLowerCase","dimParams","dim","_dim$DimensionValue","_dim$DimensionValue2","_dim$DimensionValue3","DimensionTypeValue","encodeURIComponent","filter","p","url","id","qty","images","full","ExtendedPrice","integration","email","incomplete","paths","page","_context$requestConte","canonicalDomain","sitePath","toSlug","s","text","replace","ProductPickUpOptionsForCartLineItems","getPickUpOptionsForCartLineItems","input","Error","products","getActiveCartProductsAction","ActiveCartProductsInput","response","ArrayExtensions","hasElements","Promise","resolve","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","createObservableDataAction","action","inputData","PickUpInStore","props","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","cartline","cartState","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","orgUnitLocation","deliveryMode","updateCartLinePickupLocation","cartLineId","LineId","location","then","result","status","locationChangedHandler","catch","error","_onLocationChangedCallback","DeliveryMode","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","foundLocation","OrgUnitName","DeliveryOptions","_props$channelDeliver","retailMulitplePickupFeatureState","channelDeliveryOptionConfig","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","deliveryOption","delivery","pickup","deliveryCode","Code","PickupDeliveryModeCodes","pickupDeliveryModeCode","option","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","React","className","type","name","onChange","checked","key","onClick","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","ContainerProps","_assembleNode","foundProductAvailability","productPickUpOptions","_product$Behavior","_foundProductAvailabi","_props$cartState","_context$request$chan","imageSettings","gridSettings","typeName","resources","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","isAuthenticated","request","nameOfWishlist","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","isQuantityLimitsFeatureEnabled","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","Behavior","MaximumQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","IsInvoiceLine","errorMessage","ObjectExtensions","isNullOrUndefined","_getErrorMessage","currentQuantity","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","ValidationFailures","validation","ErrorContext","onRemoveClickHandler","onRemoveClickFunction","getPayloadObject","TelemetryEvent","RemoveFromCart","telemetryContent","attributes","getTelemetryAttributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","isCustomPriceSelected","dimension","productUrl","getProductUrlSync","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","href","searchParams","set","getInvoiceDetailsPageUrlSync","data","cartlineId","hasError","StringExtensions","isNullOrEmpty","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","priceCurrency","Currency","pickUpInStore","pickitUpText","remove","Button","Object","assign","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","classnames","shouldShowButtonFailedTooltip","disableButton","app","config","disableTooltip","assembleCartlines","cartlines","reactNodes","getProductByProductIdAndWarehouse","WarehouseId","getProductByProductId","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","hasInvoiceLine","_assembleGroupInvoiceCartlines","cartLines","carLineViewProps","_assembleGroupCartlines","telemetry","getGroupByStorePickup","groupBy","groupDelivery","cartLinesGroup","entries","deliveryType","groupByDeliveryType","keys","getPromotionData","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","promotionOptions","exception","Cart","super","_isMounted","promotionPopupId","promotionLinkClick","setState","showPromotionDialog","state","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","validateCart","warning","debug","updateCartlineQuantity","cartlineToUpdate","cartLineQuantityUpdatedAsync","cartActionResult","message","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","getTelemetryObject","telemetryPageName","friendlyName","payLoad","bind","isCartValid","_this$props$data$cart","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","reaction","_this$props$data$cart2","_this$props$data$cart3","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_this$props$data$prod","_this$props$data$feat","_featureState$result","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","emailDeliveryModeCode","EmailDeliveryModeCode","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","RetailMultiplePickupFeatureState","featureState","multiplePickUpEnabled","IsEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","validateCatalogId","getCartLinesGroup","contentAction","etext","TelemetryConstant","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","viewProps","_objectSpread","cartTitle","CartlinesWrapper","OrderSummaryWrapper","OrderSummaryItems","promoCode","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","orderSummaryHeading","invoiceSummaryTitle","orderSummaryTitle","orderSummaryLineitems","_getOrderSummaryLineItems","invoiceSummaryLineitems","_getInvoiceSummaryLineItems","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","showGuestCheckoutButton","guestCheckoutButtonTitle","expressCheckoutButton","slots","paymentExpress","ExpressCheckoutSectionWrapper","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","storeSelector","waitingComponent","Waiting","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","isEmpty","OrderSummaryErrors","_getOrderSummaryErrors","renderView","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotions","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionMessageWrapper","promotionMessage","promotionStringHeading","promotionSeeAllLink","tabIndex","role","promotionDialog","Modal","isOpen","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","line","Wrapper","tag","Alert","color","assertive","outOfStockErrorMessageHeader","header","errors","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","_featureState$result2","_this$props$context$r2","channelConfiguration","retailMultiplePickUpOptionEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","orderTotal","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","originalPriceText","currentPriceText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$cata","PickupDeliveryModeCode","modules","storeSelectorId","CartLineItems","productDeliveryOptions","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","salesAgreementPricePrompt","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","origin","includes","AsyncResult","validateCartAsync","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find","featureStatuses","customerInfo","IsB2b","_featureStatuses$find2","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","__decorate","observer","_product$Behavior2","HasSerialNumber","ItemServiceTypeValue","sailthruCartActions","addOrUpdateSalesOrderAttributes","_document$cookie$spli","_document$cookie$spli2","_cart$AttributeValues","sailthruId","document","cookie","split","row","trim","startsWith","attributeObj","AttributeValues","TextValueTranslations","attributeArr","TextValue","updateAsync","newCart","update","GetCheckoutCartInput","_this$props$data$cart6","_renderCartlines","cartEmptyText","_cartLine$cartlineId","Node","renderCartLinesGroupHeader","pickUpText","shippingText","emailShippingText","titleSeparate","_cartLine$pickUpInSto4","groupTitle","renderCartLinesGroupTitle","_cartLine$pickUpInSto","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_props$cart","_props$cart2","errorData","renderModuleAttributes","_props$context$action","emailshippingText","emptyCartText","renderCartLinesGroup","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","_renderOrderSummarylines","orderSummaryLines","subtotal","shipping","otherCharge","tax","totalDiscounts","productId","selectedDimensions","tenantId","getRnrPartnerId","serviceEndPoint","getRnrEndpointId","productResult","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailabilities","productAvailableQuantity","getPriceForSelectedVariant","PriceForSelectedVariantInput","productPrice","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","productDimensions","getCartStateData","GetCartStateDataInput","getRatingsSummary","GetRatingsSummaryInput","ratingsSummaryData","ratingsSummary","getValidProductImages","selectedProduct","actionInput","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","mediaLocations","all","mediaLocation","imageData","src","Uri","altText","AltText","imageSettingsVal","imageConcatVal","http","XMLHttpRequest","open","addEventListener","send","_unused","validateMediaLocaionAsync","pairs","pair","_renderCustomRemove","cartLinesToRemove","gtmJson","cartlinesToRemove","_cartState$cart$CartL","lines","cl","_cl$LineId","indexOf","gaItems","_cartLines$data","_cartLines$data2","_cl$DiscountLines","_cl$Price","_cl$Quantity","brandFromExt","totalValue","_removeItemFromCartHandler","mulitplePickUp","getPairedCartLine","_cartState$cart","extensionProperties","prop","_cartLine$data","_prop$Value","strValue","linkedItemId","linkedCartLine","_cl$data","_cartLine$data2","_cartLine$data3","_cartline$ExtendedPri","_cartline$Quantity","productInfo","gtmProduct","JSON","stringify","_renderBOPISBlock","_renderGroupBOPISBlock","onToggleBopisHandler","onChangeStoreHandler","_cartLine$data4","shipToAddressDisplayText","pickUpAtStoreWithLocationText","PickupInStore","puckUpinStoreAttribute","_renderCartLinesGroupHeader","count","_renderCartLinesGroupTitle","_cartLine$data5","_countItems","countItem","_item$data","itemLabel","itemsLabel","suffix","_props$context$action3","_renderCartLinesGroup","_props$context$action2","style","display","flexDirection","CartGuide","iframe","getElementById","_iframe$contentWindow","contentWindow","querySelector","click","err","console","binding","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","path","runOn","iNM","ns","n","pdp","md","__bindings__","viewDictionary","cn","BaseStoreSelectorStateManager","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","isMapModuleLoaded","_readFromToCookie","storeInfo","parse","preferredStore","_context","storeId","selectedStoreLocationId","storeName","writeToCookie","arguments","StoreId","StoreName","Latitude","Longitude","_writeToCookie","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","localStorage","removeItem","setItem","cookieValue","getItem","computed","observable","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","query","encodeURI","geolocationApiUrl","requestUrl","script","createElement","setAttribute","resourceSets","point","coordinates","body","appendChild","_document","currentWindowAPI","mapAPIReady","isMapApiLoaded","lang","market","reject","_document2","_document3","defer","createStoreSelectorStateInput","GenericInput","getGenericActionDataAction","getGenericAction","_renderPromotions","_renderErrorBlock","payInvoicesDisplayText","InvoiceSummaryLine","label","cssLabel","PriceComponent","CustomerContextualPrice","_buildPaymentSummarySection","_computedLoyaltyAmount","checkoutState","loyaltyAmount","TotalAmount","invoiceLines","invoiceLine","InvoiceAmount","format","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","giftCardCounter","Balance","amount","Math","min","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","OrderSummaryLine","currencyCode","_buildOrderSummarySection","getDeliveryMode","_channelDeliveryOptio","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","customerAccountAmount","customerAccount","customerAccountLabel","toggleBopisHandler","renderCartLine","isMultiplePickUp","renderGroupBopisBlock","renderCartlinesInternal","itemIndex","renderBopisBlock","renderCartlines","isCartDataResult","emptyCart","_cartLine$pickUpInSto6","_cartLine$pickUpInSto5","countTitle","_props$cart3","_props$orderSummaryLi","_props$cart4","_props$cart5","_props$cart6","updatedTitle","Number","totalItemsInCart","renderOrderSummaryCheckoutButton","_item$data$cartline$Q","countItems","renderInvoiceSummarylines","orderSummaryItems","renderOrderSummarylines","renderOrderSummaryCheckout","module","exports","ReactDOM"],"sourceRoot":""}