{"version":3,"file":"static/js/24.44b961576931113b5c49.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-pick-up-in-store.tsx?3d58","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-line-items.tsx?080c","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-line-groups.tsx?3fd9","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/utils/get-promotion-in-dyn-cart.ts?4e49","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/dyn-cart.tsx?1f4a","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/components/dyn-cart-line-items-promotion.tsx?fe39","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/dyn-cart.view.tsx?1dc2","webpack://Msdyn365.Commerce.Online/./src/modules/dyn-cart/utilities/dyn-order-summary-lineitem.tsx?013f","webpack://Msdyn365.Commerce.Online/./src/themes/dyn-tebutheme/views/components/cartlineitem.component.tsx?bce6","webpack://Msdyn365.Commerce.Online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Msdyn365.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Msdyn365.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Msdyn365.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/helper.ts?b895","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://Msdyn365.Commerce.Online/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://Msdyn365.Commerce.Online/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.tsx?4ecb","webpack://Msdyn365.Commerce.Online/./src/modules/order-template/order-template.view.tsx?a45e"],"sourcesContent":["/*--------------------------------------------------------------\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\n/* eslint-disable no-duplicate-imports */\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\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 // 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 (\r\n !props.deliveryOptions ||\r\n !props.deliveryOptions.DeliveryOptions ||\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. All rights reserved.\r\n * See License.txt 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 IAddToOrderTemplateDialogResources,\r\n ICartlineResourceString,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateNameDialogResources,\r\n IWishlistActionSuccessResult\r\n} from '@msdyn365-commerce/components'; //CartLineItemComponent\r\nimport MsDyn365, { IAny, ICoreContext, IGeneric, IGridSettings, IImageSettings, ITelemetry, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n AsyncResult,\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n CommerceList,\r\n Customer,\r\n CartLineValidationResultsByLineId,\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 ObjectExtensions,\r\n OrderTemplate\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 './dyn-cart-pick-up-in-store';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\n// import { IComponentProps } from '@msdyn365-commerce/core';\r\n// import { SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { TebuCartLineItemComponent } from '../../../themes/dyn-tebutheme/views/components/cartlineitem.component';\r\n\r\nexport interface ProductWithAttributes {\r\n productDetails: SimpleProduct | undefined;\r\n productSpecificationData: AttributeValue[] | null;\r\n}\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 productsWithAttributes: ProductWithAttributes[] | 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 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\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 productSpecificationData: AttributeValue[] | null;\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): 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\r\n let foundProductAvailability;\r\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n if (props.shouldIgnoreWarehouse) {\r\n return productAvailability.ProductAvailableQuantity.ProductId === cartLine.ProductId;\r\n }\r\n return (\r\n productAvailability.ProductAvailableQuantity.ProductId === cartLine.ProductId &&\r\n productAvailability.InventLocationId === cartLine.WarehouseId\r\n );\r\n });\r\n if (foundProductAvailability === undefined) {\r\n return undefined;\r\n }\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 productSpecificationData: AttributeValue[] | null,\r\n props: ICartLineItemsProps,\r\n index: number,\r\n foundProductAvailability?: IProductInventoryInformation,\r\n foundProductDeliveryOptions?: 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 } = 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(availableQuantityInStock, cartline.Quantity!, props, shouldSkipStockCheck, cartline, cartline.LineId);\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 productUrl: string | undefined;\r\n if (product) {\r\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\r\n\r\n if (MsDyn365.isBrowser) {\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 return {\r\n data: {\r\n product,\r\n productSpecificationData,\r\n cartline\r\n },\r\n cartlineId: cartline.LineId,\r\n error: errorMessage,\r\n hasError: !shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false,\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: foundProductDeliveryOptions,\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 productsWithAttributes: ProductWithAttributes[] | undefined,\r\n props: ICartLineItemsProps\r\n): ICartlinesViewProps[] | null => {\r\n const reactNodes: ICartlinesViewProps[] = [];\r\n\r\n const products: SimpleProduct[] = [];\r\n productsWithAttributes?.forEach(p => {\r\n if (p.productDetails) {\r\n products.push(p.productDetails);\r\n }\r\n });\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 if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n if (props.shouldIgnoreWarehouse) {\r\n return productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId;\r\n }\r\n return (\r\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\r\n productAvailability.InventLocationId === cartline.WarehouseId\r\n );\r\n });\r\n }\r\n let foundProductDeliveryOption;\r\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\r\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\r\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\r\n });\r\n }\r\n\r\n const simpleProduct = product as SimpleProduct;\r\n const productSpecificationData: AttributeValue[] | null =\r\n productsWithAttributes?.find(p => p.productDetails?.RecordId === simpleProduct?.RecordId)?.productSpecificationData ?? null;\r\n\r\n reactNodes.push(\r\n _assembleNode(cartline, product, productSpecificationData, props, index, foundProductAvailability, foundProductDeliveryOption)\r\n );\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 { productsWithAttributes, cartlines } = props;\r\n return assembleCartlines(cartlines, productsWithAttributes, props);\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\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, ProductWithAttributes } from './dyn-cart-line-items'; //ProductWithAttributes\r\n\r\nconst _assembleGroupCartlines = (\r\n cartlines: CartLine[],\r\n //products: SimpleProduct[] | undefined,\r\n productsWithAttributes: ProductWithAttributes[] | undefined,\r\n props: ICartLineItemsProps\r\n): ICartlinesViewProps[][] | null => {\r\n const reactNodes: ICartlinesViewProps[][] = [];\r\n if (!productsWithAttributes || productsWithAttributes.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 products: SimpleProduct[] = [];\r\n productsWithAttributes?.forEach(p => {\r\n if (p.productDetails) {\r\n products.push(p.productDetails);\r\n }\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, productsWithAttributes, 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\n/**\r\n * CartLine Group component.\r\n * @param props\r\n */\r\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\r\n const { productsWithAttributes, cartlines } = props;\r\n return _assembleGroupCartlines(cartlines, productsWithAttributes, props);\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\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. All rights reserved.\r\n * See License.txt 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, { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n AsyncResult,\r\n CartLine,\r\n CartLineValidationResultsByLineId,\r\n LineValidationResult,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\n//import { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { IDynOrderSummaryLines, DynOrderSummary } from './utilities/dyn-order-summary-lineitem';\r\nimport {\r\n ActiveCartProductsInput,\r\n ArrayExtensions,\r\n getActiveCartProductsAction,\r\n ICartLineInventoryValidationResult,\r\n ObjectExtensions,\r\n validateCartLinesInventory\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} 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\n\r\nimport { IDynCartData } from './dyn-cart.data';\r\nimport { IDynCartProps, IDynCartResources } from './dyn-cart.props.autogenerated';\r\nimport { CartLineGroupItems } from './components/dyn-cart-line-groups';\r\nimport { CartLineItems, ICartlinesViewProps, ProductWithAttributes } from './components/dyn-cart-line-items';\r\nimport { cartPromotions, ICartLineItemViewProps } from './components/dyn-cart-line-items-promotion';\r\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-dyn-cart';\r\nimport { AttributesForSelectedVariantInput, getAttributesForSelectedVariant } from '@msdyn365-commerce-modules/product-specification';\r\n\r\n/**\r\n * Cart view props interface.\r\n */\r\nexport interface ICartViewProps extends IDynCartProps {\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?: IDynOrderSummaryLines;\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 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 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 products: SimpleProduct[];\r\n isCartValid: boolean;\r\n productsWithAttributes: ProductWithAttributes[];\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: IDynCartProps) {\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 products: [],\r\n isCartValid: true,\r\n cartlinesErrors: {},\r\n productsWithAttributes: []\r\n };\r\n }\r\n\r\n private _getProductAttribute = async (product: SimpleProduct, actionContext: any) => {\r\n const actionInput = new AttributesForSelectedVariantInput(\r\n product.RecordId,\r\n +actionContext.requestContext.apiSettings.channelId,\r\n product\r\n );\r\n\r\n return getAttributesForSelectedVariant(actionInput, this.props.context.actionContext).catch((error: Error) => {\r\n console.log(error);\r\n });\r\n };\r\n\r\n public ProductsWithAttributes: ProductWithAttributes[] = [];\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 //debugger;\r\n this.isQuantityLimitsFeatureEnabled = await this.getOrderQuantityLimitsFeatureFlag();\r\n if (this.isQuantityLimitsFeatureEnabled) {\r\n await this.validateCart();\r\n }\r\n try {\r\n const products = await this.props.data.products;\r\n for (let i = 0; i < products.length; i++) {\r\n if (products[i]) {\r\n let attributes = await this._getProductAttribute(products[i], actionContext);\r\n this.ProductsWithAttributes.push({\r\n productDetails: products[i],\r\n productSpecificationData: attributes ?? attributes !== undefined ? attributes : null\r\n });\r\n }\r\n }\r\n\r\n if (this._isMounted) {\r\n this.setState({ products });\r\n }\r\n } catch (error) {\r\n this.props.telemetry.warning(error as string);\r\n this.props.telemetry.debug('Unable to get cart');\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 }\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: IDynCartProps, 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 = !cart?.hasInvoiceLine && RetailMultiplePickupFeatureState?.IsEnabled;\r\n const cartLinesGroup = 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 ? (\r\n \r\n {resources.guestCheckoutButtonTitle}\r\n \r\n ) : null,\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 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 const RetailB2BEcommerceFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailB2BEcommerceFeature'\r\n );\r\n if (\r\n RetailB2BEcommerceFeatureState?.IsEnabled &&\r\n this.props.data.customerInformation.result?.IsB2b &&\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(): IDynOrderSummaryLines | 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\r\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\r\n ? DynOrderSummary({\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 })\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: IDynCartResources): 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: IDynCartResources): 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: IDynCartResources): 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: IDynCartResources\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: IDynCartResources): 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 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 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.state.products,\r\n productsWithAttributes: this.ProductsWithAttributes,\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: 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 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 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 })\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 absoluteUrlRegExp = new RegExp('^(?:[a-z]+:)?//', 'i');\r\n const isAbsoluteUrl = absoluteUrlRegExp.test(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 dyn-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 .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.state.products,\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 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 getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\r\n .then(products => {\r\n this.setState({ products });\r\n })\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 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(\r\n //this.isQuantityLimitsFeatureEnabled,\r\n cart,\r\n telemetry,\r\n context,\r\n true\r\n );\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 /**\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 return this.props.data.products &&\r\n 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 productsWithAttributes: this.ProductsWithAttributes,\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: this.props.context.app.config.maxQuantityForCartLineItem,\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 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 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 })\r\n : null;\r\n }\r\n}\r\n\r\nexport default Cart;\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\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. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart'; //ICartResources, ICartViewProps, ICartlinesViewProps\r\nimport { ICartlinesViewProps } from './components/dyn-cart-line-items';\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\n//import { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport { IDynOrderSummaryLines } from './utilities/dyn-order-summary-lineitem';\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\nimport { ICartViewProps } from './dyn-cart';\r\nimport { IDynCartResources } from './dyn-cart.props.autogenerated';\r\n\r\n//import MsDyn365, { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nconst guestCheckoutUrl = '/checkout'; //getUrlSync('checkout', this.props.context.actionContext) || '';\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.backToShoppingButton}\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.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.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 {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 {_renderQutotationButton(guestCheckoutUrl)}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\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 cartLines: ICartlinesViewProps[] | undefined,\r\n resources: IDynCartResources,\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 telemetryContent?: ITelemetryContent,\r\n mulitplePickUp?: boolean,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element[] | JSX.Element => {\r\n const { emptyCartText } = resources;\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 return (\r\n
\r\n
\r\n
\r\n {cartLine.cartline}\r\n {mulitplePickUp\r\n ? null\r\n : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n
\r\n
{cartLine.remove}
\r\n
\r\n {mulitplePickUp ? (\r\n \r\n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {/* {cartLine.addToOrderTemplate} */}\r\n {cartLine.addToWishlist}\r\n \r\n ) : cartLine.addToOrderTemplate ? (\r\n \r\n
\r\n {/* {cartLine.addToOrderTemplate} */}\r\n {cartLine.addToWishlist}\r\n
\r\n
\r\n ) : (\r\n <>{cartLine.addToWishlist}\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: IDynCartResources,\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: IDynOrderSummaryLines | 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.netTotal}\r\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\r\n {orderSummaryLines.subtotal}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\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: IDynCartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\r\n return (\r\n
\r\n {props.cartLinesGroup?.map((cartlines, key) => {\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 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.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: IDynCartResources,\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: IDynCartResources,\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: IDynCartResources, 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} {suffix})\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\nconst _renderQutotationButton = (url: string) => {\r\n return (\r\n \r\n \r\n Web quotation\r\n \r\n \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 { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\r\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\n\r\nexport interface IOrderSummaryProps {\r\n subTotalLabel: string;\r\n shippingLabel: string;\r\n taxLabel: string;\r\n orderTotalLabel: string;\r\n loyaltyLabel?: string;\r\n giftcardLabel?: string;\r\n totalDiscountsLabel: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n id: string;\r\n typeName: string;\r\n otherChargeLabel?: string;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n checkoutState?: ICheckoutState;\r\n retailMultiplePickUpOptionEnabled?: boolean;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n isTaxIncludedInPrice?: boolean;\r\n isShowTaxBreakup?: boolean;\r\n}\r\n\r\nexport interface IDynOrderSummaryLines {\r\n netTotal: React.ReactNode;\r\n subtotal: React.ReactNode;\r\n shipping?: React.ReactNode;\r\n otherCharge?: React.ReactNode;\r\n tax: React.ReactNode;\r\n orderTotal: React.ReactNode;\r\n totalDiscounts?: React.ReactNode;\r\n giftCard?: React.ReactNode;\r\n loyalty?: React.ReactNode;\r\n}\r\n\r\ninterface IOrderSummaryLineProps {\r\n label: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n price?: number;\r\n freeText?: string;\r\n toBeCalculatedText?: string;\r\n id: string;\r\n typeName: string;\r\n cssLabel: string;\r\n}\r\n\r\ninterface IShippingOrderLine {\r\n cart: Cart;\r\n channelConfiguration: ChannelConfiguration;\r\n canShip?: boolean;\r\n hasDeliveryMethod?: boolean;\r\n hasShippingMethod?: boolean;\r\n freightFee?: number;\r\n}\r\n\r\nconst OrderSummaryLine: React.FC = ({\r\n price,\r\n label,\r\n context,\r\n id,\r\n typeName,\r\n toBeCalculatedText,\r\n freeText,\r\n cssLabel\r\n}) => {\r\n return (\r\n

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

\r\n );\r\n};\r\n\r\nconst _buildOrderSummarySection = (\r\n props: IOrderSummaryProps,\r\n price: number | undefined,\r\n cssLabel: string,\r\n label: string = ''\r\n): React.ReactNode => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\r\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\r\n};\r\n\r\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\r\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\r\n return count + (giftCard.Balance || 0);\r\n };\r\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\r\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\r\n return Math.min(giftCardTotalValue, amount);\r\n};\r\n\r\nconst getDeliveryConfiguration = (\r\n cart: Cart,\r\n channelConfiguration: ChannelConfiguration,\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\r\n retailMultiplePickUpOptionEnabled?: boolean,\r\n isTaxIncludedInPrice?: boolean,\r\n isShowTaxBreakup?: boolean\r\n): IShippingOrderLine => {\r\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\r\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\r\n const cartLines = cart.CartLines || [];\r\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\r\n //const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\r\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\r\n\r\n const freightFee = shippingChargeAmount; //isTaxIncludedInPrice && isShowTaxBreakup ? cart.ShippingChargeAmount : shippingChargeAmount + taxOnShippingCharge;\r\n\r\n const canShip = deliveryModes.some(\r\n deliveryMode =>\r\n !(\r\n deliveryMode !== '' &&\r\n (deliveryMode ===\r\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\r\n deliveryMode === emailDeliveryModeCode)\r\n )\r\n );\r\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\r\n const hasShippingMethod = deliveryModes.some(\r\n deliveryMode =>\r\n !!deliveryMode &&\r\n deliveryMode !==\r\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\r\n deliveryMode !== emailDeliveryModeCode\r\n );\r\n return {\r\n canShip,\r\n hasDeliveryMethod,\r\n hasShippingMethod,\r\n freightFee\r\n } as IShippingOrderLine;\r\n};\r\n\r\nconst getDeliveryMode = (\r\n deliveryMode?: string,\r\n featureSate: boolean = false,\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\r\n pickupDeliveryMode?: string\r\n) => {\r\n if (!featureSate) {\r\n return pickupDeliveryMode;\r\n }\r\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\r\n};\r\n\r\nexport const DynOrderSummary = (props: IOrderSummaryProps) => {\r\n const {\r\n NetPrice, // Total w/o discounts and w/o VAT\r\n SubtotalAmount, // Subtotal Amount with discounts and w/o VAT\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\r\n SubtotalAmountWithoutTax,\r\n TaxAmount,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\r\n TaxOnNonShippingCharges,\r\n DiscountAmountWithoutTax = 0,\r\n TotalAmount,\r\n OtherChargeAmount\r\n } = props.cart;\r\n\r\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\r\n props.cart,\r\n props.channelConfiguration,\r\n props.channelDeliveryOptionConfig,\r\n props.retailMultiplePickUpOptionEnabled,\r\n props.isTaxIncludedInPrice,\r\n props.isShowTaxBreakup\r\n );\r\n\r\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\r\n const otherShippingChargeAmount = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\r\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\r\n\r\n const otherChargeAmountTotal =\r\n props.isTaxIncludedInPrice && props.isShowTaxBreakup ? otherChargeAmount : otherChargeAmount + otherShippingChargeAmount;\r\n\r\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\r\n\r\n const reactNodes: IDynOrderSummaryLines = {\r\n netTotal: _buildOrderSummarySection(props, NetPrice, 'net-total', 'Initial Amount'), //// Total w/o discounts and w/o discounts\r\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\r\n // tax: props.isShowTaxBreakup\r\n // ? _buildOrderSummarySection(\r\n // props,\r\n // hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\r\n // 'tax-amount',\r\n // props.taxLabel\r\n // )\r\n // : '',\r\n tax: _buildOrderSummarySection(\r\n props,\r\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\r\n 'tax-amount',\r\n props.taxLabel\r\n ),\r\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\r\n otherCharge:\r\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\r\n undefined\r\n };\r\n\r\n if (canShip) {\r\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\r\n }\r\n if (props.checkoutState) {\r\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\r\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\r\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\r\n\r\n if (loyaltyAmount > 0) {\r\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\r\n }\r\n\r\n if (giftCardAmount > 0) {\r\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\r\n }\r\n\r\n reactNodes.orderTotal = _buildOrderSummarySection(\r\n { ...props, freeText: undefined },\r\n totalAmountAfterGiftCard,\r\n 'total',\r\n props.orderTotalLabel\r\n );\r\n }\r\n\r\n if (DiscountAmountWithoutTax > 0) {\r\n reactNodes.totalDiscounts = _buildOrderSummarySection(\r\n props,\r\n -DiscountAmountWithoutTax,\r\n 'total-discounts',\r\n props.totalDiscountsLabel\r\n );\r\n }\r\n\r\n return reactNodes;\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\n/* eslint-disable no-duplicate-imports */\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, msdyn365Commerce } from '@msdyn365-commerce/core'; //Image\r\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine, DiscountLine, DiscountLineType, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n//import { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions'; //getFallbackImageUrl\r\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ICartLinePriceEditorResources } from '@msdyn365-commerce/components';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs.\r\n */\r\nexport interface ICartlineResourceString {\r\n /**\r\n * Display string for discount label.\r\n */\r\n discountStringText: string;\r\n\r\n /**\r\n * String for size key.\r\n */\r\n sizeString: string;\r\n\r\n /**\r\n * String for color key.\r\n */\r\n colorString: string;\r\n\r\n /**\r\n * String associated with the configuration product dimension.\r\n */\r\n configString: string;\r\n\r\n /**\r\n * String for style key.\r\n */\r\n styleString: string;\r\n\r\n /**\r\n * String for amount key.\r\n */\r\n amountString?: string;\r\n\r\n /**\r\n * Display string for quantity label.\r\n */\r\n quantityDisplayString: string;\r\n\r\n /**\r\n * Display string for quantity label.\r\n */\r\n inputQuantityAriaLabel: string;\r\n\r\n /**\r\n * Aria label for the decrement button in quantity component.\r\n */\r\n decrementButtonAriaLabel?: string;\r\n\r\n /**\r\n * Aria label for the increment button in quantity component.\r\n */\r\n incrementButtonAriaLabel?: string;\r\n\r\n /**\r\n * Original text screen reader.\r\n */\r\n originalPriceText: string;\r\n\r\n /**\r\n * Current text screen reader.\r\n */\r\n currentPriceText: string;\r\n\r\n /**\r\n * Shipping Charges Text.\r\n */\r\n shippingChargesText: string;\r\n\r\n priceEditorResources?: ICartLinePriceEditorResources;\r\n}\r\n\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product?: SimpleProduct;\r\n productSpecificationData?: AttributeValue[] | null;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem.\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n /** The flag to change the quantity component from interactible to static */\r\n disableQuantityInteractivity?: boolean;\r\n\r\n /** The primary image url */\r\n primaryImageUrl?: string;\r\n\r\n /** The product url */\r\n productUrl?: string;\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\r\n /** Boolean flag to indicate if the item is out of stock */\r\n isOutOfStock?: boolean;\r\n\r\n /** Flag to make quantity section editable */\r\n isQuantityEditable?: boolean;\r\n\r\n /** Max quantity for line item */\r\n maxQuantity?: number;\r\n\r\n /** Current quantity for line item */\r\n currentQuantity?: number;\r\n\r\n /** Resource string for the component */\r\n resources: ICartlineResourceString;\r\n\r\n /** SalesLine flag */\r\n isSalesLine?: boolean;\r\n\r\n /** Error message to show in place of quantity */\r\n errorMessage?: string;\r\n\r\n /** Inventory information label */\r\n inventoryInformationLabel?: string;\r\n\r\n /** Inventory information class name */\r\n inventoryLabelClassName?: string;\r\n\r\n /** Flag to show/hide shipping charges for line items */\r\n showShippingChargesForLineItems?: boolean;\r\n\r\n /** Boolean flag to indicate if cart state status is ready */\r\n isCartStateReady?: boolean;\r\n\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n /**\r\n * The cart line index.\r\n */\r\n lineIndex?: number;\r\n\r\n /** Quantity onChange callback */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): boolean;\r\n}\r\n\r\ninterface IDimensionStrings {\r\n /** String for size key */\r\n sizeString: string;\r\n\r\n /** String for color key */\r\n colorString: string;\r\n\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n\r\n /** String for style key */\r\n styleString: string;\r\n\r\n /** String for amount key */\r\n amountString?: string;\r\n}\r\n\r\nconst CartLineItemFunctions = {\r\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\r\n if (!Product || !Product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return Product.Dimensions.map(productDimension => {\r\n if (productDimension.DimensionTypeValue === 1) {\r\n return (\r\n
\r\n \r\n {DimensionStrings.colorString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 2) {\r\n return (\r\n
\r\n \r\n {DimensionStrings.configString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 3) {\r\n return (\r\n
\r\n \r\n {DimensionStrings.sizeString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n \r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 4) {\r\n return (\r\n
\r\n \r\n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n \r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\r\n return null;\r\n }\r\n\r\n /**\r\n * Get the updated discount percentage.\r\n * @param discountLine - The discount line.\r\n * @param cartLine - The cart line.\r\n * @returns The updated discount percentage.\r\n */\r\n const discountPercent = (discountLine: DiscountLine, cartLine: CartLine): number => {\r\n const numberZero = 0;\r\n const decimalPrecision = 2;\r\n const fullPercentage = 100;\r\n let updatedPercent: number = discountLine.Percentage ?? numberZero;\r\n\r\n if (\r\n (discountLine.Percentage === numberZero ||\r\n (discountLine.DiscountLineTypeValue && discountLine.DiscountLineTypeValue === DiscountLineType.TenderTypeDiscount)) &&\r\n cartLine.Price &&\r\n cartLine.Price > numberZero &&\r\n cartLine.Quantity &&\r\n cartLine.Quantity !== numberZero\r\n ) {\r\n const effectiveAmount = discountLine.EffectiveAmount ?? numberZero;\r\n updatedPercent = Number(\r\n ((effectiveAmount / (cartLine.Price * cartLine.Quantity)) * fullPercentage).toFixed(decimalPrecision)\r\n );\r\n }\r\n\r\n return updatedPercent;\r\n };\r\n\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {` ${\r\n discountLine.Percentage !== undefined ? discountPercent(discountLine, props.data.cartLine) : ''\r\n }% discount : savings `}\r\n \r\n {/* \r\n { {discountLine.OfferName ? discountLine.OfferName : ''} }\r\n :\r\n { {` ${props.resources.discountStringText || 'Discount'} `} }\r\n */}\r\n \r\n \r\n \r\n
\r\n );\r\n });\r\n },\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n if (!props.inventoryInformationLabel) {\r\n return null;\r\n }\r\n const inventoryCssName = props.inventoryLabelClassName\r\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\r\n : 'msc-cart-line__product-inventory-label';\r\n return {props.inventoryInformationLabel};\r\n },\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @param props - Icartline props.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n renderUnitOfMeasure: (props: ICartLineProps) => {\r\n if (props.data.cartLine.IsInvoiceLine) {\r\n return null;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\r\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\r\n return undefined;\r\n }\r\n\r\n const product = props.data.product;\r\n if (!product || !product.DefaultUnitOfMeasure) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n
\r\n {product.DefaultUnitOfMeasure}\r\n
\r\n );\r\n },\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if (channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!(\r\n cartline.DeliveryMode &&\r\n channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\r\n );\r\n } else {\r\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (shippingChargeLines.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\r\n }, 0);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n {priceComponent}\r\n \r\n );\r\n },\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\r\n\r\n return (\r\n (otherCharges &&\r\n otherCharges.map((otherCharge, key) => {\r\n return otherCharge && otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : (\r\n ''\r\n );\r\n })) ||\r\n undefined\r\n );\r\n }\r\n};\r\n\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { product, productSpecificationData, cartLine } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n\r\n //const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n //const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const imageSettings = props.imageSettings;\r\n if (imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\r\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\r\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const prodAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n const productName = product?.Name || cartLine.Description;\r\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\r\n\r\n let externalItemID = '';\r\n if (productSpecificationData) {\r\n externalItemID =\r\n productSpecificationData\r\n .find(attribute => attribute.Name === 'External Item Id' || attribute.Name === 'ERP_ExternalItemID')\r\n ?.TextValue?.toString() ??\r\n productSpecificationData.find(attribute => attribute.Name === 'Catalog Number')?.TextValue?.toString() ??\r\n '';\r\n }\r\n\r\n // let sizeDescription = '';\r\n // if (productSpecificationData) {\r\n // sizeDescription = productSpecificationData.find(attribute => attribute.Name === 'Description')?.TextValue?.toString() ?? '';\r\n // }\r\n const sizeDescription = product?.Description;\r\n\r\n const onChange = (newValue: number): boolean => {\r\n if (props.quantityOnChange) {\r\n return props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n return true;\r\n };\r\n\r\n const _generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n {props.errorMessage}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n if (props.isOutOfStock) {\r\n const errorMessage = _generateErrorMessage();\r\n\r\n if (errorMessage) {\r\n return [errorMessage];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\r\n <>\r\n \r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n \r\n \r\n )) ||\r\n null}\r\n
\r\n );\r\n\r\n // No quantity selector for invoice line\r\n if (!props.data.cartLine.IsInvoiceLine) {\r\n if (props.data.product && props.isQuantityEditable) {\r\n nodes.push(\r\n
\r\n
{resources.quantityDisplayString}
\r\n\r\n {_generateErrorMessage()}\r\n\r\n \r\n
\r\n );\r\n } else {\r\n nodes.push(\r\n
\r\n \r\n\r\n {_generateErrorMessage()}\r\n\r\n {props.data.cartLine.Quantity}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return nodes;\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n {/* */}\r\n
\r\n
\r\n
\r\n \r\n {productName}\r\n \r\n
\r\n {externalItemID ? Ref : : ''}\r\n {externalItemID}\r\n
\r\n {/* {ArrayExtensions.hasElements(productDimensions) ? (\r\n
{productDimensions}
\r\n ) : (\r\n ''\r\n )} */}\r\n
\r\n \r\n {sizeDescription ? (\r\n <>\r\n {destructDimensionStrings.sizeString}:{sizeDescription}\r\n \r\n ) : (\r\n ''\r\n )}\r\n \r\n
\r\n {renderUnitOfMeasure}\r\n
\r\n \r\n
\r\n {renderDisountLines}\r\n {renderInventoryLabel}\r\n {props.showShippingChargesForLineItems &&
{renderShippingLabel}
}\r\n {renderOtherCharges}\r\n
\r\n
{_generateQuantityandPrice()}
\r\n
\r\n
\r\n );\r\n};\r\n\r\n// @ts-expect-error\r\nexport const TebuCartLineItemComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'CartLineItem',\r\n { component: CartLine, ...CartLineItemFunctions }\r\n);\r\n\r\nexport default CartLine;\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 { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

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

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n this.setState({\n cartlinesErrors: {}\n });\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport 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 { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\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 { 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 { 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 { IImageData, IRequestContext, IVideoData } from '@msdyn365-commerce/core';\n\nexport enum MediaType {\n /**\n * The None.\n */\n None = 0,\n /**\n * The Image type.\n */\n Image = 1,\n /**\n * The video type.\n */\n Video = 2,\n /**\n * The file type.\n */\n File = 3\n}\n\nexport interface IMediaData extends IImageData {\n mediaTypeValue?: MediaType;\n displayOrder?: number;\n videoData?: IVideoData;\n}\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param productName Product name.\n * @param context Current request context.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n commerceApiRequest,\n commerceVideoMetadataRequest,\n getCatalogId,\n IActionContext,\n IImageData,\n IImageSettings,\n IVideoData\n} from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n getMediaLocationsForSelectedVariant,\n MediaLocationsForSelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nasync function validateMediaLocationAsync(mediaLocation: MediaLocation): Promise<[IImageData, boolean]> {\n const imageData: IImageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n if (mediaLocation.IsApplicableForChildEntities) {\n imageData.additionalProperties = { isApplicableForChildEntities: 'true' };\n }\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src!, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation))).then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n });\n }\n\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n displayOrder: mediaLocation.DisplayOrder,\n mediaTypeValue: mediaLocation.MediaTypeValue,\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\nexport async function validateProductImages(\n mediaLocations: MediaLocation[],\n actionContext: IActionContext,\n imageSettings: IImageSettings\n): Promise {\n return Promise.all(mediaLocations.map(mediaLocation => validateMediaLocationAsync(mediaLocation)))\n .then(pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to validate product images');\n return [];\n });\n}\n\n/**\n * GetVideoMetadataFromAPI - Makes API call to get video metadata.\n * @param videoId: Video Id\n * @param actionContext: Action context\n * @returns: Returns the meta data of the video.\n */\nexport async function getVideoMetadataFromApi(videoId: string, actionContext: IActionContext): Promise {\n let videoPlayerData: IVideoData | undefined;\n if (videoId) {\n const response = await commerceVideoMetadataRequest(actionContext.requestContext, [videoId]);\n\n if (response.status !== 200) {\n actionContext.telemetry.debug(`Unable to get video metadata for videoId: ${videoId}`);\n return;\n }\n\n const videoData = response.data as [];\n if (videoData && ArrayExtensions.hasElements(videoData)) {\n videoPlayerData = videoData[0];\n }\n }\n return videoPlayerData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps, Player, IPlayerData, IPlayerOptions, IVideoMetadata } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport { MediaLocation, MediaType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, getVideoMetadataFromApi, validateProductImages } from './utils';\nimport { getAltText, IMediaData } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IMediaData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n private readonly player: React.RefObject = React.createRef();\n private fallbackImage?: string;\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly _zoomedImageSettings: IImageSettings;\n\n public constructor(props: IMediaGalleryProps) {\n super(props);\n this._toggleModal = this._toggleModal.bind(this);\n const mediaGalleryImages = this.getImagesData();\n this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation,\n mediaGalleryItems: mediaGalleryImages\n };\n\n this._zoomedImageSettings =\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\n\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\n }\n\n public isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public async componentDidMount(): Promise {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\n this._setRenderType();\n if (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\n if (this.props.data.product.result) {\n this.fallbackImage = getFallbackImageUrl(\n this.props.data.product.result.ItemId,\n this.props.context.request.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage}&fallback=${emptyPlaceHolderImage}`;\n }\n\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\n const viewProps: IMediaGalleryViewProps = {\n ...(this.props as IMediaGalleryProps),\n state: this.state,\n MediaGallery: {\n moduleProps: this.props,\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\n },\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\n callbackToggle: this.openModalDialog,\n callbackThumbnailClick: this._generateOnThumbnailClick,\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\n CarouselProps: {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryCarouselItems.items,\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: showPaginationTooltip === true,\n indicatorAriaText: resources.ariaLabelForSlide,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: mediaGalleryCarouselItems.keys\n } as IComponentNodeProps,\n Thumbnails: {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n vertical: isVertical,\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\n } as IComponentNodeProps,\n items: mediaGalleryThumbnailCarouselItems.items\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Zoomed out image on previous/next click.\n */\n public updateZoomedInImage(): void {\n this.setState({ isImageZoomed: false });\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n /**\n * On click next in carousel.\n */\n private readonly next = (): void => {\n removeInlineZoomStyle();\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\n this.goToIndex(nextIndex);\n\n this.updateZoomedInImage();\n };\n\n /**\n * On click previous in carousel.\n */\n private readonly previous = (): void => {\n removeInlineZoomStyle();\n const images = this.state.mediaGalleryItems;\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\n this.goToIndex(nextIndex);\n this.updateZoomedInImage();\n };\n\n private readonly goToIndex = (index: number): void => {\n const { autoplay } = this.props.config;\n const currentIndex = this.state.activeIndex;\n const mediaItems = this.state.mediaGalleryItems;\n if (autoplay && mediaItems) {\n if (mediaItems[`${index}`]?.mediaTypeValue === MediaType.Video) {\n this.player.current?.play();\n } else if (mediaItems[`${currentIndex}`].mediaTypeValue === MediaType.Video) {\n this.player.current?.pause();\n }\n }\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n const defaultKey = 0;\n return {\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\n keys: ['empty']\n };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n return this.getVideoThumbNailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n } else {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n }\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private getImagesData = (): IImageData[] => {\n if (this.props.config.skipImageValidation || this.props.context.request.app?.config?.OmniChannelMedia) {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n let images: IImageData[] = [];\n let mediaLocations: MediaLocation[] = [];\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n mediaLocations = this.props.data.mediaLocations.result;\n }\n images = mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n ),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n const curatedImages = this.props.config.images ?? [];\n\n return [...this._filterMasterImageFromVariant(images), ...curatedImages];\n }\n return [];\n };\n\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const galleryImageSettings = this.props.config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n return this._renderCarouselItemImageView(\n zoomView,\n item,\n galleryImageSettings ?? this.defaultGalleryImageSettings,\n index\n );\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private async _setImages(images?: IMediaData[]): Promise {\n const curatedImage = this.props.config.images || [];\n const mediaToSet: IMediaData[] = this._filterMasterImageFromVariant(images);\n\n void Promise.all(\n mediaToSet.map(async mediaData => {\n if (mediaData.mediaTypeValue === MediaType.Video && mediaData.src) {\n try {\n const url = new URL(mediaData.src);\n const videoId = url.searchParams.get('CVID');\n if (videoId) {\n mediaData.videoData = await getVideoMetadataFromApi(videoId, this.props.context.actionContext);\n }\n } catch (error) {\n if (this.props.telemetry) {\n this.props.telemetry.debug('Error while fetching videoId');\n }\n }\n }\n return mediaData;\n })\n ).then(mediaData => {\n const mediaItems = mediaData.filter(element => {\n return (\n element.mediaTypeValue !== MediaType.Video ||\n (element.mediaTypeValue === MediaType.Video && element.videoData !== undefined)\n );\n });\n\n this.setState({\n mediaGalleryItems: [...mediaItems, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n });\n\n this.setState({\n mediaGalleryItems: [...mediaToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n media: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (media.mediaTypeValue === MediaType.Video) {\n if (isInPopup || zoomView !== 'fullscreen') {\n return <>{this._renderCarouselItemVideo(media, index, imageSettings)};\n }\n return <>{this._renderVideoThumbnail(media, index, imageSettings)};\n } else {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(media, imageSettings, index, isInPopup)};\n }\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _renderCarouselItemVideo = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = this.props.config as IPlayerOptions;\n const playerResources = this.props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n const attributes = {\n id: `${this.props.id}__carousel-item__${index}`\n };\n return (\n \n );\n }\n return this._renderEmptyImage(imageSettings);\n };\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Gets the video thumbnail item to display media gallery.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render video.\n */\n private readonly getVideoThumbNailItem = (\n mediaData: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n \n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n \n
\n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n
\n \n
\n {}\n \n
\n
\n );\n }\n\n /**\n * Render the video thumbnail in full screen.\n * @param mediaData - Media Data.\n * @param index - Index\n * @param imageSettings - Image settings.\n * @returns - JSX.Element\n */\n private readonly _renderVideoThumbnail = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return (\n
\n \n
\n {}\n \n
\n
\n );\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
\n \n
\n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\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 { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductList, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getFallbackImageUrl,\n getProductUrlSync,\n OrderTemplate,\n OrderTemplateLine,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateActionMessageState } from '../order-template-list';\n\nexport interface ISingleOrderTemplateProps extends ProductList {\n orderTemplateState: IOrderTemplateActionMessageState;\n name?: string;\n orderTemplate: OrderTemplate;\n context: ICoreContext;\n imageSettings?: IImageSettings;\n enableImageProductLink?: boolean;\n removeFromOrderTemplateListText: string;\n addToBagText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n handlers: {\n onRemoveOrderTemplate(id: string): void | undefined;\n onDismiss(): void;\n };\n resources: {\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n}\n\nexport interface ISingleOrderTemplateViewProps {\n key: string;\n orderTemplateImage: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n orderTemplateStatusMessage?: React.ReactNode;\n orderTemplateName?: React.ReactNode;\n orderTemplateAriaLabel?: string;\n orderTemplateHeaderDivider?: React.ReactNode;\n}\n\nconst _removeItemFromOrderTemplateList = (props: ISingleOrderTemplateProps): void => {\n const { onRemoveOrderTemplate } = props.handlers;\n const { itemKey } = props;\n\n onRemoveOrderTemplate && itemKey && onRemoveOrderTemplate(itemKey);\n};\n\nconst OrderTemplateActions = {\n removeOrderTemplate: _removeItemFromOrderTemplateList\n};\n\n/**\n * Remove order template action.\n * @param input -Single order template props.\n * @returns Set remove order template.\n */\nconst removeOrderTemplateActionHandler = (input: ISingleOrderTemplateProps) => () => {\n OrderTemplateActions.removeOrderTemplate(input);\n};\n\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const {\n Id,\n orderTemplate,\n removeFromOrderTemplateListText,\n orderTemplateState,\n handlers,\n name,\n imageSettings,\n context,\n telemetryContent,\n enableImageProductLink\n } = input;\n\n if (!Id) {\n return null;\n }\n\n const _getOrderTemplatePageUrl = (): string => {\n const url = getUrlSync('ordertemplate', context.actionContext) ?? '';\n const separator = url.includes('?') ? '&' : '?';\n if (Id) {\n return `${url}${separator}id=${Id}`;\n }\n return '';\n };\n\n const { onDismiss } = handlers;\n\n return {\n key: `${Id}-template`,\n orderTemplateImage: _renderOrderTemplateImages(context, orderTemplate.orderTemplateLines, imageSettings, enableImageProductLink),\n orderTemplateAriaLabel: _renderAriaLabel(input),\n orderTemplateName: (\n
\n \n
\n {orderTemplate.totalLines}\n {` `}\n line items\n
\n
\n
\n ),\n addToCartButton: (\n
\n \n
\n ),\n removeButton: (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage && (\n
\n \n {orderTemplateState.userMessage}\n \n
\n )\n };\n};\n\n/**\n * On image click handler.\n * @param productUrl -Product url value.\n * @returns Assign window location.\n */\nconst onClickHandler = (productUrl: string) => () => {\n window.location.assign(productUrl);\n};\n\nconst _renderOrderTemplateImages = (\n context: ICoreContext,\n orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings,\n enableImageProductLink?: boolean\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n lg: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n xl: { q: 'w=140&h=140&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (orderTemplateLines) {\n const count = orderTemplateLines.length < 4 ? orderTemplateLines.length : 4;\n\n return (\n
\n {orderTemplateLines?.slice(0, count).map(line => {\n const productUrl = line.fullProduct\n ? _updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line?.productListLine?.CatalogId)\n : '';\n\n return (\n \n );\n })}\n
\n );\n }\n return
;\n};\n\n// This method is used to update the product url with the catalogId\nconst _updateProductUrlCatalog = (productDetails: SimpleProduct, context: ICoreContext, catalogId: number | undefined): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return fullUrl.href;\n }\n return productUrl;\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return `${name}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateListStatus } from '../order-template-list';\n\nexport interface IOrderTemplateListStatusMessageProps {\n className?: string;\n errorType: orderTemplateListStatus;\n text?: string;\n}\n\nexport const OrderTemplateListStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n \n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
\n \n {this.state.headerStatusMessage}\n \n
\n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): 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 private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled()\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport default (props: { className: string; msg?: string }) => (\n <>\n
\n {props?.msg &&
{props?.msg}
}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n productCatalogs: [],\n content: CONTENT.Search,\n selectedProduct: null,\n selectedCatalogId: 0\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public componentDidMount(): void {\n this._getCatalogs();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n \n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n \n \n {this._getCatalogNodes()}\n \n \n )}\n
\n \n
\n \n );\n };\n\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n\n const query = get(this, 'searchTextInput.current.value', null);\n\n if (!query) {\n return;\n }\n\n this.setState({\n content: CONTENT.Loading\n });\n\n this._getSearchResults(query)\n .then(result => {\n if (result.length === 0) {\n this.setState({\n products: result,\n content: CONTENT.NotFound\n });\n } else {\n this.setState({\n products: result,\n content: CONTENT.ProductList\n });\n }\n })\n .catch(error => {\n this.setState({\n content: CONTENT.Error\n });\n });\n };\n\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = this.props.context;\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\n\n if (!productVariant) {\n this.props.context.telemetry.error('Error retrieving product variant');\n return Promise.resolve([]);\n }\n\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\n\n this.setState({\n selectedProductDimensions: dimensions,\n content: CONTENT.ProductConfiguration,\n selectedProduct: productVariant\n });\n\n return dimensions;\n };\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n this.setState({\n query: event.target.value\n });\n };\n\n private readonly _onBackButtonClickHandler = (): void => {\n this.setState({\n content: CONTENT.ProductList\n });\n };\n\n private readonly _highlightSearchTerm = (name: string) => {\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\n\n return (\n \n );\n };\n\n private readonly _resultCountText = (): string => {\n return this.props.resources.searchResultsCountVerbage\n .replace('{count}', this.state.products.length.toString())\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\n };\n\n private _renderContent(): React.ReactNode | null {\n switch (this.state.content) {\n case CONTENT.ProductConfiguration:\n const { selectedProduct, selectedProductDimensions } = this.state;\n const viewProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n product: selectedProduct!,\n dimensions: selectedProductDimensions!,\n addToTemplateHandler: this._addItemToTemplateHandler,\n onQuantityChangeHandler: this._onQuantityChangeHandler,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm()\n };\n\n return ;\n\n case CONTENT.ProductList:\n const productProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n clickHandler: this._onSelectItem,\n products: this.state.products,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm(),\n renderResultCountText: this._resultCountText\n };\n\n return (\n \n \n \n );\n\n case CONTENT.Loading:\n return (\n \n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n \n

{this._resultCountText()}

\n {this._renderSearchForm()}\n \n
\n );\n\n case CONTENT.Error:\n return (\n \n {this._renderSearchForm()}\n
\n {this.props.resources.searchErrorMessage}\n
\n
\n );\n\n default:\n return {this._renderSearchForm()};\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise => {\n const {\n orderTemplateId,\n context: { actionContext },\n isMultipleCatalogFeatureEnabledInHq\n } = this.props;\n const catalogId = this.state.selectedCatalogId;\n const input = isMultipleCatalogFeatureEnabledInHq\n ? new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea',\n isMultipleCatalogFeatureEnabledInHq,\n catalogId\n )\n : new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea'\n );\n const result = await addItemToOrderTemplate(input, actionContext);\n this.setState({\n isOpen: false,\n reloadPage: true\n });\n // reload when closing\n window.location.reload();\n return result;\n };\n\n /**\n *\n * Get all active product catalogs.\n */\n private _getCatalogs(): void {\n const { isMultipleCatalogFeatureEnabledInHq, catalogs } = this.props;\n\n // if Channel Multiple Catalogs Feature is enabled then show all catalogs.\n const productCatalogs = isMultipleCatalogFeatureEnabledInHq && catalogs ? catalogs : [];\n\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n // set the current catalog id as a default selected catalog id from the url\n this.setState({\n productCatalogs: productCatalogs,\n selectedCatalogId: catalogId\n });\n }\n\n private _getCatalogNodes(): JSX.Element[] | null {\n const { productCatalogs, selectedCatalogId } = this.state;\n if (productCatalogs && ArrayExtensions.hasElements(productCatalogs)) {\n return productCatalogs.map((productCatalog: ProductCatalog) => {\n // initially select default catalog in dropdown\n const isSelected = productCatalog.RecordId === selectedCatalogId;\n return (\n \n );\n });\n }\n return [];\n }\n\n private readonly _onCatalogSelectionChange = (event: React.ChangeEvent) => {\n this.setState({\n selectedCatalogId: Number.parseInt(event.target.value, 10)\n });\n };\n\n private _getSearchResults(searchText: string): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { selectedCatalogId } = this.state;\n const searchCriteriaInput: ProductSearchCriteria = {};\n\n searchCriteriaInput.Context = {\n ChannelId: channelId,\n CatalogId: selectedCatalogId\n };\n\n if (process.env.NODE_ENV === 'development' && process.env.ENABLE_CLOUD_SEARCH?.toLowerCase() !== 'true') {\n searchCriteriaInput.IncludeAttributes = false;\n } else {\n searchCriteriaInput.IncludeAttributes = true;\n }\n searchCriteriaInput.SearchCondition = searchText;\n\n return searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n }\n\n private async _getProductDimensions(product: SimpleProduct): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const id = product.MasterProductId ? product.MasterProductId : product.RecordId;\n\n return getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(id, channelId, [], this.props.context.request),\n actionContext\n );\n }\n\n private readonly _toggleModalHandler = () => {\n if (this.state.isOpen) {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'add-item-to-template', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'add-item-to-template');\n this._getCatalogs();\n this.addLineButtonRef.current!.focus();\n }\n\n this.setState({\n isOpen: !this.state.isOpen,\n content: CONTENT.Search\n });\n\n if (this.state.reloadPage) {\n window.location.reload();\n this.setState({\n reloadPage: false\n });\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IDropdownState {\n /**\n * @friendlyName selectedIndex\n * @description Selected index.\n */\n selectedIndex: string;\n}\n\nexport interface IDropdownProps {\n dropdownId: number;\n dropdownName: string;\n dropdownList: IDropdownItemProps[];\n telemetryContent?: ITelemetryContent;\n onChange?(selection: IDropdownOnSelection): void;\n}\n\nexport interface IDropdownItemProps {\n value: string;\n id: number;\n}\n\nexport interface IDropdownOnSelection {\n dropdownId: number;\n selectId: string;\n selectedValue: string;\n}\n\n/**\n *\n * DropDown component.\n * @extends {React.PureComponent}\n */\nexport class Dropdown extends React.PureComponent {\n private readonly selectMenu: React.RefObject = React.createRef();\n\n constructor(props: IDropdownProps, state: IDropdownState) {\n super(props);\n this.state = {\n selectedIndex: ''\n };\n }\n\n public componentDidMount(): void {\n if (this.selectMenu.current) {\n this.selectMenu.current.selectedIndex = 0;\n }\n }\n\n public render(): JSX.Element {\n const { dropdownId, dropdownList, dropdownName } = this.props;\n\n return (\n \n {dropdownList.map(\n (item: IDropdownItemProps) =>\n item && (\n \n {item.value}\n \n )\n )}\n \n );\n }\n\n private readonly _onChanged = (event: React.ChangeEvent): void => {\n this.setState({ selectedIndex: event.target.value });\n\n if (this.props.onChange) {\n this.props.onChange({\n dropdownId: this.props.dropdownId,\n selectId: event.target.value,\n selectedValue: event.target.innerText\n });\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport const NotFoundComponent = (props: { error: string; msg: string }) => (\n <>\n
\n
{props.error}
\n
{props.msg}
\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { debounce } from 'lodash';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\ninterface IQuantityProps {\n min?: number;\n max: number;\n currentCount?: number;\n disabled?: boolean;\n incrementGlyphClass?: string;\n decrementGlyphClass?: string;\n decrementButtonAriaLabel?: string;\n incrementButtonAriaLabel?: string;\n inputQuantityAriaLabel?: string;\n id?: string;\n onChange?(newValue: number): void;\n}\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class OrderTemplateQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount || 1 };\n this._handleChange = this._handleChange.bind(this);\n\n reaction(\n () => this.props.currentCount,\n () => {\n this.setState({ currentInput: this.props.currentCount || 1 });\n }\n );\n }\n\n public render(): JSX.Element {\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const disabled = this.props.currentCount === this.props.min;\n const incDisabled = this.props.currentCount === this.props.max;\n const currentValue = this.state.currentInput;\n let extraClass = '';\n if (disabled) {\n // The quantity has reached its boundaries (max or min)\n extraClass = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClass = 'transition';\n }\n const getChangeHandler = (amount: number) => () => {\n this._onIncrementalChange(amount);\n };\n\n return (\n
\n \n \n \n \n \n \n \n
\n );\n }\n\n private _onIncrementalChange(amount: number): void {\n const updatedQuantity = this.state.currentInput + amount;\n\n if (updatedQuantity >= 1 && updatedQuantity <= this.props.max) {\n this.props.onChange && this.props.onChange(updatedQuantity);\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.props.onChange && this.props.onChange(minValue);\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\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 { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductDimensionValue, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getFallbackImageUrl,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IProductInventoryInformation,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent, ModalBody, ModalFooter } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport OrderTemplateQuantity from '../common/order-template-quantity';\nimport { Dropdown, IAddLineToTemplateProps, IAddLineToTemplateResources, IDropdownItemProps, IDropdownOnSelection } from '.';\n\nexport interface IProductCnnfigurationProps extends IAddLineToTemplateProps {\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n imageSettings: IImageSettings;\n telemetryContent?: ITelemetryContent;\n searchForm: React.ReactNode;\n addToTemplateHandler(params: IProductConfigurationState): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n}\n\nexport interface IProductConfigurationState {\n quantity: number;\n unitPrice: number;\n totalPrice: number;\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n selectedDimensions: {};\n productAvailableQuantity?: IProductInventoryInformation;\n buttonDisabled: boolean;\n showAddConfirmation: boolean;\n errorMessage?: string;\n isBusy: boolean;\n errors: { dimension?: string[]; add?: string };\n}\n\n/**\n * Configure selected product for addition to order template.\n */\nexport class ProductConfiguration extends React.Component {\n private selectedDimensions: {} = {};\n\n constructor(props: IProductCnnfigurationProps) {\n super(props);\n\n this.state = {\n quantity: 1,\n unitPrice: props.product.Price,\n totalPrice: props.product.Price,\n product: props.product,\n dimensions: props.dimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n selectedDimensions: {},\n buttonDisabled: false,\n showAddConfirmation: false\n } as IProductConfigurationState;\n }\n\n public shouldComponentUpdate(nextProps: IProductCnnfigurationProps, nextState: IProductConfigurationState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings }\n },\n resources: {\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n totalPriceLabel\n },\n imageSettings,\n highlightSearchTerm\n } = this.props;\n const { buttonDisabled, product, quantity, unitPrice, totalPrice, showAddConfirmation, errors } = this.state;\n const isMultipleCatalogSelect = this.props.isMultipleCatalogFeatureEnabledInHq ? 'isMultipleCatalogSelect' : '';\n return (\n <>\n \n {this.props.searchForm}\n
\n
\n
\n \n
\n
{product?.ItemId}
\n {highlightSearchTerm(product?.Name ?? '')}\n
\n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n
\n
\n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n
\n
\n
\n
{this._getDimensionsNodes()}
\n
\n
\n
{quantitySelectLabel}
\n \n
\n
\n
\n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n
\n
\n \n {showAddConfirmation && (\n \n
\n )}\n {errors?.add && (\n
\n
\n )}\n \n {addItemToTemplateText}\n \n \n \n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions\n .map(dimension => {\n let variant = dimension.DimensionValues?.find(\n value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue]\n )?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\n })\n .filter(value => value);\n\n return this.props.resources.addToTemplateConfirmation\n .replace('{count}', this.state.quantity.toString())\n .replace('{productAndDimensions}', `${this.state.product.Name}, ${Object.values(selectedDimensionNames).join(', ')}`);\n }\n\n private _getDimensionsNodes(): React.ReactElement[] {\n const { dimensions } = this.state;\n const { resources } = this.props;\n\n return dimensions?.map((dimension: ProductDimensionFull) => {\n const { DimensionValues, DimensionTypeValue } = dimension;\n const mapDimensions = (value: ProductDimensionValue): IDropdownItemProps => ({\n id: value.RecordId,\n value: value.Value || ''\n });\n const dimensionName = this._getDropdownName(DimensionTypeValue, resources);\n const dropdownList: IDropdownItemProps[] = DimensionValues ? DimensionValues.map(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n
\n
{dimensionName}
\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n )}\n \n
\n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) =>\n this.props.resources.dimensionMissingError.replace(/{dimensionName}/g, dimensionName);\n\n private readonly _addToTemplateHandler = async (event: React.MouseEvent) => {\n // Hide confirmation of previous addition when adding multiple items\n this.setState({\n isBusy: true,\n showAddConfirmation: false,\n errors: { ...this.state.errors, add: undefined }\n });\n\n const missingDimensions = this.state.dimensions\n .map(dimension => dimension.DimensionTypeValue.toString())\n .filter(type => !this.selectedDimensions[type]);\n\n this.setState({\n errors: { dimension: missingDimensions }\n });\n if (missingDimensions.length > 0) {\n this.setState({\n isBusy: false\n });\n return;\n }\n\n this.props\n .addToTemplateHandler({ ...this.state })\n .then(status => {\n // Validate against the existance of a ProductListId\n if (status.ProductListId) {\n this.setState({\n isBusy: false,\n showAddConfirmation: true\n });\n }\n })\n .catch(error => {\n const { addToTemplateDuplicateError, addToTemplateGenericError } = this.props.resources;\n let errorMessage;\n\n if (error.error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n errorMessage = addToTemplateDuplicateError;\n } else {\n errorMessage = addToTemplateGenericError;\n }\n\n this.setState({\n isBusy: false,\n errors: { ...this.state.errors, add: errorMessage }\n });\n this.props.context.telemetry.error('Error adding item to order template');\n });\n };\n\n private readonly _onQuantityChange = (newValue: number) => {\n this.setState({\n quantity: newValue,\n totalPrice: newValue * this.props.product.Price\n });\n };\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n // Rehydrate the selected variants price, available dimensions & sizes\n private readonly _onDimensionChanged = async (selection: IDropdownOnSelection): Promise => {\n const { product, dimensions, context } = this.props;\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = context;\n\n // Remaining error notifications for missing dimensions\n const remainingDimensionsErrors = this.state.errors?.dimension?.filter(id => id !== selection.dropdownId.toString());\n\n this.setState({\n isBusy: false,\n showAddConfirmation: false,\n buttonDisabled: true,\n errors: { add: undefined, dimension: remainingDimensionsErrors }\n });\n\n // Update currently selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) ||\n dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n const variantProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n\n if (!variantProduct) {\n this.props.context.telemetry.error(\n `Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`\n );\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n );\n const variantDimensions = await getDimensionsForSelectedVariant(dimensionInput, actionContext);\n\n if (!variantDimensions) {\n this.props.context.telemetry.error('Error retrieving dimensions for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n const availabilityInput = new ProductAvailabilitiesForSelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId\n );\n\n // @TODO sync UX quantity w/ actual availability\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(availabilityInput, actionContext);\n const priceInput = new PriceForSelectedVariantInput(product.RecordId, channelId);\n const productPrice = await getPriceForSelectedVariant(priceInput, actionContext);\n\n if (!productPrice) {\n this.props.context.telemetry.error('Error retrieving price for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n this.setState({\n buttonDisabled: false,\n productAvailableQuantity: (newAvailableQuantity && newAvailableQuantity[0]) || undefined,\n unitPrice: +(productPrice.BasePrice || product.Price),\n dimensions: variantDimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n product: variantProduct\n });\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IAddLineToTemplateResources): string => {\n switch (dimensionType) {\n case 1: // Color\n return resources.productDimensionTypeColor;\n case 2: // Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // Size\n return resources.productDimensionTypeSize;\n case 4: // Style\n return resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private _formatPrice(price: number): string {\n const {\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n\n return formatCurrency(price.toFixed(2), currencyCode);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { IAddLineToTemplateProps } from '.';\n\nexport interface IProductListProps extends IAddLineToTemplateProps {\n products: ProductSearchResult[];\n imageSettings: IImageSettings;\n searchForm: React.ReactNode;\n clickHandler(product: ProductSearchResult): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n renderResultCountText(): string;\n}\n\nexport const ProductList = (props: IProductListProps) => {\n const {\n products,\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n clickHandler,\n highlightSearchTerm,\n renderResultCountText,\n resources: { selectProductButtonText },\n imageSettings\n } = props;\n\n return (\n <>\n

\n {renderResultCountText()}\n

\n {props.searchForm}\n
\n {products.map((product: ProductSearchResult, index: number) => {\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\n const price = formatCurrency(Price.toFixed(2), currencyCode);\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings, props.context.request.app?.config?.OmniChannelMedia) ?? '';\n\n return (\n
\n
\n \n
\n
{ItemId}
\n {highlightSearchTerm(Name ?? '')}\n
\n
\n
\n {price}\n \n
\n
\n );\n })}\n
\n \n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise;\n}\n\nconst ProductSelectButton = (props: IProductSelectButton) => {\n const [isBusy, setBusy] = useState(false);\n const { product, buttonText, clickHandler } = props;\n const getClickHandler = React.useCallback(async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n }, [clickHandler, isBusy, product]);\n\n return (\n \n {buttonText}\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 { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport { IOrderTemplateData } from '../order-template.data';\nimport { IOrderTemplateProps } from '../order-template.props.autogenerated';\nimport { AddLineToTemplate } from '.';\n\ninterface IOrderTemplateBulkActionsProps extends IOrderTemplateProps {\n orderTemplateId: string;\n selectedLines: IOrderTemplateLineViewModel[];\n isMinifiedView: boolean;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n telemetryContent?: ITelemetryContent;\n onAddSelectionToBag(): void;\n onRemoveSelection(): void;\n}\n\ninterface IOrderTemplateBulkActionsState {\n isAddDisabled: boolean;\n isRemoveDisabled: boolean;\n}\n\n/**\n * Bulk Order Template line actions.\n */\nexport class OrderTemplateBulkActions extends React.PureComponent {\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateBulkActionsProps,\n state: IOrderTemplateBulkActionsState\n ): IOrderTemplateBulkActionsState {\n const selectedLines = props.selectedLines.length;\n let nextState = { ...state };\n nextState = {\n isAddDisabled: selectedLines === 0,\n isRemoveDisabled: selectedLines === 0\n };\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n addSelectedToBagButtonText,\n removeSelectedToBagButtonText,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n } = this.props.resources;\n\n const addLineProps = {\n context: this.props.context,\n telemetryContent: this.props.telemetryContent,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n },\n imageSettings: this.props.config.imageSettings,\n orderTemplateId: this.props.orderTemplateId,\n isMultipleCatalogFeatureEnabledInHq: this.props.isMultipleCatalogFeatureEnabledInHq,\n catalogs: this.props.data.catalogs?.result\n };\n\n return (\n <>\n \n \n \n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n \n \n \n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n \n \n );\n }\n\n private readonly addHandler = (event: React.MouseEvent) => {\n this.setState({\n isAddDisabled: true\n });\n\n this.props.onAddSelectionToBag();\n\n this.setState({\n isAddDisabled: false\n });\n };\n\n private readonly removeHandler = (event: React.MouseEvent) => {\n this.setState({\n isRemoveDisabled: true\n });\n\n this.props.onRemoveSelection();\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 AddOrderTemplateToCartComponent,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n RenameOrderTemplateComponent,\n OrderTemplateNameDialog\n} from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent, Popover } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nexport interface IOrderTemplateActionsData {\n orderTemplate: OrderTemplate;\n}\n\nexport interface IOrderTemplateActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise;\n };\n renameOrderTemplateDialogStrings: IOrderTemplateNameDialogResources;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n isMultipleCatalogsFeatureEnabled?: boolean;\n actionsSplitButton?: React.ReactNode;\n}\n\n/**\n * Remove Order Action.\n * @param props -Order template action props.\n * @returns Remove order template.\n */\nconst removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\n _removeOrderTemplate(props);\n};\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources, isMultipleCatalogFeatureEnabledInHq } = props;\n const { deleteTemplateButtonText } = resources;\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: !isMultipleCatalogFeatureEnabledInHq && _getOrderTemplateRenameControl(props),\n removeTemplate: !isMultipleCatalogFeatureEnabledInHq && (\n \n ),\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && \n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const {\n data: { orderTemplate },\n handlers\n } = props;\n const { onRemoveTemplate } = handlers;\n\n if (onRemoveTemplate) {\n onRemoveTemplate(orderTemplate.productList.Id);\n }\n};\n\nconst _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const {\n data: { orderTemplate },\n typeName,\n id,\n context,\n telemetryContent,\n resources,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n };\n\n return (\n \n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\n return (\n \n );\n};\n\nlet buttonEventReference: HTMLButtonElement | undefined;\nexport const ActionsSplitButton: React.FC = (props: IOrderTemplateActionsProps) => {\n const [isStatementRequestAdminDropdownOpen, setIsStatementRequestAdminDropdownOpen] = useState(false);\n const [renameOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = React.useState(false);\n\n const onOrderTemplateNameCancel = () => {\n context.telemetry.debug('Rename of template was canceled.');\n buttonEventReference?.focus();\n };\n\n const onRenameButtonClick = (event: React.MouseEvent) => {\n buttonEventReference = event.target as HTMLButtonElement;\n setOrderTemplateNameDialogOpen(true);\n event.preventDefault();\n };\n const onToggleDropdown1 = () => {\n setIsStatementRequestAdminDropdownOpen(!isStatementRequestAdminDropdownOpen);\n };\n const {\n data: { orderTemplate },\n resources,\n renameOrderTemplateDialogStrings,\n context\n } = props;\n\n const className = 'ms-order-template-action-bar';\n\n const popoverReference = React.createRef();\n const renderModalPopup = (\n \n );\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n\n return (\n
\n {renderModalPopup}\n \n {'Options'}\n \n \n \n\n \n {'Delete'}\n \n \n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport OrderTemplateQuantity from './common/order-template-quantity';\n\nexport interface IOrderTemplateLineProps extends ProductListLine {\n orderTemplateLine: IOrderTemplateLineViewModel;\n productListLine: ProductListLine;\n price?: ProductPrice;\n context: ICoreContext;\n productUrl: string;\n imageSettings?: IImageSettings;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n isQuantityDisabledForUpdate?: boolean;\n handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string, catalogId?: number | undefined): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\n selectOneRowText?: string;\n moreButtonText?: string;\n viewProductDetailsText?: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n inputQuantityAriaLabel: string;\n removeFromOrderTemplateLinesText: string;\n addToBagButtonText: string;\n deleteButtonText: string;\n incrementButtonAriaLabel?: string;\n decrementButtonAriaLabel?: string;\n editOrderTemplateLineQuantityError?: string;\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n catalogs?: ProductCatalog[];\n error?: string;\n shouldDisable?: boolean;\n}\n\nexport interface IOrderTemplateLineViewProps {\n key?: string;\n productImage: React.ReactNode;\n productPrice?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productQuantityView?: React.ReactNode;\n productListId?: string;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n extraActionsPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalog?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface IEventHandlerFactory {\n getAddToBag(): (event: React.MouseEvent) => void;\n getRemoveItem(): (event: React.MouseEvent) => void;\n}\n\nconst OrderTemplateLineActions = (props: IOrderTemplateLineProps): IEventHandlerFactory => {\n const { orderTemplateLine, productListLine, quantity, handlers } = props;\n const { LineId, CatalogId } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId &&\n orderTemplateLine.fullProduct &&\n onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId, CatalogId);\n },\n getRemoveItem: () => (event: React.MouseEvent) => LineId && onRemoveItem(props.orderTemplateLine)\n };\n};\n\ninterface IPopupProps extends IOrderTemplateLineProps {\n addButtonClassName: string;\n removeButtonClassName: string;\n}\n\nconst PopUp = (props: IPopupProps): JSX.Element | null => {\n const { addToBagButtonText, removeFromOrderTemplateLinesText, moreButtonText, viewProductDetailsText } = props.resources;\n const [showMobile, setShowMobile] = useState(false);\n const componentClassName = 'ms-table';\n\n const getViewHandler = () => (event: React.MouseEvent) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n
\n \n {showMobile && (\n
\n \n View\n \n {getActionButton(\n props.isMobile,\n props.removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n {getActionButton(\n props.isMobile,\n props.addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(props).getAddToBag()\n )}\n
\n )}\n
\n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n\nconst getDesktopActionButton = (\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n);\n/**\n * On Select line function.\n * @param orderTemplateLine -Order template line.\n * @param input -Order template line props.\n * @returns Set on select order template.\n */\nconst onSelectLineHandler = (orderTemplateLine: IOrderTemplateLineViewModel, input: IOrderTemplateLineProps) => (\n event: React.ChangeEvent\n) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n};\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const {\n orderTemplateLine,\n productListLine,\n price,\n context,\n imageSettings,\n quantity,\n resources,\n isMobile,\n isMultipleCatalogFeatureEnabledInHq\n } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText, selectOneRowText } = resources;\n if (!product) {\n return null;\n }\n\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const addButtonClassName = input.isMobile ? 'ms-table__row-links-add' : 'ms-order-template-table-line__product-add-button';\n const removeButtonClassName = input.isMobile ? 'ms-table__row-links-delete' : 'ms-order-template-table-line__product-remove-button';\n\n return {\n isMobile,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogFeatureEnabledInHq,\n selectLine: (\n \n ),\n key: LineId!,\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'ms-order-template-table-line__product-image',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product && (\n <>\n
{ItemId}
\n {input.error !== 'NONE' ? (\n
{_renderProductError(input)}
\n ) : (\n undefined\n )}\n \n ),\n productUnitOfMeasure: price ? (\n
{UnitOfMeasure || price.UnitOfMeasure}
\n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(\n input.isMobile,\n removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(input).getRemoveItem()\n ),\n productQuantityView:
{_generateQuantity(input, LineId!)}
,\n productQuantity: quantity,\n addToBagButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(input.isMobile, addButtonClassName, addToBagButtonText, OrderTemplateLineActions(input).getAddToBag()),\n extraActionsPopup:\n !isMobile && isMultipleCatalogFeatureEnabledInHq ? (\n \n ) : (\n undefined\n ),\n popUp: ,\n disabled: input.shouldDisable\n };\n};\n\nconst ExtraActionsPopup = (props: IPopupProps): JSX.Element | null => {\n const [showActions, setShowActions] = useState(false);\n const toggle = React.useCallback(() => {\n setShowActions(!showActions);\n }, [showActions]);\n\n const className = 'ms-order-template-table-line__extra-actions-cell';\n const actionsContainerClassName = `${className}__actions-container`;\n return (\n
\n
\n );\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, isMultipleCatalogFeatureEnabledInHq } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n\n return {\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'thumbnail',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: ItemId,\n productUnitOfMeasure: UnitOfMeasure || price?.UnitOfMeasure,\n productQuantityView: _generateQuantity(input, LineId!)\n };\n};\n\nexport interface IOrderTemplateProductQuantityViewProps {\n ContainerProps: INodeProps;\n input: React.ReactNode;\n}\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps | undefined) => void,\n itemKey: string,\n props: IOrderTemplateLineProps\n) => (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n};\n\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n return (\n \n );\n};\n\nexport const _renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n};\n\nexport const renderProductCatalog = (props: IOrderTemplateLineProps) => {\n const catalogId = props.productListLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.catalogs)) {\n return null;\n }\n\n const catalog = props.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
{catalog.Name}
;\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IOrderTemplateLineProps): (string | undefined)[] => {\n const { orderTemplateLine } = props;\n\n if (!orderTemplateLine.fullProduct || !orderTemplateLine.fullProduct.ProductDetails.Dimensions) {\n return [];\n }\n\n return orderTemplateLine.fullProduct.ProductDetails.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n return dimension.DimensionValue.Value;\n });\n};\n\nconst _renderProductError = (props: IOrderTemplateLineProps) => {\n const { error, resources } = props;\n\n if (!error) {\n return '';\n }\n\n const errorMessages = {\n OOS: resources.outOfStockProductErrorMessage,\n UNASSORTED: resources.unavailableProductErrorMessage,\n NONE: ''\n };\n\n return errorMessages[error];\n};\n\nexport const renderProductInfo = (props: IOrderTemplateLineProps): React.ReactNode | undefined => {\n const { orderTemplateLine, productUrl } = props;\n const name = orderTemplateLine.fullProduct?.ProductDetails.Name;\n\n const dimensions = _renderProductDimensions(props);\n if (!orderTemplateLine.fullProduct) {\n return [];\n }\n\n const productName = productUrl ? (\n \n {name}\n \n ) : (\n
{name}
\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n
\n
{productName}
\n
{dimensionsLine}
\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateLinesStatus } from '../order-template';\n\nexport interface IOrderTemplateLinesStatusMessageProps {\n className?: string;\n errorType: orderTemplateLinesStatus;\n text?: string;\n}\n\nexport const OrderTemplateLinesStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

{text}

;\n case 'FAILED':\n return

{text}

;\n case 'LOADING':\n default:\n return

{text}

;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions:\n orderTemplateResult &&\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n
\n \n {this.state.userMessage}\n \n
\n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText,\n productLineCatalogName\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n productLineCatalogName: productLineCatalogName\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\n telemetryContent={this.telemetryContent}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\n const catalogId = productLine.productListLine.CatalogId;\n await this._addItemToBag(product, quantity, itemKey, catalogId);\n } else {\n await this._addItemToBag(product, quantity, itemKey);\n }\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(\n orderTemplate: OrderTemplate,\n isMultipleCatalogFeatureEnabledInHq: boolean\n ): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n isMultipleCatalogFeatureEnabledInHq,\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n const isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\n ?.IsEnabled || false;\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n } = this.props.resources;\n\n const { context, telemetry, data } = this.props;\n const { catalogs } = data;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n error: line.error,\n shouldDisable: line.shouldDisable,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\n : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogs: catalogs && catalogs.result\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // This method is used to update the product url with the catalogId\n private readonly _updateProductUrlCatalog = (\n productDetails: SimpleProduct,\n context: ICoreContext,\n catalogId: number | undefined\n ): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const absoluteUrl = new URL(productUrl, window.location.href);\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return absoluteUrl.href;\n }\n\n return productUrl;\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = async (\n product: SimpleProduct,\n quantity: number,\n itemKey: string,\n catalogId?: number | undefined\n ): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity,\n catalogId\n };\n\n await cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else {\n switch (result.substatus) {\n case 'MAXQUANTITY':\n if (context.app.config.maxQuantityForCartLineItem) {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace(\n '{maxQuantity}',\n context.app.config.maxQuantityForCartLineItem.toString()\n ) || defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n } else {\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\n this.setState({\n itemKey,\n userMessage: defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n case 'INVOICEINCART': {\n this.setState({\n itemKey,\n userMessage: result.errorDetails?.LocalizedMessage || addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n default:\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n }\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n if (StringExtensions.isNullOrWhitespace(error.message)) {\n this.setState({\n itemKey,\n userMessage: error.message,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else {\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n }\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isMultipleCatalogFeatureEnabledInHq =\n featureStates.find(\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n line.productListLine.CatalogId = catalogId;\n }\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
\n
\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
\n {paginationNextText}\n
\n );\n };\n}\n\nexport default OrderTemplateLines;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
    \n
  • {detailedProductView?.productImage}
  • \n
  • \n {productText}:\n {detailedProductView?.productInfo}\n
  • \n
  • \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n
  • \n
  • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
  • \n
  • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
  • \n
  • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
  • \n
  • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
  • \n {productsStatusMessage &&
  • {productsStatusMessage}
  • }\n
\n
\n \n \n \n \n
\n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n
{productNumber}
\n
\n {quantityLabel}:{` `}\n {productQuantity}\n
\n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n
\n );\n};\n\nexport default OrderTemplateLinesView;\n"],"names":["PickUpInStore","props","_toggleBOPIS","isBopisSelected","storeSelectorStateManager","product","cartline","cartState","storeSelectorModuleId","openDialog","id","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","async","orgUnitLocation","deliveryMode","updateCartLinePickupLocation","cartLineId","LineId","location","then","result","status","locationChangedHandler","catch","error","Promise","resolve","_onLocationChangedCallback","DeliveryMode","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","length","foundLocation","find","OrgUnitName","DeliveryOptions","pickupDeliveryModeCode","option","Code","callbacks","toggleBopis","defaultComponent","_renderShippingMethod","cartLine","shipItText","pickupInStoretext","changeStoreText","orgUnitName","bopisSelected","toggleBOPIS","React","className","type","name","onChange","value","checked","key","onClick","shipitText","pickUpInStoreText","deliveryOption","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","delivery","Description","ContainerProps","_assembleNode","productSpecificationData","index","foundProductAvailability","foundProductDeliveryOptions","_product$Behavior","_foundProductAvailabi","_product$Dimensions","_props$cartState","imageSettings","gridSettings","typeName","context","resources","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isAuthenticated","request","user","nameOfWishlist","Name","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","isQuantityLimitsFeatureEnabled","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","Behavior","MaximumQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","IsInvoiceLine","errorMessage","ObjectExtensions","isNullOrUndefined","undefined","_getErrorMessage","currentQuantity","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","ArrayExtensions","hasElements","shouldIgnoreWarehouse","ProductId","InventLocationId","WarehouseId","includeErrors","push","outOfStockText","outOfRangeOneText","outOfRangeFormatText","replace","toString","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","filter","i","ValidationFailures","forEach","validation","ErrorContext","join","Quantity","onRemoveClickHandler","onRemoveClickFunction","payload","getPayloadObject","TelemetryEvent","RemoveFromCart","telemetryContent","attributes","getTelemetryAttributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","toLowerCase","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","productUrl","getProductUrlSync","actionContext","MsDyn365","isBrowser","_cartline$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","getInvoiceDetailsPageUrlSync","data","cartlineId","hasError","TebuCartLineItemComponent","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","channelDeliveryOptionConfig","pickUpInStore","pickitUpText","retailMulitplePickupFeatureState","remove","Button","Object","assign","title","addToWishlist","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","addToOrderTemplate","AddToOrderTemplateComponent","classnames","quantity","shouldShowButtonFailedTooltip","disableButton","app","config","disableTooltip","assembleCartlines","cartlines","productsWithAttributes","reactNodes","products","p","productDetails","map","_productsWithAttribut","_productsWithAttribut2","foundProductDeliveryOption","getProductByProductIdAndWarehouse","getProductByProductId","_productAvailability$2","_productAvailability$","productDeliveryOptions","simpleProduct","_p$productDetails","RecordId","CartLineGroupItems","_assembleGroupCartlines","telemetry","getGroupByStorePickup","items","groupBy","item","groupDelivery","cartLinesGroup","entries","_ref","deliveryType","groupByDeliveryType","keys","cartLines","carLineViewProps","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","requestContext","apiSettings","promotionOptions","exception","Cart","constructor","super","_isMounted","promotionPopupId","_getProductAttribute","actionInput","AttributesForSelectedVariantInput","channelId","getAttributesForSelectedVariant","this","console","log","ProductsWithAttributes","promotionLinkClick","event","setState","showPromotionDialog","state","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","removeItemFromCartHandler","cartlineToRemove","cart","input","cartLineIds","removeCartLines","validateCart","warning","debug","updateCartlineQuantity","cartlineToUpdate","cartLineQuantityUpdatedAsync","cartActionResult","message","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","getActiveCartProductsAction","ActiveCartProductsInput","getTelemetryObject","telemetryPageName","friendlyName","payLoad","bind","isCartValid","getOrderQuantityLimitsFeatureFlag","_this$props$data$cart","showAvailablePromotions","CartLines","reaction","_this$props$data$cart2","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$props$data$prod","_this$props$data$feat","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","emailDeliveryModeCode","channel","EmailDeliveryModeCode","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","RetailMultiplePickupFeatureState","featureState","multiplePickUpEnabled","hasInvoiceLine","IsEnabled","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","guestCheckoutButtonTitle","backToShoppingButton","backToShoppingButtonTitle","createTemplateFromCartButton","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","storeSelector","slots","waitingComponent","Waiting","cartLoadingStatus","cartLoadingErrorMessage","cartDataResult","isEmpty","OrderSummaryErrors","_getOrderSummaryErrors","renderView","_this$props$data$cart3","_this$props$data$feat2","_this$props$data$cust","_cart$cart","RetailB2BEcommerceFeatureState","IsB2b","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$result","channelConfiguration","retailMultiplePickUpOptionEnabled","DynOrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","orderTotal","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","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","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$cata","PickupDeliveryModeCode","modules","storeSelectorId","CartLineItems","catalogs","enableStockCheck","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","priceEditorResources","removeCartButtonText","shipInsteadDisplayText","pickItUpDisplayText","changeStoreDisplayText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","RegExp","test","returnURL","origin","includes","validateCartAsync","AsyncResult","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find","featureStatuses","customerInfo","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","__decorate","observer","_renderPromotions","Node","_renderCartlines","mulitplePickUp","emptyCartText","_renderBOPISBlock","_renderGroupBOPISBlock","onToggleBopisHandler","onChangeStoreHandler","_cartLine$data","shipToAddressDisplayText","pickUpAtStoreWithLocationText","PickupInStore","puckUpinStoreAttribute","_renderErrorBlock","errorData","_renderOrderSummarylines","orderSummaryLines","netTotal","totalDiscounts","subtotal","shipping","otherCharge","tax","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","_renderCartLinesGroup","_props$cartLinesGroup","_props$context$action2","_props$context$action3","_renderCartLinesGroupHeader","_countItems","count","_cartLine$pickUpInSto","pickUpText","shippingText","emailshippingText","groupTitle","_renderCartLinesGroupTitle","_cartLine$data2","countItem","reduce","_item$data","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","itemLabel","itemsLabel","suffix","_renderQutotationButton","url","_props$context$action","_props$cart","renderModuleAttributes","OrderSummaryLine","price","label","cssLabel","PriceComponent","CustomerContextualPrice","_buildOrderSummarySection","arguments","_computedLoyaltyAmount","checkoutState","loyaltyAmount","getDeliveryMode","_channelDeliveryOptio","featureSate","pickupDeliveryMode","PickupDeliveryModeCodes","dM","NetPrice","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmountWithoutTax","TotalAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","isTaxIncludedInPrice","isShowTaxBreakup","deliveryModes","ShippingChargeAmount","otherChargeAmount","otherShippingChargeAmount","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","giftCardCounter","Balance","amount","Math","min","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","CartLineItemFunctions","renderProductDimensions","Product","DimensionStrings","productDimension","IsGiftCard","renderDiscountLines","DiscountLines","discountLine","OfferId","Percentage","discountPercent","_discountLine$Percent","updatedPercent","DiscountLineTypeValue","DiscountLineType","TenderTypeDiscount","Price","_discountLine$Effecti","effectiveAmount","EffectiveAmount","Number","toFixed","isSalesLine","PeriodicDiscount","BasePrice","renderInventoryLabel","inventoryCssName","renderUnitOfMeasure","unitOfMeasureDisplayType","DefaultUnitOfMeasure","renderShippingLabel","_props$context$reques","shippingChargeLines","ChargeLines","chargeLine","IsShipping","chargeTotal","CalculatedAmount","priceComponent","renderOtherCharges","_cartline$ChargeLines","chargeline","CartLine","destructDimensionStrings","cropFocalRegion","renderDisountLines","prodAttribute","productName","imgeClassName","externalItemID","_productSpecification","_productSpecification2","_productSpecification3","attribute","TextValue","sizeDescription","newValue","_generateErrorMessage","NetAmount","NetAmountWithoutTax","_generateQuantityandPrice","nodes","_props$data$cartLine","_props$data$cartLine2","DiscountAmount","IncrementalQuantity","max","currentCount","isGiftCard","classNames","msdyn365Commerce","createComponentOverride","component","ProductPickUpOptionsForCartLineItems","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","Error","getCartState","response","ProductsDataActions","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","createObservableDataAction","action","inputData","_assembleGroupInvoiceCartlines","productPickUpOptions","_isChannelLimitsFeatureEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCatalogId","validateCatalogId","showGuestCheckoutButton","expressCheckoutButton","paymentExpress","ExpressCheckoutSectionWrapper","isMultipleCatalogFeatureEnabledInHq","catalogId","checkoutBlockedDueToUnavailableFunds","_this$props$data$cart4","isChannelTypeB2B","_featureState$result2","_this$props$context$r2","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","IsTaxIncludedInPrice","_this$props$data$feat3","updateMaxQuantityForCartLineItem","salesAgreementPricePrompt","urlCheck","_featureStatuses$find2","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","_featureStatuses$find3","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$cart5","cartLinesPickUpOptions","cartEmptyText","_cartLine$cartlineId","renderCartLinesGroupHeader","emailShippingText","titleSeparate","StringExtensions","isNullOrEmpty","renderCartLinesGroupTitle","_props$cart2","renderCartLinesGroup","_context$request$chan","CartLineItemComponent","priceCurrency","Currency","isPickUpItem","isCartLineItemPickUpType","_cartline$WarehouseId","toUpperCase","_props$channelDeliver","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","pickup","deliveryCode","InvoiceSummaryLine","_buildPaymentSummarySection","invoiceLines","invoiceLine","InvoiceAmount","format","InvoiceId","MediaType","getAltText","shouldUseCmsAltText","imageAltText","_context$app","OmniChannelMedia","validateMediaLocationAsync","mediaLocation","imageData","src","Uri","altText","AltText","IsApplicableForChildEntities","additionalProperties","isApplicableForChildEntities","http","XMLHttpRequest","open","addEventListener","send","_unused","getValidProductImages","productId","selectedProduct","MediaLocationsForSelectedVariantInput","getMediaLocationsForSelectedVariant","mediaLocations","all","pairs","pair","validateProductImages","MediaGallery","_this","_props$config$zoomedI","_inlineZoomDivRef","Map","fullScreenOverlayButtonRef","player","defaultGalleryImageSettings","md","defaultThumbnailImageSettings","onExiting","animating","onExited","next","removeInlineZoomStyle","isLastItem","nextIndex","activeIndex","goToIndex","updateZoomedInImage","previous","images","mediaGalleryItems","isFirstItem","autoplay","currentIndex","mediaItems","_mediaItems","_this$player$current","mediaTypeValue","Video","current","play","_this$player$current2","pause","getImagesData","skipImageValidation","_this$props$config$im","_this$props$config$im2","source","imageSource","mediaLocationsForSelectedVariant","_mediaLocation$Uri","curatedImages","_filterMasterImageFromVariant","_renderCarouselItemVideo","mediaData","videoData","_videoData$_links","options","playerResources","videoMetaData","videoId","duration","playTime","thumbnail","posterframeUrl","_links","binaryReferences","videoBinaryReferences","videoPlayerData","metaData","editProps","Player","ref","playerData","isEditor","params","_renderEmptyImage","_getCarouselItem","image","isInPopup","Image","fallBackSrc","fallbackImage","loadFailureBehavior","shouldSkipToMainImage","bypassHideOnFailure","_getThumbnailItem","modifiedActiveIndex","ThumbnailItemContainerProps","_generateOnThumbnailClick","onKeyDown","_generateOnThumbnailKeyDown","Picture","imageFallbackOptimize","shouldUseOptimizedImage","getVideoThumbNailItem","classes","_refHandler","divRef","which","KeyCodes","Enter","Space","preventDefault","_renderVideoThumbnail","fullScreenTitleText","openModalDialog","_toggleModal","imageModalSlider","ZoomView","_mapProductToImageData","carouselprops","Carousel","_renderCarouselItemImageView","_zoomedImageSettings","interval","directionTextPrev","previousScreenshotFlipperText","directionTextNext","nextScreenshotFlipperText","onIndicatorsClickHandler","showPaginationTooltip","hideIndicator","keyboard","handleOnExited","handleOnExiting","isDisabledFunctionality","isMobileImageZoomed","carousel","imageModalSliderProps","modalIsOpen","ontoggle","galleryCarousel","ImagefullView","altTextSource","mediaGalleryImages","isImageZoomed","isInitialLoad","zoomedImageSettings","galleryImageSettings","_onImageMouseOut","_inlineZoomImageOnHover","_onInlineImageClick","_onContainerZoomImageClick","_onMouseOutLensContainer","isMobile","variant","VariantType","Viewport","_this$props$config$im3","_this$props$context$r3","shouldUpdateOnPartialDimensionSelection","_setRenderType","_this$props$config$th","thumbnailImageSettings","_setImages","_this$props$config$th2","productVariant","_product$productVaria","_this$props$context$a","_this$props$config$th3","_actionContext$reques","isPreview","commerceApiRequest","previewImageData","displayOrder","DisplayOrder","MediaTypeValue","_mediaLocation$Uri2","getProductImages","fireImmediately","_this$props$config$th4","_this$props$context$a2","isVertical","thumbnailsOrientation","isFullscreenAllowed","allowFullScreen","zoomViewMode","imageZoom","emptyPlaceHolderImage","placeholderImageName","_this$props$context$r4","getFallbackImageUrl","ItemId","mediaGalleryCarouselItems","_getMediaGalleryItems","mediaGalleryThumbnailCarouselItems","_getMediaGalleryThumbnailItems","moduleProps","callbackToggle","callbackThumbnailClick","callbackThumbnailKeyDown","CarouselProps","indicatorAriaText","ariaLabelForSlide","Thumbnails","ThumbnailsContainerProps","SingleSlideCarouselComponentProps","SingleSlideCarousel","vertical","flipperPrevLabel","flipperNextLabel","parentId","useTabList","JSON","stringify","lastUpdate","defaultKey","_getEmptyThumbnailItem","zoomView","curatedImage","mediaToSet","get","commerceVideoMetadataRequest","getVideoMetadataFromApi","Date","now","media","_renderImageInContainerOnZoom","_renderImageFullScreenOnZoom","_renderImageInlineOnZoom","_this$props$config$sh","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","shouldHidePrimaryImages","shouldHideMasterProductImagesForVariant","variantImages","isVariantProduct","MasterProductId","itemId","_item$additionalPrope","_this$props$config$da","dataScale","defaultDataScale","onMouseOver","onMouseMove","inlineZoomImageOnMouseMove","_this$props$config$da2","inlineZoomImageOnHover","String","_handleMobileViewZoomedImageClick","target","currentTarget","mobileZoomedInImageClassName","style","transform","classList","parentElement","overflow","_this$props$config$da3","bounds","getBoundingClientRect","positionX","clientX","left","positionY","clientY","top","scaledPositionX","scaledPositionY","add","scrollTo","_this$props$config$da4","innerWidth","inlineZoomInitClick","inlineZoomImageOnMouseOut","onContainerZoomInit","onMouseOutLensContainer","_this$props$config$da5","onMouseOut","onMouseMoveLensContainer","onMouseOverImageContainer","_product$PrimaryImage","_this$fullScreenOverl","focus","parentDiv","children","querySelector","removeAttribute","removeContainerZoomStyle","_renderThumbnails","thumbnails","_renderThumbnailItem","Module","currencyCode","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","taxOnNonShippingCharges","customerAccountAmount","customerAccount","customerAccountLabel","OrderTemplateActions","onRemoveOrderTemplate","handlers","itemKey","removeOrderTemplateActionHandler","OrderTemplateRender","Id","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","_getOrderTemplatePageUrl","_getUrlSync","separator","totalLines","addToCartButton","AddOrderTemplateToCartComponent","moduleTypeName","addToCartText","addToBagText","dialogStrings","removeButton","orderTemplateStatusMessage","userMessage","statusCssString","onClickHandler","defaultImageSettings","xl","slice","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct","_line$fullProduct2","_line$fullProduct$Pro2","_line$fullProduct3","_getFallbackImageUrl","_line$fullProduct4","_context$request$app","fullProduct","_updateProductUrlCatalog","ProductDetails","productListLine","isNullOrWhitespace","OrderTemplateListStatusMessage","errorType","text","modalCloseButtonReference","onCancelHandler","isCreateOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","useState","onCreateButtonClick","createOrderTemplateText","OrderTemplateNameDialog","modalOpen","isUpdateDialog","setModalOpen","onCancel","onOrderTemplateCreated","parentElementRef","OrderTemplateList","_isChannelMultipleCatalogsFeatureEnabled","feature","_onDismiss","_reloadPage","reload","_onRemoveFromOrderTemplateList","productListId","token","productList","deleteAsync","headerStatusMessage","deleteOrderTemplateFailedText","messageGlyph","_heading$text","_heading$tag3","heading","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","_heading$tag","errorProps","statusMessage","Spinner","msg","progressNotificationText","Heading","_heading$tag2","emptyViewProps","createOrderTemplateButton","CreateNewTemplateButtonComponent","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","currentTemplateProps","addToBagButtonText","moduleId","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","linesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","OrderTemplateListView","_renderOrderTemplate","CONTENT","AddLineToTemplate","query","productCatalogs","content","Search","selectedCatalogId","searchTextInput","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","autoComplete","onSubmit","_onSearchSubmit","htmlFor","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","placeholder","_onInputChange","maxLength","_get","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","varianteInput","SelectedVariantInput","getSelectedVariant","dimensions","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","orderTemplateId","AddItemToOrderTemplateInput","addItemToOrderTemplate","reloadPage","parseInt","_toggleModalHandler","onTelemetryClick","_getCatalogs","onComponentDidMount","_this$searchTextInput","componentDidMount","onComponentDidUpdate","_this$searchTextInput2","addLineModalLinkText","backToResultsText","modalProps","ariaLabel","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","clickHandler","renderResultCountText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","productCatalog","isSelected","selected","searchText","searchCriteriaInput","Context","ChannelId","IncludeAttributes","SearchCondition","searchByCriteriaAsync","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","computed","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","innerText","dropdownList","dropdownName","OrderTemplateQuantity","inputRef","_validateMin","minValue","isNaN","currentInput","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","currentValue","extraClass","getChangeHandler","_onIncrementalChange","pattern","onBlur","updatedQuantity","e","inputElement","HTMLInputElement","_debounce","setAttribute","defaultProps","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","isBusy","showAddConfirmation","missingDimensions","ProductListId","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","totalPrice","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","ExtensionProperties","variantProduct","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","PriceForSelectedVariantInput","productPrice","getPriceForSelectedVariant","productAvailableQuantity","unitPrice","sort","a","b","_getDropdownName","dimensionType","_product$Name","_product$Name2","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","_getConfirmationMessage","selectedDimensionNames","_dimension$DimensionV","addToTemplateConfirmation","values","_this$state$errors2","unshift","cultureFormatter","formatCurrency","selectProductButtonText","_generateImageUrl","primaryImageSource","generateImageUrl","fallBackImg","ProductSelectButton","buttonText","setBusy","getClickHandler","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","onAddSelectionToBag","removeHandler","onRemoveSelection","selectedLines","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","isMinifiedView","removeOrderActionHandler","_removeOrderTemplate","onRemoveTemplate","_getOrderTemplateAddToCartDialog","addTemplateToBagButtonText","_getOrderTemplateRenameControl","renameOrderTemplateDialogStrings","RenameOrderTemplateComponent","onRenameTemplate","renameOrderTemplateButtonText","renameTemplateButtonText","buttonEventReference","ActionsSplitButton","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","existingOrderTemplate","onOrderTemplateNameCancel","_buttonEventReference","requestStatementDropdownString","Random","Guid","generateGuid","innerRef","Popover","placement","OrderTemplateLineActions","orderTemplateLine","onAddToBag","onRemoveItem","getAddToBag","getRemoveItem","PopUp","removeFromOrderTemplateLinesText","moreButtonText","viewProductDetailsText","showMobile","setShowMobile","toggleDetailsDisplayed","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","isChecked","onSelect","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","OrderTemplateMobileLineView","_context$request$app2","UnitOfMeasure","productLineCatalog","renderProductCatalog","productImage","_renderProductImage","productInfo","renderProductInfo","_renderPrice","productNumber","productUnitOfMeasure","productQuantityView","_generateQuantity","onChangeHandler","onChangeQuantity","isQuantityDisabledForUpdate","_context$actionContex","_context$request","isB2b","catalog","_renderProductError","OOS","outOfStockProductErrorMessage","UNASSORTED","unavailableProductErrorMessage","NONE","_orderTemplateLine$fu","_renderProductDimensions","dimensionsLine","OrderTemplateLinesStatusMessage","OrderTemplateTableHeading","componentClassName","getOnChange","checkedLines","lines","scope","selectAllRowsText","productLineCatalogName","productUnitPrice","productUOM","productQuantity","productActions","OrderTemplateLines","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","maxWaitTimeInMilliSeconds","removeProductListLinesAsync","setTimeout","_this$props$data$orde","substr","indexOf","_onAddSelectionToBag","productLine","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","AdjustedPrice","_addItemToBag","_getCurrentUrl","reqContext","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","onClose","_renderPagination","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","absoluteUrl","_changeQuantity","orderTemplateLinesData","orderLineIndex","findIndex","newProductListLine","prevQuantity","_objectWithoutProperties","_excluded","updateProductListLinesAsync","list","newLine","updatedLines","updatedOrderTemplate","ProductListLines","update","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","addProductToCart","priceResult","reject","isMiniCart","addToCartBehavior","substatus","_cart$result","_cart$result2","cartLineQuantity","defaultMessage","_result$errorDetails","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","_renameTemplate","_removeTemplate","_orderTemplate$result","newLink","_getViewport","device","Type","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","removeEventListener","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","orderTemplateResult","_isFirstPage","orderActions","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","updateQuantity","debounce","pagination","itemAddedToCartDialog","updated","_product$fullProduct","onSelectAll","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","headers","_generateLinesAddedToCartDialogResources","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","deleteTemplateButtonText","addTemplateToBag","renameTemplate","removeTemplate","actionsSplitButton","OrderTemplateActionsView","renameOrderTemplateTitleText","cancelBtnLabel","skip","selectOneRowText","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","selectLine","addToBagButton","extraActionsPopup","popUp","shouldDisable","OrderTemplateLineView","ProductPrice","observable","_renderItem","quantityLabel","disableElement","pointerEvents","opacity","toggleDetails","wrapClassName","fade","applicationNode"],"sourceRoot":""}