{"version":3,"file":"static/js/17.4f390a0f34842b341495.chunk.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-cart-icon/krannich-c-cart-icon.props.autogenerated.ts?95f0","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-cart-icon/components/flyout-cart-line-items.tsx?82f7","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-cart-icon/utils/get-products-in-mini-cart.ts?cc07","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-cart-icon/krannich-c-cart-icon.tsx?5d09","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-cart-icon/krannich-c-cart-icon.view.tsx?50c9","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/productCard.component.tsx?3701","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/utilities.ts?64f7","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/choice-summary.tsx?3d5d","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/error-message.tsx?d13a","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/feature-search-result-item.tsx?b6fb","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/link.tsx?b094","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/modal.tsx?23a3","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/product-search-result-items.tsx?a5bf","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/range-refine-item.tsx?923e","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/refine-item.tsx?059b","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/range-refine-item-input.tsx?82fd","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/refine-submenu.tsx?eb71","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/separator.tsx?8420","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/components/title.tsx?0724","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/krannich-c-search-result-container.props.autogenerated.ts?5353","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/krannich-c-search-result-container.tsx?02b1","webpack://Msdyn365.Commerce.Online/./src/modules/krannich-c-search-result-container/krannich-c-search-result-container.view.tsx?5f89","webpack://Msdyn365.Commerce.Online/./src/themes/krannich/views/components/addtocart.component.tsx?6961","webpack://Msdyn365.Commerce.Online/./src/themes/krannich/views/order-history.view.tsx?af0b","webpack://Msdyn365.Commerce.Online/./src/utils/atp-utils.tsx?854b","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/common/address.tsx?e12e","webpack://Msdyn365.Commerce.Online/./src/common/buy-selected-component.tsx?9efa","webpack://Msdyn365.Commerce.Online/./src/common/get-groups.tsx?699f","webpack://Msdyn365.Commerce.Online/./src/common/get-order-information.tsx?c2e1","webpack://Msdyn365.Commerce.Online/./src/common/get-sales-line.tsx?61be","webpack://Msdyn365.Commerce.Online/./src/common/get-sales-lines.tsx?10c6","webpack://Msdyn365.Commerce.Online/./src/common/expand-button-state.ts?0e6f","webpack://Msdyn365.Commerce.Online/./src/common/sales-line-state.ts?3828","webpack://Msdyn365.Commerce.Online/./src/common/label.tsx?9c2c","webpack://Msdyn365.Commerce.Online/./src/common/utilities.ts?0172","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-order-confirmation/checkout-order-confirmation.tsx?7af5","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-order-confirmation/checkout-order-confirmation.view.tsx?722a","webpack://Msdyn365.Commerce.Online/./src/modules/order-confirmation/components/get-help.tsx?fe55","webpack://Msdyn365.Commerce.Online/./src/modules/order-confirmation/components/get-order-summary.tsx?2e84","webpack://Msdyn365.Commerce.Online/./src/modules/order-confirmation/components/get-payment-methods.tsx?feb6","webpack://Msdyn365.Commerce.Online/./src/modules/order-confirmation/order-confirmation.tsx?bea0","webpack://Msdyn365.Commerce.Online/./src/modules/order-confirmation/order-confirmation.view.tsx?f5ab","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/components/get-help.tsx?57cc","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/components/get-order-summary.tsx?ba20","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/components/get-payment-methods.tsx?eed1","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/components/table-view/components/order-details-table-header-component.tsx?ab70","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/components/table-view/components/order-details-table-row-component.tsx?bbd4","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/components/table-view/order-details-table.tsx?7c6f","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/components/view-tracking-button.tsx?3e36","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/order-details.tsx?4414","webpack://Msdyn365.Commerce.Online/./src/modules/order-details/order-details.view.tsx?89b1","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/actions/get-order-history-with-search-and-filters.ts?d907","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/common/get-sales-order.ts?e014","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/components/order-history-with-search-and-filters-header.component.tsx?3609","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/components/order-history-with-search-and-filters-order-list.component.tsx?9f7d","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/components/order-history-with-search-and-filters-order-table.component.tsx?c86f","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/components/order-history-with-search-and-filters-organization-wide-selector.component.tsx?b9a7","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/components/order-history-with-search-and-filters-view-mode-selector.component.tsx?6452","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/common/refiner-option-mappings.ts?5f11","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/common/sort-option-mappings.ts?635a","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/order-history-with-search-and-filters.tsx?e2e5","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/common/search-option-mappings.ts?a532","webpack://Msdyn365.Commerce.Online/./src/modules/order-history-with-search-and-filters/order-history-with-search-and-filters.view.tsx?0c93","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/actions/get-order-shipment-history.ts?b936","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/components/get-sales-order.tsx?f5c0","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/components/order-history-filter.tsx?87d0","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/components/table-view/components/order-history-table-header-component.tsx?48e0","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/components/table-view/components/order-history-table-row-component.tsx?a93c","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/components/table-view/order-history-table.tsx?5dd4","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/order-history.tsx?fd71","webpack://Msdyn365.Commerce.Online/./src/modules/order-history/order-history.view.tsx?2545","webpack://Msdyn365.Commerce.Online/./src/modules/order-lookup/utilities/order-lookup-utility.tsx?c60b","webpack://Msdyn365.Commerce.Online/./src/modules/order-lookup/components/order-lookup-additional-fields.tsx?9951","webpack://Msdyn365.Commerce.Online/./src/modules/order-lookup/components/order-lookup-fields.tsx?297b","webpack://Msdyn365.Commerce.Online/./src/modules/order-lookup/order-lookup.tsx?72d3","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98"],"sourcesContent":["/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IKrannichCCartIcon containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum cartLinesSortOrder {\r\n ascending = 'ascending',\r\n descending = 'descending'\r\n}\r\n\r\nexport interface IKrannichCCartIconConfig extends Msdyn365.IModuleConfig {\r\n imageSettings?: Msdyn365.IImageSettings;\r\n enableHoverCart?: boolean;\r\n cartLinesSortOrder?: cartLinesSortOrder;\r\n isAnonymousCheckout?: boolean;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface IKrannichCCartIconResources {\r\n goToCartButtonTitle: string;\r\n totalPriceFormatString: string;\r\n guestCheckoutButtonTitle: string;\r\n checkoutButtonTitle: string;\r\n productDimensionTypeColor: string;\r\n productDimensionTypeSize: string;\r\n productDimensionTypeStyle: string;\r\n productDimensionTypeConfiguration: string;\r\n quantityDisplayText: string;\r\n removeCartButtonText: string;\r\n cartLabel: string;\r\n cartQtyLabel: string;\r\n flyoutTitle: string;\r\n salesAgreementPricePrompt: string;\r\n shippingText: string;\r\n checkoutBlockedDueToUnavailableFundsTitle: string;\r\n checkoutBlockedDueToUnavailableFundsMessage: string;\r\n continueShoppingButtonTitle: string;\r\n subTotalMessage: string;\r\n item: string;\r\n items: string;\r\n emptyPrice: string;\r\n subtotalAmount: string;\r\n}\r\n\r\nexport interface IKrannichCCartIconProps extends Msdyn365.IModule {\r\n resources: IKrannichCCartIconResources;\r\n config: IKrannichCCartIconConfig;\r\n slots: {\r\n emptyCart: React.ReactNode[];\r\n promoContentItem: React.ReactNode[];\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ICartlineResourceString } from '@msdyn365-commerce/components';\r\nimport { CartLineItemComponent } from '../../../themes/krannich/views/components/cartlineitem.component';\r\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n OrgUnitLocation,\r\n ProductAvailableQuantity,\r\n ProductDeliveryOptions,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '@msdyn365-commerce-modules/cart';\r\n\r\nexport interface IFlyoutCartLineItemsProps {\r\n cartlines: CartLine[];\r\n cartState: ICartState | undefined;\r\n orgUnitLocations: OrgUnitLocation[] | undefined;\r\n resources: ICartlineResourceString;\r\n productAvailabilites: IProductInventoryInformation[] | undefined;\r\n products: SimpleProduct[] | undefined;\r\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\r\n pickupDeliveryModeCode?: string;\r\n catalogs?: ProductCatalog[];\r\n\r\n /**\r\n * GridSettings for the product image in cartline\r\n */\r\n gridSettings: IGridSettings;\r\n\r\n /**\r\n * ImageSettings for the product image in cartline\r\n */\r\n imageSettings: IImageSettings;\r\n id: string;\r\n typeName: string;\r\n context: ICoreContext;\r\n telemetry: ITelemetry;\r\n removeButtonText: string;\r\n outOfStockText: string;\r\n outOfRangeOneText: string;\r\n outOfRangeFormatText: string;\r\n maxCartlineQuantity: number;\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n\r\n outOfStockThreshold: number;\r\n isStockCheckEnabled: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n customerTaxPercentage: number;\r\n}\r\n\r\nexport interface IFlyoutCartLineItemViewProps {\r\n cartline: React.ReactNode;\r\n remove: React.ReactNode;\r\n storeLocation: React.ReactNode;\r\n hasError: boolean;\r\n\r\n data: {\r\n product: SimpleProduct;\r\n cartline: CartLine;\r\n };\r\n}\r\n\r\nconst _getCartItemAvailableQuantity = (\r\n isStockCheckEnabled: boolean,\r\n outOfStockThreshold: number,\r\n productAvailability?: ProductAvailableQuantity\r\n): number => {\r\n if (isStockCheckEnabled) {\r\n if (\r\n !productAvailability ||\r\n !productAvailability.AvailableQuantity ||\r\n productAvailability.AvailableQuantity <= 0 ||\r\n productAvailability.AvailableQuantity <= outOfStockThreshold\r\n ) {\r\n return 0;\r\n }\r\n return productAvailability.AvailableQuantity - outOfStockThreshold;\r\n }\r\n\r\n return 0;\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 is 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\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\nconst _assembleNode = (\r\n cartline: CartLine,\r\n product: SimpleProduct,\r\n props: IFlyoutCartLineItemsProps,\r\n index: number,\r\n foundProductAvailability?: ProductAvailableQuantity,\r\n foundProductDeliveryOptions?: ProductDeliveryOptions\r\n): IFlyoutCartLineItemViewProps => {\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 customerTaxPercentage\r\n } = props;\r\n\r\n const availableQuantityInStock = _getCartItemAvailableQuantity(\r\n props.isStockCheckEnabled,\r\n props.outOfStockThreshold,\r\n 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 // Check if the product is service or not by product type\r\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\r\n\r\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\r\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n\r\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\r\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\r\n const fullUrl = new URL(productUrl, window.location.href);\r\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\r\n productUrl = fullUrl.href;\r\n }\r\n\r\n return {\r\n data: {\r\n product,\r\n cartline\r\n },\r\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\r\n cartline: (\r\n \r\n ),\r\n remove: (\r\n \r\n {removeButtonText}\r\n \r\n ),\r\n storeLocation: _renderStoreLocation(cartline, props)\r\n };\r\n};\r\n\r\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\r\n let deliverylocation;\r\n if (cartLine && cartLine.FulfillmentStoreId) {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\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 const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\r\n const location = delivery?.Description;\r\n\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\r\n if (location) {\r\n deliverylocation = `${location}, ${orgUnitName}`;\r\n } else {\r\n deliverylocation = `${orgUnitName}`;\r\n }\r\n } else {\r\n deliverylocation = props.resources.shippingText;\r\n }\r\n return deliverylocation;\r\n};\r\n\r\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\r\n if (cartLine && cartLine.FulfillmentStoreId) {\r\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\r\n\r\n if (orgUnitName) {\r\n return (\r\n
\r\n {orgUnitName}\r\n
\r\n );\r\n }\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst _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\nconst _assembleCartlines = (\r\n cartlines: CartLine[],\r\n products: SimpleProduct[] | undefined,\r\n props: IFlyoutCartLineItemsProps\r\n): IFlyoutCartLineItemViewProps[] | null => {\r\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\r\n\r\n if (!products || products.length === 0) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\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 && props.productAvailabilites.length > 0) {\r\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\r\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\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 if (product) {\r\n reactNodes.push(\r\n _assembleNode(\r\n cartline,\r\n product,\r\n props,\r\n index,\r\n foundProductAvailability?.ProductAvailableQuantity,\r\n foundProductDeliveryOption\r\n )\r\n );\r\n }\r\n });\r\n\r\n return reactNodes;\r\n};\r\n\r\n/**\r\n * CartLineItems component.\r\n */\r\n\r\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\r\n const { products, cartlines } = props;\r\n return _assembleCartlines(cartlines, products, props);\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ActiveCartProductsInput,\r\n getActiveCartProductsAction,\r\n getAvailabilitiesForCartLineItems,\r\n getDeliveryOptionsForCartLineItems,\r\n IProductInventoryInformation,\r\n ProductAvailabilitiesForCartLineItems,\r\n ProductDeliveryOptionsForCartLineItems\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * IMiniCartData entity interface.\r\n */\r\nexport interface IMiniCartData {\r\n products?: SimpleProduct[];\r\n productAvailabilites?: IProductInventoryInformation[];\r\n deliveryOptions?: ProductDeliveryOptions[];\r\n}\r\n\r\nexport const createInput = () => {\r\n return new ActiveCartProductsInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a mini cart data.\r\n * @param ctx\r\n * @param cartState\r\n */\r\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\r\n const miniCartData: IMiniCartData = {};\r\n\r\n const cart = cartState.cart;\r\n\r\n // If there are cart lines, make call to get products\r\n // If there are invocie linese, then there is no products, so don't make call to get products\r\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\r\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\r\n .then(products => {\r\n if (products) {\r\n miniCartData.products = products;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\r\n .then(availableQuantity => {\r\n if (availableQuantity) {\r\n miniCartData.productAvailabilites = availableQuantity;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n\r\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\r\n .then(deliveryOptions => {\r\n if (deliveryOptions) {\r\n miniCartData.deliveryOptions = deliveryOptions;\r\n }\r\n })\r\n .catch(error => {\r\n ctx.telemetry.exception(error);\r\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\r\n });\r\n }\r\n\r\n return miniCartData;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\r\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport {\r\n CartLine,\r\n ChannelDeliveryOptionConfiguration,\r\n CartLineValidationResultsByLineId,\r\n OrgUnitLocation\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n getTelemetryObject,\r\n INodeProps,\r\n ITelemetryContent,\r\n TelemetryConstant,\r\n UncontrolledTooltip,\r\n updateMaxQuantityForCartLineItem,\r\n urlCheck\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport React from 'react';\r\n\r\nimport { IKrannichCCartIconData } from './krannich-c-cart-icon.data';\r\nimport { cartLinesSortOrder, IKrannichCCartIconProps } from './krannich-c-cart-icon.props.autogenerated';\r\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\r\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\r\nimport { taxPercentage } from '../../utils/helper';\r\n\r\nexport interface IMiniCartState {\r\n miniCartData: IMiniCartData;\r\n orgUnitLocations?: OrgUnitLocation[];\r\n isQuantityLimitsFeatureEnabled: boolean;\r\n isCartValid: boolean;\r\n}\r\n\r\nexport interface ICartIconViewProps extends IKrannichCCartIconProps {\r\n className: string;\r\n cartIcon: React.ReactNode;\r\n FlyoutContainer?: INodeProps;\r\n CartlinesWrapper: INodeProps;\r\n miniCartWrapper: INodeProps;\r\n miniCartItemWrapper: INodeProps;\r\n cartlines?: IFlyoutCartLineItemViewProps[];\r\n flyoutTitle: React.ReactNode;\r\n totalPrice: React.ReactNode;\r\n checkoutAsGuestButton?: React.ReactNode;\r\n checkoutAsSignInUserButton?: React.ReactNode;\r\n goToCartButton?: React.ReactNode;\r\n waitingComponent?: React.ReactNode;\r\n isCartLoading: boolean;\r\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\r\n\r\n removeItemClickHandler(cartlineToRemove: CartLine): void;\r\n}\r\n\r\n/**\r\n *\r\n * Cart component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nclass CartIcon extends React.Component, IMiniCartState> {\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\r\n\r\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\r\n\r\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\r\n\r\n private retailMultiplePickUpOptionEnabled?: boolean = false;\r\n\r\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n\r\n private lastValidatedCartVersion: number | undefined;\r\n\r\n constructor(props: IKrannichCCartIconProps) {\r\n super(props);\r\n this.state = {\r\n miniCartData: {},\r\n isCartValid: true,\r\n isQuantityLimitsFeatureEnabled: false\r\n };\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 const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\r\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\r\n\r\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\r\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\r\n\r\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\r\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n const context = this.props.context.actionContext;\r\n\r\n reaction(\r\n () => this.props.data.cart.result?.cart.CartLines,\r\n async () => {\r\n this.setState({\r\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\r\n });\r\n }\r\n );\r\n await this._setQuantityLimitsFeatureFlag();\r\n\r\n this.setState({\r\n orgUnitLocations: this.props.data.orgUnitLocations?.result\r\n });\r\n\r\n this._validateCart();\r\n }\r\n\r\n public componentDidUpdate(prevProps: IKrannichCCartIconProps): void {\r\n this._validateCart();\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IKrannichCCartIconProps, nextState: IMiniCartState): 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-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\r\n public render(): JSX.Element | null {\r\n const {\r\n id,\r\n typeName,\r\n config: { enableHoverCart, isAnonymousCheckout },\r\n context: {\r\n request: {\r\n user: { isAuthenticated, signInUrl }\r\n }\r\n },\r\n context,\r\n resources\r\n } = this.props;\r\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\r\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\r\n const cartUrl = getUrlSync('cart', 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\r\n const shouldShowMiniCart =\r\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\r\n const hasInvoiceLine = cart?.hasInvoiceLine;\r\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\r\n const cartLines = this._getCartLines();\r\n const validInventoryAcrossCartLines = validateCartLinesInventory(\r\n cart?.cart.CartLines ?? [],\r\n this.state.miniCartData.productAvailabilites ?? [],\r\n this.props.context.actionContext,\r\n this.state.miniCartData.products ?? [],\r\n emailDeliveryModeCode\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 includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\r\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\r\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\r\n const flyoutTitle = resources.flyoutTitle;\r\n const flyoutTooltip = {\r\n tag: UncontrolledTooltip,\r\n shouldShowMiniCart,\r\n placement: 'bottom-end',\r\n hideArrow: true,\r\n className: 'ms-cart-icon__flyout-container',\r\n trigger: 'hover',\r\n displayMode: 'FLYOUT',\r\n target: id,\r\n shouldShowCloseButton: true,\r\n cartPageUrl: cartUrl,\r\n hideAriaHidden: true\r\n };\r\n\r\n // If there are invoice lines, don't update mini cart price\r\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\r\n const priceString = price\r\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\r\n : '';\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\r\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\r\n feature => feature.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n\r\n const viewProps = {\r\n ...this.props,\r\n cartIcon: (\r\n \r\n ),\r\n cartlines: cartLines,\r\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\r\n CartlinesWrapper: {\r\n className: 'ms-cart-icon__cart-lines'\r\n },\r\n miniCartWrapper: {\r\n className: classnames('ms-cart-icon'),\r\n id: this.props.id\r\n },\r\n miniCartItemWrapper: {\r\n className: classnames('msc-cart-lines-item')\r\n },\r\n\r\n // If there are invoice lines, don't update mini cart checkout button\r\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\r\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\r\n checkoutAsSignInUserButton:\r\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\r\n \r\n {resources.checkoutButtonTitle}\r\n \r\n ) : null,\r\n checkoutAsGuestButton:\r\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\r\n \r\n {resources.guestCheckoutButtonTitle}\r\n \r\n ) : null,\r\n goToCartButton: (\r\n \r\n {goToCartButtonText}\r\n \r\n ),\r\n checkoutBlockedDueToUnavailableFunds: null,\r\n flyoutTitle: {flyoutTitle},\r\n totalPrice:
{priceString}
\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n private _validateCart(): void {\r\n const {\r\n data: { cart }\r\n } = this.props;\r\n const cartVersion = cart.result?.cart?.Version ?? undefined;\r\n if (this.lastValidatedCartVersion === cartVersion) {\r\n return;\r\n }\r\n\r\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\r\n\r\n if (this.state.isQuantityLimitsFeatureEnabled) {\r\n validateCartAsync(cart, this.props.telemetry, this.props.context)\r\n .then((result: CartLineValidationResultsByLineId | undefined) => {\r\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\r\n })\r\n .catch(() => {\r\n this.setState({ isCartValid: false });\r\n });\r\n } else {\r\n this.setState({ isCartValid: true });\r\n }\r\n }\r\n\r\n private _getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\r\n if (isAuthenticated) {\r\n return guestCheckoutUrl;\r\n }\r\n\r\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\r\n let returnURL = guestCheckoutUrl;\r\n if (msdyn365Commerce.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 * Sort cartline items.\r\n * @param cartlines - Cartlines to be sorted.\r\n * @param sortOrder - Ascending or descending.\r\n * @returns - Sorted cartlines.\r\n */\r\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\r\n const lines: CartLine[] = [...cartlines];\r\n const zero: number = 0;\r\n\r\n if (sortOrder === cartLinesSortOrder.descending) {\r\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\r\n }\r\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\r\n };\r\n\r\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\r\n const {\r\n context: {\r\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\r\n },\r\n config,\r\n telemetry,\r\n resources\r\n } = this.props;\r\n\r\n const imageSettings = this._getImageSettings(config.imageSettings);\r\n const cart = this.props.data.cart && this.props.data.cart.result;\r\n const customerTaxPercentage = taxPercentage(this.props.data.customerInformation?.result!);\r\n\r\n // Cart-icon could be placed in each page\r\n // so we check cart content to reduce number of RS calls\r\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\r\n ? FlyoutCartLineItems({\r\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\r\n products: this.state.miniCartData.products,\r\n productAvailabilites: this.state.miniCartData.productAvailabilites,\r\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\r\n imageSettings,\r\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\r\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\r\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\r\n gridSettings: this.props.context.request.gridSettings!,\r\n context: this.props.context,\r\n 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 quantityDisplayString: resources.quantityDisplayText,\r\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\r\n inputQuantityAriaLabel: '', // Not used\r\n discountStringText: '', // Not used\r\n originalPriceText: '',\r\n currentPriceText: '',\r\n shippingChargesText: '',\r\n shippingText: resources.shippingText\r\n },\r\n telemetry,\r\n removeButtonText: resources.removeCartButtonText,\r\n outOfStockText: '', // Not used\r\n outOfRangeOneText: '', // Not used\r\n outOfRangeFormatText: '', // Not used\r\n cartState: cart,\r\n orgUnitLocations: this.state.orgUnitLocations,\r\n removeItemClickHandler: this._removeItemFromCartHandler,\r\n pickupDeliveryModeCode: PickupDeliveryModeCode,\r\n telemetryContent: this.telemetryContent,\r\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\r\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\r\n catalogs: this.props.data.catalogs?.result,\r\n customerTaxPercentage: customerTaxPercentage\r\n })\r\n : null;\r\n }\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 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.removeCartLines(input).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 private async _setQuantityLimitsFeatureFlag(): Promise {\r\n const featureStatuses = await this.props.data.featureState;\r\n const isChannelQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\r\n )?.IsEnabled || false;\r\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\r\n this.setState({ isQuantityLimitsFeatureEnabled: true });\r\n return;\r\n }\r\n const useSiteBuilderSettings = featureStatuses?.find(\r\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\r\n )?.IsEnabled;\r\n if (useSiteBuilderSettings) {\r\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (!defaultOrderQuantityLimitsFeatureConfig || defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\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 this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\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 this.setState({ isQuantityLimitsFeatureEnabled: false });\r\n return;\r\n }\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n this.setState({ isQuantityLimitsFeatureEnabled: true });\r\n } else {\r\n this.props.data.customerInformation\r\n\r\n .then(customerInfo => {\r\n const result =\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\r\n\r\n this.setState({ isQuantityLimitsFeatureEnabled: result });\r\n })\r\n\r\n .catch(error => {\r\n this.props.telemetry.warning(error);\r\n\r\n this.props.telemetry.debug('Unable to get customer info');\r\n });\r\n }\r\n } else {\r\n const cartConfiguration = await this.props.data.cartConfiguration;\r\n\r\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\r\n\r\n return;\r\n }\r\n }\r\n}\r\n\r\nexport default CartIcon;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { ICartIconViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart-icon/cart-icon';\r\nimport { IFlyoutCartLineItemViewProps } from '@msdyn365-commerce-modules/cart/src/modules/cart-icon/components/flyout-cart-line-items';\r\nimport { incExcPriceFormat, taxPercentage } from '../../utils/helper';\r\n\r\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\r\n if (!cartLines) {\r\n props.context.telemetry.error('Cartlines content is empty, module wont render');\r\n return null;\r\n }\r\n return cartLines.map((cartLine, index) => {\r\n return (\r\n \r\n {cartLine.cartline}\r\n {cartLine.storeLocation}\r\n {cartLine.remove}\r\n \r\n );\r\n });\r\n};\r\n\r\nconst CartIconView: React.FC = (props: ICartIconViewProps) => {\r\n //VSI customization for custom veiw shopping cart button start\r\n const cartItem = props?.cartlines?.length!;\r\n\r\n const customerTaxPercentage = taxPercentage(props.data.customerInformation?.result!);\r\n const customGoToCartButton =\r\n props.goToCartButton &&\r\n React.cloneElement(props.goToCartButton as JSX.Element, {\r\n title: `View Shopping Cart (${cartItem !== undefined ? cartItem : 0})`,\r\n children: `View Shopping Cart (${cartItem !== undefined ? cartItem : 0})`\r\n });\r\n //VSI customization end\r\n\r\n const subtotalPrice = props.data.cart.result?.cart.SubtotalAmount;\r\n return (\r\n \r\n {props.cartIcon}\r\n {props.FlyoutContainer ? (\r\n \r\n {props.flyoutTitle}\r\n {props.checkoutBlockedDueToUnavailableFunds}\r\n {_renderCartlines(props.cartlines, props)}\r\n {\r\n
\r\n {'Subtotal: '}\r\n {incExcPriceFormat(subtotalPrice!, props.context, false, customerTaxPercentage, 2)}\r\n
\r\n }\r\n {/* {VSI customization to hide checkout/guest checkout} */}\r\n {/* {props.checkoutAsSignInUserButton} */}\r\n {/* {props.checkoutAsGuestButton} */}\r\n {customGoToCartButton}\r\n
\r\n ) : (\r\n false\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default CartIconView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n getCatalogId,\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGridSettings,\r\n IImageData,\r\n IImageSettings,\r\n Image,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeValue, Customer, ProductPrice, ProductSearchResult, Cart, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\n// Todo: will remove getProductPageUrlSync after implentation of custom urls\r\nimport { generateImageUrl, /*getProductPageUrlSync,*/ validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nimport PriceComponent, { IPriceComponentResources } from '../../../themes/krannich/views/components/price.component';\r\nimport { IPlpRequestPriceButtonData } from '../krannich-c-search-result-container.props.autogenerated';\r\nimport { ATPMessage, TrafficLights } from '../../../utils/atp-utils';\r\nimport { _calculateWpPrice, filteredProductAttributeList, formatUrlPath, isRequestPrice, taxPercentage } from '../../../utils/helper';\r\nimport { PromotionBadges } from '../../../utils/badges';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n ratingCountAriaLabel?: string;\r\n allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n productComparisonButton?: React.ReactNode;\r\n inventoryLabel?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\r\n swatchItemAriaLabel?: string;\r\n requestPriceBtn?: IPlpRequestPriceButtonData | undefined;\r\n activePrices?: ProductPrice[];\r\n customerInformation?: Customer;\r\n resources?: any;\r\n atpData?: any;\r\n cart?: AsyncResult;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {}\r\n\r\nconst PriceComponentActions = {};\r\n\r\n/**\r\n * Renders product comparison button similar to the quick view button.\r\n * @param productComparisonButton - React element of the button.\r\n * @param product - Current product info.\r\n * @param catalogId - Current catalog.\r\n * @returns React element for the specific product.\r\n */\r\nfunction renderProductComparisonButton(\r\n productComparisonButton: React.ReactNode,\r\n product: ProductSearchResult,\r\n catalogId: number\r\n): JSX.Element | undefined {\r\n validateCatalogId(catalogId);\r\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\r\n}\r\n\r\nconst ProductCard: React.FC = ({\r\n data,\r\n context,\r\n imageSettings,\r\n telemetryContent,\r\n quickViewButton,\r\n productComparisonButton,\r\n requestPriceBtn,\r\n activePrices,\r\n customerInformation,\r\n resources,\r\n atpData,\r\n cart\r\n}) => {\r\n const product = data.product;\r\n //To set Image Url\r\n const [imgURI, setImgURL] = React.useState();\r\n const [producerName, setProducerName] = React.useState('');\r\n const [isBundle, setIsBundle] = React.useState(false);\r\n //to generate Image url after getting img url from api call\r\n React.useEffect(() => {\r\n if (imgURI) {\r\n let imageUrl = generateImageUrl(imgURI, context.actionContext.requestContext.apiSettings);\r\n imageUrl = imageUrl?.replace('=/', '=') || '';\r\n setImgURL(imageUrl);\r\n }\r\n }, [imgURI]);\r\n\r\n const isBundleProduct = () => {\r\n product?.AttributeValues?.map(e => {\r\n if (e.Name === 'IsBundleProduct') {\r\n if (e.BooleanValue === true) {\r\n setIsBundle(true);\r\n }\r\n }\r\n });\r\n };\r\n React.useEffect(() => {\r\n if (product) {\r\n findProducerName();\r\n isBundleProduct();\r\n }\r\n }, [product]);\r\n const _renderQuickView = (quickview: React.ReactNode, item?: number, attributevalues?: AttributeValue[]): JSX.Element | null => {\r\n if (!quickview) {\r\n return null;\r\n }\r\n return React.cloneElement(quickview as React.ReactElement, {\r\n selectedProductId: item,\r\n attributevalues: attributevalues,\r\n cart: cart\r\n });\r\n };\r\n //To set the producer name\r\n React.useEffect(() => {\r\n if (producerName) {\r\n setImgURL(producerName);\r\n }\r\n }, [producerName]);\r\n\r\n /**\r\n * Updates the product url link to product details page.\r\n * @param productDetailsPageUrl - Product page url.\r\n * @param coreContext - Context of the module using the component.\r\n * @param queryString - Querystring to be added to the URL.\r\n * @returns The update product page url.\r\n */\r\n function updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\r\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\r\n if (sourceUrl.search) {\r\n sourceUrl.search += `&${queryString}`;\r\n } else {\r\n sourceUrl.search += queryString;\r\n }\r\n\r\n const updatedUrl = new URL(sourceUrl.href);\r\n return updatedUrl.pathname + sourceUrl.search;\r\n }\r\n const productAttributes = filteredProductAttributeList(product?.AttributeValues, context.app.config.kcProductAttribute);\r\n const findProducerName = () => {\r\n productAttributes?.map(e => {\r\n if (e.identifier === 'Manufacturer') {\r\n const manufactuerValueforImage = e.ExtensionProperties?.find(eProperty => eProperty.Key === 'globalAttributeValue')?.Value;\r\n setProducerName(manufactuerValueforImage?.StringValue);\r\n }\r\n });\r\n };\r\n const _renderProducerName = (prod: ProductSearchResult): string => {\r\n if (!prod) {\r\n return '';\r\n }\r\n return productAttributes?.find(attr => attr.identifier === 'Manufacturer')?.TextValue || '';\r\n };\r\n const _renderProducerKeyName = (prod: ProductSearchResult): string => {\r\n if (!prod) {\r\n return '';\r\n }\r\n return productAttributes?.find(attr => attr.identifier === 'Manufacturer')?.Name || '';\r\n };\r\n const getManufacturerItemTypeName = (prod: ProductSearchResult): string => {\r\n if (!prod) {\r\n return '';\r\n }\r\n return prod?.ExtensionProperties?.find(extension => extension.Key === 'ManufItemTypeName')?.Value?.StringValue || '';\r\n };\r\n // Todo: will remove productUrl after implentation of custom urls\r\n // let productUrl = product\r\n // ? getProductPageUrlSync(\r\n // formatUrlPath(_renderProducerName(product), getManufacturerItemTypeName(product)) ?? '',\r\n // product.RecordId,\r\n // context.actionContext,\r\n // undefined\r\n // )\r\n // : '';\r\n\r\n const urlPath = formatUrlPath(_renderProducerName(product!), getManufacturerItemTypeName(product!));\r\n const pathName = context.actionContext.requestContext.url.requestUrl.pathname.split('/');\r\n const isAddingPathWithUrl = context.actionContext.requestContext.app.config.addPathWithUrl ?? false;\r\n let productUrl =\r\n product &&\r\n (isAddingPathWithUrl\r\n ? `${context.actionContext.requestContext.url.requestUrl.origin}/${pathName[1]}/${urlPath}/${product.RecordId}.p`\r\n : `${context.actionContext.requestContext.url.requestUrl.origin}/${urlPath}/${product.RecordId}.p`);\r\n if (productUrl) {\r\n productUrl = updateProductUrl(productUrl, context, 'back=true');\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n //use this function to render or display category image\r\n const _renderCategoryImg = (imgURI: string) => {\r\n return (\r\n
\r\n producer-images\r\n
\r\n );\r\n };\r\n\r\n const _renderProductPlacementImage = (\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n altText?: string\r\n ): JSX.Element | null => {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : ''\r\n };\r\n const imageProps = {\r\n gridSettings: gridSettings,\r\n imageSettings\r\n };\r\n return ;\r\n };\r\n\r\n const activePrice = activePrices?.find((val: any) => val?.ProductId === product?.RecordId);\r\n const trafficLightATP = atpData && atpData?.filter((item: any) => item?.ItemId === product?.ItemId);\r\n const atpMsgRes = trafficLightATP && trafficLightATP[0]?.JsonResponseObject;\r\n const atpMsgResParsed = atpMsgRes && JSON.parse(atpMsgRes);\r\n const extensionsProps = product?.ExtensionProperties;\r\n const customerTaxPercentage = taxPercentage(customerInformation!);\r\n let promotionBadge = '';\r\n if (extensionsProps?.find(e => e?.Key === 'PromotionBadge')) {\r\n promotionBadge = extensionsProps?.find(e => e?.Key === 'PromotionBadge')?.Value?.StringValue || '';\r\n }\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
{imgURI && _renderCategoryImg(imgURI)}
\r\n
\r\n
\r\n {_renderProductPlacementImage(imageSettings, context.request.gridSettings, product.PrimaryImageUrl, product.Name)}\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n

{product.Name}

\r\n\r\n
\r\n {resources.itemNumberLabel}\r\n {product.ItemId}\r\n
\r\n\r\n
\r\n \r\n
\r\n {_renderProducerKeyName(product)}: {_renderProducerName(product)}\r\n
\r\n
\r\n
\r\n
\r\n {context.actionContext.requestContext.user.isAuthenticated && trafficLightATP && (\r\n
\r\n \r\n {isBundle ? (\r\n

{resources.atpDiscontinuedMessageLabel}

\r\n ) : (\r\n /*VSI CUSTOMIZATION | DATE FORMATE | START | */\r\n atpMsgResParsed && (\r\n \r\n )\r\n /*VSI CUSTOMIZATION | DATE FORMATE | END | */\r\n )}\r\n
\r\n )}\r\n \r\n \r\n {context.actionContext.requestContext.user.isAuthenticated ? (\r\n <>\r\n
\r\n
\r\n {isRequestPrice(activePrice!, customerInformation?.LineDiscountGroup!, isBundle) || isBundle ? (\r\n
\r\n {resources.requestPriceLabel}\r\n
\r\n \r\n {resources.tooltipText}\r\n
\r\n
\r\n ) : (\r\n <>\r\n \r\n \r\n )}\r\n
\r\n
\r\n {context.actionContext.requestContext.user.isAuthenticated &&\r\n _calculateWpPrice(product?.AttributeValues!, context, isBundle, activePrice!, customerInformation!)}\r\n
\r\n
\r\n\r\n {productComparisonButton &&\r\n renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\r\n
\r\n {quickViewButton && _renderQuickView(quickViewButton, product.RecordId, product?.AttributeValues)}\r\n \r\n {resources.viewDetailsLabel}\r\n \r\n
\r\n \r\n ) : (\r\n
\r\n \r\n {requestPriceBtn?.linkText}\r\n \r\n \r\n {resources.viewDetailsLabel}\r\n \r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n IProductComponent\r\n>('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductComponent;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ITelemetry } from '@msdyn365-commerce/core';\r\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { DimensionTypes } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\n\r\n/**\r\n * Types of product refiner values.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport enum ProductRefinerValueDataTypeValue {\r\n /**\r\n * Range slider is used for selections like price.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Range = 1,\r\n\r\n /**\r\n * Range input is a different way to specify ranges and can be expressed with input boxes\r\n * as well as a set of discrete single-select type values.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n RangeInput = 4,\r\n\r\n /**\r\n * This is a discrete list item, either multi-select or single-select.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n List = 5,\r\n\r\n /**\r\n * Boolean types allows only single-select.\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Boolean = 6\r\n}\r\n\r\n/**\r\n * Types of product refiners.\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport enum ProductRefinerTypeValue {\r\n /**\r\n * Refiner values are single-select.\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Single = 0,\r\n\r\n /**\r\n * Refiner values are multi-select.\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Multi = 1\r\n}\r\n\r\n/**\r\n * ProductRefinerSource enum type.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport enum ProductRefinerSource {\r\n /**\r\n * The None member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n None = 0,\r\n\r\n /**\r\n * The Attribute member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Attribute = 1,\r\n\r\n /**\r\n * The Category member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Category = 2,\r\n\r\n /**\r\n * The Price member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Price = 3,\r\n\r\n /**\r\n * The Rating member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Rating = 4\r\n}\r\n\r\nexport interface IRefineItemData {\r\n sourceValue?: number;\r\n swatchImageUrl?: string;\r\n swatchColorHexCode?: string;\r\n refinerItemId: number;\r\n dataTypeValue?: number;\r\n name: string;\r\n label: string;\r\n count?: number;\r\n isChecked: boolean;\r\n refineItemUrl?: string;\r\n minValue?: string;\r\n maxValue?: string;\r\n dimensionType?: DimensionTypes;\r\n rowNumber?: number;\r\n unitText?: string;\r\n updatedSliderMaxValue?: string;\r\n updatedSliderMinValue?: string;\r\n}\r\n/**\r\n * Checks if the data type value corresponds to a slider.\r\n * @param dataTypeValue\r\n */\r\n\r\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\r\n return dataTypeValue === AttributeDataType.Currency || dataTypeValue === AttributeDataType.Decimal;\r\n}\r\n\r\n/**\r\n * Checks if the data type value corresponds to a range type integer.\r\n * @param dataTypeValue\r\n */\r\n\r\nexport function isRangeTypeForInteger(dataTypeValue: number | undefined): boolean {\r\n return (\r\n dataTypeValue === AttributeDataType.Currency ||\r\n dataTypeValue === AttributeDataType.Decimal ||\r\n dataTypeValue === AttributeDataType.Integer\r\n );\r\n}\r\n/**\r\n\r\n * Checks if the data type value corresponds to a custom input box Range.\r\n\r\n * @param dataTypeValue\r\n\r\n */\r\n\r\nexport function isCustomRangeTypeIntegerSelected(\r\n selectedRefinementCriterion: ProductRefinerValue,\r\n\r\n parentProductRefinerHierarchy: IProductRefinerHierarchy\r\n): boolean {\r\n return (\r\n selectedRefinementCriterion?.RowNumber !== undefined &&\r\n selectedRefinementCriterion?.RowNumber !== null &&\r\n selectedRefinementCriterion?.DataTypeValue === AttributeDataType.Integer &&\r\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\r\n );\r\n}\r\n\r\n/**\r\n * Checks if the selectedRefinementCriterion is siingle type with API va;ues or custom type.\r\n * If custom type then RowNumber is null\r\n * @param dataTypeValue\r\n */\r\n\r\nexport function isSingleSelectRangeTypeIntegerSelected(\r\n selectedRefinementCriterion: ProductRefinerValue,\r\n productRefinerValue: ProductRefinerValue\r\n): boolean {\r\n return (\r\n productRefinerValue.LeftValueBoundString === selectedRefinementCriterion?.LeftValueBoundString &&\r\n productRefinerValue.RightValueBoundString === selectedRefinementCriterion?.RightValueBoundString &&\r\n selectedRefinementCriterion?.RowNumber !== undefined &&\r\n selectedRefinementCriterion?.RowNumber !== null &&\r\n selectedRefinementCriterion !== undefined\r\n );\r\n}\r\n\r\n/**\r\n * Find the refinement criterion associated with this product refiner value.\r\n * @param productRefinerValue Product refiner value to match.\r\n * @param refinementCriteria Selected refinement criteria.\r\n */\r\nexport function findMatchingRefinementCriterion(\r\n productRefinerValue: ProductRefinerValue,\r\n refinementCriteria: ProductRefinerValue[]\r\n): ProductRefinerValue | undefined {\r\n // If the value is a range, then match only on data type value; otherwise match on item string\r\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\r\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\r\n );\r\n}\r\n\r\n/**\r\n * Find the refinement criterion associated with this product refiner value.\r\n * @param productRefinerValue Product refiner value to match.\r\n * @param refinementCriteria Selected refinement criteria.\r\n * @param refinementCriterion\r\n */\r\nexport function isMatchingRefinementCriterion(\r\n productRefinerValue: ProductRefinerValue,\r\n refinementCriterion: ProductRefinerValue,\r\n parent?: IProductRefinerHierarchy\r\n): boolean {\r\n // If the value is a range, then match only on data type value; otherwise match on item string\r\n // Distinguish by displaytype also\r\n return (\r\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\r\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\r\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\r\n ((parent?.DisplayTemplateValue === DisplayTemplate.Range\r\n ? isRangeType(refinementCriterion.DataTypeValue)\r\n : isRangeTypeForInteger(refinementCriterion.DataTypeValue)) ||\r\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\r\n );\r\n}\r\nexport function getIntegerRangeName(productRefinerValue: ProductRefinerValue): string {\r\n let rangeValue = '';\r\n\r\n if (productRefinerValue.LeftValueBoundString === '' && productRefinerValue.RightValueBoundString !== '') {\r\n rangeValue = `< ${productRefinerValue.RightValueBoundLocalizedString || productRefinerValue.RightValueBoundString}`;\r\n } else if (productRefinerValue.RightValueBoundString === '' && productRefinerValue.LeftValueBoundString !== '') {\r\n rangeValue = `> ${productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}`;\r\n } else if (productRefinerValue.RightValueBoundString !== '' && productRefinerValue.LeftValueBoundString !== '') {\r\n rangeValue = `${productRefinerValue.LeftValueBoundLocalizedString ||\r\n productRefinerValue.LeftValueBoundString} - ${productRefinerValue.RightValueBoundString ||\r\n productRefinerValue.RightValueBoundString}`;\r\n }\r\n\r\n return rangeValue;\r\n}\r\n\r\n/**\r\n * Get input without formatting.\r\n * @param input - Input string.\r\n * @returns - Returns number.\r\n */\r\n\r\nexport function getInputWithoutFormatting(input: string): string {\r\n // First try to cast raw input to a number\r\n const inputAsNumber = Number(input);\r\n if (!Number.isNaN(inputAsNumber)) {\r\n return input;\r\n }\r\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\r\n // const reverseLookupResult = formattedPriceReverseLookup.get(input);\r\n // return reverseLookupResult || input;\r\n return input;\r\n}\r\nexport function getUpdatedRefinementCriteria(\r\n itemToggleNotification: IRefineItemToggleNotification,\r\n currentRefinementCriteria: ProductRefinerValue[]\r\n): ProductRefinerValue[] {\r\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\r\n let toggledItemFound = false;\r\n // Keeping only itemToggled value for integer-range type in currentRefinementCriteria\r\n if (\r\n itemToggleNotification.parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\r\n itemToggleNotification.parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\r\n ) {\r\n currentRefinementCriteria = currentRefinementCriteria.filter(r => {\r\n return r.RefinerRecordId !== itemToggleNotification.productRefinerValue.RefinerRecordId;\r\n });\r\n }\r\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\r\n if (\r\n isMatchingRefinementCriterion(\r\n itemToggleNotification.productRefinerValue,\r\n selectedCriterion,\r\n itemToggleNotification.parentProductRefinerHierarchy\r\n )\r\n ) {\r\n toggledItemFound = true;\r\n if (itemToggleNotification.isSelecting) {\r\n const next = {\r\n ...selectedCriterion,\r\n LeftValueBoundString:\r\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\r\n selectedCriterion.LeftValueBoundString,\r\n RightValueBoundString:\r\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\r\n selectedCriterion.RightValueBoundString\r\n };\r\n updatedRefinementCriteria.push(next);\r\n } // Else the item is being de-selected, so omit it from the refinement criteria\r\n } else {\r\n // Keep existing criterion because it is not in the item toggle notification\r\n updatedRefinementCriteria.push(selectedCriterion);\r\n }\r\n });\r\n\r\n if (!toggledItemFound) {\r\n const next = {\r\n ...itemToggleNotification.productRefinerValue,\r\n LeftValueBoundString:\r\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\r\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\r\n RightValueBoundString:\r\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\r\n itemToggleNotification.productRefinerValue.RightValueBoundString\r\n };\r\n updatedRefinementCriteria.push(next);\r\n\r\n // If single select, then deselect any others in the parent refiner group\r\n if (\r\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\r\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\r\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\r\n ) {\r\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\r\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\r\n // Do nothing\r\n } else {\r\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\r\n isMatchingRefinementCriterion(child, criterion, itemToggleNotification.parentProductRefinerHierarchy)\r\n );\r\n if (matchingIndex > -1) {\r\n updatedRefinementCriteria.splice(matchingIndex, 1);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return updatedRefinementCriteria;\r\n}\r\n\r\nexport function formatPrice(\r\n amount: string | undefined,\r\n currency: string | undefined,\r\n locale: string | undefined,\r\n telemetry: ITelemetry\r\n): string {\r\n if (!amount || !currency) {\r\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\r\n return amount || '';\r\n }\r\n const priceAmount = (amount && Number(amount)) || 0;\r\n let result: string;\r\n\r\n try {\r\n result = new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currencyDisplay: 'symbol',\r\n currency,\r\n minimumFractionDigits: 0\r\n }).format(priceAmount);\r\n } catch (error) {\r\n result = `${priceAmount} ${currency}`;\r\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\r\n }\r\n\r\n return result;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { ProductListInventoryFilteringOptions } from '../actions';\r\nimport { IChoiceSummaryProps } from './choice-summary.props';\r\nimport { getIntegerRangeName, isMatchingRefinementCriterion, isRangeType } from './utilities';\r\n\r\ninterface IRefinerMap {\r\n key: string;\r\n value: ProductRefinerValue;\r\n rangeDisplayType?: number | undefined;\r\n}\r\n\r\n/**\r\n * ChoiceSummary component.\r\n */\r\n@observer\r\nexport default class ChoiceSummary extends React.PureComponent {\r\n private readonly closeButtonGlyph: string = 'msi-close-btn';\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n @computed get selectedRefinersMap(): IRefinerMap[] {\r\n let { selectedChoices } = this.props;\r\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\r\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\r\n selectedChoices = selectedChoices.filter(choice => {\r\n const parent = refinerHierarchy.find(\r\n (hierarchy: IProductRefinerHierarchy) =>\r\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\r\n );\r\n return parent && parent.RecordId !== channelInventoryConfigurationId;\r\n });\r\n }\r\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\r\n const rangeParentDisplay = refinerHierarchy.filter(p => p.RecordId === selectedRefiner.RefinerRecordId);\r\n return {\r\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\r\n value: selectedRefiner,\r\n // parameter to store Display Template type\r\n rangeDisplayType: rangeParentDisplay[0]?.DisplayTemplateValue || undefined\r\n } as IRefinerMap;\r\n });\r\n }\r\n\r\n constructor(props: Readonly) {\r\n super(props);\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\r\n const items = this.selectedRefinersMap;\r\n this.payLoad.contentAction.etext = clearAllText;\r\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n\r\n return (\r\n
\r\n {items.length > 0 && label && {label}}\r\n
    \r\n {items.map((item: IRefinerMap) => {\r\n this.payLoad.contentAction.etext = item.key;\r\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n // Get range value for Range display and integer type only (not for Integer with TextBox(4) display)\r\n const rangeInteger =\r\n item.value.DataTypeValue === AttributeDataType.Integer &&\r\n item.rangeDisplayType &&\r\n item.rangeDisplayType === DisplayTemplate.Range &&\r\n item.value.RefinerRecordId !== 0;\r\n const newIntRange = rangeInteger\r\n ? item.key\r\n : item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\r\n ? item.value.LeftValueBoundString\r\n : (item.value.LeftValueBoundLocalizedString || item.value.LeftValueBoundLocalizedString === undefined) &&\r\n item.value.RefinerRecordId === 0\r\n ? item.key\r\n : item.value.LeftValueBoundString;\r\n return (\r\n
  • \r\n \r\n {newIntRange}\r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n {items.length > 0 && clearAllText && (\r\n \r\n {clearAllText}\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\r\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\r\n const overallFormat = choiceFormat || '{1}';\r\n const rangeFormat = choiceRangeValueFormat;\r\n let refinerName = '';\r\n let parent: IProductRefinerHierarchy | undefined;\r\n if (refinerHierarchy && refinerHierarchy.find) {\r\n parent = refinerHierarchy.find(\r\n (hierarchy: IProductRefinerHierarchy) =>\r\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\r\n );\r\n\r\n if (!parent) {\r\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\r\n } else {\r\n refinerName = parent.KeyName || '';\r\n }\r\n }\r\n\r\n let refinerValueName: string;\r\n if (isRangeType(productRefinerValue.DataTypeValue)) {\r\n refinerValueName = rangeFormat\r\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\r\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\r\n } else if (productRefinerValue.RefinerRecordId === 0) {\r\n const filterValue = refinerValues?.Values.find(\r\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\r\n );\r\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\r\n } else {\r\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n }\r\n\r\n if (refinerName === 'Rating' || refinerName === 'Price') {\r\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\r\n }\r\n // Adding integer range format\r\n if (\r\n productRefinerValue.DataTypeValue === AttributeDataType.Integer &&\r\n parent?.DisplayTemplateValue === DisplayTemplate.Range &&\r\n productRefinerValue.RefinerRecordId !== 0\r\n ) {\r\n refinerValueName = getIntegerRangeName(productRefinerValue);\r\n return refinerValueName;\r\n }\r\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\r\n }\r\n\r\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\r\n if (!amount || !currency) {\r\n this.props.telemetry.trace('[choice-summary] could not format price');\r\n return amount || '';\r\n }\r\n let result = amount;\r\n\r\n try {\r\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\r\n } catch (error) {\r\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private readonly _onClick = (e: React.MouseEvent): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const target = e.currentTarget as HTMLElement;\r\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\r\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\r\n\r\n if (this.props.onChoiceClicked) {\r\n this.props.onChoiceClicked({\r\n clearAll,\r\n itemClicked: target,\r\n choiceClicked: selectedRefiner,\r\n nextItemToFocus: target.nextSibling as HTMLElement\r\n });\r\n }\r\n };\r\n\r\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\r\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\r\n return (result && result.value) || undefined;\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface IErrorMessage {\r\n text?: string;\r\n}\r\n\r\nexport const ErrorMessage: React.FC = ({ text }) => {\r\n return (\r\n \r\n
\r\n {` `}\r\n {text}\r\n {` `}\r\n
\r\n
\r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IKrannichCSearchResultContainerResources } from '../krannich-c-search-result-container.props.autogenerated';\r\n\r\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\r\n\r\ninterface IFeatureSearchResultItem {\r\n product: SimpleProduct | null;\r\n context: ICoreContext;\r\n resources: IKrannichCSearchResultContainerResources;\r\n imageSettings?: IImageSettings;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n recommendation?: string;\r\n}\r\n\r\nexport const FeatureSearchResultItem: React.FC = ({\r\n product,\r\n context,\r\n imageSettings,\r\n resources,\r\n telemetryContent,\r\n recommendation\r\n}) => {\r\n if (product === null) {\r\n return null;\r\n }\r\n\r\n const productName = product.Name;\r\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\r\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\r\n const fallbackImage = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\r\n const heading =\r\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n
\r\n \r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n fallbackImage,\r\n context.actionContext.requestContext\r\n )}\r\n
\r\n \r\n
\r\n

{heading}

\r\n {renderProductTitle(product?.Name)}\r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction renderProductPlacementImage(\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n altText?: string,\r\n fallbackImage?: string,\r\n context?: IRequestContext\r\n): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : ''\r\n };\r\n const imageProps = {\r\n gridSettings,\r\n imageSettings,\r\n fallBackSrc: fallbackImage\r\n };\r\n return ;\r\n}\r\n\r\nfunction renderProductTitle(title?: string): JSX.Element | null {\r\n return

{title}

;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface ILink {\r\n className?: string;\r\n text?: string;\r\n href?: string;\r\n ariaLabel?: string;\r\n}\r\n\r\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\r\n \r\n {' '}\r\n {text}{' '}\r\n \r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n\r\nexport interface ISearchResultModalViewProps {\r\n modal: React.ReactElement;\r\n modalHeader: React.ReactElement;\r\n modalFooter: React.ReactElement;\r\n modalBody: React.ReactElement;\r\n}\r\n\r\ninterface IModalToggleProps {\r\n innerRef: React.RefObject | undefined;\r\n id: string;\r\n text: string;\r\n ariaLabel: string;\r\n onClick(): void;\r\n}\r\n\r\nexport interface ISearchResultModalResources {\r\n modalTitle: string;\r\n modalCloseButtonText: string;\r\n}\r\n\r\nexport interface ISearchResultModalProps {\r\n resources: ISearchResultModalResources;\r\n isOpen: boolean;\r\n returnRef: React.RefObject | undefined;\r\n onModalToggle(): void;\r\n}\r\n\r\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\r\n const { text, onClick, ariaLabel, innerRef, id } = props;\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\r\n return {\r\n modal: modalNode(props),\r\n modalHeader: modalHeaderNode(props),\r\n modalFooter: modalFooterNode(props),\r\n modalBody: \r\n };\r\n};\r\n\r\nconst modalNode = (props: ISearchResultModalProps) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\r\n return {props.resources.modalTitle};\r\n};\r\n\r\nconst modalFooterNode = (props: ISearchResultModalProps) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\r\nimport { ProductComponent } from '../components/productCard.component';\r\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { Customer, ProductPrice, ProductSearchResult, Cart, AsyncResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n IKrannichCSearchResultContainerResources,\r\n IPlpRequestPriceButtonData\r\n} from '../krannich-c-search-result-container.props.autogenerated';\r\n\r\ninterface IProductSearchResultItems {\r\n products: ProductSearchResult[];\r\n context: ICoreContext;\r\n resources: IKrannichCSearchResultContainerResources;\r\n imageSettings?: IImageSettings;\r\n moduleType: string;\r\n moduleId: string;\r\n allowBackNavigation?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n quickviewSlot?: {} | null | undefined;\r\n productComparisonButton?: {} | null | undefined;\r\n channelInventoryConfigurationId?: number;\r\n isPriceMinMaxEnabled?: boolean;\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n gridListView: boolean;\r\n requestPriceBtn: IPlpRequestPriceButtonData | undefined;\r\n activePrices: ProductPrice[];\r\n customerInformation?: Customer;\r\n atpData: any;\r\n cart?: AsyncResult;\r\n}\r\n\r\n/**\r\n * Returns the product inventory label.\r\n * @param channelInventoryConfigurationId - The channel configuration Id.\r\n * @param product - The product.\r\n * @returns The inventory label.\r\n */\r\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\r\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\r\n return undefined;\r\n }\r\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\r\n if (inventoryAttribute) {\r\n return inventoryAttribute.TextValue;\r\n }\r\n return undefined;\r\n}\r\n\r\nexport const ProductSearchResultItems: React.FC = ({\r\n products,\r\n context,\r\n imageSettings,\r\n resources,\r\n moduleType,\r\n moduleId,\r\n allowBackNavigation,\r\n telemetryContent,\r\n quickviewSlot,\r\n productComparisonButton,\r\n channelInventoryConfigurationId,\r\n isPriceMinMaxEnabled,\r\n productsDimensionAvailabilities,\r\n gridListView,\r\n requestPriceBtn,\r\n activePrices,\r\n customerInformation,\r\n atpData,\r\n cart\r\n}) => {\r\n const priceResources: IPriceComponentResources = {\r\n priceRangeSeparator: resources.priceRangeSeparator\r\n };\r\n return (\r\n
    \r\n {products.map((product: ProductSearchResult, index: number) => (\r\n
  • \r\n \r\n ArrayExtensions.hasElements(dimensionAvailability) &&\r\n dimensionAvailability[0].masterProductId === product.MasterProductId\r\n )}\r\n resources={resources}\r\n requestPriceBtn={requestPriceBtn}\r\n activePrices={activePrices}\r\n customerInformation={customerInformation}\r\n atpData={atpData}\r\n cart={cart}\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 { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\r\nimport debounce from 'lodash/debounce';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\r\n\r\ntype InputType = 'Min' | 'Max';\r\n\r\nexport type RangeRefineItemType = 'slider' | 'input';\r\n\r\n/**\r\n * Range refine item properties.\r\n */\r\nexport interface IRangeRefineItemProps extends IRefineItemProps {\r\n rangeType: RangeRefineItemType;\r\n minValueSliderThumbAriaLabel?: string;\r\n maxValueSliderThumbAriaLabel?: string;\r\n sliderKey?: string;\r\n}\r\n\r\n/**\r\n * Range refine item state.\r\n */\r\nexport interface IRangeRefineItemState extends IRefineItemState {\r\n validationErrorMin: string | undefined;\r\n validationErrorMax: string | undefined;\r\n selectedMin: string | undefined;\r\n selectedMax: string | undefined;\r\n touchedMin: boolean;\r\n touchedMax: boolean;\r\n sliderId: string;\r\n minValue: string | undefined;\r\n maxValue: string | undefined;\r\n labels: ISliderLabel[];\r\n sliderThumbs: ISliderThumbProps[];\r\n minValueState: number;\r\n maxValueState: number;\r\n}\r\n\r\n/**\r\n * RangeRefineItem component (controlled by RefineSubmenu).\r\n */\r\n@observer\r\nexport default class RangeRefineItem extends React.Component {\r\n private readonly _formattedPriceReverseLookup: Map = new Map();\r\n\r\n private readonly minInput: React.RefObject;\r\n\r\n private readonly maxInput: React.RefObject;\r\n\r\n @computed get currencyCode(): string {\r\n return this.props.productRefinerValue.UnitText || '';\r\n }\r\n\r\n public constructor(props: IRangeRefineItemProps) {\r\n super(props);\r\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\r\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\r\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\r\n this._changeMin = this._changeMin.bind(this);\r\n this._changeMax = this._changeMax.bind(this);\r\n this._finishChangeMin = this._finishChangeMin.bind(this);\r\n this._finishChangeMax = this._finishChangeMax.bind(this);\r\n\r\n this.minInput = React.createRef();\r\n this.maxInput = React.createRef();\r\n\r\n const { selectedRefinementCriterion } = this.props;\r\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\r\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\r\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\r\n this.props.productRefinerValue.RefinerRecordId\r\n )}`;\r\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\r\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\r\n const minPrice = this._formatPrice(minValue);\r\n const maxPrice = this._formatPrice(maxValue);\r\n const labels: ISliderLabel[] =\r\n this.props.parentProductRefinerHierarchy.KeyName === 'Price'\r\n ? this.getLabels(sliderId, minPrice, maxPrice)\r\n : this.getLabels(sliderId, String(minValue), String(maxValue));\r\n const selectedMin =\r\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\r\n const selectedMax =\r\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\r\n this.props.productRefinerValue.RightValueBoundString ??\r\n maxValue;\r\n const selectedMinPrice = this._formatPrice(selectedMin);\r\n const selectedMaxPrice = this._formatPrice(selectedMax);\r\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\r\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\r\n sliderId,\r\n sliderKeyString,\r\n selectedMin,\r\n selectedMinPrice,\r\n selectedMax,\r\n selectedMaxPrice,\r\n maxPrice\r\n );\r\n this.state = {\r\n isChecked: false,\r\n validationErrorMin: undefined,\r\n validationErrorMax: undefined,\r\n selectedMin: initialMin,\r\n selectedMax: initialMax,\r\n touchedMin: false,\r\n touchedMax: false,\r\n sliderId,\r\n minValue,\r\n maxValue,\r\n labels,\r\n sliderThumbs,\r\n minValueState: 0,\r\n maxValueState: 0\r\n };\r\n }\r\n public componentDidMount() {\r\n if (this.state.selectedMax === undefined) {\r\n this.setState({\r\n selectedMax: this.props.productRefinerValue.RightValueBoundString\r\n });\r\n }\r\n }\r\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\r\n if (previousProps !== this.props) {\r\n this.updateSliderProps();\r\n }\r\n }\r\n\r\n public render(): JSX.Element | undefined {\r\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\r\n\r\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\r\n refineItemCommonProps.telemetry.error(\r\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\r\n );\r\n return undefined;\r\n }\r\n\r\n if (this.props.rangeType === 'input') {\r\n return this._renderInputFields();\r\n }\r\n\r\n return this._renderSlider();\r\n }\r\n\r\n /**\r\n * Function to update slider props.\r\n */\r\n private updateSliderProps(): void {\r\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\r\n this.props.productRefinerValue.RefinerRecordId\r\n )}`;\r\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\r\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\r\n const minPrice = this._formatPrice(minValue);\r\n const maxPrice = this._formatPrice(maxValue);\r\n const labels: ISliderLabel[] =\r\n this.props.parentProductRefinerHierarchy.KeyName === 'Price'\r\n ? this.getLabels(sliderId, minPrice, maxPrice)\r\n : this.getLabels(sliderId, String(minValue), String(maxValue));\r\n const selectedMin =\r\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\r\n const selectedMax =\r\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\r\n this.props.productRefinerValue.RightValueBoundString ??\r\n maxValue;\r\n const selectedMinPrice = this._formatPrice(selectedMin);\r\n const selectedMaxPrice = this._formatPrice(selectedMax);\r\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\r\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\r\n sliderId,\r\n sliderKeyString,\r\n selectedMin,\r\n selectedMinPrice,\r\n selectedMax,\r\n selectedMaxPrice,\r\n maxPrice\r\n );\r\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\r\n }\r\n\r\n /**\r\n * Function to create the labels for slider.\r\n * @param sliderId - Slider element id for the DOM.\r\n * @param minPrice - Slider min value.\r\n * @param maxPrice - Slider max value.\r\n * @returns Array labels.\r\n */\r\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\r\n return [\r\n {\r\n labelId: `${sliderId}_start`,\r\n labelString: `${minPrice}`,\r\n labelPositioning: 'start'\r\n },\r\n {\r\n labelId: `${sliderId}_end`,\r\n labelString: `${maxPrice}`,\r\n labelPositioning: 'end'\r\n }\r\n ];\r\n };\r\n\r\n /**\r\n * Function to create the slider thumbs for slider.\r\n * @param sliderId - Slider element id for the DOM.\r\n * @param sliderKey - Unique key for slider.\r\n * @param selectedMin - Slider selected min value.\r\n * @param selectedMinPrice - Slider selected min price.\r\n * @param selectedMax - Slider selected max value.\r\n * @param selectedMaxPrice - Slider selected max price..\r\n * @param maxPrice - Slider max price..\r\n * @returns Slider Thumb Props.\r\n */\r\n private readonly getSliderThumbs = (\r\n sliderId: string,\r\n sliderKey: string,\r\n selectedMin: string,\r\n selectedMinPrice: string,\r\n selectedMax: string | undefined,\r\n selectedMaxPrice: string,\r\n maxPrice: string\r\n ): ISliderThumbProps[] => {\r\n const sliderThumbDefaultValue = 0;\r\n return [\r\n {\r\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\r\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\r\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\r\n ariaValueText: `${selectedMinPrice}`\r\n },\r\n {\r\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\r\n value: Number(selectedMax) || Number(maxPrice),\r\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\r\n ariaValueText: `${selectedMaxPrice}`\r\n }\r\n ];\r\n };\r\n\r\n private _renderInputFields(): JSX.Element | undefined {\r\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\r\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\r\n\r\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\r\n const formAttrs = {\r\n 'aria-label': rangeAriaLabel,\r\n 'aria-disabled': isDisabled\r\n };\r\n\r\n // To enable price formatting of selected fields, this is the approach:\r\n // initial value: min=0 formatted as price, max=undefined\r\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\r\n // onBlur: validate and format entered value as price\r\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\r\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\r\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\r\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\r\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\r\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\r\n const currencySign = this.props.context.cultureFormatter.formatCurrency(this.currencyCode).replace('NaN', '');\r\n return (\r\n
\r\n \r\n \r\n {validationErrorMin && (\r\n \r\n {validationErrorMin}\r\n \r\n )}\r\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\r\n \r\n {validationErrorMax}\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n private _renderSlider(): JSX.Element | undefined {\r\n const { isDisabled, sliderKey } = this.props;\r\n const ariaAttributes = {\r\n 'aria-disabled': isDisabled\r\n };\r\n return (\r\n <>\r\n \r\n {this._renderInputFields()}\r\n \r\n );\r\n }\r\n\r\n private _changeMin(event: React.FocusEvent): void {\r\n this._changeValue(event, 'Min');\r\n }\r\n\r\n private _changeMax(event: React.FocusEvent): void {\r\n this._changeValue(event, 'Max');\r\n }\r\n\r\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\r\n const selectedKey = `selected${inputType}`;\r\n const touchedKey = `touched${inputType}`;\r\n //VSI Customization for max Value\r\n let maxCheckValue = event.currentTarget.value;\r\n if (Number(maxCheckValue) > Number(this.state.maxValue!)) {\r\n maxCheckValue = this.state.maxValue!;\r\n }\r\n this.setState({\r\n [selectedKey]: this._getInputWithoutFormatting(maxCheckValue),\r\n [touchedKey]: true\r\n });\r\n }\r\n\r\n private _finishChangeMin(event: React.FocusEvent): boolean {\r\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\r\n this.setState({\r\n selectedMin: selectedMinValue,\r\n minTouched: false\r\n });\r\n const minInput = Number(selectedMinValue);\r\n const {\r\n onToggle,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n refineItemCommonProps,\r\n selectedRefinementCriterion\r\n } = this.props;\r\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\r\n\r\n const maxNum = max ? Number(max) : undefined;\r\n\r\n if (isNaN(minInput)) {\r\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\r\n this._focus('Min');\r\n return false;\r\n }\r\n\r\n if (this._validateRange(minInput, maxNum)) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: minInput,\r\n rangeEnd: maxNum\r\n });\r\n return true;\r\n }\r\n this._focus('Min');\r\n\r\n return false;\r\n }\r\n\r\n private _finishChangeMax(event: React.FocusEvent): boolean {\r\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\r\n this.setState({\r\n selectedMax: selectedMaxValue,\r\n maxTouched: false\r\n });\r\n const maxInput = Number(selectedMaxValue);\r\n const {\r\n onToggle,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n refineItemCommonProps,\r\n selectedRefinementCriterion\r\n } = this.props;\r\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\r\n\r\n const minNum = Number(min);\r\n\r\n if (isNaN(maxInput)) {\r\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\r\n this._focus('Max');\r\n return false;\r\n }\r\n\r\n if (this._validateRange(minNum, maxInput)) {\r\n if (productRefinerValue) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: minNum,\r\n rangeEnd: maxInput\r\n });\r\n } else {\r\n this._focus('Max');\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _focus(inputType: InputType): void {\r\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\r\n\r\n setTimeout(() => {\r\n if (ref && ref.current) {\r\n ref.current.focus();\r\n }\r\n }, 50);\r\n }\r\n\r\n private _getFormattedSelectedValue(\r\n selected: string | undefined,\r\n touched: boolean,\r\n validationError: string | undefined\r\n ): string | undefined {\r\n if (touched || validationError || selected === undefined) {\r\n return selected;\r\n }\r\n return selected;\r\n }\r\n\r\n private _validateRange(min: number, max: number | undefined): boolean {\r\n const { refineItemCommonProps } = this.props;\r\n if (max === undefined) {\r\n return true;\r\n }\r\n\r\n if (min > max) {\r\n this.setState({\r\n validationErrorMin: refineItemCommonProps.validationErrorRange,\r\n validationErrorMax: refineItemCommonProps.validationErrorRange\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _formatPrice(amount: string | undefined): string {\r\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\r\n return result;\r\n }\r\n\r\n private _getInputWithoutFormatting(input: string): string {\r\n // First try to cast raw input to a number\r\n const inputAsNum = Number(input);\r\n if (!isNaN(inputAsNum)) {\r\n return input;\r\n }\r\n\r\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\r\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\r\n return reverseLookupResult || input;\r\n }\r\n\r\n // NOTE: Fix types once Shared Components build pipeline bug fixed\r\n private _onRangeUpdate(sliderChangeNotification: any): void {\r\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\r\n if (sliderChangeNotification.eventType !== 'mousemove') {\r\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\r\n if (productRefinerValue && sliderChangeNotification) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: sliderChangeNotification.firstThumbValue,\r\n rangeEnd: sliderChangeNotification.secondThumbValue\r\n });\r\n\r\n this._focusOnSliderThumb(sliderChangeNotification);\r\n }\r\n }\r\n }\r\n\r\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\r\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\r\n if (productRefinerValue && sliderChangeNotification) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: sliderChangeNotification.firstThumbValue,\r\n rangeEnd: sliderChangeNotification.secondThumbValue\r\n });\r\n\r\n this._focusOnSliderThumb(sliderChangeNotification);\r\n }\r\n }\r\n\r\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\r\n if (sliderChangeNotification.id) {\r\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\r\n if (element) {\r\n setTimeout(() => {\r\n element.focus();\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n private _handleRangeTooltipText(tooltip: number): string {\r\n let toolTipLabel;\r\n if (this.props.parentProductRefinerHierarchy.KeyName === 'Price') {\r\n toolTipLabel = this._formatPrice(`${tooltip}`);\r\n } else {\r\n toolTipLabel = String(tooltip);\r\n }\r\n return toolTipLabel;\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport {\r\n AttributeDataType,\r\n DisplayTemplate,\r\n ProductRefinerSource,\r\n ProductRefinerValue,\r\n RefinerType\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { IRefineItemCommonProps } from './refine-item.props.common';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\nimport { getIntegerRangeName, isSingleSelectRangeTypeIntegerSelected } from './utilities';\r\n/**\r\n * RefineItem properties.\r\n */\r\nexport interface IRefineItemProps {\r\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\r\n productRefinerValue: ProductRefinerValue;\r\n selectedRefinementCriterion: ProductRefinerValue | undefined;\r\n selectedRefinerValues?: ProductRefinerValue[];\r\n refineItemCommonProps: IRefineItemCommonProps;\r\n isDisabled: boolean;\r\n context: ICoreContext>;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n index?: number;\r\n productCountAriaLabel?: string;\r\n singleProductCountAriaLabel?: string;\r\n refineItemAriaLabel?: string;\r\n refineItemsAriaLabel?: string;\r\n isMobileView?: boolean;\r\n\r\n /**\r\n * The telemetry content\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onToggle(notfication: Readonly): void;\r\n urlBuilder(refiner: IRefineItemToggleNotification): string;\r\n}\r\n\r\n/**\r\n * Refine item state.\r\n */\r\nexport interface IRefineItemState extends React.ComponentState {\r\n isChecked: boolean;\r\n renderingError?: object;\r\n}\r\n\r\n/**\r\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\r\n */\r\nexport default class RefineItem extends React.Component {\r\n private readonly anchorType: React.RefObject;\r\n\r\n private readonly payLoad: IPayLoad;\r\n\r\n public constructor(props: IRefineItemProps) {\r\n super(props);\r\n this._onClick = this._onClick.bind(this);\r\n this.state = {\r\n isChecked: !!this.props.selectedRefinementCriterion\r\n };\r\n this.anchorType = React.createRef();\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n selectedRefinementCriterion,\r\n productCountAriaLabel,\r\n singleProductCountAriaLabel,\r\n index,\r\n children,\r\n onToggle,\r\n context,\r\n telemetryContent,\r\n refineItemAriaLabel,\r\n refineItemsAriaLabel,\r\n ...attrs\r\n } = this.props;\r\n if (!productRefinerValue) {\r\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\r\n return undefined;\r\n }\r\n if (!productRefinerValue.LeftValueBoundString) {\r\n refineItemCommonProps.telemetry.warning(\r\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\r\n );\r\n }\r\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\r\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\r\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\r\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\r\n const isChecked = !!selectedRefinementCriterion;\r\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\r\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\r\n return this._renderRating(\r\n productRefinerValue,\r\n parentProductRefinerHierarchy,\r\n isChecked,\r\n context,\r\n index,\r\n telemetryContent,\r\n productCountAriaLabel,\r\n singleProductCountAriaLabel\r\n );\r\n }\r\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\r\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\r\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\r\n const productCount = productRefinerValue.Count || 0;\r\n let refineMenuItemAriaLabel;\r\n if (productCount === 1) {\r\n refineMenuItemAriaLabel = refineItemAriaLabel\r\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\r\n : '';\r\n } else {\r\n refineMenuItemAriaLabel = refineItemsAriaLabel\r\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\r\n : '';\r\n }\r\n\r\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\r\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\r\n\r\n let className = 'ms-refine-submenu-item';\r\n if (shouldDisplayAsSwatch) {\r\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\r\n }\r\n\r\n // If the swatch has no color or image specified, it should be displayed as text.\r\n // We don't use swatch logic to display the number of the results found together with the text.\r\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\r\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\r\n const hasContentSwatch = hasColor || hasImage;\r\n if (\r\n parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\r\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\r\n ) {\r\n const rangeValue = getIntegerRangeName(productRefinerValue);\r\n return (\r\n
  • \r\n \r\n \r\n \r\n
  • \r\n );\r\n } else {\r\n return (\r\n
  • \r\n \r\n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\r\n \r\n \r\n
  • \r\n );\r\n }\r\n }\r\n\r\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\r\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\r\n return shouldDisplayAsSwatch;\r\n }\r\n\r\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\r\n const productRefinerValue = this.props.productRefinerValue;\r\n\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\r\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n const swatchItems = [\r\n {\r\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\r\n value: text,\r\n dimensionType,\r\n colorHexCode: productRefinerValue.SwatchColorHexCode,\r\n imageUrl: productRefinerValue.SwatchImageUrl\r\n }\r\n ];\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _getRefinerUrl(): string {\r\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\r\n\r\n if (productRefinerValue) {\r\n return urlBuilder({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: !selectedRefinementCriterion\r\n });\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private readonly _onClick = (e: React.MouseEvent): void => {\r\n e.preventDefault();\r\n\r\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\r\n if (productRefinerValue) {\r\n this.props.onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: !selectedRefinementCriterion\r\n });\r\n\r\n setTimeout(() => {\r\n this.anchorType.current && this.anchorType.current.focus();\r\n }, 0);\r\n }\r\n };\r\n\r\n private _renderRating(\r\n productRefinerValue: ProductRefinerValue,\r\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\r\n isChecked: boolean,\r\n context: ICoreContext,\r\n index?: number,\r\n telemetryContent?: ITelemetryContent,\r\n ratingUserCountAriaLabel?: string,\r\n ratingSingleUserCountAriaLabel?: string\r\n ): JSX.Element | undefined {\r\n if (productRefinerValue.LeftValueBoundString) {\r\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\r\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\r\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\r\n const ratingRefiner = this.props.selectedRefinerValues?.find(\r\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\r\n );\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\r\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\r\n const defaultChkProductCount = 1;\r\n let ratingComponentClass: string = 'ms-rating-component';\r\n if (refinerRating > selectedRating) {\r\n ratingComponentClass = `${ratingComponentClass}__up`;\r\n } else if (refinerRating < selectedRating) {\r\n ratingComponentClass = `${ratingComponentClass}__down`;\r\n } else {\r\n ratingComponentClass = `${ratingComponentClass}__current`;\r\n }\r\n const productCountAriaLabelValue =\r\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\r\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\r\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\r\n return (\r\n \r\n \r\n \r\n \r\n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\r\n \r\n \r\n \r\n );\r\n }\r\n return undefined;\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport { isUndefined } from 'lodash';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport { IRefineItemState } from './refine-item';\r\nimport { isCustomRangeTypeIntegerSelected } from './utilities';\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IRefineItemCommonProps } from './refine-item.props.common';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\n\r\nexport type RangeRefineItemInputType = 'slider' | 'input';\r\n\r\n/**\r\n * Range refine item properties.\r\n */\r\nexport interface IRangeRefineItemInputProps {\r\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\r\n selectedRefinementCriterion: ProductRefinerValue | undefined;\r\n refineItemCommonProps: IRefineItemCommonProps;\r\n isDisabled: boolean;\r\n rangeType: RangeRefineItemInputType;\r\n\r\n /**\r\n * The telemetry content\r\n */\r\n onToggle(notfication: Readonly): void;\r\n}\r\n\r\n/**\r\n * Range refine item state.\r\n */\r\nexport interface IRangeRefineItemInputState extends IRefineItemState {\r\n validationErrorMin: string | undefined;\r\n validationErrorMax: string | undefined;\r\n selectedMin: string | undefined;\r\n selectedMax: string | undefined;\r\n invalidData: boolean | undefined;\r\n}\r\n\r\n/**\r\n * RangeRefineItem component (controlled by RefineSubmenu).\r\n */\r\n@observer\r\nexport default class RangeRefineItemInput extends React.Component {\r\n private readonly _formattedPriceReverseLookup: Map = new Map();\r\n\r\n private readonly minInput: React.RefObject;\r\n\r\n private readonly maxInput: React.RefObject;\r\n\r\n public constructor(props: IRangeRefineItemInputProps) {\r\n super(props);\r\n this._changeMinInputRange = this._changeMinInputRange.bind(this);\r\n this._changeMaxInputRange = this._changeMaxInputRange.bind(this);\r\n this._applyCustom = this._applyCustom.bind(this);\r\n\r\n this.minInput = React.createRef();\r\n this.maxInput = React.createRef();\r\n let initialMin = '';\r\n let initialMax = '';\r\n const { selectedRefinementCriterion, parentProductRefinerHierarchy } = this.props;\r\n if (selectedRefinementCriterion) {\r\n initialMin = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\r\n ? ''\r\n : selectedRefinementCriterion?.LeftValueBoundString || '';\r\n initialMax = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\r\n ? ''\r\n : selectedRefinementCriterion?.RightValueBoundString || '';\r\n }\r\n\r\n this.state = {\r\n validationErrorMin: undefined,\r\n validationErrorMax: undefined,\r\n selectedMin: initialMin,\r\n selectedMax: initialMax,\r\n invalidData: !(initialMin && initialMax),\r\n isChecked: false\r\n };\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IRangeRefineItemInputProps, nextState: IRangeRefineItemInputState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n nextState.invalidData = !(nextState.selectedMin && nextState.selectedMax);\r\n return true;\r\n }\r\n\r\n public componentDidUpdate(previousProps: IRangeRefineItemInputProps): void {\r\n if (previousProps !== this.props) {\r\n this.updateInputRangerProps();\r\n }\r\n }\r\n\r\n public render(): JSX.Element | undefined {\r\n if (this.props.rangeType === 'input') {\r\n return this._renderInputFields();\r\n }\r\n return undefined;\r\n }\r\n\r\n // /**\r\n // * Function to update slider props.\r\n // */\r\n private updateInputRangerProps(): void {\r\n const selectedMin = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\r\n ? ''\r\n : this.props.selectedRefinementCriterion?.LeftValueBoundString;\r\n const selectedMax = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\r\n ? ''\r\n : this.props.selectedRefinementCriterion?.RightValueBoundString;\r\n this.setState({ selectedMin, selectedMax });\r\n }\r\n\r\n private _renderInputFields(): JSX.Element | undefined {\r\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\r\n const { validationErrorMin, validationErrorMax } = this.state;\r\n\r\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\r\n const formAttrs = {\r\n 'aria-label': rangeAriaLabel,\r\n 'aria-disabled': isDisabled\r\n };\r\n\r\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\r\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\r\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n return (\r\n
  • \r\n
    \r\n
    \r\n \r\n {' - '}\r\n \r\n {validationErrorMin && (\r\n \r\n {validationErrorMin}\r\n \r\n )}\r\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\r\n \r\n {validationErrorMax}\r\n \r\n )}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
  • \r\n );\r\n }\r\n\r\n private _applyCustom(event: React.MouseEvent): void {\r\n const selectedMinValue = this._getInputWithoutFormatting(this.state.selectedMin || '');\r\n this.setState({\r\n selectedMin: selectedMinValue,\r\n minTouched: false\r\n });\r\n const minInput = Number(selectedMinValue);\r\n const { onToggle, parentProductRefinerHierarchy } = this.props;\r\n const max = this.state.selectedMax;\r\n\r\n const maxNum = max ? Number(max) : undefined;\r\n const productRefinerValue: ProductRefinerValue = {\r\n RefinerRecordId: parentProductRefinerHierarchy.Values[0].RefinerRecordId,\r\n LeftValueBoundString: this.state.selectedMin,\r\n RightValueBoundString: this.state.selectedMax,\r\n DataTypeValue: parentProductRefinerHierarchy.DataTypeValue,\r\n RefinerSourceValue: parentProductRefinerHierarchy.Values[0].RefinerSourceValue\r\n };\r\n\r\n if (this._validateRange(minInput, maxNum)) {\r\n onToggle({\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n isSelecting: true\r\n });\r\n }\r\n }\r\n\r\n private _changeMinInputRange(event: React.ChangeEvent): void {\r\n this.setState({\r\n selectedMin: event.target.value.trim()\r\n });\r\n }\r\n\r\n private _changeMaxInputRange(event: React.ChangeEvent): void {\r\n this.setState({\r\n selectedMax: event.target.value.trim()\r\n });\r\n }\r\n\r\n private _validateRange(min: number, max: number | undefined): boolean {\r\n const { refineItemCommonProps } = this.props;\r\n if (max === undefined) {\r\n return true;\r\n }\r\n\r\n if (min > max) {\r\n this.setState({\r\n validationErrorMin: refineItemCommonProps.validationErrorRange,\r\n validationErrorMax: refineItemCommonProps.validationErrorRange\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _getInputWithoutFormatting(input: string): string {\r\n // First try to cast raw input to a number\r\n const inputAsNum = Number(input);\r\n if (!isNaN(inputAsNum)) {\r\n return input;\r\n }\r\n\r\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\r\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\r\n return reverseLookupResult || input;\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport {\r\n AttributeDataType,\r\n DisplayTemplate,\r\n ProductRefinerSource,\r\n ProductRefinerValue,\r\n RefinerType\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\r\nimport RefineItem from './refine-item';\r\nimport { IRefineItemCommonProps } from './refine-item.props.common';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\nimport { findMatchingRefinementCriterion, isRangeTypeForInteger } from './utilities';\r\nimport RangeRefineItemInput from './range-refine-item-input';\r\n\r\n/**\r\n * Properties associated with the RefineSubmenu component.\r\n */\r\nexport interface IRefineSubmenuProps {\r\n tempRangeTypeTODO: RangeRefineItemType;\r\n minValueSliderThumbAriaLabel?: string;\r\n maxValueSliderThumbAriaLabel?: string;\r\n productRefinerHierarchy: IProductRefinerHierarchy;\r\n selectedRefinerValues: ProductRefinerValue[];\r\n refineItemCommonProps: IRefineItemCommonProps;\r\n isDisabled: boolean;\r\n isExpandedOnInitialLoad: boolean;\r\n context: ICoreContext>;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n productCountAriaLabel?: string;\r\n singleProductCountAriaLabel?: string;\r\n refineItemAriaLabel?: string;\r\n refineItemsAriaLabel?: string;\r\n isMobile?: boolean;\r\n\r\n /**\r\n * The telemetry content\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onUpdateRefiners(notfication: Readonly): void;\r\n urlBuilder(refiner: IRefineItemToggleNotification): string;\r\n}\r\n\r\n/**\r\n * Refine submenu state.\r\n */\r\nexport interface IRefineSubmenuState extends React.ComponentState {\r\n expanded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * The RefineSubmenu component renders the submenu category and child items.\r\n * This computed observes the stateful category hierarchy object.\r\n * @extends {React.PureComponent}\r\n */\r\nclass RefineSubmenu extends React.Component {\r\n constructor(props: IRefineSubmenuProps) {\r\n super(props);\r\n\r\n this._onToggleItem = this._onToggleItem.bind(this);\r\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\r\n\r\n const isExpanded = this.props.isExpandedOnInitialLoad;\r\n\r\n this.state = {\r\n expanded: isExpanded\r\n };\r\n }\r\n\r\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\r\n if (this.state === nextState && this.props === nextProps) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\r\n\r\n if (!productRefinerHierarchy) {\r\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\r\n }\r\n\r\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\r\n return null;\r\n }\r\n\r\n // VSI Customization to Hide price filter for guest users\r\n if (\r\n !this.props.context.actionContext.requestContext?.user?.isAuthenticated &&\r\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Price\r\n ) {\r\n return null;\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {productRefinerHierarchy.KeyName}\r\n \r\n \r\n {this._renderChildItems(productRefinerHierarchy)}\r\n \r\n
    \r\n );\r\n }\r\n\r\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n if (\r\n productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\r\n ) {\r\n return this._renderSingleMultiSelect(productRefinerHierarchy);\r\n }\r\n // Check if is of integer range type\r\n if (isRangeTypeForInteger(productRefinerHierarchy.DataTypeValue)) {\r\n return this._renderRange(productRefinerHierarchy);\r\n }\r\n return this._renderSingleMultiSelect(productRefinerHierarchy);\r\n }\r\n\r\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n selectedRefinerValues,\r\n context,\r\n productCountAriaLabel,\r\n singleProductCountAriaLabel,\r\n refineItemAriaLabel,\r\n refineItemsAriaLabel,\r\n isMobile\r\n } = this.props;\r\n const isSingleSelect =\r\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\r\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\r\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\r\n let selectedRefinementCriterion: ProductRefinerValue | undefined = {};\r\n const refinerValuesList = productRefinerHierarchy.Values || [];\r\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\r\n if (!child) {\r\n refineItemCommonProps.telemetry.error(\r\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\r\n );\r\n return null;\r\n }\r\n selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\r\n return (\r\n \r\n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\r\n )}\r\n refineItemCommonProps={refineItemCommonProps}\r\n onToggle={this._onToggleItem}\r\n urlBuilder={this.props.urlBuilder}\r\n isDisabled={isDisabled}\r\n key={index}\r\n index={index}\r\n context={context}\r\n moduleId={this.props.moduleId}\r\n moduleTypeName={this.props.moduleTypeName}\r\n telemetryContent={this.props.telemetryContent}\r\n productCountAriaLabel={productCountAriaLabel}\r\n refineItemAriaLabel={refineItemAriaLabel}\r\n refineItemsAriaLabel={refineItemsAriaLabel}\r\n singleProductCountAriaLabel={singleProductCountAriaLabel}\r\n isMobileView={isMobile}\r\n />\r\n );\r\n });\r\n return (\r\n \r\n {listItems}\r\n {productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\r\n if (\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\r\n ) {\r\n return 'slider';\r\n }\r\n return 'input';\r\n }\r\n\r\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n selectedRefinerValues,\r\n context,\r\n minValueSliderThumbAriaLabel,\r\n maxValueSliderThumbAriaLabel\r\n } = this.props;\r\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\r\n const refinerValuesList = productRefinerHierarchy.Values || [];\r\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\r\n if (!child) {\r\n refineItemCommonProps.telemetry.error(\r\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\r\n );\r\n return null;\r\n }\r\n\r\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\r\n\r\n const rangeType = this._getRangeType(productRefinerHierarchy);\r\n const key = selectedRefinementCriterion\r\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\r\n : `not-selected-${index}`;\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n });\r\n return
      {listItems}
    ;\r\n }\r\n\r\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\r\n this.props.onUpdateRefiners(itemToggleNotification);\r\n }\r\n\r\n private _onToggleSubmenu(): void {\r\n this.setState(prevState => ({\r\n expanded: !prevState.expanded\r\n }));\r\n }\r\n}\r\n\r\nexport default RefineSubmenu;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface ISeparator {\r\n separator: string;\r\n}\r\n\r\nexport const Separator: React.FC = ({ separator }) => (\r\n \r\n {` `}\r\n {separator}\r\n {` `}\r\n \r\n);\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\ninterface ITitle {\r\n className: string;\r\n text: string;\r\n}\r\n\r\nexport const Title: React.FC = ({ text, className }) => (\r\n \r\n {` `}\r\n {text}\r\n {` `}\r\n \r\n);\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IKrannichCSearchResultContainer containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum expandRefinersCount {\r\n all = 'all',\r\n one = 'one',\r\n two = 'two',\r\n three = 'three',\r\n four = 'four'\r\n}\r\n\r\nexport interface IKrannichCSearchResultContainerConfig extends Msdyn365.IModuleConfig {\r\n itemsPerPage?: number;\r\n allowBackNavigation?: boolean;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n expandRefinersCount?: expandRefinersCount;\r\n disableHierarchy?: boolean;\r\n includeAttributes?: boolean;\r\n enableAffiliationBasedPricing?: boolean;\r\n updateRefinerPanel?: boolean;\r\n className?: string;\r\n clientRender?: boolean;\r\n plpRequestPriceButton?: IPlpRequestPriceButtonData;\r\n filteredRefiners?: IFilteredRefinersData[];\r\n refinersToBeSorted?: IRefinersToBeSortedData[];\r\n}\r\n\r\nexport interface IKrannichCSearchResultContainerResources {\r\n noResultsForRefinersText: string;\r\n resultCategoryNotFoundText: string;\r\n resultSearchNotFoundText: string;\r\n paginationAriaLabel: string;\r\n priceFree: string;\r\n priceRangeSeparator: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n ratingAriaLabel: string;\r\n flipperNext: string;\r\n flipperPrevious: string;\r\n searchTextPrefix: string;\r\n numberOfProducts: string;\r\n oneProduct: string;\r\n categoryLinkAriaLabel: string;\r\n sortByDropdownLabel: string;\r\n sortByOptionNameAsc: string;\r\n sortByOptionNameDesc: string;\r\n sortByOptionPriceAsc: string;\r\n sortByOptionPriceDesc: string;\r\n sortByOptionRatingDesc: string;\r\n sortByOptionBestSelling: string;\r\n sortByOptionNewScore: string;\r\n sortByOptionTrendingScore: string;\r\n sortByOptionRelevanceDesc: string;\r\n placeholderTextMax: string;\r\n minLabel: string;\r\n maxLabel: string;\r\n rangeNameFormat: string;\r\n validationErrorNotNumber: string;\r\n validationErrorNotRange: string;\r\n clearAllText: string;\r\n choiceSummaryLabel: string;\r\n choiceFormat: string;\r\n choiceRangeValueFormat: string;\r\n choiceAriaLabel: string;\r\n closeAriaLabel: string;\r\n modalTitle: string;\r\n modalCloseButtonText: string;\r\n minValueSliderThumbAriaLabel: string;\r\n maxValueSliderThumbAriaLabel: string;\r\n featureSimilarLooksTitle: string;\r\n featureSimilarDescriptionTitle: string;\r\n productCountAriaLabel: string;\r\n singleProductCountAriaLabel: string;\r\n swatchItemAriaLabel: string;\r\n refineItemsAriaLabel: string;\r\n refineItemAriaLabel: string;\r\n tooltipText: string;\r\n requestPriceLabel: string;\r\n itemNumberLabel: string;\r\n manufacturerLabel: string;\r\n atpDiscontinuedMessageLabel: string;\r\n viewDetailsLabel: string;\r\n listLabel: string;\r\n gridLabel: string;\r\n filtersLabel: string;\r\n productsLabel: string;\r\n}\r\n\r\nexport interface IPlpRequestPriceButtonData {\r\n linkText?: string;\r\n linkUrl: Msdyn365.ILinkData;\r\n ariaLabel?: string;\r\n openInNewTab?: boolean;\r\n}\r\n\r\nexport interface IFilteredRefinersData {\r\n refinerCategory?: string;\r\n refinerName?: string;\r\n}\r\n\r\nexport interface IRefinersToBeSortedData {\r\n refinerAttribute?: string;\r\n}\r\n\r\nexport interface IKrannichCSearchResultContainerProps extends Msdyn365.IModule {\r\n resources: IKrannichCSearchResultContainerResources;\r\n config: IKrannichCSearchResultContainerConfig;\r\n slots: {\r\n quickview: React.ReactNode[];\r\n productComparisonButton: React.ReactNode[];\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n CategoryHierarchy as CategoryHierarchyData,\r\n IProductRefinerHierarchy,\r\n IProductsDimensionsAvailabilities\r\n} from '@msdyn365-commerce/commerce-entities';\r\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\r\nimport {\r\n ChannelInventoryConfiguration,\r\n format,\r\n ProductPrice,\r\n ProductRefinerValue,\r\n ProductSearchResult,\r\n SortColumn,\r\n TextValueTranslation\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n DimensionAvailabilitiesForProductSearchResultInput,\r\n DimensionTypes,\r\n DimensionSwatchDisplayTypes,\r\n getDimensionAvailabilitiesForProductSearchResultAction,\r\n getPriceForProductSearchResult,\r\n IDimensionsApp,\r\n PriceForProductSearchResultInput,\r\n ObjectExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getTelemetryObject,\r\n ILabeledDropdownOnChangeNotification,\r\n ILabeledDropdownOption,\r\n IModuleProps,\r\n INodeProps,\r\n isMobile,\r\n ITelemetryContent,\r\n LabeledDropdown,\r\n UncontrolledPagination,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport { action, computed, observable, reaction, transaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\n\r\nimport {\r\n buildListPageUrl,\r\n getCollectionProducts,\r\n getCollectionRefinersAction,\r\n getCurrentUrl,\r\n GetFullProductsByCollectionInput,\r\n IFullProductsSearchResultsWithCount,\r\n parseQueryParam,\r\n ProductListInventoryFilteringOptions,\r\n RefinersByCollectionInput,\r\n sortOptions\r\n} from './actions';\r\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\r\nimport {\r\n ErrorMessage,\r\n FeatureSearchResultItem,\r\n getUpdatedRefinementCriteria,\r\n IChoiceSummaryClickNotification,\r\n IRefineItemCommonProps,\r\n IRefineItemToggleNotification,\r\n ISearchResultModalViewProps,\r\n isMatchingRefinementCriterion,\r\n Link,\r\n ModalToggle,\r\n ProductSearchResultItems,\r\n SearchResultModal,\r\n Separator,\r\n Title\r\n} from './components';\r\nimport ChoiceSummary from './components/choice-summary';\r\nimport RefineSubmenu from './components/refine-submenu';\r\nimport { ListPageState } from './list-page-state';\r\nimport { IKrannichCSearchResultContainerData } from './krannich-c-search-result-container.data';\r\nimport { expandRefinersCount, IKrannichCSearchResultContainerProps } from './krannich-c-search-result-container.props.autogenerated';\r\nimport { getActivePricesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { IKRV_GetMultipleATPLeadTimeResponseDate } from '../../actions/customProxy/ATP-update/DataServiceEntities.g';\r\nimport { atpDataPlpaction, GetAtpdataPlpInput } from '../../actions/get-atpdata-plp.action';\r\nexport interface ISearchResultContainerViewProps extends IKrannichCSearchResultContainerProps {\r\n products?: React.ReactNode;\r\n className?: string;\r\n SearchResultContainer: IModuleProps;\r\n TitleViewProps: ITitleViewProps;\r\n categoryHierarchy: ICategoryHierarchyViewProps;\r\n pagination?: React.ReactNode;\r\n ProductsContainer: INodeProps;\r\n ProductSectionContainer: INodeProps;\r\n refineMenu: IRefineMenuViewProps;\r\n sortByOptions: ISortByViewProps;\r\n choiceSummary?: React.ReactNode;\r\n modalToggle: React.ReactNode;\r\n searchResultModal: ISearchResultModalViewProps;\r\n isMobile: boolean;\r\n CategoryNavContainer: INodeProps;\r\n RefineAndProductSectionContainer: INodeProps;\r\n errorMessage: React.ReactNode;\r\n FeatureSearchContainer: INodeProps;\r\n similarLookProduct?: React.ReactNode;\r\n productPrices?: ProductPrice[];\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n loadMore: (pageNumber: number) => void;\r\n renderGridAndListView: IgridProps;\r\n loading: boolean;\r\n categoryDiscription: React.ReactNode;\r\n atpData: IKRV_GetMultipleATPLeadTimeResponseDate;\r\n}\r\n\r\nexport interface ITitleViewProps {\r\n TitleContainer: INodeProps;\r\n title: ISearchResultTitle;\r\n}\r\n\r\nexport interface IRefineMenuViewProps {\r\n RefineMenuContainer: INodeProps;\r\n RefinerSectionContainer: INodeProps;\r\n refiners?: React.ReactNode[];\r\n activeFilters?: number;\r\n activeProducts?: number;\r\n}\r\n\r\nexport interface ICategoryHierarchyViewProps {\r\n categoryHierarchyList?: React.ReactNode[];\r\n categoryHierarchySeparator?: React.ReactNode;\r\n CategoryHierarchyContainer: INodeProps;\r\n}\r\n\r\nexport interface ISortByViewProps {\r\n SortingContainer: INodeProps;\r\n sortByDropDown?: React.ReactNode;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Title component for search result container.\r\n */\r\nexport interface ISearchResultTitle {\r\n titlePrefix?: React.ReactNode;\r\n titleText?: React.ReactNode;\r\n titleCount?: React.ReactNode;\r\n}\r\n\r\nexport interface ISearchResultContainerState {\r\n sortingState: ISortByCollectionState;\r\n modalIsOpen: boolean;\r\n refiners: IProductRefinerHierarchy[];\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\r\n gridListView: boolean;\r\n productList: ProductSearchResult[];\r\n loading: boolean;\r\n activePrices: ProductPrice[];\r\n atpData: any;\r\n}\r\nexport interface IgridProps {\r\n renderGridAndListView: React.ReactNode;\r\n}\r\n\r\ninterface ISortByCollectionState {\r\n selectedSortByOption: ILabeledDropdownOption;\r\n pending: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * SearchResultContainer component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nexport default class SearchResultContainer extends React.PureComponent<\r\n IKrannichCSearchResultContainerProps,\r\n ISearchResultContainerState\r\n> {\r\n @computed get isMobile(): boolean {\r\n return this._viewport === 'xs' || this._viewport === 'sm';\r\n }\r\n\r\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\r\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\r\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\r\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\r\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\r\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\r\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\r\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\r\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\r\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\r\n ];\r\n\r\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\r\n\r\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\r\n\r\n @observable\r\n private _viewport: GridSize = 'lg';\r\n\r\n private readonly _modalToggleRef: React.RefObject;\r\n\r\n private readonly _sortAndFilterContainerRef: React.RefObject;\r\n\r\n private expandrefinerCount: number | undefined = 0;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly productPrices: ProductPrice[];\r\n\r\n private readonly defaultPageNumber = 0;\r\n\r\n private readonly catalogId = getCatalogId(this.props.context.request);\r\n\r\n private isListPageStateUpdated: boolean = false;\r\n\r\n //private _isMounted: boolean = false;\r\n private isLoadMore: boolean = true;\r\n\r\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\r\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n }\r\n\r\n return nameTranslation?.Text;\r\n }\r\n\r\n public constructor(\r\n props: IKrannichCSearchResultContainerProps,\r\n state: ISearchResultContainerState\r\n ) {\r\n super(props);\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\r\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._modalToggleRef = React.createRef();\r\n this._sortAndFilterContainerRef = React.createRef();\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.productPrices = [];\r\n this.state = {\r\n sortingState: {\r\n pending: false,\r\n selectedSortByOption: this.sortByDropdownOptions[0]\r\n },\r\n modalIsOpen: false,\r\n refiners: [],\r\n channelInventoryConfiguration: undefined,\r\n gridListView: true,\r\n productList: [],\r\n loading: false,\r\n activePrices: [],\r\n atpData: []\r\n };\r\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\r\n\r\n const locale = this.props.context.request.locale;\r\n const telemetry = this.props.telemetry;\r\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\r\n const validationErrorRange = this.props.resources.validationErrorNotRange;\r\n this._refineItemCommonProps = {\r\n telemetry,\r\n locale,\r\n placeholderTextMax,\r\n minLabel,\r\n maxLabel,\r\n rangeNameFormat,\r\n validationErrorNaN,\r\n validationErrorRange\r\n };\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._updateViewport();\r\n }\r\n public async componentDidMount(): Promise {\r\n //this._isMounted = true;\r\n if (MsDyn365.isBrowser && window.addEventListener) {\r\n window.addEventListener('resize', this._updateViewport);\r\n this._updateViewport();\r\n }\r\n // VSI Customization for infinite scroll\r\n const {\r\n data: { listPageState, products: productCollection }\r\n } = this.props;\r\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\r\n void this._updateListPageState(listPageState.result, productCollection.result);\r\n this.isListPageStateUpdated = true;\r\n }\r\n\r\n // Initialize reaction based on listPageState properties\r\n reaction(\r\n () => {\r\n return [\r\n listPageState?.result?.activeFilters?.length,\r\n listPageState?.result?.currentPageNumber,\r\n ArrayExtensions.hasElements(listPageState?.result?.sortingCritera?.Columns)\r\n ];\r\n },\r\n async () => {\r\n const newListPageState = await this.props.data.listPageState;\r\n const input = new GetFullProductsByCollectionInput(\r\n newListPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\r\n },\r\n count: true,\r\n Sorting: newListPageState.sortingCritera ?? {}\r\n },\r\n newListPageState.activeFilters ?? [],\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\r\n +(this.props.context.request.urlTokens.recordId || 0),\r\n\r\n // eslint-disable-next-line max-len -- existing code\r\n this.props.context.request.query?.q\r\n ? this.props.context.request.query.q\r\n : JSON.stringify({\r\n ProductId: this.props.context.request.query?.productId,\r\n Recommendation: this.props.context.request.query?.recommendation\r\n }),\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\r\n !!this.props?.config?.includeAttributes,\r\n this.props.config.updateRefinerPanel,\r\n this.props.context.request.locale,\r\n this.catalogId\r\n );\r\n\r\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\r\n //VSI customization for loader until products result appear\r\n if (productResults.products.length >= 0) {\r\n const recordIds = productResults.products.map((value: any) => value?.RecordId);\r\n let activePrices: any = this.state.activePrices || [];\r\n if (recordIds && recordIds.length) {\r\n activePrices = await this.getActivePrices(recordIds);\r\n if (this.state.activePrices.length && activePrices.length) {\r\n activePrices = [...this.state.activePrices, ...activePrices];\r\n activePrices = [...new Set(activePrices)];\r\n }\r\n }\r\n if (activePrices && activePrices.length) {\r\n this.setState({\r\n loading: false,\r\n activePrices\r\n });\r\n } else {\r\n this.setState({\r\n loading: false\r\n });\r\n }\r\n }\r\n // VSI Customization for infinte scroll\r\n newListPageState.activeProducts = [...newListPageState.activeProducts, ...productResults.products];\r\n\r\n // Use a Set to store unique items based on ItemId\r\n const uniqueProducts: (ProductSearchResult | undefined)[] = Array.from(\r\n new Set(newListPageState?.activeProducts?.map(product => product.ItemId))\r\n ).map(itemId => newListPageState?.activeProducts?.find(product => product.ItemId === itemId));\r\n\r\n this.setState(\r\n {\r\n productList: [...(uniqueProducts as ProductSearchResult[])]\r\n },\r\n async () => {\r\n if (!this.isLoadMore && this.props.context.actionContext.requestContext.user.isAuthenticated) {\r\n const atpDataPlpParams = new GetAtpdataPlpInput(this.state.productList, this.state.atpData);\r\n const response = await atpDataPlpaction(atpDataPlpParams, this.props.context.actionContext);\r\n this.setState({ atpData: this.state.atpData.concat(response?.ATPTrafficLights) });\r\n }\r\n }\r\n );\r\n newListPageState.totalProductCount = productResults.count === 0 ? uniqueProducts?.length : productResults.count;\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\r\n this.isLoadMore = productResults.products.length > 0 ? true : false;\r\n if (\r\n this.props.config.enableAffiliationBasedPricing &&\r\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\r\n this._getActivePrice().catch(error => {\r\n this.props.telemetry.error(error);\r\n });\r\n }\r\n const context = this.props.context as ICoreContext;\r\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\r\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\r\n if (\r\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\r\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\r\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\r\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\r\n this.props.config.includeAttributes\r\n ) {\r\n await this._getProductsDimensionsAvailabilities();\r\n }\r\n if (this.props.config.updateRefinerPanel) {\r\n const refinerInput = new RefinersByCollectionInput(\r\n newListPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(\r\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\r\n this.defaultPageNumber\r\n )\r\n },\r\n count: true,\r\n Sorting: newListPageState.sortingCritera ?? {}\r\n },\r\n newListPageState.activeFilters ?? [],\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\r\n +(this.props.context.request.urlTokens.recordId || 0),\r\n this.props.context.request.query?.q\r\n ? this.props.context.request.query.q\r\n : this.props.context.request.query?.productId,\r\n false,\r\n this.props.config.updateRefinerPanel,\r\n undefined,\r\n this.catalogId\r\n );\r\n\r\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\r\n this.setState({ refiners });\r\n }\r\n }\r\n );\r\n /* reaction(\r\n () => listPageState?.result?.currentPageNumber || this.isLoadMore,\r\n async () => {\r\n if (!this.isLoadMore && this.props.context.actionContext.requestContext.user.isAuthenticated) {\r\n const response = await atpDataPlpaction(this.state.productList, this.state.atpData, this.props.context.actionContext);\r\n this.setState({ atpData: response });\r\n }\r\n }\r\n );*/\r\n\r\n if (\r\n this.props.config.enableAffiliationBasedPricing &&\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\r\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\r\n this._getActivePrice();\r\n }\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n if (MsDyn365.isBrowser && window.removeEventListener) {\r\n window.removeEventListener('resize', this._updateViewport);\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n config: { imageSettings, className },\r\n resources,\r\n data: { listPageState, products: productCollection, featureProduct }\r\n } = this.props;\r\n\r\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\r\n void this._updateListPageState(listPageState.result, productCollection.result);\r\n this.isListPageStateUpdated = true;\r\n }\r\n\r\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\r\n let errorText = '';\r\n if (!ArrayExtensions.hasElements(products)) {\r\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\r\n }\r\n const productsComponent = this._getProducts();\r\n const featureComponent = (\r\n \r\n );\r\n\r\n const searchResultContainerViewProps = {\r\n ...this.props,\r\n products: productsComponent,\r\n TitleViewProps: this._getCollectionTitle(),\r\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\r\n refineMenu: this._getRefineMenu(),\r\n className: classnames('ms-search-result-container', className),\r\n SearchResultContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-search-result-container', className)\r\n },\r\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\r\n pagination: this._getPagination(),\r\n ProductsContainer: { className: 'ms-search-result-container__Products' },\r\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\r\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\r\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\r\n choiceSummary: this._getChoiceSummary(),\r\n modalToggle: (\r\n \r\n ),\r\n searchResultModal: this._getSearchResultModal(),\r\n isMobile: this.isMobile,\r\n errorMessage: errorText && ,\r\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\r\n similarLookProduct: searchProduct ? featureComponent : null,\r\n productPrices: this.productPrices,\r\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities,\r\n loadMore: this._loadMoreProducts,\r\n renderGridAndListView: this.renderGridAndListView(),\r\n loading: this.state.loading,\r\n categoryDiscription: this._renderCategoryDiscription()\r\n };\r\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Update the list page state with initial data.\r\n * @param listPageState -- List page State.\r\n * @param products -- Products.\r\n */\r\n @action\r\n private readonly _updateListPageState = async (\r\n listPageState: ListPageState,\r\n products: IFullProductsSearchResultsWithCount\r\n ): Promise => {\r\n let querySorting: SortColumn[] = [];\r\n const defaultPageNumber: number = 10;\r\n\r\n if (this._pageType === 'Category') {\r\n listPageState.pageType = 'Category';\r\n } else {\r\n listPageState.pageType = 'Search';\r\n }\r\n\r\n if (this.props.context.request.query?.sorting) {\r\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\r\n }\r\n if (products.products && products.products.length) {\r\n this.setState({ loading: true });\r\n const recordIds = products.products.map((value: any) => value?.RecordId);\r\n let activePrices: ProductPrice[] = this.state.activePrices || [];\r\n if (recordIds && recordIds.length) {\r\n activePrices = await this.getActivePrices(recordIds);\r\n }\r\n this.setState({ loading: false, activePrices });\r\n }\r\n\r\n listPageState.currentPageNumber =\r\n (this.props.context.request.query?.skip &&\r\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\r\n 0;\r\n listPageState.sortingCritera = { Columns: querySorting };\r\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\r\n listPageState.activeProducts = products.products;\r\n listPageState.totalProductCount = products.count;\r\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request);\r\n if (this.props.context.request.query?.productId) {\r\n const featureProduct = this.props.data.featureProduct.result;\r\n if (featureProduct) {\r\n listPageState.featureProduct = featureProduct;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Get products dimension availabilities.\r\n * @returns Void.\r\n */\r\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\r\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\r\n\r\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\r\n new DimensionAvailabilitiesForProductSearchResultInput(\r\n productsList,\r\n this.props.context as ICoreContext,\r\n DimensionSwatchDisplayTypes.productCard\r\n ),\r\n this.props.context.actionContext\r\n );\r\n\r\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\r\n this.setState({ productsDimensionAvailabilities });\r\n }\r\n };\r\n\r\n /**\r\n * Get the active price for the products.\r\n */\r\n private readonly _getActivePrice = async (): Promise => {\r\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\r\n const products = await getPriceForProductSearchResult(\r\n new PriceForProductSearchResultInput(productsList),\r\n this.props.context.actionContext\r\n );\r\n\r\n const listPageState = await this.props.data.listPageState;\r\n listPageState.activeProducts = products;\r\n };\r\n\r\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\r\n const { resources } = this.props;\r\n return SearchResultModal({\r\n resources: {\r\n modalCloseButtonText: resources.modalCloseButtonText,\r\n modalTitle: resources.modalTitle\r\n },\r\n isOpen: this.state.modalIsOpen,\r\n returnRef: this._modalToggleRef,\r\n onModalToggle: this._toggleModal\r\n });\r\n };\r\n\r\n private readonly _getCollectionTitle = (): ITitleViewProps => {\r\n const { data, context, resources } = this.props;\r\n\r\n let collectionTitle: string | undefined = '';\r\n if (context && context.request && context.request.query && context.request.query.q) {\r\n collectionTitle = `\"${context.request.query.q}\"`;\r\n } else {\r\n collectionTitle =\r\n (data.category.result &&\r\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\r\n (data.category.result && data.category.result.Name) ||\r\n this.props.context.request.query?.title ||\r\n '';\r\n }\r\n let productCountText = '';\r\n let productCountNumber: number | undefined;\r\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\r\n productCountNumber = data.listPageState.result.totalProductCount;\r\n } else if (data.products && data.products.result) {\r\n productCountNumber = data.products.result.count;\r\n }\r\n\r\n if (productCountNumber && productCountNumber !== 0) {\r\n productCountText =\r\n productCountNumber !== 1\r\n ? format(this.props.resources.numberOfProducts, productCountNumber)\r\n : this.props.resources.oneProduct;\r\n } else {\r\n productCountText = format(this.props.resources.numberOfProducts, 0);\r\n }\r\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\r\n const titlePrefix = ;\r\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\r\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\r\n\r\n return {\r\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\r\n title: {\r\n titlePrefix,\r\n titleText,\r\n titleCount\r\n }\r\n };\r\n };\r\n\r\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\r\n const { data } = this.props;\r\n const categoryHierarchy = data.categoryHierarchy.result;\r\n const categoryLinks =\r\n categoryHierarchy &&\r\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\r\n return (\r\n <Link\r\n key={index}\r\n text={value.Name}\r\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\r\n href={value.Url}\r\n />\r\n );\r\n });\r\n const categoryLinkSeparator = <Separator separator='/' />;\r\n\r\n return {\r\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\r\n categoryHierarchyList: categoryLinks,\r\n categoryHierarchySeparator: categoryLinkSeparator\r\n };\r\n };\r\n\r\n private readonly _getSortingDropDown = (): ISortByViewProps => {\r\n const { resources } = this.props;\r\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\r\n let dropdownOptions = this._getAllSortByOptions();\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\r\n if (this.props.context.app.config.hideRating) {\r\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\r\n }\r\n\r\n const dropdown = (\r\n <LabeledDropdown\r\n labelClassname='reviews-list-sort-by'\r\n labelText={resources.sortByDropdownLabel}\r\n dropdownId='categorySortByDropdown'\r\n dropdownClassname='reviews-list-dropdown'\r\n toggleColor='link'\r\n dropdownOptions={dropdownOptions}\r\n selectedOption={activeDropdown}\r\n onSelectOption={this._updateSortByDropdown}\r\n ref={this._sortAndFilterContainerRef}\r\n />\r\n );\r\n return {\r\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\r\n sortByDropDown: dropdown\r\n };\r\n };\r\n\r\n private readonly _getPagination = (): React.ReactNode => {\r\n const { config, context, data, resources } = this.props;\r\n const listPageState = data.listPageState.result;\r\n const fullUrl = getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 10;\r\n // eslint-disable-next-line max-len -- existing code\r\n const skipCount = !ObjectExtensions.isNullOrUndefined(listPageState?.currentPageNumber)\r\n ? listPageState!.currentPageNumber * (this.props.config.itemsPerPage || 10)\r\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\r\n const totalItems = listPageState?.totalProductCount || 0;\r\n const previousText = resources.flipperPrevious;\r\n const nextText = resources.flipperNext;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n return (\r\n <UncontrolledPagination\r\n className='ms-search-result-container__pagination'\r\n role='navigation'\r\n aria-label={resources.paginationAriaLabel}\r\n url={fullUrl.href}\r\n qsp='skip'\r\n items={totalItems}\r\n itemsPerPage={itemsPerPage}\r\n startingItem={skipCount}\r\n previousText={this._renderPrev(previousText)}\r\n nextText={this._renderNext(nextText)}\r\n previousAriaLabel={previousText}\r\n nextAriaLabel={nextText}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\r\n const { data, context, config } = this.props;\r\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\r\n let validRefiners =\r\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\r\n ? this.state.refiners.filter(refiner => {\r\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\r\n })\r\n : data.refiners.result &&\r\n data.refiners.result.filter(refiner => {\r\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\r\n });\r\n\r\n const needsToSort = this.props.config?.refinersToBeSorted || [];\r\n validRefiners = validRefiners?.map(refiner => {\r\n const categoryToSort = needsToSort?.find(category => category.refinerAttribute === refiner?.KeyName);\r\n if (categoryToSort) {\r\n return {\r\n ...refiner,\r\n Values: refiner.Values?.sort((a, b) => a.LeftValueBoundString!?.localeCompare(b.LeftValueBoundString!))\r\n };\r\n }\r\n return refiner;\r\n });\r\n\r\n const needToFilter = this.props.config?.filteredRefiners || [];\r\n validRefiners = validRefiners?.map(refiner => ({\r\n ...refiner,\r\n Values: refiner.Values?.filter(\r\n subRefiner =>\r\n !needToFilter.find(\r\n ntfRefiner =>\r\n ntfRefiner.refinerCategory === refiner.KeyName && ntfRefiner.refinerName === subRefiner.LeftValueBoundString\r\n )\r\n )\r\n }));\r\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\r\n const expandedRefiners = this.expandrefinerCount;\r\n const subMenus =\r\n validRefiners &&\r\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\r\n return (\r\n <RefineSubmenu\r\n productRefinerHierarchy={productRefinerHierarchy}\r\n selectedRefinerValues={activeRefiners}\r\n refineItemCommonProps={this._refineItemCommonProps}\r\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\r\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\r\n key={index}\r\n onUpdateRefiners={this._onUpdateRefiners}\r\n urlBuilder={this._buildRefinerUrl}\r\n isDisabled={false}\r\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\r\n tempRangeTypeTODO={tempRangeTypeTODO}\r\n context={context}\r\n moduleId={this.props.id}\r\n moduleTypeName={this.props.typeName}\r\n telemetryContent={this.telemetryContent}\r\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\r\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\r\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\r\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\r\n isMobile={this.isMobile}\r\n />\r\n );\r\n });\r\n\r\n return {\r\n RefineMenuContainer: {\r\n className: 'ms-search-result-container__refine-menu'\r\n },\r\n RefinerSectionContainer: {\r\n className: 'ms-search-result-container__refiner-section'\r\n },\r\n refiners: subMenus,\r\n activeFilters: this.props.data.listPageState?.result?.activeFilters?.length,\r\n activeProducts: this.props.data.listPageState?.result?.activeProducts?.length\r\n };\r\n };\r\n\r\n /**\r\n * Should hide from refiners.\r\n * @param refiner - The refiner.\r\n * @returns ShouldHideFromRefiners.\r\n */\r\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\r\n const { channelInventoryConfiguration } = this.state;\r\n const isInventorySortableAttribute =\r\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\r\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\r\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\r\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\r\n\r\n const isInventoryProductAttribute =\r\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\r\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\r\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\r\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\r\n\r\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\r\n return (\r\n isInventorySortableAttribute ||\r\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\r\n isInventoryProductAttribute)\r\n );\r\n };\r\n\r\n private readonly _getChoiceSummary = (): React.ReactNode => {\r\n const { resources, data, telemetry } = this.props;\r\n const { channelInventoryConfiguration } = this.state;\r\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\r\n return (\r\n <ChoiceSummary\r\n classNames='ms-choice-summary-by-category'\r\n clearAllText={resources.clearAllText}\r\n label={resources.choiceSummaryLabel}\r\n closeAriaLabel={resources.closeAriaLabel}\r\n selectedChoices={selectedRefiners}\r\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\r\n refinerHierarchy={data.refiners.result}\r\n choiceFormat={resources.choiceFormat}\r\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\r\n telemetry={telemetry}\r\n onChoiceClicked={this._onChoiceClicked}\r\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\r\n choiceAriaLabel={resources.choiceAriaLabel}\r\n telemetryContent={this.telemetryContent}\r\n context={this.props.context}\r\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\r\n refinerValues={refinerValueName}\r\n />\r\n );\r\n };\r\n\r\n /**\r\n * Get Active products.\r\n * @returns - JSX Elements.\r\n */\r\n private readonly _getProducts = (): JSX.Element => {\r\n const {\r\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation, plpRequestPriceButton }\r\n } = this.props;\r\n const { resources } = this.props;\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\r\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\r\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\r\n const products = this.state.productList || [];\r\n const quickviewSlot = this.props.slots?.quickview?.[0];\r\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\r\n ? this.props.slots.productComparisonButton[0]\r\n : null;\r\n\r\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n );\r\n return (\r\n <ProductSearchResultItems\r\n products={products}\r\n context={this.props.context}\r\n imageSettings={imageSettings}\r\n resources={resources}\r\n moduleType={this.props.typeName}\r\n moduleId={this.props.id}\r\n allowBackNavigation={shouldAllowBack}\r\n telemetryContent={this.telemetryContent}\r\n quickviewSlot={quickviewSlot}\r\n productComparisonButton={productComparisonButton}\r\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\r\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\r\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\r\n gridListView={this.state.gridListView}\r\n requestPriceBtn={plpRequestPriceButton}\r\n activePrices={this.state.activePrices}\r\n customerInformation={this.props.data.customerInformation?.result}\r\n atpData={this.state.atpData}\r\n cart={this.props.data?.cart}\r\n />\r\n );\r\n };\r\n\r\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\r\n const {\r\n context: { request: requestContext, actionContext }\r\n } = this.props;\r\n\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n // eslint-disable-next-line max-len -- existing code\r\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\r\n !actionContext ? 'actionContext ' : ''\r\n } could not be found`;\r\n this.props.telemetry.warning(error);\r\n return;\r\n }\r\n\r\n window.history.pushState(\r\n {},\r\n '',\r\n buildListPageUrl(\r\n getCurrentUrl(this.props.context.request),\r\n undefined,\r\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\r\n undefined\r\n )\r\n );\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.sortingCritera = {\r\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\r\n };\r\n // VSI Customization - to Reset existing product in case of infinite scroll after sorting\r\n this.props.data.listPageState.result!.activeProducts = [];\r\n this.isLoadMore = false;\r\n this.setState({ loading: true });\r\n });\r\n };\r\n\r\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\r\n const { data } = this.props;\r\n\r\n if (!data.searchConfiguration.result) {\r\n return {};\r\n }\r\n\r\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\r\n return searchConfiguration.key === option.key;\r\n });\r\n\r\n if (mappedConfiguration) {\r\n return mappedConfiguration.sortColumn;\r\n }\r\n\r\n return {};\r\n };\r\n\r\n /**\r\n * Retrieves current sort criteria.\r\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\r\n */\r\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\r\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\r\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\r\n return sortCriteria!.Columns[0];\r\n }\r\n\r\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\r\n if (ArrayExtensions.hasElements(queryColumns)) {\r\n return queryColumns[0];\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Retrieves dropdown options.\r\n * @returns All dropdown options.\r\n */\r\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\r\n const searchConfiguration = this.props.data.searchConfiguration.result;\r\n\r\n if (!searchConfiguration) {\r\n return [];\r\n }\r\n\r\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\r\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\r\n );\r\n\r\n return ArrayExtensions.validValues(mappedSearchConfiguration);\r\n };\r\n\r\n /**\r\n * Retrieves current selected dropdown option based on the sort criteria.\r\n * @returns Current dropdown option.\r\n */\r\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\r\n const activeSortColumn = this._getSortCriteriaColumn();\r\n\r\n const searchConfiguration = this.props.data.searchConfiguration.result;\r\n\r\n if (!activeSortColumn || !searchConfiguration) {\r\n return undefined;\r\n }\r\n\r\n const activeMappedConfig = searchConfiguration.find(\r\n mappedSearchConfig =>\r\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\r\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\r\n );\r\n if (!activeMappedConfig) {\r\n return undefined;\r\n }\r\n\r\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\r\n };\r\n\r\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\r\n const {\r\n context: { request: requestContext, actionContext }\r\n } = this.props;\r\n\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n const error = `Refine menu cannot refine search criteria: \r\n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\r\n this.props.telemetry.warning(error);\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\r\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\r\n itemToggleNotification,\r\n this.props.data.listPageState.result?.activeFilters || []\r\n );\r\n\r\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\r\n // VSI Customization - to Reset existing product in case of infinite scroll after applying filters\r\n this.props.data.listPageState.result!.activeProducts = [];\r\n this.isLoadMore = false;\r\n this.setState({ loading: true });\r\n });\r\n };\r\n\r\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\r\n if (this.props.data.listPageState.result) {\r\n const newRefinementCriteria = getUpdatedRefinementCriteria(\r\n itemToggleNotification,\r\n this.props.data.listPageState.result.activeFilters || []\r\n );\r\n\r\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\r\n }\r\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\r\n return '';\r\n };\r\n\r\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\r\n const { data, telemetry } = this.props;\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\r\n return;\r\n }\r\n\r\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (!notification.clearAll) {\r\n const selectedChoice = notification.choiceClicked;\r\n if (!selectedChoice) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\r\n return;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\r\n );\r\n } else {\r\n currentRefinementCriteria = [];\r\n\r\n // Set focus to sort and filter\r\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\r\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\r\n setTimeout(() => {\r\n dropdownElement && dropdownElement.focus();\r\n }, 50);\r\n }\r\n\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\r\n data.listPageState.result.currentPageNumber = 0;\r\n data.listPageState.result.activeFilters = currentRefinementCriteria;\r\n //VSI Customization\r\n data.listPageState.result.activeProducts = [];\r\n this.isLoadMore = false;\r\n };\r\n\r\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\r\n const { data, telemetry } = this.props;\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\r\n return fullUrl.href;\r\n }\r\n\r\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (!isClearAll) {\r\n if (!selectedRefiner) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\r\n return fullUrl.href;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\r\n );\r\n } else {\r\n currentRefinementCriteria = [];\r\n }\r\n\r\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n };\r\n\r\n private _getViewport(): GridSize {\r\n if (MsDyn365.isBrowser) {\r\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\r\n }\r\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\r\n }\r\n\r\n private _toggleModal(): void {\r\n this.setState({\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n }\r\n\r\n private _updateViewport(): void {\r\n this._viewport = this._getViewport();\r\n\r\n if (this.state.modalIsOpen && !this.isMobile) {\r\n this._toggleModal();\r\n }\r\n }\r\n\r\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\r\n switch (refinerCount) {\r\n case expandRefinersCount.all:\r\n this.expandrefinerCount = validRefiners;\r\n break;\r\n case expandRefinersCount.one:\r\n this.expandrefinerCount = 1;\r\n break;\r\n case expandRefinersCount.two:\r\n this.expandrefinerCount = 2;\r\n break;\r\n case expandRefinersCount.three:\r\n this.expandrefinerCount = 3;\r\n break;\r\n case expandRefinersCount.four:\r\n this.expandrefinerCount = 4;\r\n break;\r\n default:\r\n this.expandrefinerCount = 0;\r\n }\r\n };\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n <div className='msc-pagination__prev'>\r\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\r\n <span className='prev-text'>{paginationPreviousText}</span>\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n <div className='msc-pagination__next'>\r\n <span className='next-text'>{paginationNextText}</span>\r\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\r\n </div>\r\n );\r\n };\r\n /**\r\n * Renders a infinite scroll.\r\n */\r\n public _loadMoreProducts = (pageNumber: number) => {\r\n if (this.isLoadMore) {\r\n const info = `[_loadMoreProducts] Page Number: ${pageNumber}`;\r\n this.props.telemetry.information(info);\r\n\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber =\r\n parseInt(this.props.data.listPageState.result!.currentPageNumber?.toString() || '0', 10) + 1;\r\n this.isLoadMore = false;\r\n });\r\n }\r\n if (this.isMobile) {\r\n window.scrollBy(0, -100);\r\n }\r\n };\r\n public gridView = () => {\r\n this.setState({ gridListView: true });\r\n };\r\n public listView = () => {\r\n this.setState({ gridListView: false });\r\n };\r\n public renderGridAndListView = (): JSX.Element => {\r\n return (\r\n <>\r\n <div className='pull-right'>\r\n <button onClick={this.listView} className={this.state.gridListView ? 'list-view-btn' : 'list-view-btn active'}>\r\n {this.props.resources.listLabel}\r\n </button>\r\n <button onClick={this.gridView} className={!this.state.gridListView ? 'grid-view-btn' : 'grid-view-btn active'}>\r\n {this.props.resources.gridLabel}\r\n </button>\r\n </div>\r\n </>\r\n );\r\n };\r\n private getActivePrices = (RecordIds: any[]) => {\r\n return getActivePricesAsync(\r\n { callerContext: this.props.context.actionContext },\r\n {\r\n ChannelId: this.props.context.request.apiSettings.channelId,\r\n\r\n CatalogId: this.props.context.request.apiSettings.catalogId\r\n },\r\n RecordIds,\r\n new Date(),\r\n this.props.data?.customerInformation?.result?.AccountNumber ?? null,\r\n undefined,\r\n true\r\n );\r\n };\r\n public _renderCategoryDiscription = (): React.ReactNode => {\r\n const {\r\n data: {\r\n category: { result: category }\r\n }\r\n } = this.props;\r\n\r\n const categoryDisp = category?.ExtensionProperties?.find(property => property.Key === 'Description')?.Value?.StringValue || '';\r\n\r\n return <div className='plp-header-discription'>{categoryDisp}</div>;\r\n };\r\n /* private _atpData = async (products: any[]) => {\r\n const KRVATPLeadTimeDate: any[] = [];\r\n //Create date according to API\r\n const objectDate = new Date();\r\n const day = objectDate.getDate();\r\n const month = objectDate.getMonth();\r\n const year = objectDate.getFullYear();\r\n const requestedDate = `${day}/${month + 1}/${year}`;\r\n\r\n if (products.length > 0 && this.state.atpData.length === 0) {\r\n products?.map((e: any) => {\r\n KRVATPLeadTimeDate.push({\r\n itemID: e.ItemId,\r\n requestedDate: requestedDate\r\n });\r\n });\r\n } else {\r\n const atpItemIds = new Set(this.state.atpData?.map((item: { ItemId: any }) => item.ItemId));\r\n products.forEach(product => {\r\n if (atpItemIds.has(product.ItemId)) {\r\n return;\r\n } else {\r\n KRVATPLeadTimeDate.push({\r\n itemID: product.ItemId,\r\n requestedDate: requestedDate\r\n });\r\n }\r\n });\r\n }\r\n const ctx = { callerContext: this.props.context.actionContext };\r\n try {\r\n if (KRVATPLeadTimeDate.length === 0) {\r\n return;\r\n } else {\r\n const response = await kRV_GetMultipleATPLeadTimeDateAsync(ctx, KRVATPLeadTimeDate);\r\n this.setState({\r\n atpData: this.state.atpData.concat(response?.ATPTrafficLights)\r\n });\r\n }\r\n } catch (err) {\r\n console.error(err, 'ERR');\r\n }\r\n };*/\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { Waiting } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport { ISearchResultModalViewProps } from './components';\r\nimport {\r\n ICategoryHierarchyViewProps,\r\n IRefineMenuViewProps,\r\n ISearchResultContainerViewProps,\r\n ISortByViewProps,\r\n ITitleViewProps\r\n} from './krannich-c-search-result-container';\r\nimport InfiniteScroll from 'react-infinite-scroller';\r\n\r\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\r\n const {\r\n SearchResultContainer,\r\n products,\r\n ProductsContainer,\r\n ProductSectionContainer,\r\n choiceSummary,\r\n isMobile,\r\n modalToggle,\r\n searchResultModal,\r\n TitleViewProps,\r\n refineMenu,\r\n categoryHierarchy,\r\n sortByOptions,\r\n CategoryNavContainer,\r\n RefineAndProductSectionContainer,\r\n errorMessage,\r\n FeatureSearchContainer,\r\n similarLookProduct,\r\n renderGridAndListView,\r\n loading,\r\n data: {\r\n listPageState: { result: listPageState }\r\n },\r\n categoryDiscription,\r\n resources\r\n } = props;\r\n\r\n const krannichActiveProducts = [...new Set(listPageState?.activeProducts)];\r\n const [selectedFilterCount, setSelectedFilterCount] = React.useState<number | undefined>();\r\n const [isSelectedFilterCount, setIsSelectedFilterCount] = React.useState<boolean>(false);\r\n React.useEffect(() => {\r\n if (\r\n props.data?.listPageState?.result?.activeFilters?.length! > 0 &&\r\n props.data?.listPageState?.result?.activeFilters?.length! !== undefined\r\n ) {\r\n setTimeout(() => {\r\n setSelectedFilterCount(krannichActiveProducts.length ? props.data.listPageState.result?.totalProductCount : 0);\r\n setIsSelectedFilterCount(true);\r\n }, 100);\r\n } else {\r\n setIsSelectedFilterCount(false);\r\n }\r\n }, [\r\n props.data.listPageState.result?.activeFilters,\r\n props.data.listPageState.result?.totalProductCount,\r\n props.data.listPageState.result?.activeProducts\r\n ]);\r\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\r\n if (isMobile) {\r\n return (\r\n <Module {...SearchResultContainer}>\r\n {renderCategoryHierarchy(categoryHierarchy)}\r\n {renderTitle(TitleViewProps)}\r\n {categoryDiscription}\r\n {choiceSummary}\r\n {modalToggle}\r\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage, resources.filtersLabel)}\r\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\r\n {loading ? (\r\n <Waiting />\r\n ) : (\r\n <InfiniteScroll threshold={100} pageStart={0} loadMore={props.loadMore} hasMore={true || false}>\r\n <Node {...ProductsContainer}>\r\n {errorMessage}\r\n {products}\r\n </Node>\r\n </InfiniteScroll>\r\n )}\r\n </Module>\r\n );\r\n }\r\n return (\r\n <Module {...SearchResultContainer}>\r\n <Node {...CategoryNavContainer}>{categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}</Node>\r\n <div className='ms-search-result-container'>\r\n <div className='ms-search-result-container__title-count'>\r\n {TitleViewProps && renderTitle(TitleViewProps)}\r\n {TitleViewProps && isSelectedFilterCount && !loading\r\n ? _renderTitleCount(TitleViewProps, selectedFilterCount, resources.productsLabel)\r\n : null}\r\n </div>\r\n {categoryDiscription}\r\n </div>\r\n <Node {...RefineAndProductSectionContainer}>\r\n {refineMenu && renderRefiner(refineMenu, resources.filtersLabel)}\r\n <Node {...ProductSectionContainer}>\r\n {TitleViewProps && renderTitle(TitleViewProps)}\r\n {choiceSummary}\r\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions, renderGridAndListView)}\r\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\r\n {loading ? (\r\n <Waiting />\r\n ) : (\r\n <InfiniteScroll threshold={100} pageStart={0} loadMore={props.loadMore} hasMore={true || false}>\r\n <Node {...ProductsContainer}>\r\n {errorMessage}\r\n {products}\r\n </Node>\r\n </InfiniteScroll>\r\n )}\r\n </Node>\r\n </Node>\r\n </Module>\r\n );\r\n};\r\n\r\nconst createSearchResultModal = (\r\n modalProps: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps,\r\n isRecoSearchPage?: string,\r\n filtersLabel?: string\r\n): JSX.Element => {\r\n return React.cloneElement(\r\n modalProps.modal,\r\n {},\r\n modalProps.modalHeader,\r\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage, filtersLabel),\r\n modalProps.modalFooter\r\n );\r\n};\r\n\r\nconst createModalBody = (\r\n props: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps,\r\n isRecoSearchPage?: string,\r\n filtersLabel?: string\r\n): JSX.Element | null => {\r\n return React.cloneElement(\r\n props.modalBody,\r\n {},\r\n sortByDropDown && renderSort(sortByDropDown, isRecoSearchPage),\r\n renderRefiner(refineMenu, filtersLabel)\r\n );\r\n};\r\n\r\nconst renderRefiner = (props: IRefineMenuViewProps, filtersLabel?: string): JSX.Element | null => {\r\n const { refiners, RefineMenuContainer, RefinerSectionContainer, activeFilters, activeProducts } = props;\r\n if (refiners) {\r\n return (\r\n <Node {...RefinerSectionContainer}>\r\n <Node {...RefineMenuContainer}>\r\n {(activeFilters! > 0 || activeProducts! > 0) && (\r\n <div className='ms-search-result-container__refine-menu-filter-title'>{filtersLabel}</div>\r\n )}\r\n {refiners.map((submenu, index) => (\r\n <React.Fragment key={index}>{submenu}</React.Fragment>\r\n ))}\r\n </Node>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst renderSort = (props: ISortByViewProps, renderGridAndListView: React.ReactNode, isRecoSearchPage?: string): JSX.Element | null => {\r\n const { SortingContainer, sortByDropDown } = props;\r\n if (sortByDropDown && !isRecoSearchPage) {\r\n return (\r\n <Node {...SortingContainer}>\r\n <div className='ms-search-result-container__sort-view'>\r\n {sortByDropDown}\r\n {renderGridAndListView}\r\n </div>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\r\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\r\n if (categoryHierarchyList) {\r\n return (\r\n <Node {...CategoryHierarchyContainer}>\r\n {categoryHierarchyList.map((category, index) => (\r\n <React.Fragment key={index}>\r\n {category}\r\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\r\n </React.Fragment>\r\n ))}\r\n </Node>\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\r\n const { title, TitleContainer } = props;\r\n if (title) {\r\n return (\r\n <Node {...TitleContainer}>\r\n <h2>\r\n {title.titlePrefix}\r\n {title.titleText}\r\n </h2>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst _renderTitleCount = (props: ITitleViewProps, count?: number, productsLabel?: string): JSX.Element | null => {\r\n const { title, TitleContainer } = props;\r\n if (title && count) {\r\n return (\r\n <Node {...TitleContainer}>\r\n <h5>\r\n <span className='ms-search-result__collection-title-count'>\r\n {count} {productsLabel}\r\n </span>\r\n </h5>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\nexport default SearchResultContainerView;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\nimport MsDyn365, {\r\n getCatalogId,\r\n IComponent,\r\n IComponentProps,\r\n IGridSettings,\r\n IImageSettings,\r\n msdyn365Commerce,\r\n TelemetryEvent\r\n} from '@msdyn365-commerce/core';\r\nimport { getCartState, ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\r\nimport {\r\n AttributeValue,\r\n CartLineValidationResults,\r\n CartsDataActions,\r\n format,\r\n ProductAvailableQuantity,\r\n ProductDimension,\r\n ProductPrice,\r\n ProductsDataActions,\r\n ProductSearchCriteria,\r\n ProductType,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { getCustomer, GetCustomerInput } from '@msdyn365-commerce-modules/retail-actions';\r\n// AttributeValue,\r\n\r\n// AttributeValueBase,\r\n\r\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\r\nimport { ArrayExtensions, generateProductImageUrl, ObjectExtensions, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, IPopupProps, ITelemetryContent, Popup } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport React, { useState } from 'react';\r\n\r\nimport {\r\n IItemsAddedToCartResources,\r\n ItemsAddedToCartDialogComponent,\r\n ItemSuccessfullyAddedToCartNotification,\r\n MultiItemsSuccessfullyAddedToCartNotification,\r\n OrderDetailsProduct\r\n} from '@msdyn365-commerce/components';\r\nimport { PriceComponent } from './price.component';\r\nimport { getAttributeValuesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { incExcPriceFormat, taxPercentage } from '../../../../utils/helper';\r\n\r\n/**\r\n * Interface for add to cart resources.\r\n */\r\nexport interface IAddToCartResources {\r\n goToCartText: string;\r\n continueShoppingText: string;\r\n closeNotificationLabel: string;\r\n headerItemOneText: string;\r\n headerItemFormatText: string;\r\n headerLinesFormatText?: string;\r\n headerMessageText: string;\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n addedQuantityText: string;\r\n buyAgainNotificationTitle?: string;\r\n buyAgainNotificationCloseAriaLabel?: string;\r\n validationErrorMessage?: string;\r\n oneErrorText?: string;\r\n multiErrorsText?: string;\r\n}\r\n\r\n/**\r\n * Interface for add to cart components props.\r\n */\r\nexport interface IAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice } | undefined> {\r\n className?: string;\r\n addToCartText: string;\r\n outOfStockText?: string;\r\n disabled?: boolean;\r\n quantity?: number;\r\n navigationUrl?: string;\r\n productAvailability?: ProductAvailableQuantity;\r\n getSelectedProduct?: Promise<SimpleProduct | null>;\r\n isNavigationToCartPageDisabled?: boolean;\r\n shouldSkipSiteSettings?: boolean;\r\n addToCartArialLabel?: string;\r\n products?: {\r\n productId: number;\r\n quantity: number;\r\n catalogId?: number;\r\n }[];\r\n orderDetailsProducts?: OrderDetailsProduct[];\r\n hasAvailableProducts?: boolean;\r\n imageSettings?: IImageSettings;\r\n gridSettings?: IGridSettings;\r\n\r\n isLoading?: boolean;\r\n isUpdatingDimension?: boolean;\r\n isLoadingDeliveryOptions?: boolean;\r\n isUpdatingDeliveryOptions?: boolean;\r\n isAddServiceItemToCart?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n customPriceAmount?: number;\r\n isOrderQuantityLimitsFeatureEnabled?: boolean;\r\n\r\n dialogStrings?: IAddToCartResources;\r\n\r\n telemetryContent?: ITelemetryContent;\r\n\r\n catalogId?: number;\r\n\r\n isCustomPriceSelected?: boolean;\r\n maximumKeyInPrice?: number;\r\n minimumKeyInPrice?: number;\r\n defaultMaximumKeyInPrice?: number;\r\n defaultMinimumKeyInPrice?: number;\r\n isProductQuantityLoading?: boolean;\r\n customerTaxPercentage: number;\r\n\r\n isStatusTwoZeroFour?: boolean;\r\n onAdd?(result: ICartActionResult): void;\r\n onError?(result: IAddToCartFailureResult): void;\r\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\r\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\r\n}\r\n\r\n/**\r\n * Cart action Failure reason type.\r\n */\r\nexport declare type ICartActionFailureReason =\r\n | 'EMPTYINPUT'\r\n | 'MISSINGDIMENSION'\r\n | 'OUTOFSTOCK'\r\n | 'CARTACTIONFAILED'\r\n | 'INVALIDCUSTOMAMOUNT';\r\n\r\n/**\r\n * Interface for add to cart failure result.\r\n */\r\nexport interface IAddToCartFailureResult {\r\n failureReason: ICartActionFailureReason;\r\n\r\n stockLeft?: number;\r\n cartActionResult?: ICartActionResult;\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\n/**\r\n * This setting defines the experience when a product is added to cart. Corresponds to the configuration in Fabrikam.\r\n */\r\nexport enum AddToCartBehavior {\r\n /**\r\n * Navigate to cart page.\r\n */\r\n goToCart = 'goToCart',\r\n\r\n /**\r\n * Show item added to cart popup.\r\n */\r\n showModal = 'showModal',\r\n\r\n /**\r\n * Show mini cart popup.\r\n */\r\n showMiniCart = 'showMiniCart',\r\n\r\n /**\r\n * Show item added to cart notification.\r\n */\r\n showNotification = 'showNotification',\r\n\r\n /**\r\n * Do nothing and stay on the page.\r\n */\r\n nothing = 'nothing'\r\n}\r\n\r\nconst zero = 0;\r\nconst defaultQuantity = 1;\r\n\r\n/**\r\n * The propagate result.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The cart action result.\r\n */\r\nconst propagateResult = (props: IAddToCartComponentProps, result: ICartActionResult): void => {\r\n if (props.onAdd) {\r\n props.onAdd(result);\r\n }\r\n};\r\n\r\n/**\r\n * The propagate error.\r\n * @param props -- The add to cart component props.\r\n * @param result -- The add to cart failure result.\r\n */\r\nconst propagateError = (props: IAddToCartComponentProps, result: IAddToCartFailureResult): void => {\r\n if (props.onError) {\r\n props.onError(result);\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves add to cart input from the component props.\r\n * @param props - Add to cart component props.\r\n * @returns Add to cart input.\r\n */\r\nconst getAddToCartInputFromProps = async (props: IAddToCartComponentProps) => {\r\n const products = props.orderDetailsProducts?.filter(product => !ObjectExtensions.isNullOrUndefined(product.simpleProduct));\r\n const input = products?.map(product => {\r\n return {\r\n product: product.simpleProduct!,\r\n count: ObjectExtensions.isNullOrUndefined(product.salesLine.Quantity) ? defaultQuantity : product.salesLine.Quantity,\r\n catalogId: product.salesLine.CatalogId\r\n };\r\n });\r\n\r\n if (ArrayExtensions.hasElements(input)) {\r\n return input;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(props.products)) {\r\n const actionContext = props.context.actionContext;\r\n const apiSettings = actionContext.requestContext.apiSettings;\r\n\r\n const catalogId = props.catalogId ?? getCatalogId(props.context.actionContext.requestContext);\r\n validateCatalogId(catalogId);\r\n\r\n const searchCriteriaInput: ProductSearchCriteria = {\r\n Context: {\r\n ChannelId: apiSettings.channelId,\r\n CatalogId: catalogId\r\n },\r\n IncludeAttributes: false,\r\n Ids: props.products.map(product => product.productId)\r\n };\r\n\r\n const searchResult = await ProductsDataActions.searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\r\n const productSearchResultsWithImages = searchResult.map(productSearchResult => {\r\n const newProductSearchResult = { ...productSearchResult };\r\n const newImageUrl = generateProductImageUrl(newProductSearchResult, apiSettings);\r\n\r\n if (newImageUrl) {\r\n newProductSearchResult.PrimaryImageUrl = newImageUrl;\r\n }\r\n\r\n return newProductSearchResult;\r\n });\r\n\r\n return props.products.map(item => {\r\n const productData = productSearchResultsWithImages.find(product => product.RecordId === item.productId);\r\n let simpleProduct: SimpleProduct;\r\n if (productData) {\r\n simpleProduct = {\r\n ...productData,\r\n ProductTypeValue: ProductType.Variant,\r\n AdjustedPrice: productData.Price,\r\n BasePrice: productData.BasePrice ?? productData.Price\r\n };\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Cast to simple product since only record id is available.\r\n simpleProduct = {\r\n RecordId: item.productId\r\n } as SimpleProduct;\r\n }\r\n\r\n return {\r\n product: simpleProduct,\r\n count: item.quantity,\r\n catalogId: item.catalogId\r\n };\r\n });\r\n }\r\n\r\n if (props.data?.product) {\r\n return [\r\n {\r\n product: props.data.product,\r\n count: props.quantity ?? defaultQuantity,\r\n catalogId: props.catalogId\r\n }\r\n ];\r\n }\r\n\r\n return [];\r\n};\r\n\r\n// const _getProductAttributes = async (product: SimpleProduct, props: IAddToCartComponentProps): Promise<AttributeValue[]> => {\r\n// const {\r\n// context: {\r\n// actionContext,\r\n// request: {\r\n// apiSettings: { channelId, catalogId }\r\n// }\r\n// }\r\n// } = props;\r\n// const attributes: AttributeValue[] = await getAttributeValuesAsync(\r\n// { callerContext: actionContext, queryResultSettings: {} },\r\n// product.RecordId,\r\n// channelId,\r\n// catalogId\r\n// );\r\n// return attributes.filter((attr: AttributeValue) => attr !== null && attr !== undefined) || [];\r\n// };\r\n\r\n/**\r\n * Add one item to cart when it is not buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param openModal -- The open modal call back.\r\n */\r\nconst addOneItemToCart = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void\r\n): Promise<void> => {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n const data = props.data;\r\n\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n const product = addToCartInput[0].product;\r\n const quantity = addToCartInput[0].count;\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n // // VSI CUSTOMIZATION START\r\n // const productManufacturarAttribute = props.context.app.config.productManufacturarAttribute || 'Manufacturer';\r\n // const productWeightAttribute = props.context.app.config.productWeightAttribute || 'Weight (kg)';\r\n // const productAttributes = await _getProductAttributes(product, props);\r\n // const productAttrManufactrValue = productAttributes?.find((item: AttributeValue) => item.Name === productManufacturarAttribute);\r\n // const productAttrWeightValue = productAttributes?.find((item: AttributeValue) => item.Name === productWeightAttribute);\r\n // //VSI CUSTOMIZATION END\r\n const addToCartResult = await cartState.addProductToCart({\r\n product,\r\n count: quantity,\r\n availableQuantity: props.productAvailability?.AvailableQuantity,\r\n additionalProperties: { validateQunatity: props.isOrderQuantityLimitsFeatureEnabled },\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n isPriceKeyedIn: props.isPriceKeyedIn,\r\n customPrice: props.customPriceAmount,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\r\n shouldSkipSiteSettings: props.shouldSkipSiteSettings,\r\n catalogId: addToCartInput[0].catalogId\r\n });\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n // // VSI - Customization to add Product attributes to display weight and manufacuture on order details\r\n // if (cartState.cart && cartState.cart.CartLines) {\r\n // const cartLines = cartState.cart.CartLines.filter(cartLineItem => cartLineItem.ProductId === product.RecordId);\r\n // if (cartLines && cartLines.length > 0) {\r\n // const newCartLine = cartLines[cartLines.length - 1];\r\n // const lineIdManufacturAttr = setNameAttribute(productManufacturarAttribute, productAttrManufactrValue?.TextValue || '');\r\n // const lineIdWeightAttr = setNameAttribute(productWeightAttribute, productAttrWeightValue?.FloatValue?.toString() || '');\r\n // let currentAttributes: AttributeValueBase[] = newCartLine.AttributeValues || [];\r\n // currentAttributes = await findAttribute(currentAttributes, lineIdManufacturAttr);\r\n // currentAttributes = await findAttribute(currentAttributes, lineIdWeightAttr);\r\n // newCartLine.AttributeValues = currentAttributes; // Updates cart with Attribute Values\r\n // updateCartLinesAsync({ callerContext: props.context.actionContext }, cartState.cart.Id, [newCartLine])\r\n // .then(() => cartState.refreshCart({}))\r\n // .catch(error => props.context.actionContext.telemetry.exception(error));\r\n // }\r\n // }\r\n // // VSI - Customization End\r\n\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n openModal(true);\r\n } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const notification = new ItemSuccessfullyAddedToCartNotification(\r\n props.context,\r\n props.dialogStrings,\r\n props.imageSettings,\r\n props.gridSettings,\r\n product,\r\n data?.price,\r\n quantity,\r\n props.navigationUrl,\r\n props.telemetryContent!,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n propagateResult(props, addToCartResult);\r\n props.isStatusTwoZeroFour ? window.location.reload() : null;\r\n } else {\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n addToCartResult.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n/**\r\n * Callback to handle success of adding to cart.\r\n * @param props - Add to cart component props.\r\n * @param setDisabled - Callback to update disabled state of the component.\r\n * @param setItemsAddedToCartDialogOpen - Callback to update disabled state of the component.\r\n * @param setErrorMessage - Callback to update error message state of the component.\r\n * @param cartState - Current cart state.\r\n * @param addToCartInput - Input used for adding to cart.\r\n * @param addToCartResult - Result of adding to cart.\r\n */\r\nconst handleAddItemsToCartSuccess = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void,\r\n cartState: ICartState,\r\n addToCartInput: {\r\n product: SimpleProduct;\r\n count: number;\r\n }[],\r\n addToCartResult: ICartActionResult\r\n) => {\r\n // Validate cart for line errors.\r\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\r\n { callerContext: props.context.actionContext, bypassCache: 'none' },\r\n cartState.cart.Id,\r\n cartState.cart.Version\r\n );\r\n const errorCount = (validationResult.ValidationFailuresByCartLines ?? []).length;\r\n const singleErrorCount = 1;\r\n const errorText = errorCount === singleErrorCount ? props.dialogStrings?.oneErrorText : props.dialogStrings?.multiErrorsText;\r\n const errorMessage =\r\n errorCount > zero ? format(props.dialogStrings?.validationErrorMessage ?? '', errorCount.toString(), errorText) : '';\r\n\r\n setErrorMessage(errorMessage);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = props.context.app.config.addToCartBehavior;\r\n\r\n if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showModal) {\r\n setDisabled(false);\r\n setItemsAddedToCartDialogOpen(true);\r\n } else if (props.dialogStrings && addToCartBehavior === AddToCartBehavior.showNotification) {\r\n setDisabled(false);\r\n const itemsAddedResource: IItemsAddedToCartResources = {\r\n viewCartButtonText: props.dialogStrings.goToCartText,\r\n closeButtonLabel: props.dialogStrings.closeNotificationLabel,\r\n itemsAddedToCartHeaderText: props.dialogStrings.headerMessageText,\r\n itemsAddedToCartFormatText: props.dialogStrings.headerItemFormatText,\r\n linesAddedToCartFormatText: props.dialogStrings.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const notification = new MultiItemsSuccessfullyAddedToCartNotification(\r\n props.context,\r\n itemsAddedResource,\r\n props.imageSettings,\r\n props.gridSettings,\r\n addToCartInput,\r\n props.navigationUrl,\r\n props.telemetryContent!,\r\n props.id,\r\n props.typeName\r\n );\r\n NotificationsManager.instance().addNotification(notification);\r\n } else if (\r\n MsDyn365.isBrowser &&\r\n props.navigationUrl &&\r\n !props.isNavigationToCartPageDisabled &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(props.navigationUrl);\r\n } else {\r\n setDisabled(false);\r\n }\r\n propagateResult(props, addToCartResult);\r\n};\r\n\r\n/**\r\n * Add one or multi item to cart from buy again.\r\n * @param props -- The props.\r\n * @param setDisabled -- The set disable call back.\r\n * @param setItemsAddedToCartDialogOpen -- The open modal call back.\r\n * @param setErrorMessage -- The set error message call back.\r\n */\r\nconst addItemsToCart = async (\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise<void> => {\r\n const addToCartInput = await getAddToCartInputFromProps(props);\r\n\r\n if (!ArrayExtensions.hasElements(addToCartInput)) {\r\n return;\r\n }\r\n\r\n const cartState = await getCartState(props.context.actionContext);\r\n const addToCartResult = await cartState.addProductsToCart(addToCartInput);\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n await handleAddItemsToCartSuccess(\r\n props,\r\n setDisabled,\r\n setItemsAddedToCartDialogOpen,\r\n setErrorMessage,\r\n cartState,\r\n addToCartInput,\r\n addToCartResult\r\n );\r\n } else {\r\n if (props.dialogStrings?.buyAgainNotificationTitle) {\r\n // For buy again show simple error notification.\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n props.dialogStrings.buyAgainNotificationTitle,\r\n props.dialogStrings.buyAgainNotificationCloseAriaLabel ?? ''\r\n )\r\n );\r\n } else {\r\n NotificationsManager.instance().addNotification(\r\n new ErrorNotification(\r\n addToCartResult.errorDetails?.LocalizedMessage ?? 'Add to cart failed',\r\n props.dialogStrings?.closeNotificationLabel ?? ''\r\n )\r\n );\r\n }\r\n\r\n propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n setDisabled(false);\r\n }\r\n};\r\n\r\n/**\r\n * Interface for add to cart component.\r\n */\r\nexport interface IAddtoCartComponent extends IComponent<IAddToCartComponentProps> {\r\n onClick(): (event: React.MouseEvent<HTMLElement>, props: IAddToCartComponentProps) => void;\r\n}\r\n\r\n/**\r\n * On click function.\r\n * @param _event - The mouse event.\r\n * @param props - The props.\r\n * @param setDisabled - Flag to define whether the element is disabled.\r\n * @param openModal - Flag to specify if it should open in a modal window.\r\n * @param setItemsAddedToCartDialogOpen - Sets items added to cart while dialog is open.\r\n * @param setErrorMessage - Error message.\r\n */\r\nconst onClick = async (\r\n _event: React.MouseEvent<HTMLElement>,\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void,\r\n setItemsAddedToCartDialogOpen: (opened: boolean) => void,\r\n setErrorMessage: (message: string) => void\r\n): Promise<void> => {\r\n if (!ArrayExtensions.hasElements(props.products)) {\r\n const cartError = addToCartError(props);\r\n\r\n if (cartError) {\r\n propagateError(props, cartError);\r\n return;\r\n }\r\n\r\n setDisabled(true);\r\n }\r\n\r\n const hasOrderDetailsProducts =\r\n ArrayExtensions.hasElements(props.orderDetailsProducts) && props.orderDetailsProducts.length > defaultQuantity;\r\n const hasProducts = ArrayExtensions.hasElements(props.products) && props.products.length > defaultQuantity;\r\n\r\n const hasMultipleProducts = hasOrderDetailsProducts || hasProducts;\r\n\r\n if (props.shouldSkipSiteSettings && hasMultipleProducts) {\r\n await addItemsToCart(props, setDisabled, setItemsAddedToCartDialogOpen, setErrorMessage);\r\n } else {\r\n await addOneItemToCart(props, setDisabled, openModal);\r\n }\r\n};\r\n\r\n/**\r\n * Add to cart component action constant.\r\n */\r\nconst AddToCartComponentActions = {\r\n onClick\r\n};\r\n\r\n/**\r\n * Add to cart component.\r\n * @param props - The props.\r\n * @returns - The add to cart component.\r\n */\r\nexport const AddToCartFunctionalComponent: React.FC<IAddToCartComponentProps> = (props: IAddToCartComponentProps) => {\r\n const [disabled, setDisabled] = useState(false);\r\n const [modalOpen, setModalOpen] = useState(false);\r\n const [isItemsAddedToCartDialogOpen, setItemsAddedToCartDialogOpen] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState('');\r\n const [customerTaxPercentage, setcustomerTaxPercentage] = useState<number>(0);\r\n const [addToCartInput, setAddToCartInput] = useState<\r\n {\r\n product: SimpleProduct;\r\n count: number;\r\n }[]\r\n >([]);\r\n const [disountedWpPrice, setDiscountedwpPrice] = React.useState<String | undefined>('');\r\n const [attributes, setAttributes] = React.useState<AttributeValue[]>();\r\n\r\n const onClickHandler = async (event: React.MouseEvent<HTMLElement>) => {\r\n await AddToCartComponentActions.onClick(event, props, setDisabled, setModalOpen, setItemsAddedToCartDialogOpen, setErrorMessage);\r\n };\r\n React.useEffect(() => {\r\n findAttributesValues();\r\n getCustomerTaxInfo();\r\n }, []);\r\n async function findAttributesValues() {\r\n const catalogId = getCatalogId(props.context.actionContext.requestContext);\r\n const actionContext = props.context.actionContext;\r\n const apiSettings = actionContext.requestContext.apiSettings;\r\n const recordId: any = props?.data?.product?.RecordId;\r\n\r\n const attributes: AttributeValue[] = await getAttributeValuesAsync(\r\n { callerContext: actionContext, queryResultSettings: {} },\r\n recordId,\r\n apiSettings.channelId,\r\n catalogId\r\n );\r\n setAttributes(attributes);\r\n }\r\n React.useEffect(() => {\r\n if (attributes) {\r\n calculateWpPrice();\r\n }\r\n }, [attributes]);\r\n\r\n const calculateWpPrice = () => {\r\n let basePrice = props?.data?.price?.CustomerContextualPrice;\r\n let discountedPrice = props?.data?.price?.CustomerContextualPrice;\r\n let tempBasePrice, tempDiscountedPrice, displayWpPrice;\r\n if (basePrice === discountedPrice) {\r\n attributes?.map(e => {\r\n if (e.Name === 'Power rating Pmax (Wp)') {\r\n if (e.IntegerValue !== 0) {\r\n tempBasePrice = basePrice! / e.IntegerValue!;\r\n }\r\n }\r\n\r\n if (e.KeyName === 'DisplayWPPrice' || e.Name === 'Display WP Price') {\r\n displayWpPrice = e.BooleanValue;\r\n }\r\n });\r\n\r\n if (displayWpPrice && tempBasePrice !== undefined) {\r\n setDiscountedwpPrice(tempBasePrice);\r\n }\r\n } else {\r\n attributes?.map(e => {\r\n if (e.Name === 'Power rating Pmax (Wp)') {\r\n if (e.IntegerValue !== 0) {\r\n tempBasePrice = basePrice! / e.IntegerValue!;\r\n tempDiscountedPrice = discountedPrice! / e.IntegerValue!;\r\n }\r\n }\r\n\r\n if (e.KeyName === 'DisplayWPPrice' || e.Name === 'Display WP Price') {\r\n displayWpPrice = e.BooleanValue;\r\n }\r\n });\r\n\r\n if (displayWpPrice && tempBasePrice !== undefined && tempDiscountedPrice !== undefined) {\r\n setDiscountedwpPrice(tempDiscountedPrice);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Close dialog.\r\n */\r\n const closeItemsAddedToCartDialog = React.useCallback(() => {\r\n setItemsAddedToCartDialogOpen(false);\r\n }, []);\r\n\r\n const getCustomerTaxInfo = async () => {\r\n const customerInput = new GetCustomerInput(props.context.actionContext.requestContext.apiSettings);\r\n const customer = await getCustomer(customerInput, props.context.actionContext);\r\n const customerTaxPercentage = taxPercentage(customer) || 0;\r\n if (customer) {\r\n setcustomerTaxPercentage(customerTaxPercentage);\r\n }\r\n return customerTaxPercentage;\r\n };\r\n\r\n const {\r\n context: {\r\n app: {\r\n config: { enabledIncExPrices }\r\n },\r\n request: {\r\n user: { isAuthenticated }\r\n }\r\n }\r\n } = props;\r\n const ppwPrice =\r\n props.context?.actionContext?.requestContext?.apiSettings?.oun !== props.context.app.config.ounNumberForUsSite\r\n ? 'WP Price:'\r\n : 'PPW Price:';\r\n const priceComponent = props.data?.price ? (\r\n <PriceComponent\r\n data={{ price: props.data.price }}\r\n context={props.context}\r\n id={props.id}\r\n typeName={props.typeName}\r\n freePriceText={props.dialogStrings?.freePriceText}\r\n originalPriceText={props.dialogStrings?.originalPriceText}\r\n currentPriceText={props.dialogStrings?.currentPriceText}\r\n isIncExPriceFormatEnabled={true}\r\n customerTaxPercentage={customerTaxPercentage || 0}\r\n wpPrice={\r\n <React.Fragment>\r\n {disountedWpPrice && isAuthenticated && (\r\n <div className='wp-price-container'>\r\n <span className='_title'>{ppwPrice}</span>\r\n <div className='_wp-price-container'>\r\n <span className='_discounted-wp-price'>\r\n {incExcPriceFormat(\r\n Number(disountedWpPrice),\r\n props.context,\r\n enabledIncExPrices,\r\n customerTaxPercentage || 0,\r\n 3\r\n )}\r\n </span>\r\n </div>\r\n </div>\r\n )}\r\n </React.Fragment>\r\n }\r\n />\r\n ) : (\r\n ''\r\n );\r\n\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'msc-add-to-cart',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: { product: addToCartInput[0]?.product, price: props.data?.price }, // addToCartInput[0]?.product?.Price },\r\n dialogStrings: props.dialogStrings,\r\n imageSettings: props.imageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: addToCartInput[0]?.count !== undefined ? addToCartInput[0]?.count : defaultQuantity,\r\n priceComponent,\r\n navigationUrl: props.navigationUrl,\r\n modalOpen,\r\n setModalOpen,\r\n telemetryContent: props.telemetryContent\r\n };\r\n if (popupProps.imageSettings) popupProps.imageSettings.mode = 1;\r\n\r\n const itemsAddedResource: IItemsAddedToCartResources = {\r\n viewCartButtonText: props.dialogStrings?.goToCartText ?? '',\r\n closeButtonLabel: props.dialogStrings?.closeNotificationLabel ?? 'Close',\r\n itemsAddedToCartHeaderText: props.dialogStrings?.headerMessageText ?? '',\r\n itemsAddedToCartFormatText: props.dialogStrings?.headerItemFormatText ?? '',\r\n linesAddedToCartFormatText: props.dialogStrings?.headerLinesFormatText ?? '{0}',\r\n itemsAddedValidationErrorMessage: errorMessage\r\n };\r\n\r\n const renderModalPopup = <Popup {...popupProps} />;\r\n const label = getLinkText(props);\r\n const payload = getPayloadObject(TelemetryEvent.AddToCart, props.telemetryContent!, label, '');\r\n const tAttributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n const buttonClassName = props.shouldSkipSiteSettings ? '' : 'msc-add-to-cart ';\r\n\r\n React.useEffect(() => {\r\n /**\r\n * Retrieves add to cart input and updates the state.\r\n */\r\n const retrieveAddToCartInput = async () => {\r\n const retrievedInput = await getAddToCartInputFromProps(props);\r\n setAddToCartInput(retrievedInput);\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call async method as per the documentation of react useEffect.\r\n retrieveAddToCartInput();\r\n }, [props, setAddToCartInput]);\r\n\r\n return (\r\n <>\r\n {renderModalPopup}\r\n <button\r\n className={classnames(buttonClassName, props.className)}\r\n aria-label={props.addToCartArialLabel ?? label}\r\n title={props.addToCartArialLabel ?? label}\r\n {...tAttributes}\r\n onClick={onClickHandler}\r\n disabled={props.disabled || disabled || isIntermediateState(props) || shouldShowOutOfStock(props, false)}\r\n >\r\n {label}\r\n </button>\r\n <ItemsAddedToCartDialogComponent\r\n className='msc-lines-added-to-cart-dialog'\r\n id={props.id}\r\n typeName={props.typeName}\r\n context={props.context}\r\n dialogStrings={itemsAddedResource}\r\n data={{\r\n products: addToCartInput\r\n }}\r\n isModalOpen={isItemsAddedToCartDialogOpen}\r\n onClose={closeItemsAddedToCartDialog}\r\n />\r\n </>\r\n );\r\n};\r\n\r\n// Set default props\r\nAddToCartFunctionalComponent.defaultProps = {\r\n quantity: defaultQuantity\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns Gets the link text.\r\n */\r\nconst getLinkText = (props: IAddToCartComponentProps): string => {\r\n return shouldShowOutOfStock(props, false) && props.outOfStockText ? props.outOfStockText : props.addToCartText;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @returns The add to cart failure result.\r\n */\r\nconst addToCartError = (props: IAddToCartComponentProps): IAddToCartFailureResult | undefined => {\r\n const {\r\n data,\r\n productAvailability,\r\n isCustomPriceSelected,\r\n customPriceAmount,\r\n maximumKeyInPrice,\r\n minimumKeyInPrice,\r\n defaultMaximumKeyInPrice = 100,\r\n defaultMinimumKeyInPrice = 10\r\n } = props;\r\n\r\n if (!data || !data.product.RecordId) {\r\n // No product exists, won't be able to add to cart\r\n return { failureReason: 'EMPTYINPUT' };\r\n }\r\n\r\n if (data.product.Dimensions) {\r\n const missingDimensions = data.product.Dimensions.filter(\r\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\r\n );\r\n\r\n if (ArrayExtensions.hasElements(missingDimensions)) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n return { failureReason: 'MISSINGDIMENSION', missingDimensions };\r\n }\r\n }\r\n\r\n if (shouldShowOutOfStock(props, true)) {\r\n const defaultAvailableQuantity = 0; // Showing as out of stock if no available products found.\r\n const availableQuantity = productAvailability?.AvailableQuantity ?? defaultAvailableQuantity;\r\n const stockLeft = Math.max(availableQuantity, defaultAvailableQuantity);\r\n\r\n return { failureReason: 'OUTOFSTOCK', stockLeft };\r\n }\r\n\r\n // When Custom price is selected, if there is no keyed-in price or keyed-in price is out of limit, should return error.\r\n if (\r\n isCustomPriceSelected &&\r\n (!customPriceAmount ||\r\n customPriceAmount > (maximumKeyInPrice || defaultMaximumKeyInPrice) ||\r\n customPriceAmount < (minimumKeyInPrice || defaultMinimumKeyInPrice))\r\n ) {\r\n return { failureReason: 'INVALIDCUSTOMAMOUNT' };\r\n }\r\n\r\n // Only allow adding to cart if not showing out of stock\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Resolves whether product is in stock.\r\n * @param props - The add to cart component props.\r\n * @param includeCurrentQuantity - Flag to specify whether current quantity should be included.\r\n * @returns The dialog element.\r\n */\r\nconst shouldShowOutOfStock = (props: IAddToCartComponentProps, includeCurrentQuantity: boolean): boolean => {\r\n if (props.context.app.config.enableStockCheck === undefined || props.context.app.config.enableStockCheck === false) {\r\n return false;\r\n }\r\n\r\n // When skip site settings do not need show out of stock on adding to cart\r\n if (props.shouldSkipSiteSettings) {\r\n return false;\r\n }\r\n\r\n if (\r\n props.isLoading ||\r\n props.isProductQuantityLoading ||\r\n props.isUpdatingDimension ||\r\n props.isLoadingDeliveryOptions ||\r\n props.isUpdatingDeliveryOptions ||\r\n props.isAddServiceItemToCart\r\n ) {\r\n // Out of stock turn off, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (!props.data || !props.data.product.RecordId) {\r\n // No product exists, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n const hasAvailableProducts = props.hasAvailableProducts ?? true;\r\n if (!hasAvailableProducts) {\r\n return true;\r\n }\r\n\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also don't show out of stock\r\n return false;\r\n }\r\n }\r\n\r\n const includedQuantityNumber = includeCurrentQuantity && props.quantity ? props.quantity : defaultQuantity;\r\n\r\n return !(\r\n props.productAvailability &&\r\n props.productAvailability.AvailableQuantity !== undefined &&\r\n props.productAvailability.AvailableQuantity >= includedQuantityNumber\r\n );\r\n};\r\n\r\nconst isIntermediateState = (props: IAddToCartComponentProps): boolean => {\r\n if (props.data?.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n return false;\r\n }\r\n }\r\n\r\n if (!props.isLoading && !props.isUpdatingDimension && !props.isLoadingDeliveryOptions && !props.isUpdatingDeliveryOptions) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n// @ts-expect-error\r\n// prettier-ignore\r\nexport const AddToCartComponent: React.FunctionComponent<IAddToCartComponentProps> = msdyn365Commerce.createComponentOverride<IAddtoCartComponent>('AddToCart', { component: AddToCartFunctionalComponent, ...AddToCartComponentActions });\r\n\r\nexport default AddToCartComponent;\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 {\r\n IGroup,\r\n IGroupDelivery,\r\n IGroups,\r\n IHeader,\r\n IList,\r\n IOrderHistoryViewProps,\r\n IOrderInformation,\r\n ISalesOrder,\r\n getOrderDetailsPageUrl\r\n} from '@msdyn365-commerce-modules/order-management';\r\nimport { Module, Node, Button, Waiting } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\r\nimport { AttributeValue, AttributeValueBase, SalesOrder } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSalesOrderDetailsBySalesIdAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/SalesOrdersDataActions.g';\r\nimport { currencyFormat, dateFormatByLocale, getOrderStatus } from '../../../utils/helper';\r\nimport { SearchOrderHistoryAction, SearchOrderHistoryInput } from '../../../actions/search-order-history.action';\r\nimport { IOrderHistoryProps } from '../definition-extensions/order-history.ext.props.autogenerated';\r\n\r\nexport interface OrderHistoryOrderInfomationItemArr {\r\n itemIdArr?: any;\r\n orderDetailsLink?: React.ReactNode;\r\n isMobile?: boolean;\r\n order?: any;\r\n customContext?: any;\r\n orderShipment?: any;\r\n orderHistory?: any;\r\n searchResult?: any;\r\n salesOrder?: any;\r\n searchOrder?: any;\r\n resources?: any;\r\n sitePath?: string;\r\n usSiteFlag?: boolean;\r\n}\r\nexport interface OrderHistorySearchOrderInfomation {\r\n orderInformationProps?: any;\r\n searchOrder?: any;\r\n isMobile?: boolean;\r\n customContext?: any;\r\n resources?: any;\r\n orderDetailsLink?: any;\r\n sitePath?: string;\r\n usSiteFlag?: boolean;\r\n}\r\nexport const OrderHistoryOrderInfomation: React.FC<IOrderInformation & OrderHistoryOrderInfomationItemArr> = ({\r\n orderInformationProps,\r\n salesId,\r\n amount,\r\n channelReferenceId,\r\n orderDetailsLink,\r\n isMobile,\r\n order,\r\n customContext,\r\n orderHistory,\r\n usSiteFlag,\r\n resources\r\n}) => {\r\n const enum AttributeKeyName {\r\n Commission = 'Commission',\r\n CustomerReference = 'Customer reference',\r\n RequestADeliveryDate = 'Request a delivery date',\r\n comments = 'comments',\r\n estimatedShipDate = 'Estimated ship date'\r\n }\r\n\r\n function getAttributeValue(AttributeValues?: AttributeValueBase[], type?: string) {\r\n let textValue;\r\n AttributeValues?.map((e: AttributeValue) => {\r\n if (e.Name === type) {\r\n textValue = e.TextValue;\r\n } else if (e.Name === type) {\r\n textValue = e.TextValue;\r\n }\r\n });\r\n return textValue ? textValue : '-';\r\n }\r\n\r\n const salesOrderBasedOnSalesId = orderHistory?.salesOrders?.filter(\r\n (saleOrder: { SalesId: any }) => saleOrder.SalesId === order?.SalesId\r\n );\r\n const requestedDeliveryDate = new Date(salesOrderBasedOnSalesId[0]?.RequestedDeliveryDate).toLocaleDateString('en-GB');\r\n const createdDateInGBFormat = new Date(order?.CreatedDateTime).toLocaleDateString('en-GB');\r\n {\r\n /* VSI CUSTOMIZATION | DATE FORMAT | START */\r\n }\r\n const dateLocale = customContext.app.config.dateFormat;\r\n const currency = customContext.request.channel?.Currency;\r\n let requestedDeliveryDateByLocale: string | undefined;\r\n let createdDateInGBFormatByLocale: string | undefined;\r\n if (dateLocale && currency) {\r\n requestedDeliveryDateByLocale =\r\n (requestedDeliveryDate &&\r\n requestedDeliveryDate.toString() !== 'Invalid Date' &&\r\n dateFormatByLocale(dateLocale, currency, requestedDeliveryDate)) ||\r\n undefined;\r\n createdDateInGBFormatByLocale =\r\n (createdDateInGBFormat &&\r\n createdDateInGBFormat.toString() !== 'Invalid Date' &&\r\n dateFormatByLocale(dateLocale, currency, createdDateInGBFormat)) ||\r\n undefined;\r\n }\r\n {\r\n /* VSI CUSTOMIZATION | DATE FORMAT | END */\r\n }\r\n const amountProps = amount as JSX.Element;\r\n const amountValue = amountProps?.props?.data?.price?.CustomerContextualPrice;\r\n if (isMobile) {\r\n return (\r\n <Node {...orderInformationProps}>\r\n <div className='order-history-mob-data'>\r\n {salesId && (\r\n <span className='sales-id-container'>\r\n {resources.salesOrderLable}: <span>{salesId}</span>\r\n </span>\r\n )}\r\n {channelReferenceId && (\r\n <span className='refrence-container'>\r\n <span>{channelReferenceId ? channelReferenceId : '-'}</span>\r\n </span>\r\n )}\r\n {order && order?.AttributeValues && !usSiteFlag && (\r\n <span className='commission-container'>\r\n {resources.siteNameLable}: <span>{getAttributeValue(order?.AttributeValues, AttributeKeyName.Commission)}</span>\r\n </span>\r\n )}\r\n {order && order?.AttributeValues && (\r\n <span className='refrence-container'>\r\n {resources.customerRefNoLable}:{' '}\r\n <span>{getAttributeValue(order?.AttributeValues, AttributeKeyName.CustomerReference)}</span>\r\n </span>\r\n )}\r\n\r\n {createdDateInGBFormatByLocale && (\r\n <span className='date-container'>\r\n {resources.orderDateLable}: <span>{createdDateInGBFormatByLocale ? createdDateInGBFormatByLocale : '-'}</span>\r\n </span>\r\n )}\r\n {\r\n <span className='delivery-date-container'>\r\n {resources.estShipDateLable}: <span>{requestedDeliveryDateByLocale ? requestedDeliveryDateByLocale : '-'}</span>\r\n </span>\r\n }\r\n {\r\n <span className='net-amount-container'>\r\n {resources.netAmountLable}:{' '}\r\n <span>\r\n {' '}\r\n {order?.StatusValue === 7\r\n ? '-'\r\n : order?.NetAmountWithNoTax !== 0\r\n ? currencyFormat(Number(order?.NetAmountWithNoTax), customContext)\r\n : currencyFormat(Number(order?.GrossAmount), customContext)}\r\n </span>\r\n </span>\r\n }\r\n {amount && (\r\n <span className='amount-container'>\r\n {resources.totalAmountLable}: <span>{currencyFormat(amountValue, customContext)}</span>{' '}\r\n </span>\r\n )}\r\n {\r\n <span className='currency-container'>\r\n {resources.currencyLable}: {usSiteFlag ? <span>$</span> : <span>A$</span>}{' '}\r\n </span>\r\n }\r\n {order && order?.StatusValue && (\r\n <span className='status-container'>\r\n {resources.statusLable}: <span> {getOrderStatus(order?.StatusValue)}</span>\r\n </span>\r\n )}\r\n </div>\r\n </Node>\r\n );\r\n } else {\r\n return (\r\n <tr className='ms-order-history__order-information'>\r\n <td>{salesId ? salesId : '-'}</td>\r\n <td>{channelReferenceId}</td>\r\n {!usSiteFlag && <td>{getAttributeValue(order?.AttributeValues, AttributeKeyName.Commission)}</td>}\r\n <td>{getAttributeValue(order?.AttributeValues, AttributeKeyName.CustomerReference)}</td>\r\n {/* VSI CUSTOMIZATION | DATE FORMAT | START */}\r\n <td>{createdDateInGBFormatByLocale ? createdDateInGBFormatByLocale : '-'}</td>\r\n <td>{requestedDeliveryDateByLocale ? requestedDeliveryDateByLocale : '-'}</td>\r\n {/* VSI CUSTOMIZATION | DATE FORMAT | END */}\r\n <td>\r\n {order?.StatusValue === 7\r\n ? '-'\r\n : order?.NetAmountWithNoTax\r\n ? order?.NetAmountWithNoTax !== 0\r\n ? currencyFormat(Number(order?.NetAmountWithNoTax), customContext)\r\n : currencyFormat(Number(order?.GrossAmount), customContext)\r\n : '-'}\r\n </td>\r\n <td>{amountValue === 0 ? '-' : currencyFormat(Number(amountValue), customContext)}</td>\r\n {usSiteFlag ? <td>$</td> : <td>A$</td>}\r\n <td> {getOrderStatus(order?.StatusValue)}</td>\r\n <td> {orderDetailsLink}</td>\r\n </tr>\r\n );\r\n }\r\n};\r\nexport const OrderHistorySearchOrderInfomation: React.FC<OrderHistorySearchOrderInfomation> = ({\r\n searchOrder,\r\n isMobile,\r\n customContext,\r\n resources,\r\n sitePath,\r\n usSiteFlag\r\n}) => {\r\n const requestedDeliveryDate = new Date(searchOrder?.RequestedDeliveryDate).toLocaleDateString('en-GB');\r\n const createdDateInGBFormat = new Date(searchOrder?.CreatedDateTime).toLocaleDateString('en-GB');\r\n const siteName = searchOrder?.ExtensionProperties.find((item: { Key: string }) => item.Key === 'SiteName')?.Value.StringValue;\r\n const customerRefNo = searchOrder?.ExtensionProperties.find((item: { Key: string }) => item.Key === 'CustomerRefNo')?.Value.StringValue;\r\n const estimatedShipDate = searchOrder?.ExtensionProperties.find((item: { key: string }) => item.key === 'EstimatedShipDate')?.Value\r\n ?.StringValue;\r\n {\r\n /* VSI CUSTOMIZATION | DATE FORMAT | START */\r\n }\r\n const dateLocale = customContext.app.config.dateFormat;\r\n const currency = customContext.request.channel?.Currency;\r\n let requestedDeliveryDateByLocale: string | undefined;\r\n let createdDateInGBFormatByLocale: string | undefined;\r\n let estimatedShipDateByLocale: string | undefined;\r\n if (dateLocale && currency) {\r\n requestedDeliveryDateByLocale =\r\n (requestedDeliveryDate &&\r\n requestedDeliveryDate.toString() !== 'Invalid Date' &&\r\n dateFormatByLocale(dateLocale, currency, requestedDeliveryDate)) ||\r\n undefined;\r\n createdDateInGBFormatByLocale =\r\n (createdDateInGBFormat &&\r\n createdDateInGBFormat.toString() !== 'Invalid Date' &&\r\n dateFormatByLocale(dateLocale, currency, createdDateInGBFormat)) ||\r\n undefined;\r\n estimatedShipDateByLocale =\r\n (estimatedShipDate &&\r\n estimatedShipDate.toString() !== 'Invalid Date' &&\r\n dateFormatByLocale(dateLocale, currency, estimatedShipDate)) ||\r\n undefined;\r\n }\r\n {\r\n /* VSI CUSTOMIZATION | DATE FORMAT | END */\r\n }\r\n let orderDetailsUrl = getOrderDetailsPageUrl(customContext, searchOrder);\r\n if (orderDetailsUrl.includes('undefined')) {\r\n orderDetailsUrl = orderDetailsUrl.replace('undefined', searchOrder.Id);\r\n }\r\n let linkToDetailPage = String(sitePath?.concat(orderDetailsUrl));\r\n linkToDetailPage = linkToDetailPage.replace('orderDetails', 'orderdetails');\r\n\r\n const orderDetailsLinkButton = (\r\n <Button\r\n href={linkToDetailPage}\r\n role='button'\r\n aria-label={resources?.viewOrderDetailsLable}\r\n className='ms-order-history__btn-order-details'\r\n >\r\n {resources.viewOrderDetailsLable}\r\n </Button>\r\n );\r\n if (isMobile) {\r\n return (\r\n <div className='ms-order-history__order-information'>\r\n <div className='order-history-mob-data'>\r\n {searchOrder?.SalesId && (\r\n <span className='sales-id-container'>\r\n {resources.salesOrderLable}: <span>{searchOrder?.SalesId}</span>\r\n </span>\r\n )}\r\n {searchOrder?.ChannelReferenceId && (\r\n <span className='refrence-container'>\r\n {resources.confirmationIdText}:{' '}\r\n <span>{searchOrder?.ChannelReferenceId ? searchOrder?.ChannelReferenceId : '-'}</span>\r\n </span>\r\n )}\r\n {searchOrder && searchOrder?.ExtensionProperties && (\r\n <span className='commission-container'>\r\n {resources.siteNameLable}: <span>{siteName ? siteName : '-'}</span>\r\n </span>\r\n )}\r\n {searchOrder && searchOrder?.ExtensionProperties && (\r\n <span className='refrence-container'>\r\n {resources.customerRefNoLable}: <span>{customerRefNo ? customerRefNo : '-'}</span>\r\n </span>\r\n )}\r\n\r\n {/* VSI CUSTOMIZATION | DATE FORMAT | START */}\r\n {createdDateInGBFormatByLocale && (\r\n <span className='date-container'>\r\n {resources.orderDateLable}: <span>{createdDateInGBFormatByLocale ? createdDateInGBFormatByLocale : '-'}</span>\r\n </span>\r\n )}\r\n {\r\n <span className='delivery-date-container'>\r\n {resources.estShipDateLable}: <span>{estimatedShipDateByLocale ? estimatedShipDateByLocale : '-'}</span>\r\n </span>\r\n }\r\n {/* VSI CUSTOMIZATION | DATE FORMAT | START */}\r\n {\r\n <span className='net-amount-container'>\r\n {resources.netAmountLable}:{' '}\r\n <span>\r\n {' '}\r\n {searchOrder?.NetAmount && searchOrder?.NetAmount !== 0\r\n ? currencyFormat(Number(searchOrder?.NetAmount), customContext)\r\n : searchOrder?.GrossAmount === 0\r\n ? '-'\r\n : currencyFormat(Number(searchOrder?.GrossAmount) - Number(searchOrder?.TaxAmount), customContext)}\r\n </span>\r\n </span>\r\n }\r\n {searchOrder && (\r\n <span className='amount-container'>\r\n {resources.totalAmountLable}:{' '}\r\n <span>\r\n {searchOrder?.TotalAmount === 0 ? '-' : currencyFormat(Number(searchOrder?.TotalAmount), customContext)}\r\n </span>{' '}\r\n </span>\r\n )}\r\n {\r\n <span className='currency-container'>\r\n {resources.currencyLable}: {usSiteFlag ? <span>$</span> : <span>A$</span>}{' '}\r\n </span>\r\n }\r\n {searchOrder && searchOrder?.StatusValue && (\r\n <span className='status-container'>\r\n {resources.statusLable}: <span> {getOrderStatus(searchOrder?.StatusValue)}</span>\r\n </span>\r\n )}\r\n {orderDetailsLinkButton && orderDetailsLinkButton}\r\n </div>\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <tr className='ms-order-history__order-information'>\r\n <td>{searchOrder?.SalesId ? resources.orderNumLable + searchOrder?.SalesId : '-'}</td>\r\n <td>{searchOrder?.ChannelReferenceId}</td>\r\n {usSiteFlag ? null : <td>{siteName}</td>}\r\n <td>{customerRefNo ? customerRefNo : '-'}</td>\r\n {/* VSI CUSTOMIZATION | DATE FORMAT | START */}\r\n <td>{createdDateInGBFormatByLocale ? createdDateInGBFormatByLocale : '-'}</td>\r\n <td>{requestedDeliveryDateByLocale ? requestedDeliveryDateByLocale : '-'}</td>\r\n {/* VSI CUSTOMIZATION | DATE FORMAT | END */}\r\n <td>\r\n {searchOrder?.NetAmount !== 0\r\n ? currencyFormat(Number(searchOrder?.NetAmount), customContext)\r\n : searchOrder?.GrossAmount === 0\r\n ? '-'\r\n : currencyFormat(Number(searchOrder?.GrossAmount) - Number(searchOrder?.TaxAmount), customContext)}\r\n </td>\r\n <td>{searchOrder?.TotalAmount === 0 ? '-' : currencyFormat(Number(searchOrder?.TotalAmount), customContext)}</td>\r\n {usSiteFlag ? <td>$</td> : <td>A$</td>}\r\n <td> {getOrderStatus(searchOrder?.StatusValue)}</td>\r\n <td> {orderDetailsLinkButton}</td>\r\n </tr>\r\n );\r\n }\r\n};\r\n\r\nexport const OrderHistoryGroupDelivery: React.FC<IGroupDelivery> = ({\r\n deliveryProps,\r\n heading,\r\n count,\r\n processing,\r\n address,\r\n trackingInfo\r\n}) => (\r\n <Node {...deliveryProps}>\r\n {heading}\r\n {count}\r\n {processing}\r\n {address}\r\n {trackingInfo}\r\n </Node>\r\n);\r\n\r\nexport const OrderHistoryGroup: React.FC<IGroup> = ({ groupProps, salesLinesProps, salesLines }) => (\r\n <Node {...groupProps}>\r\n {salesLines && (\r\n <Node {...salesLinesProps}>\r\n {salesLines.map(salesLine => (\r\n <React.Fragment key={salesLine.data.salesLine.LineId}>{salesLine.salesLine}</React.Fragment>\r\n ))}\r\n </Node>\r\n )}\r\n </Node>\r\n);\r\n\r\nexport const OrderHistoryGroups: React.FC<IGroups> = ({ groupsProps, groups }) => (\r\n <Node {...groupsProps}>\r\n {groups.map((group, index) => (\r\n <OrderHistoryGroup key={index} {...group} />\r\n ))}\r\n </Node>\r\n);\r\n\r\nexport const OrderHistoryHeader: React.FC<IHeader> = ({ headerProps, heading }) => <Node {...headerProps}>{heading}</Node>;\r\n\r\nexport const OrderHistorySalesOder: React.FC<ISalesOrder & OrderHistoryOrderInfomationItemArr & any> = ({\r\n salesOrderProps,\r\n orderInfomation,\r\n salesOrder,\r\n orderDetailsLink,\r\n expandProductsButton,\r\n isMobile,\r\n customContext,\r\n searchOrder,\r\n orderHistory,\r\n resources,\r\n sitePath,\r\n usSiteFlag\r\n}) => {\r\n const orderNo = orderInfomation?.salesId?.props?.children.substr(7);\r\n const [order, setOrder] = React.useState<SalesOrder>();\r\n React.useEffect(() => {\r\n getSalesOrder(orderNo)(customContext.actionContext).then((res: any) => {\r\n setOrder(res);\r\n });\r\n }, []);\r\n\r\n const getSalesOrder = (orderId: string = '') => async (ctx: IActionContext): Promise<SalesOrder | undefined> => {\r\n return getSalesOrderDetailsBySalesIdAsync({ callerContext: ctx }, orderId);\r\n };\r\n if (isMobile) {\r\n if (searchOrder) {\r\n return (\r\n <div className='ms-order-history__sales-order'>\r\n {searchOrder && (\r\n <OrderHistorySearchOrderInfomation\r\n searchOrder={searchOrder}\r\n isMobile={isMobile}\r\n customContext={customContext}\r\n {...salesOrderProps}\r\n orderDetailsLink={orderDetailsLink}\r\n sitePath={sitePath}\r\n usSiteFlag={usSiteFlag}\r\n resources={resources}\r\n />\r\n )}\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n </div>\r\n );\r\n }\r\n return (\r\n <Node {...salesOrderProps}>\r\n {orderInfomation && (\r\n <OrderHistoryOrderInfomation\r\n {...orderInfomation}\r\n orderHistory={orderHistory}\r\n isMobile={isMobile}\r\n order={order}\r\n orderDetailsLink={orderDetailsLink}\r\n customContext={customContext}\r\n salesOrder={salesOrder}\r\n usSiteFlag={usSiteFlag}\r\n resources={resources}\r\n />\r\n )}\r\n {expandProductsButton}\r\n {orderDetailsLink}\r\n </Node>\r\n );\r\n } else {\r\n if (searchOrder) {\r\n return (\r\n searchOrder && (\r\n <OrderHistorySearchOrderInfomation\r\n searchOrder={searchOrder}\r\n isMobile={isMobile}\r\n customContext={customContext}\r\n resources={resources}\r\n orderDetailsLink={orderDetailsLink}\r\n sitePath={sitePath}\r\n usSiteFlag={usSiteFlag}\r\n />\r\n )\r\n );\r\n }\r\n return (\r\n orderInfomation && (\r\n <OrderHistoryOrderInfomation\r\n {...orderInfomation}\r\n orderHistory={orderHistory}\r\n orderDetailsLink={orderDetailsLink}\r\n isMobile={isMobile}\r\n order={order}\r\n customContext={customContext}\r\n salesOrder={salesOrder}\r\n usSiteFlag={usSiteFlag}\r\n />\r\n )\r\n );\r\n }\r\n};\r\n\r\nexport const OrderHistoryList: React.FC<IList & OrderHistoryOrderInfomationItemArr> = ({\r\n listProps,\r\n salesOrders,\r\n isMobile,\r\n customContext,\r\n orderHistory,\r\n searchResult,\r\n resources,\r\n sitePath,\r\n usSiteFlag\r\n}) => {\r\n if (searchResult && searchResult.length === 0) {\r\n return (\r\n <Node {...listProps}>\r\n <h3 className='no-results'>{resources.noResultFoundText}</h3>\r\n </Node>\r\n );\r\n }\r\n if (isMobile) {\r\n if (searchResult && searchResult.length > 0) {\r\n return (\r\n <Node {...listProps}>\r\n {searchResult &&\r\n searchResult.map((searchOrder: any, index: number) => (\r\n <OrderHistorySalesOder\r\n key={index}\r\n searchOrder={searchOrder}\r\n isMobile={isMobile}\r\n customContext={customContext}\r\n sitePath={sitePath}\r\n usSiteFlag={usSiteFlag}\r\n resources={resources}\r\n />\r\n ))}\r\n </Node>\r\n );\r\n }\r\n return (\r\n <Node {...listProps}>\r\n {salesOrders &&\r\n salesOrders.map((salesOrder: ISalesOrder, index: number) => (\r\n <OrderHistorySalesOder\r\n key={index}\r\n {...salesOrder}\r\n isMobile={isMobile}\r\n customContext={customContext}\r\n orderHistory={orderHistory}\r\n usSiteFlag={usSiteFlag}\r\n resources={resources}\r\n />\r\n ))}\r\n </Node>\r\n );\r\n }\r\n const tableHeadings = (\r\n <tr>\r\n <th>{resources.salesOrderLable}</th>\r\n <th>{resources.confirmationIdText}</th>\r\n {!usSiteFlag && <th>{resources.siteNameLable}</th>}\r\n <th>{resources.customerRefNoLable}</th>\r\n <th>{resources.orderDateLable}</th>\r\n <th>{resources.estShipDateLable}</th>\r\n <th>{resources.netAmountLable}</th>\r\n <th>{resources.totalAmountLable}</th>\r\n <th>{resources.currencyLable}</th>\r\n <th>{resources.statusLable}</th>\r\n <th>{resources.actionLable}</th>\r\n </tr>\r\n );\r\n if (searchResult && searchResult.length > 0 && !isMobile) {\r\n return (\r\n <Node {...listProps}>\r\n <table>\r\n {tableHeadings}\r\n {searchResult &&\r\n searchResult.map((searchOrder: any, index: any) => (\r\n <OrderHistorySalesOder\r\n key={index}\r\n searchOrder={searchOrder}\r\n isMobile={isMobile}\r\n customContext={customContext}\r\n sitePath={sitePath}\r\n usSiteFlag={usSiteFlag}\r\n resources={resources}\r\n />\r\n ))}\r\n </table>\r\n </Node>\r\n );\r\n }\r\n return (\r\n <Node {...listProps}>\r\n <table>\r\n {tableHeadings}\r\n {salesOrders &&\r\n salesOrders.map((salesOrder, index) => (\r\n <OrderHistorySalesOder\r\n key={index}\r\n {...salesOrder}\r\n isMobile={isMobile}\r\n customContext={customContext}\r\n orderHistory={orderHistory}\r\n usSiteFlag={usSiteFlag}\r\n resources={resources}\r\n />\r\n ))}\r\n </table>\r\n </Node>\r\n );\r\n};\r\n\r\nconst OrderHistoryView: React.FC<IOrderHistoryViewProps & IOrderHistoryProps<{}>> = props => {\r\n const {\r\n orderHistoryProps,\r\n orderHistory,\r\n header,\r\n alert,\r\n loading,\r\n emptyMessage,\r\n backToShoppingLink,\r\n list,\r\n table,\r\n moreButton,\r\n context,\r\n resources\r\n } = props;\r\n const {\r\n orderStatusText,\r\n confirmationIdText,\r\n salesIdText,\r\n searchCriteriaText,\r\n confirmationIdPlaceHolder,\r\n salesIdPlaceHolder\r\n } = resources;\r\n type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n const [isMobile, setIsMobile] = React.useState<boolean>(false);\r\n const [res, setRes] = React.useState<any>();\r\n const [searchText, setSearchText] = React.useState<string>('');\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [clearButton, setClearButton] = React.useState<boolean>(false);\r\n const customer = props.data.customerInformation.result;\r\n const orderStatusOption = orderStatusText;\r\n const searchCriteriaDropdownValues = [\r\n {\r\n value: salesIdText\r\n },\r\n {\r\n value: confirmationIdText\r\n },\r\n {\r\n value: orderStatusText\r\n }\r\n ];\r\n const orderStatusDropdownValues = [\r\n {\r\n value: 'Open Order',\r\n key: '0',\r\n isDisabled: true\r\n },\r\n {\r\n value: 'Processing',\r\n key: '1',\r\n isDisabled: false\r\n },\r\n {\r\n value: 'Shipped',\r\n key: '3',\r\n isDisabled: false\r\n },\r\n {\r\n value: 'Invoiced',\r\n key: '4',\r\n isDisabled: false\r\n },\r\n {\r\n value: 'Canceled',\r\n key: '7',\r\n isDisabled: false\r\n }\r\n ];\r\n const [selectedOption, setSelectedOption] = React.useState(searchCriteriaDropdownValues[0].value || 'ChannelReferenceId');\r\n const [selectedStatus, setSelectedStatus] = React.useState('0');\r\n const _updateViewport = (): void => {\r\n const viewport = _getViewport();\r\n viewport === 'xs' || viewport === 'sm' ? setIsMobile(true) : setIsMobile(false);\r\n };\r\n\r\n const _getViewport = (): GridSize => {\r\n const { context } = props;\r\n\r\n // Always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n }\r\n return 'xl';\r\n }\r\n }\r\n\r\n return 'lg';\r\n };\r\n React.useEffect(() => {\r\n _updateViewport();\r\n if (MsDyn365.isBrowser && window.addEventListener) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n window.addEventListener('resize', _updateViewport);\r\n }\r\n }, []);\r\n\r\n const handleOnSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault();\r\n if (searchText === '' && selectedOption !== orderStatusText) {\r\n window.location.reload();\r\n } else {\r\n try {\r\n setIsLoading(true);\r\n const searchOrderInput = new SearchOrderHistoryInput(\r\n {\r\n key: selectedOption,\r\n searchTerm:\r\n selectedOption === orderStatusOption\r\n ? (orderStatusDropdownValues.find(item => item.value === selectedStatus)?.key as string) || '1'\r\n : searchText,\r\n accountNumber: customer?.AccountNumber\r\n },\r\n context.request.apiSettings,\r\n context\r\n );\r\n\r\n const response = await SearchOrderHistoryAction(searchOrderInput, context.actionContext);\r\n setRes(response);\r\n setClearButton(true);\r\n } catch (error) {\r\n setRes(undefined);\r\n return error;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n }\r\n\r\n return;\r\n };\r\n const handleClear = () => {\r\n window.location.reload();\r\n };\r\n return (\r\n <Module {...orderHistoryProps}>\r\n {header && <OrderHistoryHeader {...header} />}\r\n {\r\n <div className='search-panel'>\r\n <h3>{searchCriteriaText}</h3>\r\n <div className='order-search-form'>\r\n <select\r\n aria-label='search filter'\r\n value={selectedOption}\r\n onChange={e => {\r\n setSelectedOption(e.target.value);\r\n setSearchText('');\r\n }}\r\n >\r\n {searchCriteriaDropdownValues.map(item => {\r\n return <option value={item.value}>{item.value}</option>;\r\n })}\r\n </select>\r\n <form onSubmit={handleOnSubmit} className='search-form__order-history'>\r\n {selectedOption === orderStatusText ? (\r\n <select\r\n value={selectedStatus}\r\n onChange={e => {\r\n setSelectedStatus(e.target.value);\r\n }}\r\n >\r\n {orderStatusDropdownValues.map(item => {\r\n return (\r\n <option value={item.value} disabled={item.isDisabled}>\r\n {item.value}\r\n </option>\r\n );\r\n })}\r\n </select>\r\n ) : (\r\n <>\r\n <label className='sr-only' htmlFor={selectedOption}>\r\n {selectedOption}\r\n </label>\r\n <input\r\n id={selectedOption}\r\n placeholder={selectedOption === confirmationIdText ? confirmationIdPlaceHolder : salesIdPlaceHolder}\r\n value={searchText}\r\n onChange={e => setSearchText(e.target.value)}\r\n ></input>\r\n </>\r\n )}\r\n <button>{resources.searchButtonText}</button>\r\n </form>\r\n {res && clearButton && (\r\n <button className='clear-btn' onClick={handleClear}>\r\n {resources.clearButtonText}\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n }\r\n {loading && <Waiting className='msc-waiting-circular msc-waiting-lg' />}\r\n {alert && (\r\n <>\r\n {alert}\r\n {backToShoppingLink}\r\n </>\r\n )}\r\n {emptyMessage && (\r\n <Node className='ms-order-history__empty-message-container'>\r\n {emptyMessage}\r\n {backToShoppingLink}\r\n </Node>\r\n )}\r\n {isLoading && <Waiting className='msc-waiting-circular msc-waiting-lg' />}\r\n {list && !isLoading && (\r\n <OrderHistoryList\r\n {...list}\r\n isMobile={isMobile}\r\n customContext={props.context}\r\n orderHistory={orderHistory}\r\n searchResult={res ? res.salesOrders : undefined}\r\n resources={resources}\r\n sitePath={props.context.request.sitePath}\r\n usSiteFlag={\r\n props?.context?.actionContext?.requestContext?.apiSettings?.oun === props.context.app.config.ounNumberForUsSite\r\n }\r\n />\r\n )}\r\n {table}\r\n {!isLoading && !res && moreButton && moreButton}\r\n </Module>\r\n );\r\n};\r\nexport default OrderHistoryView;\r\n","import React from 'react';\r\nimport { IKRV_ATPLeadTimePropertiesDate } from '../actions/customProxy/ATP-update/DataServiceEntities.g';\r\nimport { dateFormatByLocale } from './helper';\r\n\r\ninterface ITrafficLight {\r\n lightColor?: string;\r\n isVisible?: string;\r\n}\r\n\r\ninterface IKRV_ATPLeadTimePropertiesDateFormat extends IKRV_ATPLeadTimePropertiesDate {\r\n locale?: string;\r\n currency?: string;\r\n}\r\n\r\nexport const TrafficLights: React.FC<ITrafficLight> = ({ lightColor, isVisible }) => (\r\n <div className='traffic-light-container'>\r\n <div className={isVisible === 'No' ? '_red-light' : lightColor ? `_${lightColor.toLowerCase().trim()}-light` : ' _grey-light'} />\r\n </div>\r\n);\r\n\r\nexport const ATPMessage: React.FC<IKRV_ATPLeadTimePropertiesDateFormat> = props => {\r\n /* VSI CUSTOMIZATION | DATE FORMAT | START */\r\n let PurchaseLeadTimeDate = props.PurchaseLeadTimeDate;\r\n if (props.currency && props.locale && PurchaseLeadTimeDate) {\r\n PurchaseLeadTimeDate = dateFormatByLocale(props.locale, props.currency, PurchaseLeadTimeDate);\r\n }\r\n let PODate = props.PODate;\r\n if (props.currency && props.locale && PODate) {\r\n PODate = dateFormatByLocale(props.locale, props.currency, PODate);\r\n }\r\n /* VSI CUSTOMIZATION | DATE FORMAT | END */\r\n let atpMessage = '';\r\n if (props.IsVisible === 'No') {\r\n atpMessage = 'no further supplies';\r\n } else if (props.IsDiscontinuedProduct === 'Yes') {\r\n atpMessage = props?.Message!.toLowerCase();\r\n } else if (PurchaseLeadTimeDate !== '' && props.Quantity === 0 && props.POQuantity === 0) {\r\n atpMessage = `${props.Quantity} in stock, more from ${PurchaseLeadTimeDate}`;\r\n } else if (PurchaseLeadTimeDate === '' && props.Quantity === 0 && props.POQuantity > 0) {\r\n atpMessage = `${props.Quantity} in stock, more from ${PODate}`;\r\n } else if (PurchaseLeadTimeDate !== '' && props.Quantity > 0 && props.POQuantity === 0) {\r\n atpMessage = `${props.Quantity} in stock, more from ${PurchaseLeadTimeDate}`;\r\n } else if (PurchaseLeadTimeDate === '' && props.Quantity > 0 && props.POQuantity > 0) {\r\n atpMessage = `${props.Quantity} in stock, more from ${PODate}`;\r\n } else if (PurchaseLeadTimeDate === '' && props.Quantity >= 0 && props.POQuantity === 0) {\r\n atpMessage = props?.Message ? `${props.Quantity} in stock, ${props?.Message.toLowerCase()}` : `${props.Quantity} in stock`;\r\n }\r\n if (atpMessage !== '') {\r\n return (\r\n <div className='_message-container'>\r\n <h4 className='_traffic-light-quantity'>{atpMessage}</h4>\r\n </div>\r\n );\r\n }\r\n return (\r\n <div className='_message-container'>\r\n <h4 className='_traffic-light-quantity'>\r\n <p className='ms-buybox__minmax_label_text'>\r\n <span className='sr-only'>Information</span>\r\n <i className='msi-InfoCircle' aria-hidden='true'></i>\r\n Error while fetching the data!!!\r\n </p>\r\n </h4>\r\n </div>\r\n );\r\n};\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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<IInvoiceSummaryLineProps> = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n <p className={`msc-invoice-summary__line-${cssLabel}`}>\n <span className=\"msc-invoice-summary__label\">{label}</span>\n {price || price === 0 ? (\n <PriceComponent\n data={{\n price: { CustomerContextualPrice: price }\n }}\n freePriceText={freeText}\n context={context}\n id={id}\n typeName={typeName}\n className=\"msc-invoice-summary__value\"\n />\n ) : (\n <span className=\"msc-invoice-summary__value\">{toBeCalculatedText}</span>\n )}\n </p>\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n <InvoiceSummaryLine\n price={price}\n label={label}\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n toBeCalculatedText={props.toBeCalculatedText}\n freeText={props.freeText}\n telemetry={props.telemetry}\n cssLabel={cssLabel}\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 { Address as AddressRetail } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport type addressType = 'store' | 'ship';\n\nexport interface IShippingAddressProps {\n moduleName: string;\n address: AddressRetail;\n deliveryType: string;\n showCompleteAddress?: boolean;\n resource: {\n shipToLabel: string;\n storeLabel: string;\n phoneLabel: string;\n phoneAriaLabel: string;\n };\n}\n\nconst Address: React.SFC<IShippingAddressProps> = ({\n moduleName,\n address,\n deliveryType,\n showCompleteAddress,\n resource: { shipToLabel, storeLabel, phoneLabel }\n}) => (\n <div className={`${moduleName}__address deliveryType-${deliveryType}`}>\n <div className={`${moduleName}__address-header`}>{deliveryType !== 'ship' ? storeLabel : shipToLabel}</div>\n {address.Name && <span className={`${moduleName}__address-name`}>{address.Name}</span>}\n {showCompleteAddress ? (\n <>\n {address.Street && (\n <span className={`${moduleName}__address-street`}>\n {address.Street}\n {` `}\n </span>\n )}\n {address.City && <span className={`${moduleName}__address-city`}>{address.City}</span>}\n {address.State && <span className={`${moduleName}__address-state`}>{`, ${address.State}`}</span>}\n {address.County && <span className={`${moduleName}__address-county`}>{`, ${address.County}`}</span>}\n {address.ZipCode && <span className={`${moduleName}__address-zipcode`}>{` ${address.ZipCode}`}</span>}\n {address.ThreeLetterISORegionName && (\n <span className={`${moduleName}__address-threeletterisoregionname`}>{` ${address.ThreeLetterISORegionName}`}</span>\n )}\n {address.Phone && (\n <span className={`${moduleName}__address-phone`}>\n <span className={`${moduleName}__address-phone-label`}>{phoneLabel}</span>\n <span className={`${moduleName}__address-phone-icon`} aria-hidden='true' />\n {address.Phone}\n </span>\n )}\n </>\n ) : (\n address.FullAddress && <span className={`${moduleName}__address-full-address`}>{address.FullAddress}</span>\n )}\n </div>\n);\n\nexport default React.memo(Address);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartComponent, IAddToCartResources, OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { getUrlSync, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * The data which the component should operate.\n */\nexport interface IBuySelectedData {\n products: OrderDetailsProduct[];\n}\n\n/**\n * The resources needed to render a buy selected component.\n */\nexport interface IBuySelectedResources {\n orderDetailsUnavailableProductText?: string;\n orderDetailsBuySelectedButtonText?: string;\n orderDetailsBuySelectedButtonAriaLabel?: string;\n orderDetailsBuySelectedAddingToCartErrorNotificationTitle?: string;\n orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n orderDetailsBuyItAgainLabel?: string;\n orderDetailsBuyItAgainAriaLabel?: string;\n orderDetailsGoToCartText?: string;\n orderDetailsDialogCloseText?: string;\n orderDetailsSingleItemText?: string;\n orderDetailsMultiLineItemFormatText?: string;\n orderDetailsMultiLinesFormatText?: string;\n orderDetailsHeaderMessageText?: string;\n orderDetailsMultiItemsValidationErrorMessage?: string;\n orderDetailsOneErrorText?: string;\n orderDetailsMultiErrorText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n}\n\n/**\n * Configuration of a buy selected component.\n */\nexport interface IBuySelectedProps extends IComponentProps<IBuySelectedData> {\n className: string;\n context: ICoreContext;\n\n resources: IBuySelectedResources;\n\n isIcon?: boolean;\n isReorderingEnabled?: boolean;\n}\n\n/**\n * Get the dialog strings.\n * @param props -- The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getDialogStrings = (props: IBuySelectedProps): IAddToCartResources => {\n return {\n goToCartText: props.resources.orderDetailsGoToCartText ?? '',\n continueShoppingText: props.resources.orderDetailsDialogCloseText ?? '',\n closeNotificationLabel: props.resources.orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? '',\n headerItemOneText: props.resources.orderDetailsSingleItemText ?? '',\n headerItemFormatText: props.resources.orderDetailsMultiLineItemFormatText ?? '',\n headerLinesFormatText: props.resources.orderDetailsMultiLinesFormatText ?? '',\n headerMessageText: props.resources.orderDetailsHeaderMessageText ?? '',\n freePriceText: props.resources.freePriceText ?? '',\n originalPriceText: props.resources.originalPriceText ?? '',\n currentPriceText: props.resources.currentPriceText ?? '',\n addedQuantityText: props.resources.addedQuantityText ?? '',\n buyAgainNotificationTitle: props.resources.orderDetailsBuySelectedAddingToCartErrorNotificationTitle ?? '',\n buyAgainNotificationCloseAriaLabel: props.resources.orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? '',\n validationErrorMessage: props.resources.orderDetailsMultiItemsValidationErrorMessage,\n oneErrorText: props.resources.orderDetailsOneErrorText,\n multiErrorsText: props.resources.orderDetailsMultiErrorText\n };\n};\n\n/**\n * Renders a button which adds given products to the cart.\n * @param props - Configuration of the component.\n * @returns A react element or null if no products were given.\n */\nexport const BuySelectedComponent: React.FC<IBuySelectedProps> = (props: IBuySelectedProps): JSX.Element | null => {\n const products = props.data.products.filter(product => !ObjectExtensions.isNullOrUndefined(product.simpleProduct));\n const buttonLabel = props.isIcon\n ? ''\n : props.resources.orderDetailsBuySelectedButtonText ?? props.resources.orderDetailsBuyItAgainLabel;\n const buttonAriaLabel = props.resources.orderDetailsBuySelectedButtonAriaLabel ?? props.resources.orderDetailsBuyItAgainAriaLabel;\n\n const singleProductCount = 1;\n if (props.data.products.length === singleProductCount && !props.data.products[0].isProductAvailable) {\n // Return disabled button\n return (\n <button\n className={props.className}\n aria-label={props.resources.orderDetailsUnavailableProductText}\n title={props.resources.orderDetailsUnavailableProductText}\n disabled\n >\n {buttonLabel}\n </button>\n );\n }\n\n if (!ArrayExtensions.hasElements(products)) {\n // Return disabled button\n return (\n <button className={props.className} aria-label={buttonAriaLabel} title={buttonAriaLabel} disabled>\n {buttonLabel}\n </button>\n );\n }\n\n const firstProduct: OrderDetailsProduct = products[0];\n\n // Reorder is not enable, buy again button link to product details page.\n if (!props.isReorderingEnabled) {\n const style: React.CSSProperties = {\n opacity: '0.5'\n };\n return (\n <Button\n className={props.className}\n style={style}\n aria-label={buttonAriaLabel}\n title={buttonAriaLabel}\n href={firstProduct.productUrl}\n >\n {buttonLabel}\n </Button>\n );\n }\n\n const shouldSkipSiteSettings: boolean = true;\n const dialogStrings: IAddToCartResources = getDialogStrings(props);\n const emailDeliveryModeCode = props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode;\n return (\n <AddToCartComponent\n addToCartText={buttonLabel ?? ''}\n outOfStockText=''\n addToCartArialLabel={buttonAriaLabel}\n quantity={firstProduct.salesLine.Quantity}\n id={props.id}\n typeName={props.typeName}\n className={props.className}\n navigationUrl={getUrlSync('cart', props.context.actionContext)}\n data={{ product: firstProduct.simpleProduct! }}\n context={props.context}\n dialogStrings={dialogStrings}\n shouldSkipSiteSettings={shouldSkipSiteSettings}\n orderDetailsProducts={products}\n isAddEmailDeliveryItemToCart={firstProduct.salesLine.DeliveryMode === emailDeliveryModeCode ? true : false}\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 { format, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\nimport { ISalesLine } from './get-sales-line';\nimport { groupSalesLines, IDeliveryType, ISalesStatusCode } from './utilities';\n\nexport interface IGroupDelivery {\n deliveryProps: INodeProps;\n pickupProps: INodeProps;\n showTimeslot: boolean;\n heading: React.ReactNode;\n count: React.ReactNode;\n processing: React.ReactNode;\n trackingInfo: React.ReactNode;\n address: React.ReactNode;\n shippingItemsToYou?: React.ReactNode;\n pickupDateTimeslot?: React.ReactNode;\n shippedStatusCheck?: React.ReactNode;\n}\n\nexport interface IGroup {\n groupProps: INodeProps;\n salesLinesProps: INodeProps;\n delivery: IGroupDelivery;\n salesLines: ISalesLine[];\n address: React.ReactNode;\n requestDeliveryDate?: React.ReactNode;\n\n // Row data\n data: {\n count: number;\n deliveryType: IDeliveryType;\n salesStatus: ISalesStatusCode;\n };\n isCashAndCarryTransaction?: boolean;\n}\n\nexport interface IGroupsInput {\n moduleName: string;\n salesLines: ISalesLine[];\n resources: {\n orderItemLabel: string;\n orderItemsLabel: string;\n pickupItemsHeader?: string;\n pickingItemsLabel?: string;\n shippingAddressTitle?: string;\n shippingItemToYouLabel?: string;\n shippingItemToOBOCustomerLabel?: string;\n emailItemsHeader?: string;\n emailingItemsLabel?: string;\n };\n showAddress?: boolean;\n isConfirmationView?: boolean;\n showTimeslot?: boolean;\n retailMultiplePickUpOptionEnabled?: boolean;\n isCashAndCarryTransaction?: boolean;\n isSelectionModeEnabled?: boolean;\n isOboRequest?: boolean;\n customerName?: string;\n}\n\nexport interface IGroups {\n groupsProps: INodeProps;\n groups: IGroup[];\n}\n\n/**\n * Creates sales lines node props object.\n * @param moduleName - Module name to use as a class name prefix.\n * @param isSelectionModeEnabled - Specifies if the selection mode is enabled for the sales lines.\n * @returns Sales lines node props with the class name to use for the sales lines container.\n */\nconst getSalesLinesProps: (moduleName: string, isSelectionModeEnabled?: boolean) => INodeProps = (\n moduleName: string,\n isSelectionModeEnabled?: boolean\n): INodeProps => {\n const className = `${moduleName}__sales-lines`;\n const salesLinesProps: INodeProps = {\n className: classNames(\n className,\n isSelectionModeEnabled ? `${className}__selection-global-enabled` : `${className}__selection-global-disabled`\n )\n };\n return salesLinesProps;\n};\n\nexport const getGroups = ({\n moduleName,\n salesLines,\n showAddress,\n showTimeslot,\n isConfirmationView,\n retailMultiplePickUpOptionEnabled,\n isCashAndCarryTransaction,\n isSelectionModeEnabled,\n customerName,\n isOboRequest,\n resources: {\n orderItemLabel,\n orderItemsLabel,\n pickupItemsHeader,\n pickingItemsLabel,\n shippingAddressTitle,\n shippingItemToYouLabel,\n shippingItemToOBOCustomerLabel,\n emailItemsHeader,\n emailingItemsLabel\n }\n}: IGroupsInput): IGroups => {\n const groups = groupSalesLines(salesLines).map(group => {\n const { deliveryType, salesStatus, count, salesLines: _salesLines } = group;\n const itemLabel = count === 1 ? orderItemLabel : orderItemsLabel;\n const pickingItemsLabelText = pickingItemsLabel && format(pickingItemsLabel, count, itemLabel);\n const shippingItemsToText = isOboRequest\n ? shippingItemToOBOCustomerLabel && format(shippingItemToOBOCustomerLabel, count, itemLabel, customerName)\n : shippingItemToYouLabel && format(shippingItemToYouLabel, count, itemLabel);\n const emailingItemsLabelText = emailingItemsLabel && format(emailingItemsLabel, count, itemLabel);\n const multiplePickup = deliveryType === 'ship' ? 'ship' : deliveryType === 'email' ? 'email' : 'pickup';\n const groupProps = { className: `${moduleName}__group-deliveryType-${multiplePickup} salesStatus-${salesStatus}` };\n\n const salesLinesProps = getSalesLinesProps(moduleName, isSelectionModeEnabled);\n const address = _salesLines[0].address;\n const trackingInfo = _salesLines[0].trackingInfo;\n const isProcessing = _salesLines[0].data.salesStatus === 'processing';\n const pickDateTimeslot = _salesLines[0].pickupDateTimeslot;\n const shippedStatusCheck = _salesLines[0].data.salesStatus;\n const multiplePickUp = retailMultiplePickUpOptionEnabled ? 'multiple-pickUp' : '';\n const delivery: IGroupDelivery = {\n deliveryProps: { className: `${moduleName}__group-delivery ${multiplePickUp}` },\n pickupProps: { className: `${moduleName}__delivery-container` },\n heading: (\n <span className={`${moduleName}__group-delivery-heading`}>\n {isProcessing\n ? isConfirmationView\n ? deliveryType === 'pickUp'\n ? pickupItemsHeader\n : deliveryType === 'ship'\n ? shippingAddressTitle\n : deliveryType === 'email'\n ? emailItemsHeader\n : deliveryType\n : _salesLines[0].deliveryType\n : _salesLines[0].salesStatus}\n </span>\n ),\n processing: isProcessing ? (\n <span className={`${moduleName}__group-delivery-processing-label`}>{_salesLines[0].salesStatus}</span>\n ) : (\n undefined\n ),\n count: !isConfirmationView && <span className={`${moduleName}__group-delivery-total-items`}>{`(${count} ${itemLabel})`}</span>,\n shippingItemsToYou:\n isConfirmationView && deliveryType === 'ship' ? (\n <span className={`${moduleName}__sales-lines-shipping-items-label`}>{shippingItemsToText}</span>\n ) : deliveryType === 'pickUp' ? (\n <span className={`${moduleName}__sales-lines-picking-items-label`}>{pickingItemsLabelText}</span>\n ) : deliveryType === 'email' ? (\n <span className={`${moduleName}__sales-lines-emailing-items-label`}>{emailingItemsLabelText}</span>\n ) : (\n <span className={`${moduleName}__sales-lines-picking-items-label`}>{pickingItemsLabelText}</span>\n ),\n trackingInfo,\n address,\n pickupDateTimeslot: pickDateTimeslot,\n showTimeslot: showTimeslot || false,\n shippedStatusCheck\n };\n return {\n groupProps,\n salesLinesProps,\n delivery,\n salesLines: _salesLines,\n address: showAddress && address,\n requestDeliveryDate: _salesLines[0].requestDeliveryDate,\n data: {\n count,\n deliveryType,\n salesStatus\n },\n isCashAndCarryTransaction\n };\n });\n\n return {\n groupsProps: { className: `${moduleName}__groups` },\n groups\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 {\n ChannelIdentity,\n Customer,\n Note,\n OrderOriginator,\n OrderShipments,\n OrgUnitLocation,\n SalesOrder\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport QRCode from 'qrcode.react';\nimport * as React from 'react';\n\nimport { countItems, IModuleComponentProps, IPriceContext } from './utilities';\n\n/**\n * Interface for order information input resources.\n */\nexport interface IOrderInformationInputResources {\n receiptEmailMessage?: string;\n orderItemLabel: string;\n orderItemsLabel: string;\n processingLabel: string;\n orderIdLabel: string;\n receiptIdLabel: string;\n confirmationIdLabel: string;\n trackingLabel: string;\n trackingAriaLabel: string;\n trackingComingSoonLabel: string;\n posChannelNameText?: string;\n onlineStoreChannelNameText?: string;\n orderPlacedOnLabel?: string;\n qrCodeSrText?: string;\n callCenterChannelNameText?: string;\n orderPlacedByFullText?: string;\n orderPlacedByYouText?: string;\n orderOnBehalfOfText?: string;\n noteLabel?: string;\n orderDetailsRequestDeliveryDateText?: string;\n}\n\n/**\n * Interface for order information input.\n */\nexport interface IOrderInformationInput {\n moduleName: string;\n channelReferenceId?: string;\n channelName?: string;\n channelAddress?: string;\n showChannelInfo?: boolean;\n receiptEmail?: string;\n createdDate?: string;\n amount?: number;\n priceContext: IPriceContext;\n salesId?: string;\n receiptId?: string;\n hasTrackingInfo?: boolean;\n count?: number;\n resources: IOrderInformationInputResources;\n isSalesInvoice?: boolean;\n shouldShowQrCode?: boolean;\n channelTypeValue?: number;\n originator?: OrderOriginator;\n isYou?: [boolean, boolean]; // deprecated\n isB2bAdmin?: boolean;\n isOnlineStore?: boolean;\n priceCurrency?: string;\n note?: Note;\n customer?: Customer;\n}\n\nconst callCenterChannelTypeValue = 4;\n\n/**\n * Interface for order information.\n */\nexport interface IOrderInformation {\n orderInformationProps: INodeProps;\n channelName: React.ReactNode;\n channelAddress: React.ReactNode;\n placedBy?: React.ReactNode;\n salesId: React.ReactNode;\n receiptId: React.ReactNode;\n receiptEmail: React.ReactNode;\n createdDate: React.ReactNode;\n count: React.ReactNode;\n amount: React.ReactNode;\n channelReferenceId: React.ReactNode;\n note?: React.ReactNode;\n}\n\n/**\n * The order confirmation ID node.\n * @param channelReferenceId - The order confirmation id.\n * @param moduleName - The module name.\n * @param confirmationIdLabel - The confirmation label.\n * @param shouldShowQrCode - Should the view show the QR code.\n * @param qrCodeSrText - The screen reader text of the QR code.\n * @returns The react node for order confirmation ID.\n */\nconst getChannelReference = (\n channelReferenceId: string | undefined,\n moduleName: string,\n confirmationIdLabel: string,\n shouldShowQrCode: boolean | undefined,\n qrCodeSrText?: string\n): React.ReactNode | undefined => {\n const confirmationIdNode: React.ReactNode = (\n <span className={`${moduleName}__order-information-channel-reference-id`}>\n {`${confirmationIdLabel} `}\n <span>{channelReferenceId}</span>\n </span>\n );\n return (\n channelReferenceId &&\n (shouldShowQrCode !== undefined && shouldShowQrCode ? (\n <div>\n {confirmationIdNode}\n <div className={`${moduleName}__order-information-qr-code`} aria-labelledby='qrCodeSrText'>\n <QRCode value={channelReferenceId} size={80} />\n <span id='qrCodeSrText' className='qrcode-screenreader-text'>\n {qrCodeSrText}\n </span>\n </div>\n </div>\n ) : (\n confirmationIdNode\n ))\n );\n};\n\n/**\n * The order confirmation ID node.\n * @param note - The order confirmation id.\n * @param moduleName - The module name.\n * @param noteLabel - The note label.\n * @returns The react node for order note.\n */\nconst getOrderNote = (moduleName: string, note?: Note, noteLabel?: string): React.ReactNode | undefined => {\n if (note === undefined || StringExtensions.isNullOrWhitespace(note.Description)) {\n return null;\n }\n return (\n <div className={`${moduleName}__order-information-note`}>\n <div className={`${moduleName}__order-information-note-header`}>\n <div className={`${moduleName}__order-information-note-header-title`}>{noteLabel}</div>\n </div>\n <div className={`${moduleName}__order-information-note-content`}>{note.Description}</div>\n </div>\n );\n};\n\n/**\n * Get Channel name to display on order history.\n * @param channelTypeValue - The channel type.\n * @param moduleName - The module name.\n * @param callCenterChannelNameText - The call center channel name.\n * @param channelAddress - Channel Address.\n * @param posChannelNameText - POS channel name.\n * @param channelName - Channel Name.\n * @param onlineStoreChannelNameText - Online store channel name.\n * @returns The react node for channel name label.\n */\nexport const getChannelName = (\n channelTypeValue: number | undefined,\n moduleName: string,\n callCenterChannelNameText: string | undefined,\n channelAddress: string | undefined,\n posChannelNameText: string | undefined,\n channelName: string | undefined,\n onlineStoreChannelNameText: string | undefined\n): React.ReactNode => {\n let channelNameNode: React.ReactNode;\n if (channelTypeValue === callCenterChannelTypeValue) {\n channelNameNode = <span className={`${moduleName}__order-information-channel-name`}>{callCenterChannelNameText}</span>;\n } else if (channelAddress) {\n const posChannelName = `${posChannelNameText ?? ''} ${channelName ?? ''}`;\n channelNameNode = <span className={`${moduleName}__order-information-channel-name channel_hr_pos`}>{posChannelName}</span>;\n } else {\n const onlineChannelName = `${onlineStoreChannelNameText ?? ''} ${channelName ?? ''}`;\n channelNameNode = <span className={`${moduleName}__order-information-channel-name`}>{onlineChannelName}</span>;\n }\n return channelNameNode;\n};\n\n/**\n * Get order information.\n * @param {IOrderInformationInput} param0 The input for order information.\n * @returns {IOrderInformation} The order information.\n */\nexport const getOrderInformation = ({\n moduleName,\n channelReferenceId,\n channelName,\n channelAddress,\n channelTypeValue,\n showChannelInfo,\n receiptEmail,\n createdDate,\n amount,\n priceContext,\n isOnlineStore,\n customer,\n originator,\n salesId,\n receiptId,\n count,\n resources: {\n receiptEmailMessage,\n orderItemLabel,\n orderItemsLabel,\n orderIdLabel,\n orderPlacedByFullText,\n orderPlacedByYouText,\n orderOnBehalfOfText,\n receiptIdLabel,\n confirmationIdLabel,\n posChannelNameText,\n onlineStoreChannelNameText,\n orderPlacedOnLabel,\n qrCodeSrText,\n callCenterChannelNameText,\n noteLabel\n },\n isSalesInvoice,\n shouldShowQrCode,\n priceCurrency,\n note\n}: IOrderInformationInput): IOrderInformation => {\n const channelNameNode: React.ReactNode = getChannelName(\n channelTypeValue,\n moduleName,\n callCenterChannelNameText,\n channelAddress,\n posChannelNameText,\n channelName,\n onlineStoreChannelNameText\n );\n\n const orderInformation = {\n orderInformationProps: { className: `${moduleName}__order-information` },\n channelName: showChannelInfo && channelName && channelNameNode,\n channelAddress: showChannelInfo && channelAddress && (\n <span className={`${moduleName}__order-information-channel-address`}>{channelAddress}</span>\n ),\n placedBy: getPlacedBy(\n moduleName,\n isOnlineStore,\n customer,\n originator,\n orderPlacedByFullText,\n orderPlacedByYouText,\n orderOnBehalfOfText\n ),\n salesId: salesId ? <span className={`${moduleName}__order-information-sales-id`}>{`${orderIdLabel} ${salesId}`}</span> : '',\n receiptId: receiptId ? (\n <span className={`${moduleName}__order-information-receipt-id`}>{`${receiptIdLabel} ${receiptId}`}</span>\n ) : (\n ''\n ),\n receiptEmail: receiptEmail && (\n <span className={`${moduleName}__order-information-receipt-email`}>\n {receiptEmailMessage}\n <span>{receiptEmail}</span>\n </span>\n ),\n createdDate: !isSalesInvoice && createdDate && (\n <span className={`${moduleName}__order-information-created-date`}>\n {orderPlacedOnLabel}\n {` `}\n {createdDate}\n </span>\n ),\n count: !isSalesInvoice && count !== undefined && count > 0 && (\n <span className={`${moduleName}__order-information-count`}>\n {count === 1 ? `${count} ${orderItemLabel}` : `${count} ${orderItemsLabel}`}\n </span>\n ),\n amount: !isSalesInvoice && (amount || amount === 0) && (\n <PriceComponent\n {...priceContext}\n className={`${moduleName}__order-information-amount`}\n data={{ price: { CustomerContextualPrice: amount } }}\n currencyCode={priceCurrency}\n />\n ),\n channelReferenceId: getChannelReference(channelReferenceId, moduleName, confirmationIdLabel, shouldShowQrCode, qrCodeSrText),\n note: getOrderNote(moduleName, note, noteLabel)\n };\n\n return orderInformation;\n};\n\n/**\n * Interface for order information props.\n */\ninterface IProps extends IModuleComponentProps {\n resources: IOrderInformationInputResources;\n customer?: Customer;\n}\n\n/**\n * Retrieves order channel name.\n * @param order - Order info.\n * @param channelIdentities - Channels data.\n * @returns String with the name of the channel or an empty string.\n */\nexport const getOrderChannelName: (order: SalesOrder | OrderShipments, channelIdentities?: ChannelIdentity[]) => string = (\n order: SalesOrder | OrderShipments,\n channelIdentities?: ChannelIdentity[]\n) => {\n const orderChannel = channelIdentities?.find(channel => {\n return channel.RecordId === order.ChannelId;\n });\n\n const channelName = orderChannel?.Name ?? '';\n return channelName;\n};\n\n/**\n * Retrieves order channel type value.\n * @param order - Order info.\n * @param channelIdentities - Channels data.\n * @returns The channel type value of the order.\n */\nexport const getOrderChannelTypeValue: (order: SalesOrder | OrderShipments, channelIdentities?: ChannelIdentity[]) => number | undefined = (\n order: SalesOrder | OrderShipments,\n channelIdentities?: ChannelIdentity[]\n) => {\n const orderChannel = channelIdentities?.find(channel => {\n return channel.RecordId === order.ChannelId;\n });\n\n const channelType = orderChannel?.ChannelType.Value;\n return channelType;\n};\n\n/**\n * Retrieves channel is online store or not.\n * @param channelTypeValue - The channel type.\n * @param channelAddress - Channel Address.\n * @returns {Boolean} that indicates that the channel is in the online store.\n */\nexport const isOnlineStoreChannel = (channelTypeValue: number | undefined, channelAddress: string | undefined): boolean => {\n return channelTypeValue !== callCenterChannelTypeValue && !channelAddress;\n};\n\n/**\n * Retrieves order channel address.\n * @param order - Order info.\n * @param orgUnitLocations - OrgUnitLocation data.\n * @returns String with the address of the channel or an empty string.\n */\nexport const getOrderChannelAddress: (order: SalesOrder | OrderShipments, orgUnitLocations?: OrgUnitLocation[]) => string = (\n order: SalesOrder | OrderShipments,\n orgUnitLocations?: OrgUnitLocation[]\n) => {\n const orderOrgUnitLocation = orgUnitLocations?.find(location => {\n return location.ChannelId === order.ChannelId;\n });\n\n const channelAddress = orderOrgUnitLocation?.Address ?? '';\n return channelAddress;\n};\n\n/**\n * Get order information input.\n * @param {IProps} props The properties.\n * @param {string} moduleName The module name.\n * @param {SalesOrder | OrderShipments} order The sales order or order shipments.\n * @param {IPriceContext} priceContext The price context.\n * @param {ChannelIdentity[]} channelIdentities A list of channel identities.\n * @param {OrgUnitLocation[]} orgUnitLocations A list of organization unit locations.\n * @param {Customer} customer A current customer.\n * @param {OrderOriginator} originator The order originator.\n * @param {boolean} showChannelInfo Should the view show channel information.\n * @param {boolean} isSalesInvoice Is this a sales invoice.\n * @param {boolean} shouldShowQrCode Should the view show QR code.\n * @returns {IOrderInformationInput} The order information input.\n */\nexport const getOrderInformationInput = (\n props: IProps,\n moduleName: string,\n order: SalesOrder | OrderShipments,\n priceContext: IPriceContext,\n channelIdentities?: ChannelIdentity[],\n orgUnitLocations?: OrgUnitLocation[],\n customer?: Customer,\n originator?: OrderOriginator,\n showChannelInfo?: boolean,\n isSalesInvoice?: boolean,\n shouldShowQrCode?: boolean\n): IOrderInformationInput => {\n const {\n resources,\n context: {\n request: {\n apiSettings: { channelId }\n }\n }\n } = props;\n\n // @ts-expect-error OrderShipments doesn't has ChannelId\n const showTrackingInfo = !!order.ChannelId && order.ChannelId === channelId;\n\n // @ts-expect-error OrderShipments doesn't has Notes\n const showNotes = !!order.Notes && order.Notes.length > 0;\n\n const locale = get(props, 'context.request.locale') || 'en-US';\n const count = order.SalesLines && ArrayExtensions.hasElements(order.SalesLines) ? countItems(order.SalesLines) : 0;\n const channelTypeValue = getOrderChannelTypeValue(order, channelIdentities);\n const channelAddress = getOrderChannelAddress(order, orgUnitLocations);\n // @ts-expect-error OrderShipments doesn't has Notes\n const countNote = showNotes && ArrayExtensions.hasElements(order.Notes) ? order.Notes.length : undefined;\n // @ts-expect-error OrderShipments doesn't has Notes\n // eslint-disable-next-line security/detect-object-injection\n const note = countNote !== undefined ? order.Notes[countNote - 1] : undefined;\n\n return {\n moduleName,\n createdDate: (order.CreatedDateTime && new Date(order.CreatedDateTime).toLocaleDateString(locale)) || '',\n salesId: order.SalesId,\n priceCurrency: order.CurrencyCode,\n customer: customer,\n originator: originator,\n isYou: undefined,\n isB2bAdmin: customer?.IsB2bAdmin,\n receiptId: order.ReceiptId,\n showChannelInfo,\n\n // @ts-expect-error OrderShipments doesn't has ReceiptEmail\n receiptEmail: order.ReceiptEmail,\n channelReferenceId: order.ChannelReferenceId,\n channelName: getOrderChannelName(order, channelIdentities),\n channelAddress: channelAddress,\n amount: order.TotalAmount ?? 0,\n priceContext,\n count,\n resources,\n isSalesInvoice,\n shouldShowQrCode,\n channelTypeValue: channelTypeValue,\n isOnlineStore: isOnlineStoreChannel(channelTypeValue, channelAddress),\n note: note\n };\n};\n\nconst getPlacedBy = (\n moduleName: string,\n isOnlineStore: boolean | undefined,\n customer: Customer | undefined,\n originator: OrderOriginator | undefined,\n orderPlacedByFullText: string | undefined,\n orderPlacedByYouText: string | undefined,\n orderOnBehalfOfText: string | undefined\n): React.ReactNode | undefined => {\n let placedByNode: React.ReactNode | undefined;\n\n if (originator) {\n const staffPlacedOrder: boolean = originator.StaffId && originator.StaffName ? true : false;\n const currentCustomerOwnsOrder: boolean =\n originator.CustomerId && originator.CustomerName && customer?.AccountNumber === originator.CustomerId ? true : false;\n\n let placedByName: string | undefined = originator.CustomerName;\n let placedOnBehalfOfName: string | undefined;\n let wasPlacedByCurrentCustomer: boolean = false;\n let wasPlacedOnBehalfOf: boolean = false;\n let wasPlacedOnBehalfOfCurrentCustomer: boolean = false;\n\n if (staffPlacedOrder) {\n // order was placed in on-behalf-of scenario\n if (isOnlineStore) {\n wasPlacedOnBehalfOf = true;\n placedByName = originator.StaffName;\n placedOnBehalfOfName = originator.CustomerName;\n\n if (currentCustomerOwnsOrder) {\n wasPlacedOnBehalfOfCurrentCustomer = true;\n }\n }\n } else {\n // the order was not placed in on-behalf-of scenario.\n // we must check if the current customer created the order or not.\n if (currentCustomerOwnsOrder) {\n wasPlacedByCurrentCustomer = true;\n }\n }\n\n placedByNode = (\n <div className={`${moduleName}__sales-order-placed-by`}>\n {orderPlacedByFullText} <span className='bolded'>{placedByName || '-'}</span>{' '}\n {placedByName && wasPlacedByCurrentCustomer && ` ${orderPlacedByYouText}`}\n {wasPlacedOnBehalfOf && (\n <div>\n {orderOnBehalfOfText} <span className='bolded'>{placedOnBehalfOfName || '-'}</span>{' '}\n {placedOnBehalfOfName && wasPlacedOnBehalfOfCurrentCustomer && ` ${orderPlacedByYouText}`}\n </div>\n )}\n </div>\n );\n }\n\n return placedByNode;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport MsDyn365, { IGridSettings, IImageSettings, Image, IRequestContext, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport {\n ChannelDeliveryOptionConfiguration,\n format,\n ProductCatalog,\n ProductDeliveryOptions,\n SalesLine,\n Shipment,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { Observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Address from './address';\nimport { BuySelectedComponent } from './buy-selected-component';\nimport LabelComponent from './label';\nimport { SalesLineState } from './sales-line-state';\nimport {\n defaultImageSettings,\n getDateTimeslot,\n getSalesStatusCode,\n IDeliveryType,\n IModuleComponentProps,\n ISalesStatusCode\n} from './utilities';\n\nexport type ISalesStatusStringMap = {\n [x in ISalesStatusCode]: string | undefined;\n};\n\nexport type IDeliveryTypeStringMap = {\n [x in IDeliveryType]: string | undefined;\n};\n\nexport interface ISalesLineResources {\n productDimensionTypeSize: string;\n productDimensionTypeColor: string;\n productDimensionTypeStyle: string;\n productDimensionTypeAmount?: string;\n salesLineQuantityText: string;\n configString: string;\n shipToLabel: string;\n storeLabel: string;\n phoneLabel: string;\n phoneAriaLabel: string;\n buyItAgainAriaLabel: string;\n buyItAgainLabel: string;\n orderStatusReadyForPickup: string;\n orderStatusPickedUp: string;\n orderStatusShipped: string;\n orderStatusCanceled: string;\n orderStatusProcessing: string;\n pickedUpSalesLines: string;\n deliveredSalesLines: string;\n carryOutSalesLines: string;\n trackingLabel: string;\n trackingAriaLabel: string;\n trackingComingSoonLabel: string;\n discountStringText: string;\n orderStatusEmailed: string;\n emailSalesLines: string;\n pickupDateTimeslotText: string;\n pickupTimeslotPlaceHolder: string;\n shippingCharges?: string;\n orderDetailsUnavailableProductText?: string;\n orderDetailsBuySelectedButtonText?: string;\n orderDetailsBuySelectedButtonAriaLabel?: string;\n orderDetailsBuySelectedAddingToCartErrorNotificationTitle?: string;\n orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n orderDetailsGoToCartText?: string;\n orderDetailsDialogCloseText?: string;\n orderDetailsSelectRadioAriaLabelText?: string;\n orderDetailsSingleItemText?: string;\n orderDetailsMultiLineItemFormatText?: string;\n orderDetailsMultiLinesFormatText?: string;\n orderDetailsHeaderMessageText?: string;\n orderDetailsMultiItemsValidationErrorMessage?: string;\n orderDetailsOneErrorText?: string;\n orderDetailsMultiErrorText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n orderDetailsConfirmedShipDateText?: string;\n orderDetailsRequestDeliveryDateText?: string;\n orderDetailsAddressText?: string;\n}\n\nexport interface IGetSalesLineInput {\n moduleName: string;\n moduleComponentProps: IModuleComponentProps;\n product?: SimpleProduct;\n shipment?: Shipment;\n salesLine: SalesLine;\n isCurrentChannel: boolean;\n resources: ISalesLineResources;\n imageOnly?: boolean;\n salesLineState?: SalesLineState;\n showCompleteAddress?: boolean;\n showTimeslot: boolean;\n telemetryContent?: ITelemetryContent;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n productDeliveryOptions?: ProductDeliveryOptions[];\n isSelectionModeEnabled?: boolean;\n orderDetailsProduct?: OrderDetailsProduct;\n isReorderingEnabled?: boolean;\n isChannelMultipleCatalogsFeatureEnabled?: boolean;\n catalogs?: ProductCatalog[];\n priceCurrency?: string;\n}\n\nexport interface ISalesLine {\n salesLineProps: INodeProps;\n salesLine: React.ReactNode;\n address?: React.ReactNode;\n buyAgainButton?: React.ReactNode;\n salesStatus: React.ReactNode;\n deliveryType: React.ReactNode;\n trackingInfo: React.ReactNode;\n pickupDateTimeslot: React.ReactNode;\n errors?: React.ReactNode;\n requestDeliveryDate?: React.ReactNode;\n\n // Row data\n data: {\n salesLine: SalesLine;\n product?: SimpleProduct;\n shipment?: Shipment;\n deliveryType: string;\n productUrl: string | undefined;\n salesStatus: ISalesStatusCode;\n isChecked?: boolean;\n };\n}\n\nenum deliveryTypeEnum {\n ship = 'ship',\n email = 'email',\n carryOut = 'carryOut',\n pickUp = 'pickUp'\n}\n\n/**\n * The on select line call back.\n * @param orderDetailsProduct -- The current order details product.\n * @returns The call back method.\n */\nconst onSelectLine = (orderDetailsProduct: OrderDetailsProduct) => () => {\n orderDetailsProduct.isSelected = !orderDetailsProduct.isSelected;\n};\n\n/**\n * Get the checkbox element.\n * @param orderDetailsProduct -- The order details product.\n * @param orderDetailsSelectRadioAriaLabelText -- The aria label text.\n * @param moduleName -- The module name.\n * @returns The checkbox element.\n */\nconst getOrderDetailsSalesLineCheckbox = (\n orderDetailsProduct: OrderDetailsProduct,\n orderDetailsSelectRadioAriaLabelText: string | undefined,\n moduleName: string\n): JSX.Element | null => {\n const checkboxRowAriaLabel = format(orderDetailsSelectRadioAriaLabelText ?? '{0}', orderDetailsProduct.salesLine.ProductId);\n\n return (\n <div className={`${moduleName}__sales-line-checkbox`}>\n <label className={classnames(`${moduleName}__checkbox-container`, 'checkbox-container')}>\n <input\n className={classnames(`${moduleName}__checkbox-input`, 'checkbox-input')}\n type='checkbox'\n checked={orderDetailsProduct.isSelected}\n aria-label={checkboxRowAriaLabel}\n aria-checked={orderDetailsProduct.isSelected}\n onChange={onSelectLine(orderDetailsProduct)}\n />\n <span className={classnames(`${moduleName}__checkmark`, 'checkmark')} />\n </label>\n </div>\n );\n};\n\n/**\n * Get tracking information.\n * @param deliveryType -- The delivery type.\n * @param moduleName -- Module name.\n * @param trackingLabel -- Tracking label.\n * @param trackingAriaLabel -- Tracking aria label.\n * @param trackingComingSoonLabel -- Tracking coming soon label.\n * @param shipment -- Shipment.\n * @returns The tracking information.\n */\nexport const getTrackingInfo = (\n deliveryType: string,\n moduleName: string,\n trackingLabel: string,\n trackingAriaLabel: string,\n trackingComingSoonLabel: string,\n shipment: Shipment | undefined\n): false | JSX.Element => {\n return (\n deliveryType === deliveryTypeEnum.ship && (\n <span className={`${moduleName}__tracking-info`}>\n {trackingLabel}\n {shipment ? (\n <a className={`${moduleName}__tracking-link`} href={shipment.TrackingUrl} aria-label={trackingAriaLabel}>\n {shipment.TrackingNumber}\n </a>\n ) : (\n <>{trackingComingSoonLabel}</>\n )}\n </span>\n )\n );\n};\n\n/**\n * Get pick update date time lot information.\n * @param shouldShowTimeslot -- Should show time slot.\n * @param isDeliveryPickupSame -- Is delivery and pickup the same.\n * @param salesLine -- The sales line.\n * @param pickupTimeslotPlaceHolder -- The pickup time slot place holder.\n * @param moduleName -- The module name.\n * @param locale -- The locale.\n * @param pickupDateTimeslotText -- The pickup date time slot text.\n * @returns The pickup date time slot information.\n */\nexport const getPickupDateTimeslotInfo = (\n shouldShowTimeslot: boolean,\n isDeliveryPickupSame: boolean,\n salesLine: SalesLine,\n pickupTimeslotPlaceHolder: string,\n moduleName: string,\n locale: string,\n pickupDateTimeslotText: string\n): false | JSX.Element => {\n const canShowTimeslot: boolean =\n shouldShowTimeslot &&\n isDeliveryPickupSame &&\n salesLine.PickupTimeslotStartDateTime !== undefined &&\n salesLine.PickupTimeslotEndDateTime !== undefined;\n\n const pickupDateTimeslot = canShowTimeslot\n ? getDateTimeslot(pickupTimeslotPlaceHolder, salesLine.PickupTimeslotStartDateTime, salesLine.PickupTimeslotEndDateTime, locale)\n : '';\n\n return (\n canShowTimeslot && (\n <div className={`${moduleName}__pickup-date-timeslot`}>\n <div className={`${moduleName}__pickup-date-timeslot-title`}>{pickupDateTimeslotText}</div>\n <div className={`${moduleName}__pickup-date-timeslot-content`}>{pickupDateTimeslot}</div>\n </div>\n )\n );\n};\n\n/**\n * Get sales status.\n * @param orderStatusCanceled -- Order status canceled.\n * @param orderStatusReadyForPickup -- Order status ready for pick up.\n * @param orderStatusPickedUp -- Order status pick up.\n * @param orderStatusProcessing -- Order status processing.\n * @param orderStatusShipped -- Order status shipped.\n * @param orderStatusEmailed -- Order status emailed.\n * @returns The sales status in string.\n */\nexport const getSalesStatusStringMap = (\n orderStatusCanceled: string | undefined,\n orderStatusReadyForPickup: string | undefined,\n orderStatusPickedUp: string | undefined,\n orderStatusProcessing: string | undefined,\n orderStatusShipped: string | undefined,\n orderStatusEmailed: string | undefined\n): ISalesStatusStringMap => {\n return {\n canceled: orderStatusCanceled,\n readyForPickup: orderStatusReadyForPickup,\n pickedUp: orderStatusPickedUp,\n processing: orderStatusProcessing,\n shipped: orderStatusShipped,\n unknown: undefined,\n emailed: orderStatusEmailed\n };\n};\n\n/**\n * Get delivery type.\n * @param deliveryTypeString -- Delivery type string.\n * @param moduleName -- Module name.\n * @param deliveryTypeClass -- Delivery type class.\n * @param storePickUp -- Store pick up.\n * @param isMultiplePickUpOptionEnabled -- Is multiple pick up enabled.\n * @returns The delivery type react node.\n */\nexport const getDeliveryTypeComp = (\n deliveryTypeString: string | undefined,\n moduleName: string,\n deliveryTypeClass: string | undefined,\n storePickUp: string | null | undefined,\n isMultiplePickUpOptionEnabled: boolean | undefined\n): React.ReactNode => {\n const deliveryTypePickup = deliveryTypeString && (\n <LabelComponent\n className={`${moduleName}__devliery-type ${deliveryTypeClass ?? ''}-icon`}\n label={`${deliveryTypeString} ${storePickUp ?? ''}`}\n />\n );\n const deliveryTypeNoPickup = deliveryTypeString && (\n <LabelComponent className={`${moduleName}__devliery-type`} label={deliveryTypeString} />\n );\n\n return isMultiplePickUpOptionEnabled ? deliveryTypePickup : deliveryTypeNoPickup;\n};\n\n/**\n * Renders sales line picture.\n * @param moduleName - Module name.\n * @param requestContext - Request context.\n * @param productName - Product name.\n * @param product - Product data.\n * @param fallbackImageUrl - Fallback image.\n * @param gridSettings - Grid settings.\n * @param imageSettings - Image settings.\n * @param salesLineState - Product state.\n * @returns React node.\n */\nconst getSalesLinePicture = (\n moduleName: string,\n requestContext: IRequestContext,\n productName: string | undefined,\n product: SimpleProduct | undefined,\n fallbackImageUrl: string | undefined,\n gridSettings: IGridSettings,\n imageSettings: IImageSettings | undefined,\n salesLineState?: SalesLineState\n) => {\n return (\n <Observer>\n {() =>\n !salesLineState?.isHidden && (\n <div className={`${moduleName}__sales-line-picture`}>\n <Image\n requestContext={requestContext}\n className={`${moduleName}__sales-line-image`}\n altText={productName}\n src={product?.PrimaryImageUrl ?? ''}\n fallBackSrc={fallbackImageUrl}\n gridSettings={gridSettings}\n imageSettings={imageSettings ?? defaultImageSettings}\n loadFailureBehavior='empty'\n />\n </div>\n )\n }\n </Observer>\n );\n};\n\n/**\n * Renders sales line.\n * @param props - Sales line props.\n * @returns React node.\n */\nconst SalesLineComponent: React.FC<IGetSalesLineInput> = (props: IGetSalesLineInput) => {\n const productName = props.product?.Name ?? props.salesLine.Description;\n const requestContext = props.moduleComponentProps.context.actionContext.requestContext;\n\n if (props.imageOnly) {\n const fallbackImageUrl = getFallbackImageUrl(\n props.product?.ItemId,\n requestContext.apiSettings,\n props.moduleComponentProps.context.request.app?.config?.OmniChannelMedia\n );\n return getSalesLinePicture(\n props.moduleName,\n requestContext,\n productName,\n props.product,\n fallbackImageUrl,\n requestContext.gridSettings!,\n props.moduleComponentProps.config.imageSettings,\n props.salesLineState\n );\n }\n\n const orderDetailsProducts = props.orderDetailsProduct ?? new OrderDetailsProduct(props.salesLine, props.product);\n\n const isSelectionModeEnabled = props.isSelectionModeEnabled && orderDetailsProducts.isProductAvailable;\n\n const orderDetailCheckbox =\n isSelectionModeEnabled &&\n getOrderDetailsSalesLineCheckbox(orderDetailsProducts, props.resources.orderDetailsSelectRadioAriaLabelText, props.moduleName);\n\n let productUrl: string | undefined;\n if (!ObjectExtensions.isNullOrUndefined(productName) && !ObjectExtensions.isNullOrUndefined(props.salesLine.ProductId)) {\n productUrl = getProductPageUrlSync(productName, props.salesLine.ProductId, props.moduleComponentProps.context.actionContext);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${props.salesLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n }\n\n const className = `${props.moduleName}__sales-line-checkbox-control`;\n\n return (\n <div\n className={classnames(\n className,\n isSelectionModeEnabled ? `${className}__selection-enabled` : `${className}__selection-disabled`,\n props.isSelectionModeEnabled ? `${className}__selection-global-enabled` : `${className}__selection-global-disabled`,\n orderDetailsProducts.isProductAvailable ? `${className}__available-product` : `${className}__unavailable-product`,\n orderDetailsProducts.isSelected ? `${className}__selected` : `${className}__unselected`\n )}\n >\n {orderDetailCheckbox}\n <CartLineItemComponent\n id={props.moduleComponentProps.id}\n typeName={props.moduleComponentProps.typeName}\n context={props.moduleComponentProps.context}\n resources={{\n sizeString: props.resources.productDimensionTypeSize,\n colorString: props.resources.productDimensionTypeColor,\n styleString: props.resources.productDimensionTypeStyle,\n amountString: props.resources.productDimensionTypeAmount,\n quantityDisplayString: props.resources.salesLineQuantityText,\n configString: props.resources.configString,\n discountStringText: props.resources.discountStringText,\n inputQuantityAriaLabel: '',\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: props.resources.shippingCharges ?? '',\n confirmedShipDateLabel: props.resources.orderDetailsConfirmedShipDateText,\n requestDeliveryDateLabel: props.resources.orderDetailsRequestDeliveryDateText\n }}\n primaryImageUrl={props.product?.PrimaryImageUrl}\n productUrl={!props.product?.Name ? undefined : productUrl}\n imageSettings={props.moduleComponentProps.config.imageSettings ?? defaultImageSettings}\n gridSettings={requestContext.gridSettings!}\n isSalesLine\n data={{ cartLine: props.salesLine, product: props.product, catalogs: props.catalogs }}\n showShippingChargesForLineItems={props.moduleComponentProps.config.showShippingChargesForLineItems}\n channelDeliveryOptionConfig={props.retailMultiplePickUpOptionEnabled ? props.channelDeliveryOptionConfig : undefined}\n priceCurrency={props.priceCurrency}\n />\n </div>\n );\n};\n\nexport const getSalesLine = (props: IGetSalesLineInput): ISalesLine => {\n const {\n moduleName,\n moduleComponentProps: {\n typeName,\n context,\n config: { imageSettings }\n },\n product,\n shipment,\n salesLine,\n resources: {\n shipToLabel,\n storeLabel,\n phoneLabel,\n phoneAriaLabel,\n buyItAgainLabel,\n buyItAgainAriaLabel,\n orderStatusReadyForPickup,\n orderStatusProcessing,\n orderStatusShipped,\n orderStatusPickedUp,\n orderStatusCanceled,\n orderStatusEmailed,\n pickedUpSalesLines,\n deliveredSalesLines,\n carryOutSalesLines,\n emailSalesLines,\n trackingLabel,\n trackingAriaLabel,\n trackingComingSoonLabel,\n pickupDateTimeslotText,\n pickupTimeslotPlaceHolder,\n orderDetailsUnavailableProductText,\n orderDetailsBuySelectedAddingToCartErrorNotificationTitle,\n orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n orderDetailsGoToCartText,\n orderDetailsDialogCloseText,\n orderDetailsSingleItemText,\n orderDetailsMultiLineItemFormatText,\n orderDetailsMultiLinesFormatText,\n orderDetailsHeaderMessageText,\n orderDetailsMultiItemsValidationErrorMessage,\n orderDetailsOneErrorText,\n orderDetailsMultiErrorText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText,\n orderDetailsRequestDeliveryDateText\n },\n channelDeliveryOptionConfig,\n productDeliveryOptions,\n isSelectionModeEnabled,\n orderDetailsProduct,\n isReorderingEnabled\n } = props;\n\n const salesStatusStringMap = getSalesStatusStringMap(\n orderStatusCanceled,\n orderStatusReadyForPickup,\n orderStatusPickedUp,\n orderStatusProcessing,\n orderStatusShipped,\n orderStatusEmailed\n );\n\n const deliveryTypeStringMap: IDeliveryTypeStringMap = {\n pickUp: pickedUpSalesLines,\n ship: deliveredSalesLines,\n carryOut: carryOutSalesLines,\n email: emailSalesLines\n };\n\n const pickupDeliveryModeCode = context.request.channel?.PickupDeliveryModeCode;\n const emailDeliveryModeCode = context.request.channel?.EmailDeliveryModeCode;\n const productName = product?.Name ?? salesLine.Description;\n let productUrl = '';\n if (!ObjectExtensions.isNullOrUndefined(productName) && !ObjectExtensions.isNullOrUndefined(salesLine.ProductId)) {\n productUrl = getProductPageUrlSync(productName, salesLine.ProductId, context.actionContext);\n\n if (MsDyn365.isBrowser) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${salesLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n }\n\n const pickupMode = getPickupModeDesc(product, salesLine.DeliveryMode, productDeliveryOptions, props.retailMultiplePickUpOptionEnabled);\n const deliveryType = getDeliveryType(\n pickupMode,\n salesLine,\n salesLine.DeliveryMode,\n pickupDeliveryModeCode,\n props.retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig,\n emailDeliveryModeCode\n );\n const salesStatus = getSalesStatusCode(deliveryType, salesLine.SalesStatusValue, pickupMode);\n const salesStatusString = salesStatusStringMap[salesStatus];\n\n const deliveryTypeString = getDeliveryTypeString(deliveryType, deliveryTypeStringMap, props.retailMultiplePickUpOptionEnabled);\n const deliveryTypeClass = getDeliveryTypeClassName(deliveryType, deliveryTypeStringMap);\n const storePickUp = getStoreName(props.retailMultiplePickUpOptionEnabled, salesLine, deliveryType);\n const deliveryTypeComp = getDeliveryTypeComp(\n deliveryTypeString,\n moduleName,\n deliveryTypeClass,\n storePickUp,\n props.retailMultiplePickUpOptionEnabled\n );\n const salesStatusComp = salesStatusString && (\n <LabelComponent\n className={`${moduleName}__sales-status ${moduleName}__devliery-type ${deliveryTypeClass ?? ''}-icon`}\n label={salesStatusString}\n />\n );\n\n const trackingInfo = getTrackingInfo(deliveryType, moduleName, trackingLabel, trackingAriaLabel, trackingComingSoonLabel, shipment);\n const orderDetailProducts = orderDetailsProduct ?? new OrderDetailsProduct(salesLine, product, productUrl);\n const orderDetailsBuyItAgainAriaLabel =\n productName && buyItAgainAriaLabel ? (buyItAgainAriaLabel || '').replace('{productName}', productName) : '';\n const pickupDateTimeslotInfo = getPickupDateTimeslotInfo(\n props.showTimeslot,\n deliveryType === pickupMode,\n salesLine,\n pickupTimeslotPlaceHolder,\n moduleName,\n context.request.locale,\n pickupDateTimeslotText\n );\n let buyItAgainLinkClassName = format('{0}__sales-line-btn-buy-it-again-link', moduleName);\n if (isSelectionModeEnabled) {\n buyItAgainLinkClassName = format('{0} {1}-padding', buyItAgainLinkClassName, buyItAgainLinkClassName);\n }\n\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n const salesLineClassName = `${moduleName}__sales-line`;\n const salesLineFullClassName = classnames(\n salesLineClassName,\n isSelectionModeEnabled ? `${salesLineClassName}__selection-enabled` : `${salesLineClassName}__selection-disabled`,\n props.isSelectionModeEnabled\n ? `${salesLineClassName}__selection-global-enabled`\n : `${salesLineClassName}__selection-global-disabled`,\n orderDetailProducts.isProductAvailable ? `${salesLineClassName}__available-product` : `${salesLineClassName}__unavailable-product`\n );\n\n return {\n data: {\n salesLine,\n productUrl,\n deliveryType,\n salesStatus,\n product,\n shipment,\n isChecked: orderDetailProducts.isSelected\n },\n salesLineProps: { className: salesLineFullClassName },\n salesLine: SalesLineComponent(props),\n address: salesLine.ShippingAddress && (\n <Address\n moduleName={moduleName}\n address={salesLine.ShippingAddress}\n resource={{ shipToLabel, storeLabel, phoneLabel, phoneAriaLabel }}\n deliveryType={deliveryType}\n showCompleteAddress={props.showCompleteAddress}\n />\n ),\n requestDeliveryDate:\n salesLine.ShippingAddress && getRequestDeliveryDate(salesLine, moduleName, orderDetailsRequestDeliveryDateText),\n deliveryType: deliveryTypeComp,\n salesStatus: salesStatusComp,\n trackingInfo,\n buyAgainButton: (\n <BuySelectedComponent\n context={context}\n className={props.retailMultiplePickUpOptionEnabled ? buyItAgainLinkClassName : `${moduleName}__sales-line-btn-buy-it-again`}\n data={{ products: [orderDetailProducts] }}\n resources={{\n orderDetailsBuyItAgainLabel: buyItAgainLabel,\n orderDetailsUnavailableProductText,\n orderDetailsBuyItAgainAriaLabel,\n orderDetailsBuySelectedAddingToCartErrorNotificationTitle,\n orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n orderDetailsGoToCartText,\n orderDetailsDialogCloseText,\n orderDetailsSingleItemText,\n orderDetailsMultiLineItemFormatText,\n orderDetailsMultiLinesFormatText,\n orderDetailsHeaderMessageText,\n orderDetailsMultiItemsValidationErrorMessage,\n orderDetailsOneErrorText,\n orderDetailsMultiErrorText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }}\n id={props.moduleComponentProps.id}\n typeName={typeName}\n isReorderingEnabled={isReorderingEnabled}\n />\n ),\n pickupDateTimeslot: pickupDateTimeslotInfo,\n errors: !orderDetailProducts.isProductAvailable && (\n <div className='msc-alert-danger'>{props.resources.orderDetailsUnavailableProductText}</div>\n )\n };\n};\n\nexport const getDeliveryType = (\n pickupMode: string,\n salesLine: SalesLine,\n salesLineDeliveryMode?: string,\n pickupDeliveryModeCode?: string,\n retailMultiplePickupOption?: boolean,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n emailDeliveryModeCode?: string\n): string => {\n let isPickupDeliveryMode: boolean;\n\n if (retailMultiplePickupOption) {\n isPickupDeliveryMode =\n salesLineDeliveryMode === channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === salesLineDeliveryMode);\n } else {\n isPickupDeliveryMode =\n !!pickupDeliveryModeCode && pickupDeliveryModeCode !== '' && pickupDeliveryModeCode === salesLineDeliveryMode;\n }\n\n return isPickupDeliveryMode\n ? pickupMode\n : emailDeliveryModeCode && emailDeliveryModeCode !== '' && emailDeliveryModeCode === salesLine.DeliveryMode\n ? deliveryTypeEnum.email\n : salesLine.DeliveryMode\n ? deliveryTypeEnum.ship\n : deliveryTypeEnum.carryOut;\n};\n\nexport const getDeliveryTypeString = (\n deliveryType: string,\n deliveryTypeStringMap: IDeliveryTypeStringMap,\n retailMultiplePickupOption?: boolean\n): string | undefined => {\n if (retailMultiplePickupOption) {\n switch (deliveryType) {\n case deliveryTypeEnum.ship:\n case deliveryTypeEnum.carryOut:\n case deliveryTypeEnum.email:\n return deliveryTypeStringMap[deliveryType];\n default:\n return deliveryType;\n }\n } else {\n return deliveryTypeStringMap[deliveryType];\n }\n};\n\nexport const getDeliveryTypeClassName = (\n deliveryType: string,\n deliveryTypeStringMap: IDeliveryTypeStringMap,\n retailMultiplePickupOption?: boolean\n): string | undefined => {\n switch (deliveryType) {\n case deliveryTypeEnum.ship:\n case deliveryTypeEnum.carryOut:\n case deliveryTypeEnum.email:\n return deliveryType;\n default:\n return deliveryTypeEnum.pickUp;\n }\n};\n\nconst defaultDeliveryOption: string = 'pickup';\n\n/**\n * Retrieves the delivery description by product id.\n * @param productRecordId - Product record id.\n * @param salesLineDeliveryMode - Delivery mode from the sales line.\n * @param productDeliveryOptions - Possible delivery options.\n * @returns Delivery option description.\n */\nexport const getDeliveryDescriptionByProductId = (\n productRecordId?: number,\n salesLineDeliveryMode?: string,\n productDeliveryOptions?: ProductDeliveryOptions[]\n): string => {\n if (ObjectExtensions.isNullOrUndefined(productRecordId) || !ArrayExtensions.hasElements(productDeliveryOptions)) {\n return defaultDeliveryOption;\n }\n\n const productDeliveryOption = productDeliveryOptions.find(currentDeliveryOption => {\n return currentDeliveryOption.ProductId === productRecordId;\n });\n\n const deliveryDescription = productDeliveryOption?.DeliveryOptions?.find(option => option.Code === salesLineDeliveryMode)?.Description;\n\n return deliveryDescription ?? defaultDeliveryOption;\n};\n\nexport const getPickupModeDesc = (\n product?: SimpleProduct,\n salesLineDeliveryMode?: string,\n productDeliveryOptions?: ProductDeliveryOptions[],\n retailMultiplePickupOption?: boolean\n): string => {\n return getDeliveryDescriptionByProductId(product?.RecordId, salesLineDeliveryMode, productDeliveryOptions);\n};\n\n/**\n * Get the store name.\n * @param isMultiplePickUpOptionEnabled -- Is mutiple pick up option enabled.\n * @param salesLine -- Sales line.\n * @param deliveryType -- Delivery type.\n * @returns The store name.\n */\nexport const getStoreName = (\n isMultiplePickUpOptionEnabled: boolean | undefined,\n salesLine: SalesLine,\n deliveryType?: string\n): string | undefined | null => {\n if (!isMultiplePickUpOptionEnabled) {\n return null;\n }\n\n switch (deliveryType) {\n case deliveryTypeEnum.ship:\n case deliveryTypeEnum.email:\n case deliveryTypeEnum.carryOut:\n return '';\n default:\n return `, ${salesLine.ShippingAddress?.Name}`;\n }\n};\n\n/**\n * Get pick update date time lot information.\n * @param shouldShowTimeslot -- Should show time slot.\n * @param salesLine -- The sales line.\n * @returns The pickup date time slot information.\n */\nexport const getRequestDeliveryDate = (\n salesLine: SalesLine,\n moduleName: string,\n requestDeliveryDateTitle?: string\n): false | JSX.Element => {\n const canShowRequestDeliveryDate: boolean = salesLine.RequestedDeliveryDate !== undefined && salesLine.RequestedDeliveryDate !== null;\n\n return (\n canShowRequestDeliveryDate && (\n <div className={`${moduleName}__request-delivery-date`}>\n <div className={`${moduleName}__request-delivery-date-title`}>{requestDeliveryDateTitle}</div>\n <div className={`${moduleName}__request-delivery-date-content`}>{salesLine.RequestedDeliveryDate}</div>\n </div>\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 { OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { IActionContext, IGridSettings, IImageSettings } from '@msdyn365-commerce/core';\nimport {\n ChannelDeliveryOptionConfiguration,\n OrderShipments,\n ProductCatalog,\n ProductDeliveryOptions,\n SalesLine,\n SalesOrder,\n Shipment,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\n\nimport { getSalesLine, ISalesLine, ISalesLineResources } from './get-sales-line';\nimport { SalesLineState } from './sales-line-state';\nimport { IModuleComponentProps, IPriceContext } from './utilities';\n\nexport interface IGetSalesLinesInput {\n moduleName: string;\n moduleComponentProps: IModuleComponentProps;\n isCurrentChannel: boolean;\n\n salesLines: SalesLine[];\n products: SimpleProduct[];\n shipments?: Shipment[];\n priceContext: IPriceContext;\n resources: ISalesLineResources;\n actionContext: IActionContext;\n gridSettings: IGridSettings;\n imageSettings?: IImageSettings;\n imageOnly?: boolean;\n salesLineStates?: SalesLineState[];\n showCompleteAddress?: boolean;\n showTimeslot: boolean;\n telemetryContent?: ITelemetryContent;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n productDeliveryOptions?: ProductDeliveryOptions[];\n isSelectionModeEnabled?: boolean;\n orderDetailsProducts?: OrderDetailsProduct[];\n isReorderingEnabled?: boolean;\n isChannelMultipleCatalogsFeatureEnabled?: boolean;\n catalogs?: ProductCatalog[];\n priceCurrency?: string;\n}\n\nexport const getSalesLines = ({\n moduleName,\n moduleComponentProps,\n salesLines,\n products,\n shipments,\n resources,\n isCurrentChannel,\n imageOnly,\n showCompleteAddress,\n showTimeslot,\n telemetryContent,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig,\n productDeliveryOptions,\n isSelectionModeEnabled,\n orderDetailsProducts,\n isReorderingEnabled,\n salesLineStates: productStates,\n isChannelMultipleCatalogsFeatureEnabled,\n catalogs,\n priceCurrency\n}: IGetSalesLinesInput): ISalesLine[] => {\n return salesLines.map((salesLine, index) => {\n const product = products.find(simpleProduct => simpleProduct.RecordId === salesLine.ProductId);\n const shipment =\n product &&\n shipments?.find(currentShipment =>\n currentShipment.ShipmentLines?.find(\n shipmentLine =>\n shipmentLine.ItemId === product.ItemId && shipmentLine.InventoryTransactionId === salesLine.InventoryTransactionId\n )\n );\n const orderDetailsProduct = isSelectionModeEnabled\n ? product && orderDetailsProducts?.find(currentProduct => currentProduct.salesLine.ProductId === product.RecordId)\n : undefined;\n const productState = productStates?.find(value => value.stateId === `${salesLine.LineId ?? ''}-${index}`);\n\n return getSalesLine({\n moduleName,\n moduleComponentProps,\n product,\n shipment,\n salesLine,\n isCurrentChannel,\n resources,\n imageOnly,\n showCompleteAddress,\n showTimeslot,\n telemetryContent,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig,\n productDeliveryOptions,\n isSelectionModeEnabled,\n orderDetailsProduct,\n isReorderingEnabled,\n salesLineState: productState,\n isChannelMultipleCatalogsFeatureEnabled,\n catalogs,\n priceCurrency\n });\n });\n};\n\ninterface IProps extends IModuleComponentProps {\n resources: ISalesLineResources;\n}\n\nexport const getSalesLinesInput = (\n props: IProps,\n moduleName: string,\n order: SalesOrder | OrderShipments,\n products: SimpleProduct[],\n priceContext: IPriceContext,\n showCompleteAddress?: boolean,\n showTimeslot?: boolean,\n telemetryContent?: ITelemetryContent,\n retailMultiplePickUpOptionEnabled?: boolean,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n productDeliveryOptions?: ProductDeliveryOptions[] | undefined,\n isSelectionModeEnabled?: boolean | undefined,\n orderDetailsProducts?: OrderDetailsProduct[] | undefined,\n isReorderingEnabled?: boolean,\n isChannelMultipleCatalogsFeatureEnabled?: boolean,\n catalogs?: ProductCatalog[]\n): IGetSalesLinesInput | undefined => {\n if (!order || !order.SalesLines || order.SalesLines.length === 0) {\n return;\n }\n\n const {\n resources,\n config: { imageSettings },\n context: {\n actionContext,\n request: {\n gridSettings,\n apiSettings: { channelId }\n }\n }\n } = props;\n\n const isCurrentChannel = !order.ChannelId || order.ChannelId === channelId;\n\n return {\n moduleName,\n moduleComponentProps: props,\n isCurrentChannel,\n salesLines: order.SalesLines,\n priceCurrency: order.CurrencyCode,\n products,\n shipments: order.Shipments,\n priceContext,\n resources,\n actionContext,\n gridSettings: gridSettings!,\n imageSettings,\n showCompleteAddress,\n showTimeslot: showTimeslot ?? false,\n telemetryContent,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig,\n productDeliveryOptions,\n isSelectionModeEnabled: isSelectionModeEnabled ?? false,\n orderDetailsProducts,\n isReorderingEnabled,\n isChannelMultipleCatalogsFeatureEnabled,\n catalogs\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * Represents state of the expand button.\n */\nexport class ExpandButtonState {\n @observable public extraProductsCount: number;\n\n public constructor(extraProductsCount: number) {\n this.extraProductsCount = extraProductsCount;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * Represents state of the sales line product.\n */\nexport class SalesLineState {\n @observable public isHidden?: boolean;\n\n public stateId: string;\n\n public constructor(stateId: string, isHidden?: boolean) {\n this.stateId = stateId;\n this.isHidden = isHidden;\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\ninterface ILabelProps {\n className: string;\n label: string;\n}\n\nexport const Label: React.FC<ILabelProps> = ({ className, label }) => <span className={className}>{label}</span>;\n\nexport default Label;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IAny, ICoreContext, IGeneric, IImageSettings, IModule, ITelemetry } from '@msdyn365-commerce/core';\nimport { SalesLine, TenderType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport groupBy from 'lodash/groupBy';\n\nimport { ISalesLine } from './get-sales-line';\n\nexport interface IModuleComponentProps extends IModule {\n config: {\n imageSettings?: IImageSettings;\n showShippingChargesForLineItems?: boolean;\n };\n}\n\nexport interface IPriceContext {\n id: string;\n typeName: string;\n context: ICoreContext<IGeneric<IAny>>;\n telemetry: ITelemetry;\n freePriceText: string;\n}\n\nexport const getTenderIdOperationIdMap = (tenderTypes: TenderType[]): object => {\n return tenderTypes.reduce((map, tenderType) => {\n if (tenderType.TenderTypeId) {\n map[tenderType.TenderTypeId] = tenderType.OperationId;\n }\n return map;\n }, {});\n};\n\nexport const countItems = (salesLines: SalesLine[]) => {\n return salesLines.reduce((count, salesLine) => {\n return count + (salesLine.Quantity || 0);\n }, 0);\n};\n\nexport const getSalesLinesByDelivery = (salesLines?: SalesLine[], pickupDeliveryModeCode?: string): SalesLine[] => {\n if (!salesLines || salesLines.length === 0) {\n return [];\n }\n return salesLines.filter(salesLine =>\n // IsPickUp ? getPickUp : getOthers\n pickupDeliveryModeCode && pickupDeliveryModeCode !== ''\n ? salesLine.DeliveryMode === pickupDeliveryModeCode\n : salesLine.DeliveryMode !== pickupDeliveryModeCode\n );\n};\n\nexport const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\nexport type IDeliveryType = 'pickUp' | 'ship' | 'carryOut' | 'email';\n\nexport type ISalesStatusCode = 'canceled' | 'readyForPickup' | 'pickedUp' | 'processing' | 'shipped' | 'unknown' | 'emailed';\n\nexport const getSalesStatusCode = (deliveryType: string, statusValue?: number, pickupMode?: string): ISalesStatusCode => {\n if (statusValue === 7) {\n return 'canceled';\n }\n\n if (deliveryType === 'pickUp') {\n switch (statusValue) {\n case 3:\n return 'readyForPickup';\n case 4:\n return 'pickedUp';\n default:\n return 'processing';\n }\n } else if (deliveryType === 'ship') {\n switch (statusValue) {\n case 3:\n return 'processing';\n case 4:\n return 'shipped';\n default:\n return 'processing';\n }\n } else if (deliveryType === 'email') {\n switch (statusValue) {\n case 3:\n return 'processing';\n case 4:\n return 'emailed';\n default:\n return 'processing';\n }\n } else if (deliveryType === 'carryOut') {\n return 'processing';\n } else {\n if (pickupMode !== undefined) {\n switch (statusValue) {\n case 3:\n return 'readyForPickup';\n case 4:\n return 'pickedUp';\n default:\n return 'processing';\n }\n }\n\n return 'unknown';\n }\n};\n\nexport type ITrackingId = string | 'unknown';\nexport type IAddressId = string | 'unknown';\n\nexport interface IGroupData {\n deliveryType: IDeliveryType;\n salesStatus: ISalesStatusCode;\n addressId: IAddressId | 'unknown';\n trackingId: ITrackingId | 'unknown';\n count: number;\n salesLines: ISalesLine[];\n}\n\nexport const groupSalesLines = (salesLines: ISalesLine[]): IGroupData[] => {\n const getGroupByDeliveryType = (items: ISalesLine[]) => groupBy(items, item => item.data.deliveryType);\n const getGroupBySalesStatusCode = (items: ISalesLine[]) => groupBy(items, item => item.data.salesStatus);\n const getGroupByTrackingId = (items: ISalesLine[]) => groupBy(items, item => item.data.salesLine.TrackingId || 'unknown');\n const getGroupByAddressId = (items: ISalesLine[]) =>\n groupBy(items, item => (item.data.salesLine.ShippingAddress && item.data.salesLine.ShippingAddress.RecordId) || 'unknown');\n\n const flatGroup: IGroupData[] = [];\n\n // 1) Group by delivery type\n const group = getGroupByDeliveryType(salesLines);\n\n // 2) Group by sales status code\n Object.entries(group).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n group[deliveryType] = getGroupBySalesStatusCode(groupByDeliveryType);\n\n Object.entries(group[deliveryType]).forEach(([salesStatus, groupBySalesStatusCode]) => {\n // @ts-expect-error 3) Group by address id\n groupBySalesStatusCode[salesStatus] = getGroupByAddressId(groupBySalesStatusCode);\n\n Object.entries(groupBySalesStatusCode[salesStatus]).forEach(([addressId, groupByAddressId]) => {\n // @ts-expect-error 4) Group by address id\n groupByAddressId[addressId] = getGroupByTrackingId(groupByAddressId);\n\n // @ts-expect-error\n Object.entries(groupByAddressId[addressId]).forEach(([trackingId, groupByTrackingId]) => {\n flatGroup.push({\n // @ts-expect-error\n deliveryType,\n\n // @ts-expect-error\n salesStatus,\n addressId,\n trackingId,\n\n // @ts-expect-error\n count: countItems(groupByTrackingId.map(item => item.data.salesLine)),\n\n // @ts-expect-error\n salesLines: groupByTrackingId\n });\n });\n });\n });\n });\n\n return flatGroup;\n};\n\nexport const getDateTimeslot = (placeHolder: string, startDate: Date | undefined, endDate: Date | undefined, locale: string): string => {\n if (!startDate || !endDate) {\n return '';\n }\n\n const dateOptions: Intl.DateTimeFormatOptions = {\n timeZone: 'UTC'\n };\n const dateformatter = new Intl.DateTimeFormat(locale, dateOptions);\n const date = dateformatter.format(new Date(startDate));\n\n const timeslotOptions: Intl.DateTimeFormatOptions = {\n hour: 'numeric',\n minute: 'numeric',\n hour12: true,\n timeZone: 'UTC'\n };\n const timeslotformatter = new Intl.DateTimeFormat(locale, timeslotOptions);\n const timeslot = format(placeHolder, timeslotformatter.format(new Date(startDate)), timeslotformatter.format(new Date(endDate)));\n return `${date} ${timeslot}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { SalesOrder, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { IGetOrderSummaryInput, IHelp, IOrderSummary, IPaymentMethods, IPaymentMethodsInput } from '../../common';\nimport { getGroups, IGroups } from '../../common/get-groups';\nimport { getOrderInformation, getOrderInformationInput, IOrderInformation } from '../../common/get-order-information';\nimport { ISalesLine } from '../../common/get-sales-line';\nimport { getSalesLines, getSalesLinesInput } from '../../common/get-sales-lines';\nimport { Label } from '../../common/label';\nimport { getTenderIdOperationIdMap, IPriceContext } from '../../common/utilities';\nimport { getOrderConfirmationHelp } from '../order-confirmation/components/get-help';\nimport { getOrderConfirmationOrderSummary } from '../order-confirmation/components/get-order-summary';\nimport { getOrderConfirmationPaymentMethods } from '../order-confirmation/components/get-payment-methods';\nimport { ICheckoutOrderConfirmationData } from './checkout-order-confirmation.data';\nimport { ICheckoutOrderConfirmationProps } from './checkout-order-confirmation.props.autogenerated';\n\nexport interface ICheckoutOrderConfirmationViewProps extends ICheckoutOrderConfirmationProps<ICheckoutOrderConfirmationData> {\n moduleProps: IModuleProps;\n salesOrder?: SalesOrder;\n footerProps?: INodeProps;\n alert?: React.ReactNode;\n loading?: React.ReactNode;\n heading: React.ReactNode;\n backToShoppingLink?: React.ReactNode;\n orderInfomation?: IOrderInformation;\n salesLines?: ISalesLine[];\n groups?: IGroups;\n orderSummary?: IOrderSummary;\n payment?: IPaymentMethods;\n help?: IHelp;\n}\n\n/**\n *\n * OrderConfirmation component.\n * @extends {React.PureComponent<IOrderConfirmationProps<IOrderConfirmationData>>}\n */\nclass OrderConfirmation extends React.PureComponent<ICheckoutOrderConfirmationProps<ICheckoutOrderConfirmationData>> {\n private readonly moduleName: string = 'ms-order-confirmation';\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly backToShoppingAttributes?: Msdyn365.IDictionary<string>;\n\n constructor(props: ICheckoutOrderConfirmationProps<ICheckoutOrderConfirmationData>) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n this.backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n }\n\n @computed get isCurrentChannel(): boolean {\n if (!this.order) {\n return false;\n }\n return this.order.ChannelId === get(this.props, 'context.request.apiSettings.channelId');\n }\n\n @computed get isDataReady(): boolean {\n return get(this.props, 'data.checkout.status') === 'SUCCESS';\n }\n\n @computed get hasError(): boolean {\n return get(this.props, 'data.checkout.status') === 'FAILED';\n }\n\n @computed get order(): SalesOrder | undefined {\n return get(this.props, 'data.checkout.result.salesOrder');\n }\n\n @computed get products(): SimpleProduct[] {\n return get(this.props, 'data.checkout.result.orderedProducts') || [];\n }\n\n @computed get priceContext(): IPriceContext {\n const {\n id,\n typeName,\n context,\n telemetry,\n resources: { freePriceText }\n } = this.props;\n return {\n id,\n typeName,\n context,\n telemetry,\n freePriceText\n };\n }\n\n @computed get earnedPoints(): number {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n if (loyaltyCard && loyaltyCard.RewardPoints && this.order) {\n const pointPrograms = new Set(loyaltyCard.RewardPoints.map(point => point.RewardPointId));\n const rewardLines = this.order.LoyaltyRewardPointLines || [];\n let total = 0;\n rewardLines.forEach(line => {\n if ((line.RewardPointAmountQuantity || 0) > 0 && pointPrograms.has(line.RewardPointId)) {\n total += line.RewardPointAmountQuantity!;\n }\n });\n return total;\n }\n return 0;\n }\n\n @computed get orderSummaryProps(): IGetOrderSummaryInput | undefined {\n if (!this.order) {\n return;\n }\n\n const {\n resources: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n orderSummaryGrandTotalLabel,\n pointsEarnedLabel\n }\n } = this.props;\n return {\n order: this.order,\n earnedPoints: this.earnedPoints,\n priceContext: this.priceContext,\n resource: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n pointsEarnedLabel,\n orderSummaryGrandTotalLabel\n }\n };\n }\n\n @computed get paymentMethodsProps(): IPaymentMethodsInput | undefined {\n const tenderTypes = this.props.data.tenderTypes.result;\n if (!this.order || !this.order.TenderLines || !tenderTypes) {\n return;\n }\n\n const locale = get(this.props, 'context.request.locale') || 'en-US';\n\n const {\n resources: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel,\n customerAccountUsedLabel\n }\n } = this.props;\n\n return {\n priceContext: this.priceContext,\n tenderLines: this.order.TenderLines,\n tenderIdOperationIdMap: getTenderIdOperationIdMap(tenderTypes),\n locale,\n resource: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel,\n customerAccountUsedLabel\n }\n };\n }\n\n public render(): JSX.Element {\n const {\n resources: {\n noSalesOrderText,\n genericErrorMessage,\n needHelpLabel,\n helpLineNumberLabel,\n loadingLabel,\n backToShopping,\n orderItemLabel,\n orderItemsLabel,\n helpLineContactAriaLabel\n },\n config: { heading, contactNumber, showTimeslot }\n } = this.props;\n\n const moduleProps = { moduleProps: this.props, className: classname('ms-order-confirmation', this.props.config.className) };\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props?.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n let viewProps: ICheckoutOrderConfirmationViewProps = {\n ...this.props,\n moduleProps,\n heading: heading && heading.text && (\n <Msdyn365.Text\n {...heading}\n className='ms-order-confirmation__heading'\n text={heading.text}\n tag={heading.tag || 'h2'}\n editProps={{ onEdit: this.handleCheckoutOrderConfirmationHeadingChange, requestContext: this.props.context.request }}\n />\n ),\n backToShoppingLink: backToShoppingUrl && (\n <Button className='ms-order-confirmation__btn-keep-shopping' href={backToShoppingUrl} {...this.backToShoppingAttributes}>\n {backToShopping}\n </Button>\n ),\n footerProps: { className: 'ms-order-confirmation__footer' }\n };\n\n if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: <Label className='ms-order-confirmation__alert' label={genericErrorMessage} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!this.isDataReady) {\n viewProps = {\n ...viewProps,\n loading: <Label className='ms-order-confirmation__loading' label={loadingLabel} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!this.order) {\n viewProps = {\n ...viewProps,\n alert: <Label className='ms-order-confirmation__alert' label={noSalesOrderText} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n const salesLinesInput = getSalesLinesInput(\n this.props,\n this.moduleName,\n this.order,\n this.products,\n this.priceContext,\n false,\n showTimeslot,\n undefined,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig?.result\n );\n const salesLines = salesLinesInput && getSalesLines(salesLinesInput);\n\n const orderInfomationInput = this.order && getOrderInformationInput(this.props, this.moduleName, this.order, this.priceContext);\n const orderInfomation = orderInfomationInput && getOrderInformation(orderInfomationInput);\n\n viewProps = {\n ...viewProps,\n salesOrder: this.order,\n orderInfomation,\n salesLines,\n groups: salesLines\n ? getGroups({\n moduleName: this.moduleName,\n salesLines,\n resources: { orderItemLabel, orderItemsLabel },\n showTimeslot,\n retailMultiplePickUpOptionEnabled\n })\n : undefined,\n orderSummary: this.orderSummaryProps ? getOrderConfirmationOrderSummary(this.orderSummaryProps) : undefined,\n payment: this.paymentMethodsProps ? getOrderConfirmationPaymentMethods(this.paymentMethodsProps) : undefined,\n help: contactNumber\n ? getOrderConfirmationHelp({\n needHelpLabel,\n helpLineNumberLabel,\n contactNumber,\n helpLineContactAriaLabel,\n telemetryContent: this.telemetryContent\n })\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleCheckoutOrderConfirmationHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.heading!.text = event.target.value);\n}\n\nexport default OrderConfirmation;\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 { IHelp, IOrderSummary, IPaymentMethods } from '../../common';\nimport { IGroup, IGroupDelivery, IGroups } from '../../common/get-groups';\nimport { IOrderInformation } from '../../common/get-order-information';\nimport { ISalesLine } from '../../common/get-sales-line';\nimport { ICheckoutOrderConfirmationViewProps } from './checkout-order-confirmation';\n\nexport const OrderConfirmationOrderInfomation: React.FC<IOrderInformation> = ({\n orderInformationProps,\n receiptEmail,\n createdDate,\n channelReferenceId\n}) => (\n <Node {...orderInformationProps}>\n {channelReferenceId}\n {receiptEmail}\n </Node>\n);\n\nexport const OrderConfirmationSalesLine: React.FC<ISalesLine> = ({ salesLineProps, salesLine, buyAgainButton }) => (\n <Node {...salesLineProps}>{salesLine}</Node>\n);\n\nexport const OrderConfirmationGroupDelivery: React.FC<IGroupDelivery> = ({\n deliveryProps,\n heading,\n count,\n processing,\n address,\n pickupDateTimeslot,\n trackingInfo\n}) => (\n <Node {...deliveryProps}>\n {heading}\n {count}\n {address}\n {pickupDateTimeslot}\n </Node>\n);\n\nexport const OrderConfirmationGroup: React.FC<IGroup> = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\n <Node {...groupProps}>\n {delivery && <OrderConfirmationGroupDelivery {...delivery} />}\n {salesLines && (\n <Node {...salesLinesProps}>\n {salesLines.map(salesLine => (\n <OrderConfirmationSalesLine key={salesLine.data.salesLine.LineId} {...salesLine} />\n ))}\n </Node>\n )}\n </Node>\n);\n\nexport const OrderConfirmationGroups: React.FC<IGroups> = ({ groupsProps, groups }) => (\n <Node {...groupsProps}>\n {groups.map((group, index) => (\n <OrderConfirmationGroup key={index} {...group} />\n ))}\n </Node>\n);\n\nexport const OrderConfirmationOrderSummary: React.FC<IOrderSummary> = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n <Node {...orderSummaryProps}>\n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n </Node>\n);\n\nexport const OrderConfirmationPayment: React.FC<IPaymentMethods> = ({ paymentMethodsProps, title, methods }) => (\n <Node {...paymentMethodsProps}>\n {title}\n {methods}\n </Node>\n);\n\nexport const OrderConfirmationHelp: React.FC<IHelp> = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n <Node {...helpProps}>\n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n </Node>\n);\n\nconst OrderConfirmationView: React.FC<ICheckoutOrderConfirmationViewProps> = ({\n moduleProps,\n heading,\n backToShoppingLink,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n <Module {...moduleProps}>\n {heading}\n {alert}\n {loading}\n {orderInfomation && <OrderConfirmationOrderInfomation {...orderInfomation} />}\n {backToShoppingLink}\n {groups && <OrderConfirmationGroups {...groups} />}\n {orderSummary && <OrderConfirmationOrderSummary {...orderSummary} />}\n {payment && <OrderConfirmationPayment {...payment} />}\n {help && <OrderConfirmationHelp {...help} />}\n </Module>\n );\n};\n\nexport default OrderConfirmationView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IGetHelpInput, IHelp } from '../../..';\n\nexport const getOrderConfirmationHelp = ({\n needHelpLabel,\n helpLineNumberLabel,\n contactNumber,\n helpLineContactAriaLabel,\n telemetryContent\n}: IGetHelpInput): IHelp => {\n const payLoad = getPayloadObject('click', telemetryContent!, '');\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return {\n helpProps: { className: 'ms-order-confirmation__help' },\n needHelpLabel: <p className='ms-order-confirmation__help-title'>{needHelpLabel}</p>,\n helpLineNumberLabel: <span className='ms-order-confirmation__help-label'>{helpLineNumberLabel}</span>,\n contactNumber: (\n <a\n className='ms-order-confirmation__help-content-number'\n aria-label={`${helpLineContactAriaLabel} ${contactNumber}`}\n href={`tel:${contactNumber}`}\n {...attribute}\n >\n {contactNumber}\n </a>\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 * as React from 'react';\n\nimport { IGetOrderSummaryInput, IOrderSummary, IPriceContext } from '../../../common';\n\ninterface ISummaryLineProps {\n priceContext?: IPriceContext;\n name: string;\n label: string;\n value?: number;\n}\n\nconst OrderSummaryLine: React.SFC<ISummaryLineProps> = ({ name, label, value = 0, priceContext }) => (\n <p className={`ms-order-confirmation__order-summary-line-${name}`}>\n <span className='ms-order-confirmation__order-summary-label'>{label}</span>\n {priceContext ? (\n <PriceComponent\n {...priceContext}\n className='ms-order-confirmation__order-summary-price'\n data={{ price: { CustomerContextualPrice: value } }}\n />\n ) : (\n <span className='ms-order-confirmation__order-summary-price'>{value}</span>\n )}\n </p>\n);\n\nexport const getOrderConfirmationOrderSummary = ({\n order,\n priceContext,\n earnedPoints,\n resource: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n orderSummaryGrandTotalLabel,\n pointsEarnedLabel\n },\n canShip,\n isTaxIncludedInPrice,\n isShowTaxBreakUp\n}: IGetOrderSummaryInput): IOrderSummary => {\n const subTotal = isTaxIncludedInPrice && isShowTaxBreakUp ? order.SubtotalAmountWithoutTax : order.SubtotalAmount;\n const taxOnShippingCharge = order.TaxOnShippingCharge !== undefined ? order.TaxOnShippingCharge : 0;\n const shippingChargeAmount = order.ShippingChargeAmount !== undefined ? order.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n const shippingCharge =\n isTaxIncludedInPrice && !isShowTaxBreakUp ? shippingChargeAmount + taxOnShippingCharge : order.ShippingChargeAmount;\n return {\n orderSummaryProps: { className: 'ms-order-confirmation__order-summary' },\n heading: <p className='ms-order-confirmation__order-summary-heading'>{orderSummaryHeading}</p>,\n subtotal: <OrderSummaryLine name='subtotal' label={orderSummaryItemsTotalLabel} value={subTotal} priceContext={priceContext} />,\n shipping: canShip ? (\n <OrderSummaryLine name='shipping' label={orderSummaryShippingFeeLabel} value={shippingCharge} priceContext={priceContext} />\n ) : (\n ''\n ),\n tax: isShowTaxBreakUp ? (\n <OrderSummaryLine name='tax-amount' label={orderSummaryTaxLabel} value={order.TaxAmount} priceContext={priceContext} />\n ) : (\n ''\n ),\n totalAmount: (\n <OrderSummaryLine\n name='total-amount'\n label={orderSummaryGrandTotalLabel}\n value={order.TotalAmount}\n priceContext={priceContext}\n />\n ),\n earnedPoints: earnedPoints ? <OrderSummaryLine name='earned-points' label={pointsEarnedLabel} value={earnedPoints} /> : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { RetailOperation, TenderLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport * as React from 'react';\n\nimport { IPaymentMethods, IPaymentMethodsInput } from '../../../common';\n\nexport const getOrderConfirmationPaymentMethods = ({\n priceContext,\n tenderLines,\n tenderIdOperationIdMap,\n resource: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n loyaltyCardUsedLabel,\n cashUsedLabel,\n customerAccountUsedLabel\n }\n}: IPaymentMethodsInput): IPaymentMethods => {\n const getLastFourDigit = (digits = '') => digits.substr(-4);\n\n const getCard = (tenderLine: TenderLine, showAmount: boolean = false) => {\n const cardLastFourDigit = getLastFourDigit(tenderLine.MaskedCardNumber);\n\n // @ts-expect-error\n const isValidCardNumber = cardLastFourDigit && !isNaN(cardLastFourDigit);\n const amount = (tenderLine.AuthorizedAmount || 0) > 0 ? tenderLine.AuthorizedAmount : tenderLine.Amount;\n const showAmountCovered = !!(showAmount && amount && amount > 0);\n\n return (\n <div className='ms-order-confirmation__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-confirmation__payment-methods-card'>\n {`${tenderLine.CardTypeId} ${isValidCardNumber ? `${creditCardEndingLabel} ${cardLastFourDigit}` : ''}`}\n </p>\n {showAmountCovered && (\n <p className='ms-order-confirmation__payment-methods-card-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-confirmation__payment-methods-card-amount'\n data={{ price: { CustomerContextualPrice: amount || 0 } }}\n />\n </p>\n )}\n </div>\n );\n };\n\n const getGiftCertificate = (tenderLine: TenderLine) => (\n <div className='ms-order-confirmation__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-confirmation__payment-methods-gift-card-number'>\n {giftCardEndingLabel}\n {` `}\n {getLastFourDigit(tenderLine.GiftCardId)}\n </p>\n <p className='ms-order-confirmation__payment-methods-gift-card-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-confirmation__payment-methods-gift-card-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount || 0 } }}\n />\n </p>\n </div>\n );\n\n const getLoyalty = (tenderLine: TenderLine) => (\n <div className='ms-order-confirmation__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-confirmation__payment-methods-loyalty-number'>\n {loyaltyCardUsedLabel}\n {` `}\n {tenderLine.LoyaltyCardId}\n </p>\n <p className='ms-order-confirmation__payment-methods-loyalty-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-confirmation__payment-methods-loyalty-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount || 0 } }}\n />\n </p>\n </div>\n );\n\n const getCash = (tenderLine: TenderLine) => (\n <div className='ms-order-confirmation__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-confirmation__payment-methods-cash'>{cashUsedLabel}</p>\n <p className='ms-order-confirmation__payment-methods-cash-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-confirmation__payment-methods-cash-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount || 0 } }}\n />\n </p>\n </div>\n );\n\n /**\n * Get customer account payment information.\n * @param tenderLine - The customer account payment tender line.\n * @returns The customer account payment HTML.\n */\n const getCustomerAccountPayment = (tenderLine: TenderLine) => (\n <div className='ms-order-confirmation__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-confirmation__payment-methods-customer-account'>\n {customerAccountUsedLabel}\n {` `}\n {tenderLine.CustomerId}\n </p>\n <p className='ms-order-confirmation__payment-methods-customer-account-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-confirmation__payment-methods-customer-account-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount ?? 0 } }}\n />\n </p>\n </div>\n );\n\n return {\n paymentMethodsProps: { className: 'ms-order-confirmation__payment-methods' },\n title: <div className='ms-order-confirmation__payment-methods-title'>{paymentMethodsTitle}</div>,\n methods: tenderLines.reduce((lines: React.ReactNode[], tenderLine) => {\n if (!tenderLine.TenderTypeId) {\n return lines;\n }\n switch (tenderIdOperationIdMap[tenderLine.TenderTypeId]) {\n case RetailOperation.PayCard:\n lines.push(getCard(tenderLine, tenderLines.length > 1));\n break;\n case RetailOperation.PayGiftCertificate:\n lines.push(getGiftCertificate(tenderLine));\n break;\n case RetailOperation.PayLoyalty:\n lines.push(getLoyalty(tenderLine));\n break;\n case RetailOperation.PayCash:\n lines.push(getCash(tenderLine));\n break;\n case RetailOperation.PayCustomerAccount:\n lines.push(getCustomerAccountPayment(tenderLine));\n break;\n default:\n\n // Do nothing\n }\n return lines;\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 Msdyn365 from '@msdyn365-commerce/core';\nimport {\n ChannelDeliveryOptionConfiguration,\n ProductDeliveryOptions,\n SalesLine,\n SalesOrder,\n SimpleProduct,\n TransactionType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { IGetOrderSummaryInput, IHelp, IOrderSummary, IPaymentMethods, IPaymentMethodsInput } from '../../common';\nimport { getGroups, IGroups } from '../../common/get-groups';\nimport { getOrderInformation, getOrderInformationInput, IOrderInformation } from '../../common/get-order-information';\nimport { ISalesLine } from '../../common/get-sales-line';\nimport { getSalesLines, getSalesLinesInput } from '../../common/get-sales-lines';\nimport { Label } from '../../common/label';\nimport { getTenderIdOperationIdMap, IPriceContext } from '../../common/utilities';\nimport { getOrderConfirmationHelp } from './components/get-help';\nimport { getOrderConfirmationOrderSummary } from './components/get-order-summary';\nimport { getOrderConfirmationPaymentMethods } from './components/get-payment-methods';\nimport { IOrderConfirmationData } from './order-confirmation.data';\nimport { IOrderConfirmationProps } from './order-confirmation.props.autogenerated';\n\nexport interface IOrderConfirmationViewProps extends IOrderConfirmationProps<IOrderConfirmationData> {\n moduleProps: IModuleProps;\n salesOrder?: SalesOrder;\n footerProps?: INodeProps;\n alert?: React.ReactNode;\n loading?: React.ReactNode;\n heading: React.ReactNode;\n backToShoppingLink?: React.ReactNode;\n orderInfomation?: IOrderInformation;\n salesLines?: ISalesLine[];\n groups?: IGroups;\n orderSummary?: IOrderSummary;\n payment?: IPaymentMethods;\n help?: IHelp;\n}\n\n/**\n *\n * OrderConfirmation component.\n * @extends {React.PureComponent<IOrderConfirmationProps<IOrderConfirmationData>>}\n */\nclass OrderConfirmation extends React.PureComponent<IOrderConfirmationProps<IOrderConfirmationData>> {\n private readonly moduleName: string = 'ms-order-confirmation';\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly backToShoppingAttributes?: Msdyn365.IDictionary<string>;\n\n constructor(props: IOrderConfirmationProps<IOrderConfirmationData>) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n this.backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n }\n\n @computed get isCurrentChannel(): boolean {\n if (!this.order) {\n return false;\n }\n return this.order.ChannelId === get(this.props, 'context.request.apiSettings.channelId');\n }\n\n @computed get isDataReady(): boolean {\n return get(this.props, 'data.orderHydration.status') === 'SUCCESS';\n }\n\n @computed get hasError(): boolean {\n return get(this.props, 'data.orderHydration.status') === 'FAILED';\n }\n\n @computed get order(): SalesOrder | undefined {\n return get(this.props, 'data.orderHydration.result.salesOrder');\n }\n\n @computed get products(): SimpleProduct[] {\n return get(this.props, 'data.orderHydration.result.products') || [];\n }\n\n @computed get deliveryOptions(): ProductDeliveryOptions[] {\n return get(this.props, 'data.orderHydration.result.deliveryOptions') || [];\n }\n\n @computed public get customerName(): Readonly<string | undefined> {\n const customer = this.props.data.accountInformation?.result;\n if (Msdyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n @computed get priceContext(): IPriceContext {\n const {\n id,\n typeName,\n context,\n telemetry,\n resources: { freePriceText }\n } = this.props;\n return {\n id,\n typeName,\n context,\n telemetry,\n freePriceText\n };\n }\n\n @computed get earnedPoints(): number {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n if (loyaltyCard && loyaltyCard.RewardPoints && this.order) {\n const pointPrograms = new Set(loyaltyCard.RewardPoints.map(point => point.RewardPointId));\n const rewardLines = this.order.LoyaltyRewardPointLines || [];\n let total = 0;\n rewardLines.forEach(line => {\n if ((line.RewardPointAmountQuantity || 0) > 0 && pointPrograms.has(line.RewardPointId)) {\n total += line.RewardPointAmountQuantity!;\n }\n });\n return total;\n }\n return 0;\n }\n\n @computed get orderSummaryProps(): IGetOrderSummaryInput | undefined {\n if (!this.order) {\n return;\n }\n const { request } = this.props.context;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props?.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n const orderDetailsLines = this.order?.SalesLines;\n const canShip = orderDetailsLines?.some(orderDetailsLine =>\n orderDetailsLine.DeliveryMode && orderDetailsLine.DeliveryMode !== ''\n ? orderDetailsLine.DeliveryMode !==\n this.getDeliveryMode(\n orderDetailsLine,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig?.result,\n pickupDeliveryModeCode\n ) && orderDetailsLine.DeliveryMode !== emailDeliveryModeCode\n : orderDetailsLine\n );\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const {\n resources: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n orderSummaryGrandTotalLabel,\n pointsEarnedLabel\n }\n } = this.props;\n return {\n order: this.order,\n earnedPoints: this.earnedPoints,\n priceContext: this.priceContext,\n resource: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n pointsEarnedLabel,\n orderSummaryGrandTotalLabel\n },\n canShip,\n isTaxIncludedInPrice: this.order.IsTaxIncludedInPrice,\n isShowTaxBreakUp: isShowOrHideTaxEnabled\n };\n }\n\n @computed get paymentMethodsProps(): IPaymentMethodsInput | undefined {\n const tenderTypes = this.props.data.tenderTypes.result;\n if (!this.order || !this.order.TenderLines || !tenderTypes) {\n return;\n }\n\n const locale = get(this.props, 'context.request.locale') || 'en-US';\n\n const {\n resources: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel,\n customerAccountUsedLabel\n }\n } = this.props;\n\n return {\n priceContext: this.priceContext,\n tenderLines: this.order.TenderLines,\n tenderIdOperationIdMap: getTenderIdOperationIdMap(tenderTypes),\n locale,\n resource: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel,\n customerAccountUsedLabel\n }\n };\n }\n\n public render(): JSX.Element {\n const {\n resources: {\n noSalesOrderText,\n genericErrorMessage,\n needHelpLabel,\n helpLineNumberLabel,\n loadingLabel,\n backToShopping,\n orderItemLabel,\n orderItemsLabel,\n pickupItemsHeader,\n pickingItemsLabel,\n shippingAddressTitle,\n shippingItemToYouLabel,\n shippingItemToOBOCustomerLabel,\n helpLineContactAriaLabel,\n emailItemsHeader,\n emailingItemsLabel\n },\n config: { heading, contactNumber, shouldShowQrCode, showTimeslot }\n } = this.props;\n\n const moduleProps = { moduleProps: this.props, className: classname('ms-order-confirmation', this.props.config.className) };\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props?.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n let viewProps: IOrderConfirmationViewProps = {\n ...this.props,\n moduleProps,\n heading: heading && heading.text && (\n <Msdyn365.Text\n {...heading}\n className='ms-order-confirmation__heading'\n text={heading.text}\n tag={heading.tag || 'h2'}\n editProps={{ onEdit: this.handleOrderConfirmationHeadingChange, requestContext: this.props.context.request }}\n />\n ),\n backToShoppingLink: backToShoppingUrl && (\n <Button className='ms-order-confirmation__btn-keep-shopping' href={backToShoppingUrl} {...this.backToShoppingAttributes}>\n {backToShopping}\n </Button>\n ),\n footerProps: { className: 'ms-order-confirmation__footer' }\n };\n\n if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: <Label className='ms-order-confirmation__alert' label={genericErrorMessage} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!this.isDataReady) {\n viewProps = {\n ...viewProps,\n loading: <Label className='ms-order-confirmation__loading' label={loadingLabel} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!this.order) {\n viewProps = {\n ...viewProps,\n alert: <Label className='ms-order-confirmation__alert' label={noSalesOrderText} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n const isSalesInvoice = this.order.TransactionTypeValue === TransactionType.SalesInvoice;\n\n const salesLinesInput = getSalesLinesInput(\n this.props,\n this.moduleName,\n this.order,\n this.products,\n this.priceContext,\n true,\n showTimeslot,\n undefined,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig?.result,\n this.deliveryOptions\n );\n const salesLines = salesLinesInput && getSalesLines(salesLinesInput);\n const orderInformationInput = getOrderInformationInput(\n this.props,\n this.moduleName,\n this.order,\n this.priceContext,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined,\n isSalesInvoice,\n shouldShowQrCode ?? true\n );\n const orderInfomation = getOrderInformation(orderInformationInput);\n\n viewProps = {\n ...viewProps,\n salesOrder: this.order,\n orderInfomation,\n salesLines,\n groups:\n !isSalesInvoice && salesLines\n ? getGroups({\n moduleName: this.moduleName,\n salesLines,\n resources: {\n orderItemLabel,\n orderItemsLabel,\n pickupItemsHeader,\n pickingItemsLabel,\n shippingAddressTitle,\n shippingItemToYouLabel,\n shippingItemToOBOCustomerLabel,\n emailItemsHeader,\n emailingItemsLabel\n },\n showTimeslot,\n isConfirmationView: true,\n retailMultiplePickUpOptionEnabled,\n customerName: this.customerName,\n isOboRequest: Msdyn365.isOboRequest(this.props.context.request)\n })\n : undefined,\n orderSummary: !isSalesInvoice && this.orderSummaryProps ? getOrderConfirmationOrderSummary(this.orderSummaryProps) : undefined,\n payment: !isSalesInvoice && this.paymentMethodsProps ? getOrderConfirmationPaymentMethods(this.paymentMethodsProps) : undefined,\n help:\n !isSalesInvoice && contactNumber\n ? getOrderConfirmationHelp({\n needHelpLabel,\n helpLineNumberLabel,\n contactNumber,\n helpLineContactAriaLabel,\n telemetryContent: this.telemetryContent\n })\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleOrderConfirmationHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.heading!.text = event.target.value);\n\n private readonly getDeliveryMode = (\n salesLine: SalesLine,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n ) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === salesLine.DeliveryMode);\n };\n}\n\nexport default OrderConfirmation;\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 { IHelp, IOrderSummary, IPaymentMethods } from '../../common';\nimport { IGroup, IGroupDelivery, IGroups } from '../../common/get-groups';\nimport { IOrderInformation } from '../../common/get-order-information';\nimport { ISalesLine } from '../../common/get-sales-line';\nimport { IOrderConfirmationViewProps } from './order-confirmation';\n\nexport const OrderConfirmationOrderInfomation: React.FC<IOrderInformation> = ({\n orderInformationProps,\n receiptEmail,\n createdDate,\n channelReferenceId\n}) => (\n <Node {...orderInformationProps}>\n {createdDate}\n {channelReferenceId}\n {receiptEmail}\n </Node>\n);\n\nexport const OrderConfirmationSalesLine: React.FC<ISalesLine> = ({ salesLineProps, salesLine, buyAgainButton }) => (\n <Node {...salesLineProps}>{salesLine}</Node>\n);\n\nexport const OrderConfirmationGroupDelivery: React.FC<IGroupDelivery> = ({\n deliveryProps,\n heading,\n count,\n processing,\n address,\n trackingInfo,\n pickupDateTimeslot\n}) => (\n <Node {...deliveryProps}>\n {heading}\n {address}\n {pickupDateTimeslot}\n </Node>\n);\n\nexport const OrderConfirmationGroup: React.FC<IGroup> = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\n <Node {...groupProps}>\n {delivery && <OrderConfirmationGroupDelivery {...delivery} />}\n {delivery && delivery.shippingItemsToYou}\n {salesLines && (\n <Node {...salesLinesProps}>\n {salesLines.map((salesLine: ISalesLine) => (\n <OrderConfirmationSalesLine key={salesLine.data.salesLine.LineId} {...salesLine} />\n ))}\n </Node>\n )}\n </Node>\n);\n\nexport const OrderConfirmationGroups: React.FC<IGroups> = ({ groupsProps, groups }) => (\n <Node {...groupsProps}>\n {groups.map((group: IGroup, index: number) => (\n <OrderConfirmationGroup key={index} {...group} />\n ))}\n </Node>\n);\n\nexport const OrderConfirmationOrderSummary: React.FC<IOrderSummary> = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n <Node {...orderSummaryProps}>\n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n </Node>\n);\n\nexport const OrderConfirmationPayment: React.FC<IPaymentMethods> = ({ paymentMethodsProps, title, methods }) => (\n <Node {...paymentMethodsProps}>\n {title}\n {methods}\n </Node>\n);\n\nexport const OrderConfirmationHelp: React.FC<IHelp> = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n <Node {...helpProps}>\n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n </Node>\n);\n\nconst OrderConfirmationView: React.FC<IOrderConfirmationViewProps> = ({\n moduleProps,\n heading,\n backToShoppingLink,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n <Module {...moduleProps}>\n {heading}\n {alert}\n {loading}\n {orderInfomation && <OrderConfirmationOrderInfomation {...orderInfomation} />}\n {backToShoppingLink}\n {groups && <OrderConfirmationGroups {...groups} />}\n {payment && <OrderConfirmationPayment {...payment} />}\n {orderSummary && <OrderConfirmationOrderSummary {...orderSummary} />}\n {help && <OrderConfirmationHelp {...help} />}\n </Module>\n );\n};\n\nexport default OrderConfirmationView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IGetHelpInput, IHelp } from '../../../common';\n\nexport const getOrderDetailsHelp = ({\n needHelpLabel,\n helpLineNumberLabel,\n contactNumber,\n helpLineContactAriaLabel,\n telemetryContent\n}: IGetHelpInput): IHelp => {\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.ContactNumber);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return {\n helpProps: { className: 'ms-order-details__help' },\n needHelpLabel: <p className='ms-order-details__help-title'>{needHelpLabel}</p>,\n helpLineNumberLabel: <span className='ms-order-details__help-label'>{helpLineNumberLabel}</span>,\n contactNumber: (\n <a\n className='ms-order-details__help-content-number'\n aria-label={`${helpLineContactAriaLabel} ${contactNumber}`}\n href={`tel:${contactNumber}`}\n {...attributes}\n >\n {contactNumber}\n </a>\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 * as React from 'react';\n\nimport { IGetOrderSummaryInput, IOrderSummary, IPriceContext } from '../../../common';\n\ninterface ISummaryLineProps {\n priceContext?: IPriceContext;\n name: string;\n label: string;\n value?: number;\n priceCurrency?: string;\n}\n\nconst OrderSummaryLine: React.SFC<ISummaryLineProps> = ({ name, label, value = 0, priceContext, priceCurrency }) => (\n <p className={`ms-order-details__order-summary-line-${name}`}>\n <span className='ms-order-details__order-summary-label'>{label}</span>\n {priceContext ? (\n <PriceComponent\n {...priceContext}\n className='ms-order-details__order-summary-price'\n data={{ price: { CustomerContextualPrice: value } }}\n currencyCode={priceCurrency}\n />\n ) : (\n <span className='ms-order-details__order-summary-price'>{value}</span>\n )}\n </p>\n);\n\nexport const getOrderDetailsOrderSummary = ({\n order,\n priceContext,\n earnedPoints,\n resource: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n orderSummaryGrandTotalLabel,\n pointsEarnedLabel\n },\n canShip,\n isTaxIncludedInPrice,\n isShowTaxBreakUp\n}: IGetOrderSummaryInput): IOrderSummary => {\n const subTotal = isTaxIncludedInPrice && isShowTaxBreakUp ? order.SubtotalAmountWithoutTax : order.SubtotalAmount;\n const taxOnShippingCharge = order.TaxOnShippingCharge !== undefined ? order.TaxOnShippingCharge : 0;\n const shippingChargeAmount = order.ShippingChargeAmount !== undefined ? order.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n const shippingCharge =\n isTaxIncludedInPrice && !isShowTaxBreakUp ? shippingChargeAmount + taxOnShippingCharge : order.ShippingChargeAmount;\n return {\n orderSummaryProps: { className: 'ms-order-details__order-summary' },\n heading: <p className='ms-order-details__order-summary-heading'>{orderSummaryHeading}</p>,\n subtotal: (\n <OrderSummaryLine\n name='subtotal'\n label={orderSummaryItemsTotalLabel}\n value={subTotal}\n priceContext={priceContext}\n priceCurrency={order.CurrencyCode}\n />\n ),\n shipping: canShip ? (\n <OrderSummaryLine\n name='shipping'\n label={orderSummaryShippingFeeLabel}\n value={shippingCharge}\n priceContext={priceContext}\n priceCurrency={order.CurrencyCode}\n />\n ) : (\n ''\n ),\n tax: isShowTaxBreakUp ? (\n <OrderSummaryLine\n name='tax-amount'\n label={orderSummaryTaxLabel}\n value={order.TaxAmount}\n priceContext={priceContext}\n priceCurrency={order.CurrencyCode}\n />\n ) : (\n ''\n ),\n totalAmount: (\n <OrderSummaryLine\n name='total-amount'\n label={orderSummaryGrandTotalLabel}\n value={order.TotalAmount}\n priceContext={priceContext}\n priceCurrency={order.CurrencyCode}\n />\n ),\n earnedPoints: earnedPoints ? <OrderSummaryLine name='earned-points' label={pointsEarnedLabel} value={earnedPoints} /> : undefined\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { TenderLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport * as React from 'react';\n\nimport { IPaymentMethods, IPaymentMethodsInput } from '../../../common';\n\nexport const getOrderDetailsPaymentMethods = ({\n priceContext,\n tenderLines,\n tenderIdOperationIdMap,\n resource: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n loyaltyCardUsedLabel,\n cashUsedLabel,\n customerAccountUsedLabel\n },\n priceCurrency\n}: IPaymentMethodsInput): IPaymentMethods => {\n const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCash: 200,\n PayCustomerAccount: 202\n };\n\n const getLastFourDigit = (digits = '') => (digits ? digits.substr(-4) : '');\n\n const getCard = (tenderLine: TenderLine, showAmount: boolean = false) => {\n const cardLastFourDigit = getLastFourDigit(tenderLine.MaskedCardNumber);\n\n // @ts-expect-error\n const isValidCardNumber = cardLastFourDigit && !isNaN(cardLastFourDigit);\n const amount = (tenderLine.AuthorizedAmount || 0) > 0 ? tenderLine.AuthorizedAmount : tenderLine.Amount;\n const showAmountCovered = !!(showAmount && amount && amount > 0);\n\n return (\n <div className='ms-order-details__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-details__payment-methods-card'>\n {`${tenderLine.CardTypeId} ${isValidCardNumber ? `${creditCardEndingLabel} ${cardLastFourDigit}` : ''}`}\n </p>\n {showAmountCovered && (\n <p className='ms-order-details__payment-methods-card-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-details__payment-methods-card-amount'\n data={{ price: { CustomerContextualPrice: amount || 0 } }}\n currencyCode={priceCurrency}\n />\n </p>\n )}\n </div>\n );\n };\n\n const getCustomerAccountPayment = (tenderLine: TenderLine) => (\n <div className='ms-order-details__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-details__payment-methods-customer-account'>\n {customerAccountUsedLabel}\n {` `}\n {tenderLine.CustomerId}\n </p>\n <p className='ms-order-details__payment-methods-customer-account-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-details__payment-methods-customer-account-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount || 0 } }}\n currencyCode={priceCurrency}\n />\n </p>\n </div>\n );\n\n const getGiftCertificate = (tenderLine: TenderLine) => (\n <div className='ms-order-details__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-details__payment-methods-gift-card-number'>\n {giftCardEndingLabel}\n {` `}\n {getLastFourDigit(tenderLine.GiftCardId)}\n </p>\n <p className='ms-order-details__payment-methods-gift-card-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-details__payment-methods-gift-card-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount || 0 } }}\n currencyCode={priceCurrency}\n />\n </p>\n </div>\n );\n\n const getLoyalty = (tenderLine: TenderLine) => (\n <div className='ms-order-details__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-details__payment-methods-loyalty-number'>\n {loyaltyCardUsedLabel}\n {` `}\n {tenderLine.LoyaltyCardId}\n </p>\n <p className='ms-order-details__payment-methods-loyalty-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-details__payment-methods-loyalty-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount || 0 } }}\n currencyCode={priceCurrency}\n />\n </p>\n </div>\n );\n\n const getCash = (tenderLine: TenderLine) => (\n <div className='ms-order-details__payment-methods-line' key={tenderLine.TenderTypeId}>\n <p className='ms-order-details__payment-methods-cash'>{cashUsedLabel}</p>\n <p className='ms-order-details__payment-methods-cash-amount-info'>\n {amountCoveredLabel}\n <PriceComponent\n {...priceContext}\n className='ms-order-details__payment-methods-cash-amount'\n data={{ price: { CustomerContextualPrice: tenderLine.Amount || 0 } }}\n currencyCode={priceCurrency}\n />\n </p>\n </div>\n );\n\n return {\n paymentMethodsProps: { className: 'ms-order-details__payment-methods' },\n title: <div className='ms-order-details__payment-methods-title'>{paymentMethodsTitle}</div>,\n methods: tenderLines.reduce((lines: React.ReactNode[], tenderLine) => {\n if (!tenderLine.TenderTypeId) {\n return lines;\n }\n switch (tenderIdOperationIdMap[tenderLine.TenderTypeId]) {\n case OPERATIONS.PayCard:\n lines.push(getCard(tenderLine, tenderLines.length > 1));\n break;\n case OPERATIONS.PayGiftCertificate:\n lines.push(getGiftCertificate(tenderLine));\n break;\n case OPERATIONS.PayLoyalty:\n lines.push(getLoyalty(tenderLine));\n break;\n case OPERATIONS.PayCash:\n lines.push(getCash(tenderLine));\n break;\n case OPERATIONS.PayCustomerAccount:\n lines.push(getCustomerAccountPayment(tenderLine));\n break;\n default:\n\n // Do nothing\n }\n return lines;\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 { IAny, IComponentProps, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Resources which are used in order details header.\n */\nexport interface IOrderDetailsTableHeaderResources {\n orderDetailsProductNumberText: string;\n orderDetailsProductText: string;\n orderDetailsUnitPriceText: string;\n orderDetailsModeOfDeliveryText: string;\n orderDetailsStatusText: string;\n orderDetailsQuantityText: string;\n orderDetailsUnitOfMeasureText: string;\n orderDetailsTotalText: string;\n orderDetailsActionsText: string;\n orderDetailsSelectAllRadioAriaLabelText: string;\n orderDetailsConfirmedShipDateTextForTableHeader: string;\n orderDetailsRequestDeliveryDateTextForTableHeader: string;\n orderDetailsAddressTextForTableHeader: string;\n}\n\n/**\n * Configuration of the component.\n */\nexport interface IOrderDetailsTableHeaderProps extends IComponentProps {\n context: ICoreContext<IGeneric<IAny>>;\n className: string;\n\n resources: IOrderDetailsTableHeaderResources;\n\n isCashAndCarryTransaction: boolean;\n isSelectedAll: boolean;\n isSelectionModeEnabled: boolean;\n isChannelMultipleCatalogsFeatureEnabled?: boolean;\n onSelectAll(isSelected: boolean): void;\n confirmedShipDateAvailable?: boolean;\n}\n\n/**\n * Renders checkbox for order details lines selection.\n * @param props - Order detail table header props.\n * @returns React element.\n */\nconst OrderDetailsHeaderCheckboxComponent: React.FC<IOrderDetailsTableHeaderProps> = (props: IOrderDetailsTableHeaderProps) => {\n const switchCheckedState = React.useCallback(() => {\n props.onSelectAll(!props.isSelectedAll);\n }, [props]);\n\n return (\n <label className={classnames(`${props.className}__checkbox-container`, 'checkbox-container')}>\n <input\n className={classnames(`${props.className}__checkbox-input`, 'checkbox-input')}\n type='checkbox'\n aria-label={props.resources.orderDetailsSelectAllRadioAriaLabelText}\n aria-checked={props.isSelectedAll}\n checked={props.isSelectedAll}\n onChange={switchCheckedState}\n />\n <span className={classnames(`${props.className}__checkmark`, 'checkmark')} />\n </label>\n );\n};\n\n/**\n * Renders desktop view cells.\n * @param props - Configuration of the module.\n * @returns List of cells for the header.\n */\nconst OrderDetailsDesktopHeaderCellsComponent: React.FC<IOrderDetailsTableHeaderProps> = (props: IOrderDetailsTableHeaderProps) => {\n const { resources } = props;\n\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const shouldDisplayUnitOfMeasure =\n props.context.app.config.unitOfMeasureDisplayType && props.context.app.config.unitOfMeasureDisplayType !== 'none';\n\n return (\n <>\n {props.isSelectionModeEnabled ? (\n <th>\n <OrderDetailsHeaderCheckboxComponent {...props} />\n </th>\n ) : (\n undefined\n )}\n <th />\n <th>{resources.orderDetailsProductNumberText}</th>\n <th>{resources.orderDetailsProductText}</th>\n <th className={columnWithNumberClassName}>{resources.orderDetailsUnitPriceText}</th>\n <th>{resources.orderDetailsModeOfDeliveryText}</th>\n {props.isCashAndCarryTransaction ? undefined : <th>{resources.orderDetailsStatusText}</th>}\n <th className={columnWithNumberClassName}>{resources.orderDetailsQuantityText}</th>\n {shouldDisplayUnitOfMeasure && <th>{resources.orderDetailsUnitOfMeasureText}</th>}\n\n <th className={columnWithNumberClassName}>{resources.orderDetailsTotalText}</th>\n <th className={columnWithNumberClassName}>{resources.orderDetailsConfirmedShipDateTextForTableHeader}</th>\n <th className={columnWithNumberClassName}>{resources.orderDetailsRequestDeliveryDateTextForTableHeader}</th>\n <th className={columnWithNumberClassName}>{resources.orderDetailsAddressTextForTableHeader}</th>\n <th>{resources.orderDetailsActionsText}</th>\n </>\n );\n};\n\n/**\n * Renders mobile view cells.\n * @param props - Configuration of the module.\n * @returns List of cells for the header.\n */\nconst OrderDetailsMobileHeaderCellsComponent: React.FC<IOrderDetailsTableHeaderProps> = (props: IOrderDetailsTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n {props.isSelectionModeEnabled ? (\n <th>\n <OrderDetailsHeaderCheckboxComponent {...props} />\n </th>\n ) : (\n undefined\n )}\n <th />\n <th className={`${props.className}__row`}>{resources.orderDetailsProductText}</th>\n </>\n );\n};\n\n/**\n * Order details table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const OrderDetailsTableHeaderComponent: React.FC<IOrderDetailsTableHeaderProps> = (props: IOrderDetailsTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n if (isMobileView) {\n headerCells = <OrderDetailsMobileHeaderCellsComponent {...props} />;\n } else {\n headerCells = <OrderDetailsDesktopHeaderCellsComponent {...props} />;\n }\n\n return (\n <thead className={props.className}>\n <tr className={rowClassName}>{headerCells}</tr>\n </thead>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n IComponentProps,\n ICoreContext,\n IDateFormatOptions,\n IGeneric,\n IImageSettings,\n Image,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ChannelDeliveryOptionConfiguration, format, ProductDeliveryOptions, SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { BuySelectedComponent } from '../../../../../common/buy-selected-component';\nimport { ViewTrackingButton } from '../../view-tracking-button';\nimport {\n getDeliveryDescriptionByProductId,\n getDeliveryType,\n getDeliveryTypeString,\n IDeliveryTypeStringMap,\n ISalesStatusStringMap\n} from '../../../../../common/get-sales-line';\nimport { defaultImageSettings, getSalesStatusCode } from '../../../../../common/utilities';\n\n/**\n * Data required to render each order details row.\n */\nexport interface IOrderDetailsTableRowData {\n salesOrder: SalesOrder;\n product: OrderDetailsProduct;\n deliveryOptions: ProductDeliveryOptions[];\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n}\n\n/**\n * Resources for order details table rows.\n */\nexport interface IOrderDetailsTableRowResources {\n orderDetailsProductDimensionsSeparator: string;\n orderDetailsQuantityMobileText: string;\n orderDetailsViewDetailsButtonText: string;\n orderDetailsViewDetailsButtonAriaLabel: string;\n pickedUpSalesLines: string;\n deliveredSalesLines: string;\n carryOutSalesLines: string;\n emailSalesLines: string;\n orderStatusReadyForPickup: string;\n orderStatusProcessing: string;\n orderStatusShipped: string;\n orderStatusPickedUp: string;\n orderStatusCanceled: string;\n orderStatusEmailed: string;\n\n orderDetailsSelectRadioAriaLabelText: string;\n\n orderDetailsBuyItAgainButtonText: string;\n orderDetailsBuyItAgainButtonAriaLabel: string;\n orderDetailsBuySelectedAddingToCartErrorNotificationTitle: string;\n orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel: string;\n orderDetailsUnavailableProductText?: string;\n viewTrackingButtonLabel?: string;\n}\n\n/**\n * Configuration for the order details rows.\n */\nexport interface IOrderDetailsTableRowProps extends IComponentProps<IOrderDetailsTableRowData> {\n context: ICoreContext<IGeneric<IAny>>;\n className: string;\n\n imageSettings?: IImageSettings;\n isCashAndCarryTransaction: boolean;\n isReorderingEnabled?: boolean;\n isRetailMultiplePickUpOptionEnabled?: boolean;\n isSelectionModeEnabled: boolean;\n\n resources: IOrderDetailsTableRowResources;\n isChannelMultipleCatalogsFeatureEnabled?: boolean;\n orderDetailsReferences?: React.RefObject<HTMLButtonElement>;\n isExtraButtonDialogViewEnabled?: boolean;\n}\n\n/**\n * Formats amount.\n * @param context - Core context.\n * @param amount - Amount to display.\n * @param currencyCode - Currency for the amount.\n * @returns String value.\n */\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\n if (amount === undefined) {\n return '';\n }\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\n};\n\n/**\n * Renders checkbox for order details line selection.\n * @param props - Order detail table row props.\n * @returns React element.\n */\nconst OrderDetailsRowCheckboxComponent: React.FC<IOrderDetailsTableRowProps> = (props: IOrderDetailsTableRowProps) => {\n const product = props.data.product;\n\n const checkboxRowAriaLabel = format(props.resources.orderDetailsSelectRadioAriaLabelText, product.salesLine.ProductId);\n const onSelectLine = React.useCallback(() => {\n product.isSelected = !product.isSelected;\n }, [product]);\n\n return (\n <label className={classnames(`${props.className}__checkbox-container`, 'checkbox-container')}>\n <input\n className={classnames(`${props.className}__checkbox-input`, 'checkbox-input')}\n type='checkbox'\n checked={product.isProductAvailable && product.isSelected}\n aria-label={checkboxRowAriaLabel}\n aria-checked={product.isProductAvailable && product.isSelected}\n onChange={onSelectLine}\n disabled={!product.isProductAvailable}\n />\n <span className={classnames(`${props.className}__checkmark`, 'checkmark')} />\n </label>\n );\n};\n\n/**\n * Renders product image for order details line.\n * @param props - Order detail table row props.\n * @returns React element.\n */\nconst OrderDetailsRowProductImageComponent: React.FC<IOrderDetailsTableRowProps> = (props: IOrderDetailsTableRowProps) => {\n const product = props.data.product;\n const fallbackImageUrl = getFallbackImageUrl(\n product.simpleProduct?.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n const productName = product.simpleProduct?.Name ?? product.salesLine.Description;\n\n return (\n <div className={containerClassName}>\n <Image\n requestContext={props.context.actionContext.requestContext}\n className={`${containerClassName}__product-image`}\n altText={productName}\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Need to set empty by default.\n src={product.simpleProduct?.PrimaryImageUrl || 'empty'}\n fallBackSrc={fallbackImageUrl}\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.imageSettings ?? defaultImageSettings}\n loadFailureBehavior='empty'\n />\n </div>\n );\n};\n\n/**\n * Renders rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of order details rows for desktop view.\n */\nexport const OrderDetailsDesktopTableRowCellComponent: React.FC<IOrderDetailsTableRowProps> = (props: IOrderDetailsTableRowProps) => {\n const {\n data: { product, salesOrder, deliveryOptions }\n } = props;\n const salesLine = product.salesLine;\n\n const pickupMode = getDeliveryDescriptionByProductId(salesLine.ProductId, salesLine.DeliveryMode, deliveryOptions);\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const emailDeliveryModeCode = props.context.request.channel?.EmailDeliveryModeCode;\n const deliveryType = getDeliveryType(\n pickupMode,\n salesLine,\n salesLine.DeliveryMode,\n pickupDeliveryModeCode,\n props.isRetailMultiplePickUpOptionEnabled,\n props.data.channelDeliveryOptionConfig,\n emailDeliveryModeCode\n );\n const deliveryTypeStringMap: IDeliveryTypeStringMap = {\n pickUp: props.resources.pickedUpSalesLines,\n ship: props.resources.deliveredSalesLines,\n carryOut: props.resources.carryOutSalesLines,\n email: props.resources.emailSalesLines\n };\n const deliveryTypeString = getDeliveryTypeString(deliveryType, deliveryTypeStringMap, props.isRetailMultiplePickUpOptionEnabled);\n\n const salesStatusStringMap: ISalesStatusStringMap = {\n canceled: props.resources.orderStatusCanceled,\n readyForPickup: props.resources.orderStatusReadyForPickup,\n pickedUp: props.resources.orderStatusPickedUp,\n processing: props.resources.orderStatusProcessing,\n shipped: props.resources.orderStatusShipped,\n unknown: undefined,\n emailed: props.resources.orderStatusEmailed\n };\n\n const salesStatus = getSalesStatusCode(deliveryType, salesLine.SalesStatusValue, pickupMode);\n const salesStatusString = salesStatusStringMap[salesStatus];\n\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n\n const productName = product.simpleProduct?.Name ?? salesLine.Description;\n\n let productUrl = '';\n if (!ObjectExtensions.isNullOrUndefined(productName) && !ObjectExtensions.isNullOrUndefined(salesLine.ProductId)) {\n productUrl = getProductPageUrlSync(productName, salesLine.ProductId, props.context.actionContext);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${salesLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const shouldDisplayUnitOfMeasure =\n props.context.app.config.unitOfMeasureDisplayType && props.context.app.config.unitOfMeasureDisplayType !== 'none';\n\n const formatDate = (context: ICoreContext, date: Date | undefined) => {\n if (date === undefined) {\n return '';\n }\n\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'long', day: 'numeric' };\n return context.cultureFormatter.formatDate(date, dateOptions);\n };\n\n const confirmedShipDateAvailable = salesLine.ConfirmedShipDate === undefined || salesLine.ConfirmedShipDate === null;\n const requestDeliveryDateAvailable = salesLine.RequestedDeliveryDate === undefined || salesLine.RequestedDeliveryDate === null;\n\n const currentProduct = new OrderDetailsProduct(product.salesLine, product.simpleProduct, productUrl);\n\n const defaultConfirmedShipDateLabelValue = '-';\n\n return (\n <>\n {props.isSelectionModeEnabled ? (\n <td>\n <OrderDetailsRowCheckboxComponent {...props} />\n </td>\n ) : (\n undefined\n )}\n <td>\n <OrderDetailsRowProductImageComponent {...props} />\n </td>\n <td>{salesLine.ItemId}</td>\n <td>\n <div className={`${props.className}__product-info`}>\n <a className={`${props.className}__product-name`} href={productUrl}>\n {productName}\n </a>\n <span className={`${props.className}__product-dimensions`}>\n {product.simpleProduct?.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.orderDetailsProductDimensionsSeparator)}\n </span>\n {!product.isProductAvailable && (\n <div className='msc-alert-danger'>{props.resources.orderDetailsUnavailableProductText}</div>\n )}\n </div>\n </td>\n <td className={columnWithNumberClassName}>{formatAmount(props.context, salesLine.Price, salesOrder.CurrencyCode)}</td>\n <td>{deliveryTypeString}</td>\n {props.isCashAndCarryTransaction ? undefined : <td>{salesStatusString}</td>}\n <td className={columnWithNumberClassName}>{salesLine.Quantity}</td>\n {shouldDisplayUnitOfMeasure && <td>{salesLine.UnitOfMeasureSymbol}</td>}\n\n <td className={columnWithNumberClassName}>{formatAmount(props.context, salesLine.TotalAmount, salesOrder.CurrencyCode)}</td>\n <td className={columnWithNumberClassName}>\n {!confirmedShipDateAvailable ? formatDate(props.context, salesLine.ConfirmedShipDate) : defaultConfirmedShipDateLabelValue}\n </td>\n <td className={columnWithNumberClassName}>\n {!requestDeliveryDateAvailable\n ? formatDate(props.context, salesLine.RequestedDeliveryDate)\n : defaultConfirmedShipDateLabelValue}\n </td>\n <td>{salesLine.ShippingAddress?.FullAddress}</td>\n {!props.isExtraButtonDialogViewEnabled ? (\n <td>\n <BuySelectedComponent\n {...props}\n className={`${props.className}__buy-again msc-btn`}\n data={{ products: [currentProduct] }}\n resources={{\n ...props.resources,\n orderDetailsBuySelectedButtonText: props.resources.orderDetailsBuyItAgainButtonText,\n orderDetailsBuySelectedButtonAriaLabel: format(\n props.resources.orderDetailsBuyItAgainButtonAriaLabel,\n productName ?? ''\n )\n }}\n isReorderingEnabled={props.isReorderingEnabled}\n isIcon\n />\n </td>\n ) : (\n <td>\n <OrderDetailsDesktopExtraActionsPopupComponent {...props} />\n </td>\n )}\n </>\n );\n};\n\nlet setShowPreviousActions: React.Dispatch<React.SetStateAction<boolean>> | undefined;\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst OrderDetailsExtraActionsPopupComponent: React.FC<IOrderDetailsTableRowProps> = (\n props: IOrderDetailsTableRowProps\n): JSX.Element | null => {\n const {\n resources: { orderDetailsViewDetailsButtonAriaLabel, orderDetailsViewDetailsButtonText }\n } = props;\n\n const [shouldShowActions, setShowActions] = useState(false);\n\n const salesLine = props.data.product.salesLine;\n\n const productName = props.data.product.simpleProduct?.Name ?? salesLine.Description;\n let productUrl = '';\n if (!ObjectExtensions.isNullOrUndefined(productName) && !ObjectExtensions.isNullOrUndefined(salesLine.ProductId)) {\n productUrl = getProductPageUrlSync(productName, salesLine.ProductId, props.context.actionContext);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${salesLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n }\n const currentProduct = new OrderDetailsProduct(props.data.product.salesLine, props.data.product.simpleProduct, productUrl);\n\n const onClickViewDetails = React.useCallback(() => {\n if (MsDyn365.isBrowser) {\n window.location.href = productUrl;\n }\n }, [productUrl]);\n\n const toggle = React.useCallback(() => {\n const shouldShowActionsNewValue = !shouldShowActions;\n if (shouldShowActionsNewValue) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActionsNewValue);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActionsNewValue);\n }\n }, [shouldShowActions, setShowActions]);\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n\n return (\n <div className={className}>\n <Button className={`${className}__toggle`} onClick={toggle} />\n {shouldShowActions && (\n <div className={actionsContainerClassName}>\n <Button\n className={`${actionsContainerClassName}__view-details`}\n onClick={onClickViewDetails}\n aria-label={orderDetailsViewDetailsButtonAriaLabel}\n >\n {orderDetailsViewDetailsButtonText}\n </Button>\n <BuySelectedComponent\n {...props}\n className={`${actionsContainerClassName}__buy-again`}\n data={{ products: [currentProduct] }}\n resources={{\n ...props.resources,\n orderDetailsBuySelectedButtonText: props.resources.orderDetailsBuyItAgainButtonText,\n orderDetailsBuySelectedButtonAriaLabel: format(\n props.resources.orderDetailsBuyItAgainButtonAriaLabel,\n productName ?? ''\n )\n }}\n isReorderingEnabled={props.isReorderingEnabled}\n />\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst OrderDetailsDesktopExtraActionsPopupComponent: React.FC<IOrderDetailsTableRowProps> = (\n props: IOrderDetailsTableRowProps\n): JSX.Element | null => {\n const [shouldShowActions, setShowActions] = useState(false);\n\n const salesLine = props.data.product.salesLine;\n\n const productName = props.data.product.simpleProduct?.Name ?? salesLine.Description;\n let productUrl = '';\n if (!ObjectExtensions.isNullOrUndefined(productName) && !ObjectExtensions.isNullOrUndefined(salesLine.ProductId)) {\n productUrl = getProductPageUrlSync(productName, salesLine.ProductId, props.context.actionContext);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${salesLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n }\n const currentProduct = new OrderDetailsProduct(props.data.product.salesLine, props.data.product.simpleProduct, productUrl);\n\n /**\n * Request specific invoice function.\n * @param props -Invoice table row props.\n * @param requestInvoiceButtonReference -Reference button.\n * @returns Call Request Invoice.\n */\n const onViewTrackingClick = (\n props: IOrderDetailsTableRowProps,\n requestInvoiceButtonReference: React.RefObject<HTMLButtonElement>,\n setShowActions: React.Dispatch<React.SetStateAction<boolean>>\n ) => () => {\n setShowActions(false);\n };\n\n const toggle = React.useCallback(() => {\n const shouldShowActionsNewValue = !shouldShowActions;\n if (shouldShowActionsNewValue) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActionsNewValue);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActionsNewValue);\n }\n }, [shouldShowActions, setShowActions]);\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__desktop-extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n\n return (\n <div className={className}>\n <Button className={`${className}__toggle`} onClick={toggle} />\n {shouldShowActions && (\n <div className={actionsContainerClassName}>\n <BuySelectedComponent\n {...props}\n className={`${actionsContainerClassName}__row-buy-again`}\n data={{ products: [currentProduct] }}\n resources={{\n ...props.resources,\n orderDetailsBuySelectedButtonText: props.resources.orderDetailsBuyItAgainButtonText,\n orderDetailsBuySelectedButtonAriaLabel: format(\n props.resources.orderDetailsBuyItAgainButtonAriaLabel,\n productName ?? ''\n )\n }}\n isReorderingEnabled={props.isReorderingEnabled}\n />\n <ViewTrackingButton\n innerReference={props.orderDetailsReferences}\n className={actionsContainerClassName}\n viewTrackingButtonLabel={props.resources.viewTrackingButtonLabel}\n onClicked={onViewTrackingClick(props, props.orderDetailsReferences!, setShowActions)}\n />\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of order details rows for mobile view.\n */\nexport const OrderDetailsMobileTableRowCellComponent: React.FC<IOrderDetailsTableRowProps> = (props: IOrderDetailsTableRowProps) => {\n const {\n data: { product }\n } = props;\n const salesLine = product.salesLine;\n const productName = product.simpleProduct?.Name ?? salesLine.Description;\n\n return (\n <>\n {props.isSelectionModeEnabled ? (\n <td>\n <OrderDetailsRowCheckboxComponent {...props} />\n </td>\n ) : (\n undefined\n )}\n <td>\n <OrderDetailsRowProductImageComponent {...props} />\n </td>\n <td>\n <div className={`${props.className}__product-info`}>\n <span className={`${props.className}__product-name`}>{productName}</span>\n <span className={`${props.className}__product-quantity`}>\n {format(props.resources.orderDetailsQuantityMobileText, salesLine.Quantity)}\n </span>\n </div>\n </td>\n <td>\n <OrderDetailsExtraActionsPopupComponent {...props} />\n </td>\n </>\n );\n};\n\n/**\n * Renders order details rows.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of order details rows.\n */\nexport const OrderDetailsTableRowComponent: React.FC<IOrderDetailsTableRowProps> = (props: IOrderDetailsTableRowProps) => {\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n const className = classnames(\n props.className,\n props.data.product.isProductAvailable ? `${props.className}__available-product` : `${props.className}__unavailable-product`,\n props.className,\n props.data.product.isSelected ? `${props.className}__selected` : `${props.className}__unselected`\n );\n\n return (\n <tr className={className}>\n {isMobileView ? (\n <OrderDetailsMobileTableRowCellComponent {...props} />\n ) : (\n <OrderDetailsDesktopTableRowCellComponent {...props} />\n )}\n </tr>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ChannelDeliveryOptionConfiguration, ProductDeliveryOptions, SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\nimport { IOrderDetailsTableHeaderResources, OrderDetailsTableHeaderComponent } from './components/order-details-table-header-component';\nimport { IOrderDetailsTableRowResources, OrderDetailsTableRowComponent } from './components/order-details-table-row-component';\n\n/**\n * Interface with the data required for order details.\n */\nexport interface IOrderDetailsTableData {\n order: SalesOrder;\n products: OrderDetailsProduct[];\n deliveryOptions: ProductDeliveryOptions[];\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n}\n\n/**\n * Resources needed to render order details table.\n */\nexport interface IOrderDetailsTableResources extends IOrderDetailsTableHeaderResources, IOrderDetailsTableRowResources {}\n\n/**\n * Configuration of order details table.\n */\nexport interface IOrderDetailsTableProps extends IComponentProps<IOrderDetailsTableData> {\n context: ICoreContext;\n className: string;\n\n imageSettings?: IImageSettings;\n isCashAndCarryTransaction: boolean;\n isReorderingEnabled?: boolean;\n isRetailMultiplePickUpOptionEnabled?: boolean;\n isSelectionModeEnabled: boolean;\n\n resources: IOrderDetailsTableResources;\n isChannelMultipleCatalogsFeatureEnabled?: boolean;\n isExtraButtonDialogViewEnabled?: boolean;\n}\n\n/**\n * On select all function.\n * @param props - Invoice table props.\n * @returns On change.\n */\nconst onSelectAllHandler = (props: IOrderDetailsTableProps) => (isSelected: boolean) => {\n for (const product of props.data.products) {\n product.isSelected = isSelected;\n }\n};\n\n/**\n * Renders order details table.\n * @param props - Configuration for order details table.\n * @returns React node with the table.\n */\nexport const OrderDetailsTableComponent: React.FC<IOrderDetailsTableProps> = (props: IOrderDetailsTableProps) => {\n const rowClassName = `${props.className}__row`;\n const headerClassName = `${props.className}__header`;\n const products = props.data.products;\n const availableProducts = products.filter(product => product.isProductAvailable);\n\n return (\n <table className={props.className}>\n <OrderDetailsTableHeaderComponent\n context={props.context}\n typeName={props.typeName}\n id={headerClassName}\n className={headerClassName}\n resources={props.resources}\n data={{}}\n isCashAndCarryTransaction={props.isCashAndCarryTransaction}\n isSelectionModeEnabled={props.isSelectionModeEnabled}\n isSelectedAll={ArrayExtensions.all(availableProducts, (product: OrderDetailsProduct) => product.isSelected)}\n onSelectAll={onSelectAllHandler(props)}\n isChannelMultipleCatalogsFeatureEnabled={props.isChannelMultipleCatalogsFeatureEnabled}\n />\n {products.map((product, index) => {\n return (\n <OrderDetailsTableRowComponent\n context={props.context}\n typeName={props.typeName}\n id={`${rowClassName}-${index}`}\n key={product.salesLine.ItemId}\n className={rowClassName}\n resources={props.resources}\n imageSettings={props.imageSettings}\n isCashAndCarryTransaction={props.isCashAndCarryTransaction}\n isReorderingEnabled={props.isReorderingEnabled}\n isRetailMultiplePickUpOptionEnabled={props.isRetailMultiplePickUpOptionEnabled}\n isSelectionModeEnabled={props.isSelectionModeEnabled}\n data={{\n salesOrder: props.data.order,\n product,\n deliveryOptions: props.data.deliveryOptions,\n channelDeliveryOptionConfig: props.data.channelDeliveryOptionConfig\n }}\n isChannelMultipleCatalogsFeatureEnabled={props.isChannelMultipleCatalogsFeatureEnabled}\n isExtraButtonDialogViewEnabled={props.isExtraButtonDialogViewEnabled}\n />\n );\n })}\n </table>\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 } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IViewTrackingButtonProps {\n innerReference?: React.RefObject<HTMLButtonElement>;\n className: string;\n viewTrackingButtonLabel?: string;\n onClicked(): void;\n}\n\nexport const ViewTrackingButton: React.FC<IViewTrackingButtonProps> = ({\n className,\n onClicked,\n viewTrackingButtonLabel,\n innerReference\n}) => {\n return (\n <Button className={`${className}__viewTrackingButton`} onClick={onClicked} innerRef={innerReference}>\n {viewTrackingButtonLabel}\n </Button>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport Msdyn365, { ContentEditableEvent, getUrlSync, isChannelTypeB2B, Text, isUserTypeB2B } from '@msdyn365-commerce/core';\nimport {\n ChannelDeliveryOptionConfiguration,\n FeatureState,\n LoyaltyRewardPoint,\n OrderOriginator,\n ProductCatalog,\n ProductDeliveryOptions,\n SalesLine,\n SalesOrder,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { BuySelectedComponent, IGetOrderSummaryInput, IHelp, IOrderSummary, IPaymentMethods, IPaymentMethodsInput } from '../../common';\nimport { getGroups, IGroups } from '../../common/get-groups';\nimport { getOrderInformation, getOrderInformationInput, IOrderInformation } from '../../common/get-order-information';\nimport { ISalesLine } from '../../common/get-sales-line';\nimport { getSalesLines, getSalesLinesInput } from '../../common/get-sales-lines';\nimport { Label } from '../../common/label';\nimport { getTenderIdOperationIdMap, IPriceContext } from '../../common/utilities';\nimport { getOrderDetailsHelp } from './components/get-help';\nimport { getOrderDetailsOrderSummary } from './components/get-order-summary';\nimport { getOrderDetailsPaymentMethods } from './components/get-payment-methods';\nimport { OrderDetailsTableComponent } from './components/table-view';\nimport { IOrderDetailsData } from './order-details.data';\nimport { addressOptions, IOrderDetailsProps } from './order-details.props.autogenerated';\n\n/**\n * Specifies different layouts for order details.\n */\nexport enum OrderDetailsViewMode {\n listView = 0,\n detailedView = 1\n}\n\nexport interface IOrderDetailsViewProps extends IOrderDetailsProps<IOrderDetailsData> {\n moduleProps: IModuleProps;\n tableViewActions?: React.ReactNode;\n viewModes?: React.ReactNode;\n table?: React.ReactNode;\n salesOrder?: SalesOrder;\n footerProps?: INodeProps;\n alert?: React.ReactNode;\n loading?: React.ReactNode;\n heading: React.ReactNode;\n placedBy?: React.ReactNode;\n backToShoppingLink?: React.ReactNode;\n orderInfomation?: IOrderInformation;\n salesLines?: ISalesLine[];\n groups?: IGroups;\n orderSummary?: IOrderSummary;\n payment?: IPaymentMethods;\n help?: IHelp;\n catalogs?: ProductCatalog[];\n}\n\n/**\n *\n * OrderDetails component.\n * @extends {React.PureComponent<IOrderDetailsProps<IOrderDetailsData>>}\n */\n@observer\nclass OrderDetails extends React.PureComponent<IOrderDetailsProps<IOrderDetailsData>> {\n @observable private _viewMode: OrderDetailsViewMode;\n\n @observable private _products: OrderDetailsProduct[];\n\n @observable private _isSelectionModeEnabled: boolean;\n\n private readonly moduleName: string = 'ms-order-details';\n\n private readonly multiplePickupStoreSwitchName: string = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n\n private readonly telemetryContent: ITelemetryContent;\n\n @computed get isCurrentChannel(): boolean {\n if (!this.order) {\n return false;\n }\n return this.order.ChannelId === get(this.props, 'context.request.apiSettings.channelId');\n }\n\n @computed get isDataReady(): boolean {\n return get(this.props, 'data.orderHydration.status') === 'SUCCESS';\n }\n\n @computed get hasError(): boolean {\n return get(this.props, 'data.orderHydration.status') === 'FAILED';\n }\n\n @computed get order(): SalesOrder | undefined {\n return get(this.props, 'data.orderHydration.result.salesOrder');\n }\n\n @computed get products(): SimpleProduct[] {\n return get(this.props, 'data.orderHydration.result.products') || [];\n }\n\n @computed get deliveryOptions(): ProductDeliveryOptions[] {\n return get(this.props, 'data.orderHydration.result.deliveryOptions') || [];\n }\n\n @computed get priceContext(): IPriceContext {\n const {\n id,\n typeName,\n context,\n telemetry,\n resources: { freePriceText }\n } = this.props;\n return {\n id,\n typeName,\n context,\n telemetry,\n freePriceText\n };\n }\n\n @computed get earnedPoints(): number {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n if (loyaltyCard && loyaltyCard.RewardPoints && this.order) {\n const pointPrograms = new Set(loyaltyCard.RewardPoints.map((point: LoyaltyRewardPoint) => point.RewardPointId));\n const rewardLines = this.order.LoyaltyRewardPointLines || [];\n let total = 0;\n rewardLines.forEach(line => {\n if ((line.RewardPointAmountQuantity || 0) > 0 && pointPrograms.has(line.RewardPointId)) {\n total += line.RewardPointAmountQuantity!;\n }\n });\n return total;\n }\n return 0;\n }\n\n @computed get orderSummaryProps(): IGetOrderSummaryInput | undefined {\n if (!this.order) {\n return;\n }\n const { request } = this.props.context;\n const { channelDeliveryOptionConfig, featureState } = this.props?.data;\n const isMultiplePickUpOptionEnabled = featureState?.result?.find(\n (item: FeatureState) => item.Name === this.multiplePickupStoreSwitchName\n )?.IsEnabled;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n const orderDetailsLines = this.order?.SalesLines;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const { salesId = '' } = request.query || {};\n const isCashAndCarryTransaction =\n (this.order.ChannelReferenceId === undefined || this.order.ChannelReferenceId === '') && salesId === '';\n\n const canShip =\n !isCashAndCarryTransaction &&\n orderDetailsLines?.some(orderDetailsLine =>\n orderDetailsLine.DeliveryMode && orderDetailsLine.DeliveryMode !== ''\n ? orderDetailsLine.DeliveryMode !==\n this.getDeliveryMode(\n orderDetailsLine,\n isMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig?.result,\n pickupDeliveryModeCode\n ) && orderDetailsLine.DeliveryMode !== emailDeliveryModeCode\n : orderDetailsLine\n );\n\n const {\n resources: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n orderSummaryGrandTotalLabel,\n pointsEarnedLabel\n }\n } = this.props;\n return {\n order: this.order,\n earnedPoints: this.earnedPoints,\n priceContext: this.priceContext,\n resource: {\n orderSummaryHeading,\n orderSummaryItemsTotalLabel,\n orderSummaryShippingFeeLabel,\n orderSummaryTaxLabel,\n pointsEarnedLabel,\n orderSummaryGrandTotalLabel\n },\n canShip,\n isTaxIncludedInPrice: this.order.IsTaxIncludedInPrice,\n isShowTaxBreakUp: isShowOrHideTaxEnabled\n };\n }\n\n @computed get paymentMethodsProps(): IPaymentMethodsInput | undefined {\n const tenderTypes = this.props.data.tenderTypes.result;\n if (!this.order || !this.order.TenderLines || !tenderTypes) {\n return;\n }\n\n const locale = get(this.props, 'context.request.locale') || 'en-US';\n\n const {\n resources: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel,\n customerAccountUsedLabel\n }\n } = this.props;\n\n return {\n priceContext: this.priceContext,\n tenderLines: this.order.TenderLines,\n tenderIdOperationIdMap: getTenderIdOperationIdMap(tenderTypes),\n locale,\n resource: {\n paymentMethodsTitle,\n creditCardEndingLabel,\n giftCardEndingLabel,\n amountCoveredLabel,\n cashUsedLabel,\n loyaltyCardUsedLabel,\n customerAccountUsedLabel\n },\n priceCurrency: this.order.CurrencyCode\n };\n }\n\n @computed\n private get _orderDetailsProducts(): OrderDetailsProduct[] {\n if (!ArrayExtensions.hasElements(this._products)) {\n this._initProductsModel();\n }\n\n return this._products;\n }\n\n @computed\n private get _orderDetailsAvailableProducts(): OrderDetailsProduct[] {\n if (!ArrayExtensions.hasElements(this._products)) {\n this._initProductsModel();\n }\n\n return this._products.filter(product => product.isProductAvailable);\n }\n\n @computed\n private get _selectedProducts(): OrderDetailsProduct[] {\n const products = this._orderDetailsAvailableProducts;\n const selectedProducts = products.filter(product => product.isSelected);\n if (!ArrayExtensions.hasElements(selectedProducts)) {\n return [];\n }\n\n return selectedProducts;\n }\n\n public constructor(props: IOrderDetailsProps<IOrderDetailsData>) {\n super(props);\n this._viewMode = OrderDetailsViewMode.detailedView;\n this._products = [];\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._isSelectionModeEnabled = false;\n }\n\n public render(): JSX.Element {\n const {\n resources: { noSalesOrderDetailsText, loadingLabel },\n config: { shouldShowQrCode, showChannelInfo, showTimeslot, isReorderingEnabled }\n } = this.props;\n\n const showFullAddress =\n this.props.config.addressOptions !== undefined &&\n this.props.config.addressOptions === addressOptions.showAddressWithMultiplelines;\n const channelIdentities = this.props.data.channels.result?.channelIdentities;\n const orgUnitLocations = this.props.data.orgUnitLocations.result?.orgUnitLocations;\n const customer = this.props.data.customerInformation && this.props.data.customerInformation.result;\n const originators = this.props.data.orderOriginators && this.props.data.orderOriginators.result;\n const originator: OrderOriginator | undefined = originators && originators.length === 1 ? originators[0] : undefined;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { channelDeliveryOptionConfig, featureState } = this.props.data;\n const isMultiplePickUpOptionEnabled = featureState.result?.find(\n (item: FeatureState) => item.Name === this.multiplePickupStoreSwitchName\n )?.IsEnabled;\n const isMultipleCatalogsFeatureEnabled = featureState.result?.find(\n (item: FeatureState) => item.Name === channelMultipleCatalogsFeature\n )?.IsEnabled;\n const { confirmationId = '', salesId = '', transactionId = '' } = this.props.context.actionContext.requestContext.query ?? {};\n\n const orderInformationInput =\n this.order &&\n getOrderInformationInput(\n this.props,\n this.moduleName,\n this.order,\n this.priceContext,\n channelIdentities,\n orgUnitLocations,\n customer,\n originator,\n showChannelInfo,\n false,\n shouldShowQrCode ?? true\n );\n\n const orderInformation =\n this._isSelectionModeEnabled || !orderInformationInput ? undefined : getOrderInformation(orderInformationInput);\n\n let viewProps: IOrderDetailsViewProps = this.getOrderDetailsProps();\n if (isUserTypeB2B(this.props.context.request) && orderInformationInput?.isOnlineStore && originator) {\n viewProps = {\n ...viewProps,\n placedBy: orderInformation?.placedBy\n };\n }\n\n if ((salesId || transactionId) && !this.props.context.actionContext.requestContext.user.isAuthenticated) {\n const signInUrl: string = this.props.context.actionContext.requestContext.user.signInUrl ?? '';\n if (Msdyn365.isBrowser) {\n window.location.assign(signInUrl);\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (this.hasError || !this.order) {\n if (((salesId || transactionId) && this.props.context.actionContext.requestContext.user.isAuthenticated) || confirmationId) {\n viewProps = {\n ...viewProps,\n alert: <Label className='ms-order-details__alert' label={noSalesOrderDetailsText} />\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!this.isDataReady) {\n viewProps = {\n ...viewProps,\n loading: <Label className='ms-order-details__loading' label={loadingLabel} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n const isEnabled = isReorderingEnabled && this.props.data.orderHydration.result?.isSameSiteType;\n\n const isCatalogFetaure = isMultipleCatalogsFeatureEnabled && isChannelTypeB2B(this.props.context.actionContext.requestContext);\n const salesLinesInput = getSalesLinesInput(\n this.props,\n this.moduleName,\n this.order,\n this.products,\n this.priceContext,\n showFullAddress,\n showTimeslot,\n this.telemetryContent,\n isMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig.result,\n this.deliveryOptions,\n this._isSelectionModeEnabled,\n this._orderDetailsProducts,\n isEnabled,\n isCatalogFetaure,\n this.props.data.catalogs?.result\n );\n const salesLines = salesLinesInput && getSalesLines(salesLinesInput);\n viewProps = {\n ...viewProps,\n salesOrder: this.order,\n orderInfomation: orderInformation,\n tableViewActions: this._renderTableViewActions(),\n viewModes: this._renderViewModes(),\n salesLines,\n table: this._renderOrderDetailsTable(),\n groups: this._renderOrderGroups(salesLines, isMultiplePickUpOptionEnabled),\n orderSummary: this._renderOrderSummary(),\n payment: this._renderOrderPayment(),\n help: this._renderOrderHelp()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleOrderDetailsHeadingChange = (event: ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Updates view mode to be list view.\n */\n private readonly _setListViewMode = () => {\n this._viewMode = OrderDetailsViewMode.listView;\n };\n\n /**\n * Updates view mode to be detailed view.\n */\n private readonly _setDetailedViewMode = () => {\n this._viewMode = OrderDetailsViewMode.detailedView;\n };\n\n /**\n * Renders order groups for order details.\n * @param salesLines - Sale lines.\n * @param isRetailMultiplePickUpOptionEnabled - Flag which specifies pick up options.\n * @returns A react node or undefined.\n */\n private readonly _renderOrderGroups = (\n salesLines: ISalesLine[] | undefined,\n isRetailMultiplePickUpOptionEnabled: boolean | undefined\n ) => {\n if (!salesLines || this._viewMode !== OrderDetailsViewMode.detailedView) {\n return undefined;\n }\n\n const { salesId = '' } = this.props.context.request.query ?? {};\n const shouldShowAddress =\n (this.props.config.addressOptions !== undefined &&\n this.props.config.addressOptions === addressOptions.showAddressWithSingleLine) ||\n this.props.config.addressOptions === addressOptions.showAddressWithMultiplelines;\n const isCashAndCarryTransaction =\n (this.order!.ChannelReferenceId === undefined || this.order!.ChannelReferenceId === '') && salesId === '';\n return getGroups({\n moduleName: this.moduleName,\n salesLines,\n resources: {\n orderItemLabel: this.props.resources.orderItemLabel,\n orderItemsLabel: this.props.resources.orderItemsLabel\n },\n showAddress: shouldShowAddress,\n showTimeslot: this.props.config.showTimeslot,\n retailMultiplePickUpOptionEnabled: isRetailMultiplePickUpOptionEnabled,\n isCashAndCarryTransaction,\n isSelectionModeEnabled: this._isSelectionModeEnabled && !this.props.data.orderHydration.result?.isSameSiteType\n });\n };\n\n /**\n * Renders order summary for order details.\n * @returns A react node or undefined.\n */\n private readonly _renderOrderSummary = () => {\n if (this.orderSummaryProps && this._viewMode === OrderDetailsViewMode.detailedView) {\n return getOrderDetailsOrderSummary(this.orderSummaryProps);\n }\n return undefined;\n };\n\n /**\n * Renders order payment info for order details.\n * @returns A react node or undefined.\n */\n private readonly _renderOrderPayment = () => {\n if (this.paymentMethodsProps && this._viewMode === OrderDetailsViewMode.detailedView) {\n return getOrderDetailsPaymentMethods(this.paymentMethodsProps);\n }\n return undefined;\n };\n\n /**\n * Renders order help info for order details.\n * @returns A react node or undefined.\n */\n private readonly _renderOrderHelp = () => {\n const {\n resources: { needHelpLabel, helpLineNumberLabel, helpLineContactAriaLabel },\n config: { contactNumber }\n } = this.props;\n\n if (contactNumber && this._viewMode === OrderDetailsViewMode.detailedView) {\n return getOrderDetailsHelp({\n needHelpLabel,\n helpLineNumberLabel,\n contactNumber,\n helpLineContactAriaLabel,\n telemetryContent: this.telemetryContent\n });\n }\n\n return undefined;\n };\n\n /**\n * Renders order details table view.\n * @returns A react node or undefined.\n */\n private readonly _renderOrderDetailsTable = () => {\n if (this._viewMode !== OrderDetailsViewMode.listView) {\n return undefined;\n }\n\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultiplePickUpOptionEnabled = featureState.result?.find(\n (item: FeatureState) => item.Name === this.multiplePickupStoreSwitchName\n )?.IsEnabled;\n const isMultipleCatalogsFeatureEnabled = featureState.result?.find(\n (item: FeatureState) => item.Name === channelMultipleCatalogsFeature\n )?.IsEnabled;\n const { salesId = '' } = this.props.context.request.query ?? {};\n const isCashAndCarryTransaction =\n (this.order!.ChannelReferenceId === undefined || this.order!.ChannelReferenceId === '') && salesId === '';\n const enableBuyAgain =\n this.props.data.orderHydration.result?.isSameSiteType === undefined\n ? true\n : this.props.data.orderHydration.result?.isSameSiteType;\n return (\n this.order && (\n <OrderDetailsTableComponent\n id={this.props.id}\n typeName={this.props.typeName}\n context={this.props.context}\n className='ms-order-details__table-list'\n imageSettings={this.props.config.imageSettings}\n isReorderingEnabled={this.props.config.isReorderingEnabled && enableBuyAgain}\n isExtraButtonDialogViewEnabled={this.props.config.isDialogGridEnabled}\n isRetailMultiplePickUpOptionEnabled={isMultiplePickUpOptionEnabled}\n isSelectionModeEnabled={this._isSelectionModeEnabled}\n isCashAndCarryTransaction={isCashAndCarryTransaction}\n data={{\n order: this.order,\n products: this._orderDetailsProducts,\n deliveryOptions: this.deliveryOptions,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig.result\n }}\n resources={this.props.resources}\n isChannelMultipleCatalogsFeatureEnabled={\n isMultipleCatalogsFeatureEnabled && isChannelTypeB2B(this.props.context.actionContext.requestContext)\n }\n />\n )\n );\n };\n\n /**\n * Switches to selection mode.\n */\n private readonly _enableSelection = () => {\n for (const product of this._orderDetailsAvailableProducts) {\n product.isSelected = true;\n }\n this._isSelectionModeEnabled = true;\n };\n\n /**\n * Disables selection mode.\n */\n private readonly _disableSelection = () => {\n this._isSelectionModeEnabled = false;\n };\n\n private _renderEnableSelectionButton(className: string): JSX.Element | undefined {\n if (this._isSelectionModeEnabled || !ArrayExtensions.hasElements(this._orderDetailsAvailableProducts)) {\n return undefined;\n }\n\n return (\n <Button\n className={`${className}__enable-selection`}\n onClick={this._enableSelection}\n aria-label={this.props.resources.orderDetailsEnableSelectionButtonAriaLabel}\n title={this.props.resources.orderDetailsEnableSelectionButtonText}\n disabled={!this.props.data.orderHydration.result?.isSameSiteType}\n >\n {this.props.resources.orderDetailsEnableSelectionButtonText}\n </Button>\n );\n }\n\n private _renderDisableSelectionButton(className: string): JSX.Element | undefined {\n if (!this._isSelectionModeEnabled) {\n return undefined;\n }\n\n return (\n <Button\n className={`${className}__disable-selection`}\n onClick={this._disableSelection}\n aria-label={this.props.resources.orderDetailsDisableSelectionButtonAriaLabel}\n title={this.props.resources.orderDetailsDisableSelectionButtonText}\n >\n {this.props.resources.orderDetailsDisableSelectionButtonText}\n </Button>\n );\n }\n\n private _renderBuySelected(className: string): JSX.Element | undefined {\n if (!this._isSelectionModeEnabled) {\n return undefined;\n }\n\n if (!this.props.data.orderHydration.result?.isSameSiteType) {\n return undefined;\n }\n\n return (\n <BuySelectedComponent\n className={`${className}__buy-selected msc-btn`}\n id={this.props.id}\n typeName={this.props.typeName}\n data={{ products: this._selectedProducts }}\n context={this.props.context}\n resources={this.props.resources}\n isReorderingEnabled={this.props.config.isReorderingEnabled}\n />\n );\n }\n\n /**\n * Renders actions for table view.\n * @returns A react node.\n */\n private readonly _renderTableViewActions = () => {\n if (!this.props.config.isReorderingEnabled) {\n return undefined;\n }\n\n const containerClassName = 'ms-order-details__table-view-actions';\n return (\n <div className={containerClassName}>\n {this._renderBuySelected(containerClassName)}\n {this._renderEnableSelectionButton(containerClassName)}\n {this._renderDisableSelectionButton(containerClassName)}\n </div>\n );\n };\n\n private _initProductsModel(): void {\n const orderDetailProducts = this.props.data.orderHydration.result?.salesOrder.SalesLines?.map(salesLine => {\n const salesOrderProduct = this.props.data.orderHydration.result?.products.find(\n product => product.RecordId === salesLine.ProductId\n );\n return new OrderDetailsProduct(salesLine, salesOrderProduct);\n });\n\n this._products = ArrayExtensions.validValues(orderDetailProducts);\n }\n\n /**\n * Renders view mode switches for order details.\n * @returns A react node.\n */\n private readonly _renderViewModes = () => {\n if (!this.props.config.isGridViewEnabled) {\n return null;\n }\n\n const viewModesClassName = 'ms-order-details__ms-order-details-view-modes';\n return (\n <div className={viewModesClassName}>\n <Button\n className={classname(\n `${viewModesClassName}__detailed-view`,\n this._viewMode === OrderDetailsViewMode.detailedView ? 'msc-view-modes__selected' : ''\n )}\n role='button'\n title={this.props.resources.orderDetailsDetailedViewModeAriaLabel}\n aria-label={this.props.resources.orderDetailsDetailedViewModeAriaLabel}\n onClick={this._setDetailedViewMode}\n />\n <Button\n className={classname(\n `${viewModesClassName}__list-view`,\n this._viewMode === OrderDetailsViewMode.listView ? 'msc-view-modes__selected' : ''\n )}\n role='button'\n title={this.props.resources.orderDetailsListViewModeAriaLabel}\n aria-label={this.props.resources.orderDetailsListViewModeAriaLabel}\n onClick={this._setListViewMode}\n />\n </div>\n );\n };\n\n /**\n * Get the order details view properties.\n * @returns The initial values of order details view properties.\n */\n private readonly getOrderDetailsProps = (): IOrderDetailsViewProps => {\n const {\n resources: { backToShopping, orderDetailsBuyItemsAgainHeaderText },\n config: { heading }\n } = this.props;\n const moduleProps = { moduleProps: this.props, className: classname('ms-order-details', this.props.config.className) };\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) ?? '';\n\n return {\n ...this.props,\n moduleProps,\n heading: heading && (\n <Text\n {...heading}\n className='ms-order-details__heading'\n text={this._isSelectionModeEnabled ? orderDetailsBuyItemsAgainHeaderText : heading.text}\n tag={heading.tag ?? 'h2'}\n editProps={{ onEdit: this.handleOrderDetailsHeadingChange, requestContext: this.props.context.request }}\n />\n ),\n backToShoppingLink: backToShoppingUrl && (\n <Button className='ms-order-details__btn-keep-shopping' href={backToShoppingUrl}>\n {backToShopping}\n </Button>\n ),\n footerProps: { className: 'ms-order-details__footer' }\n };\n };\n\n private readonly getDeliveryMode = (\n salesLine: SalesLine,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n ) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(deliveryMode => deliveryMode === salesLine.DeliveryMode);\n };\n}\n\nexport default OrderDetails;\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 { IHelp, IOrderSummary, IPaymentMethods } from '../../common';\nimport { IGroup, IGroupDelivery, IGroups } from '../../common/get-groups';\nimport { IOrderInformation } from '../../common/get-order-information';\nimport { ISalesLine } from '../../common/get-sales-line';\nimport { IOrderDetailsViewProps } from './order-details';\n\nexport const OrderDetailsOrderInfomation: React.FC<IOrderInformation> = ({\n orderInformationProps,\n salesId,\n receiptId,\n createdDate,\n count,\n amount,\n channelReferenceId,\n channelName,\n channelAddress,\n note\n}) => (\n <Node {...orderInformationProps}>\n {channelName}\n {channelAddress}\n {channelReferenceId}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {note}\n </Node>\n);\n\nexport const OrderDetailsSalesLine: React.FC<ISalesLine> = ({ salesLineProps, salesLine, buyAgainButton, errors }) => (\n <Node {...salesLineProps}>\n {salesLine}\n {buyAgainButton}\n {errors}\n </Node>\n);\n\nexport const OrderDetailsGroupDelivery: React.FC<IGroupDelivery> = ({ deliveryProps, heading, count }) => (\n <Node {...deliveryProps}>\n {heading}\n {count}\n </Node>\n);\n\nexport const OrderDetailsGroup: React.FC<IGroup> = ({\n groupProps,\n delivery,\n address,\n salesLinesProps,\n salesLines,\n isCashAndCarryTransaction\n}) => (\n <Node {...groupProps}>\n {delivery && <OrderDetailsGroupDelivery {...delivery} />}\n {salesLines && (\n <Node {...salesLinesProps}>\n {salesLines.map(salesLine => (\n <React.Fragment key={salesLine.data.salesLine.LineId}>\n {salesLine.data.deliveryType === 'ship' && salesLine.data.shipment ? salesLine.trackingInfo : null}\n <OrderDetailsSalesLine {...salesLine} />\n {!isCashAndCarryTransaction && salesLine.salesStatus}\n </React.Fragment>\n ))}\n </Node>\n )}\n {!delivery.showTimeslot && address}\n {delivery.showTimeslot && (\n <Node {...delivery.pickupProps}>\n {address}\n {delivery.pickupDateTimeslot}\n </Node>\n )}\n </Node>\n);\n\nexport const OrderDetailsGroups: React.FC<IGroups> = ({ groupsProps, groups }) => (\n <Node {...groupsProps}>\n {groups.map((group: IGroup, index: number) => (\n <OrderDetailsGroup key={index} {...group} />\n ))}\n </Node>\n);\n\nexport const OrderDetailsOrderSummary: React.FC<IOrderSummary> = ({\n orderSummaryProps,\n heading,\n subtotal,\n shipping,\n tax,\n totalAmount,\n earnedPoints\n}) => (\n <Node {...orderSummaryProps}>\n {heading}\n {subtotal}\n {shipping}\n {tax}\n {totalAmount}\n {earnedPoints}\n </Node>\n);\n\nexport const OrderDetailsPayment: React.FC<IPaymentMethods> = ({ paymentMethodsProps, title, methods }) => (\n <Node {...paymentMethodsProps}>\n {title}\n {methods}\n </Node>\n);\n\nexport const OrderDetailsHelp: React.FC<IHelp> = ({ helpProps, needHelpLabel, helpLineNumberLabel, contactNumber }) => (\n <Node {...helpProps}>\n {needHelpLabel}\n {helpLineNumberLabel}\n {contactNumber}\n </Node>\n);\n\nconst OrderDetailsView: React.FC<IOrderDetailsViewProps> = ({\n moduleProps,\n tableViewActions,\n viewModes,\n table,\n placedBy,\n heading,\n alert,\n loading,\n orderInfomation,\n orderSummary,\n payment,\n help,\n groups\n}) => {\n return (\n <Module {...moduleProps}>\n {placedBy}\n {heading}\n {alert}\n {loading}\n {orderInfomation && <OrderDetailsOrderInfomation {...orderInfomation} />}\n {tableViewActions}\n {viewModes}\n {table}\n {groups && <OrderDetailsGroups {...groups} />}\n {orderSummary && <OrderDetailsOrderSummary {...orderSummary} />}\n {payment && <OrderDetailsPayment {...payment} />}\n {help && <OrderDetailsHelp {...help} />}\n </Module>\n );\n};\n\nexport default OrderDetailsView;\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 ICommerceApiSettings\n} from '@msdyn365-commerce/core';\nimport { SalesLine } from '@msdyn365-commerce/retail-proxy';\nimport { buildCacheKey, getSimpleProducts, ProductInput } from '@msdyn365-commerce-modules/retail-actions';\n\nimport {\n getSalesOrdersByLookupCriteriaAsync,\n searchOrdersAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/SalesOrdersDataActions.g';\nimport { getCurrentAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/BusinessPartnersDataActions.g';\nimport {\n CustomerOrderType,\n OrderSearchCriteria,\n QueryResultSettings,\n SalesOrder,\n SalesOrderLookupBySalesId,\n SalesOrderLookupByTransactionId,\n SalesOrdersLookupCriteria,\n SimpleProduct,\n SortColumn\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { isNullOrWhiteSpace } from '@msdyn365-commerce-modules/utilities';\nimport { OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState } from '../components';\n\n/**\n * IGetOrderHistoryWithSearchAndFiltersPaging interface.\n */\nexport interface IGetOrderHistoryWithSearchAndFiltersPaging {\n top: number;\n nextPageToken: string;\n}\n\n/**\n * IGetOrderHistoryWithSearchAndFiltersSorting interface.\n */\nexport interface IGetOrderHistoryWithSearchAndFiltersSorting {\n columnName: string;\n isDescending: boolean;\n}\n\nexport interface IOrderHistoryWithSearchAndFilterError {\n statusCode?: number;\n errorMessageResource?: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error?: any;\n}\n/**\n * IOrderHistoryWithSearchAndFiltersResult interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersResult {\n salesOrders: SalesOrder[];\n products: SimpleProduct[];\n paging: IGetOrderHistoryWithSearchAndFiltersPaging;\n error?: IOrderHistoryWithSearchAndFilterError;\n}\n\n/**\n * IGetOrdersResult interface.\n */\ninterface IGetOrdersResult {\n salesOrders: SalesOrder[];\n paging: IGetOrderHistoryWithSearchAndFiltersPaging;\n error?: IOrderHistoryWithSearchAndFilterError;\n}\n\n/**\n * Calls the Retail API and returns the orders.\n * @param paging - The paging information to use in SearchOrders API.\n * @param sorting - The sorting information to use in SearchOrders API.\n * @param organizationWideSelectorState - The organization wide selector state.\n * @param orderSearchCriteria - The search criteria.\n * @returns Collection of SalesOrder.\n */\nconst getOrders = (\n paging: IGetOrderHistoryWithSearchAndFiltersPaging,\n sorting: IGetOrderHistoryWithSearchAndFiltersSorting | undefined,\n organizationWideSelectorState: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState,\n orderSearchCriteria: OrderSearchCriteria\n) => async (ctx: IActionContext): Promise<IGetOrdersResult> => {\n let searchCriteria: OrderSearchCriteria;\n switch (organizationWideSelectorState) {\n case OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.CurrentUser:\n searchCriteria = {\n ...orderSearchCriteria,\n CustomerAccountNumber: ctx.requestContext.user.customerAccountNumber,\n OrderType: CustomerOrderType.SalesOrder\n };\n break;\n case OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.OrganizationWide:\n const businessPartner = await getCurrentAsync({ callerContext: ctx });\n if (!businessPartner) {\n throw new Error('Unable to get order history. Failed to retrieve business partner id.');\n }\n searchCriteria = {\n ...orderSearchCriteria,\n BusinessPartnerId: businessPartner.BusinessPartnerId,\n OrderType: CustomerOrderType.SalesOrder\n };\n break;\n default:\n throw new Error('getSalesOrderWithHydrationsAction - Invalid OrganizationOrderHistorySelectorState passed');\n }\n\n const queryResultSettings: QueryResultSettings = {\n Paging: {\n Top: paging.top,\n NextPageToken: paging.nextPageToken // this value will be overwritten in server side.\n }\n };\n\n if (sorting) {\n queryResultSettings.Sorting = {\n Columns: [\n {\n ColumnName: sorting.columnName,\n IsDescending: sorting.isDescending\n } as SortColumn\n ]\n };\n }\n\n const searchOrdersResults = searchOrdersAsync(\n {\n callerContext: ctx,\n bypassCache: 'get',\n queryResultSettings: queryResultSettings\n },\n searchCriteria,\n paging.nextPageToken\n );\n\n const errorDetails: IOrderHistoryWithSearchAndFilterError = {};\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const searchOrdersResponse: SalesOrder[] = await searchOrdersResults.catch((error: any) => {\n errorDetails.statusCode = error?.statusCode;\n errorDetails.errorMessageResource = error?.message;\n errorDetails.error = error;\n return [];\n });\n\n const nextLinkUrl = searchOrdersResults.metadata?.others?.nextLink;\n const nextPageLink = nextLinkUrl !== undefined ? new URL(nextLinkUrl).searchParams.get('nextPageToken') : undefined;\n const newNextPageToken = nextPageLink !== null ? nextPageLink : undefined;\n\n const salesOrdersLookupCriteria: SalesOrdersLookupCriteria = {};\n salesOrdersLookupCriteria.SalesOrderLookups = searchOrdersResponse?.map((order: SalesOrder) => {\n if (order.SalesId && !isNullOrWhiteSpace(order.SalesId)) {\n const salesOrderLookupBySalesId = {\n SalesId: order.SalesId,\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesOrderLookupBySalesId'\n } as SalesOrderLookupBySalesId;\n return salesOrderLookupBySalesId;\n } else if (order.Id && !isNullOrWhiteSpace(order.Id)) {\n const salesOrderLookupByTransactionId = {\n TransactionId: order.Id,\n ChannelId: order.ChannelId,\n StoreId: order.StoreId,\n TerminalId: order.TerminalId,\n '@odata.type': '#Microsoft.Dynamics.Commerce.Runtime.DataModel.SalesOrderLookupByTransactionId'\n } as SalesOrderLookupByTransactionId;\n return salesOrderLookupByTransactionId;\n } else {\n throw new Error('Invalid input - There are no orders to view.');\n }\n });\n\n const orderHistoryResults = getSalesOrdersByLookupCriteriaAsync(\n {\n callerContext: ctx,\n bypassCache: 'get'\n },\n salesOrdersLookupCriteria\n );\n\n const orderHistoryResponse = await orderHistoryResults;\n\n // organize the order history by the order of the search results\n const orderHistoryResponseMap = new Map<string, SalesOrder>();\n orderHistoryResponse.forEach(order => {\n if (order.SalesId && !isNullOrWhiteSpace(order.SalesId)) {\n orderHistoryResponseMap.set(order.SalesId, order);\n }\n\n if (order.Id && !isNullOrWhiteSpace(order.Id)) {\n const key = `${order.Id}_${order.ChannelId}_${order.StoreId}_${order.TerminalId}`;\n orderHistoryResponseMap.set(key, order);\n }\n });\n\n const orderedOrderHistoryResponse = searchOrdersResponse\n ?.map((order: SalesOrder) => {\n let key: string;\n if (order.SalesId && !isNullOrWhiteSpace(order.SalesId)) {\n key = order.SalesId;\n } else if (order.Id && !isNullOrWhiteSpace(order.Id)) {\n key = `${order.Id}_${order.ChannelId}_${order.StoreId}_${order.TerminalId}`;\n } else {\n throw new Error('Invalid order - Missing key (SalesId / Id).');\n }\n return orderHistoryResponseMap.get(key);\n })\n .filter(order => order !== undefined);\n\n return {\n salesOrders: orderedOrderHistoryResponse,\n error: errorDetails,\n paging: {\n top: paging.top,\n nextPageToken: newNextPageToken || ''\n }\n } as IGetOrdersResult;\n};\n\n/**\n * Calls the Retail API and returns the products.\n * @param productIds - Collection of products identifiers.\n * @param channelId - Channel identifier.\n * @returns Collections of simple products.\n */\nconst getProducts = (productIds: number[] = [], channelId?: number) => (ctx: IActionContext): Promise<SimpleProduct[]> => {\n const productInputs = productIds.map(\n productId => new ProductInput(productId, ctx.requestContext.apiSettings, channelId, undefined, ctx.requestContext)\n );\n return getSimpleProducts(productInputs, ctx);\n};\n\n/**\n * Action input.\n */\nexport class GetOrderHistoryWithSearchAndFiltersInput implements IActionInput {\n public paging: IGetOrderHistoryWithSearchAndFiltersPaging;\n\n public sorting?: IGetOrderHistoryWithSearchAndFiltersSorting;\n\n public organizationWideSelectorState: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState;\n\n public orderSearchCriteria: OrderSearchCriteria;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(\n paging: IGetOrderHistoryWithSearchAndFiltersPaging,\n apiSettings: ICommerceApiSettings,\n organizationWideSelectorState?: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState,\n orderSearchCriteria?: OrderSearchCriteria,\n sorting?: IGetOrderHistoryWithSearchAndFiltersSorting\n ) {\n this.apiSettings = apiSettings;\n this.paging = paging;\n this.sorting = sorting;\n this.organizationWideSelectorState =\n organizationWideSelectorState || OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.CurrentUser;\n this.orderSearchCriteria = orderSearchCriteria || ({} as OrderSearchCriteria);\n }\n\n public getCacheKey = () => buildCacheKey('OrderHistoryWithSearchAndFilters', this.apiSettings);\n\n /**\n * GetCacheObjectType.\n * @returns String.\n */\n public getCacheObjectType = () => 'OrderHistoryWithSearchAndFilters';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Splits product ids from the given orders into lists by their channel id.\n * @param {SalesOrder[]} salesOrders Orders with the products.\n * @param {number} currentChannelId Channel id to use by default if no channel id is provided for a product.\n * @returns {{ [x: number]: number[] }} A dictionary where the key is a channel id,\n * and the value is a list of product ids in which all items correspond to the key channel id.\n * @remark The list of product ids is always non-empty.\n */\nconst splitProductsByChannelId = (salesOrders: SalesOrder[], currentChannelId: number): { [x: number]: number[] } => {\n const productIdsByChannel: { [x: number]: number[] } = {};\n\n salesOrders.forEach(salesOrder =>\n salesOrder?.SalesLines?.forEach(line => {\n const orderProductId = line.ProductId || 0;\n const orderChannelId = salesOrder.ChannelId || currentChannelId;\n if (!productIdsByChannel[orderChannelId]) {\n productIdsByChannel[orderChannelId] = [];\n }\n productIdsByChannel[orderChannelId].push(orderProductId);\n })\n );\n\n return productIdsByChannel;\n};\n\n/**\n * Get sales orders given search and filters options.\n * @param input - GetOrderHistoryWithSearchAndFiltersInput.\n * @param context - Channel context.\n * @returns - Order History props.\n */\nexport async function getGetOrderHistoryWithSearchAndFiltersAction(\n input: GetOrderHistoryWithSearchAndFiltersInput,\n context: IActionContext\n): Promise<IOrderHistoryWithSearchAndFiltersResult> {\n if (!context) {\n throw new Error('getSalesOrderWithHydrationsAction - Action context cannot be null/undefined');\n }\n const channelId = context.requestContext.apiSettings.channelId;\n const response: IGetOrdersResult = await getOrders(\n input.paging,\n input.sorting,\n input.organizationWideSelectorState,\n input.orderSearchCriteria\n )(context);\n const salesOrders: SalesOrder[] = response.salesOrders;\n const paging: IGetOrderHistoryWithSearchAndFiltersPaging = response.paging;\n\n salesOrders.map(salesOrder => {\n return (salesOrder.SalesLines = salesOrder.SalesLines?.filter((saleline: SalesLine) => !saleline.IsVoided));\n });\n\n if (!salesOrders || salesOrders.length === 0) {\n return {\n salesOrders: [],\n products: [],\n paging: paging,\n error: response.error\n };\n }\n\n // Splits the data by channel ids so that the products from different channels can be processed separately.\n const productIdsByChannelId = splitProductsByChannelId(salesOrders, channelId);\n\n // Promise that retrieves information about the products for each channel id.\n // Note, the list of product ids should not be empty\n // as it will generate an empty request which will force the promise to fail.\n const getProductsPromise = Object.entries(productIdsByChannelId).map(([entryChannelId, entryProductIdsList]) => {\n const getProductsCall = getProducts(entryProductIdsList, Number(entryChannelId));\n return getProductsCall(context);\n });\n\n return Promise.all(getProductsPromise)\n .then(\n (productList): IOrderHistoryWithSearchAndFiltersResult => {\n const products = productList.reduce((memo, list) => {\n return [...memo, ...list];\n }, []);\n return {\n salesOrders,\n products,\n paging: paging,\n error: response.error\n };\n }\n )\n .catch(error => {\n context.telemetry.exception(error);\n context.telemetry.debug('Failed to get products');\n throw error;\n });\n}\n\nexport const getGetOrderHistoryWithSearchAndFiltersActionDataAction = createObservableDataAction<IOrderHistoryWithSearchAndFiltersResult>({\n id: '@msdyn365-commerce-modules/order-history-with-search-and-filters/get-order-history-with-search-and-filters',\n action: getGetOrderHistoryWithSearchAndFiltersAction as IAction<IOrderHistoryWithSearchAndFiltersResult>\n});\n\nexport default getGetOrderHistoryWithSearchAndFiltersActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext, getUrlSync } from '@msdyn365-commerce/core-internal';\nimport { SalesOrder, SalesStatus } from '@msdyn365-commerce/retail-proxy';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Resources for order status.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrderStatusResources {\n orderStatusCreated: string;\n orderStatusDelivered: string;\n orderStatusInvoiced: string;\n orderStatusCanceled: string;\n}\n\n/**\n * Retrieves the url for order details page.\n * @param actionContext - Core action context.\n * @param salesOrder - Order information.\n * @returns Url to order details.\n */\nexport const getOrderDetailsPageUrl = (actionContext: IActionContext, salesOrder: SalesOrder): string => {\n const orderDetailsUrl = getUrlSync('orderDetails', actionContext) || '';\n const separator = orderDetailsUrl.includes('?') ? '&' : '?';\n if (!StringExtensions.isNullOrWhitespace(salesOrder.SalesId)) {\n // Redirect with sales order sales id\n return `${orderDetailsUrl}${separator}salesId=${salesOrder.SalesId}`;\n }\n\n // Redirect with sales order transaction id\n return `${orderDetailsUrl}${separator}transactionId=${salesOrder.Id}`;\n};\n\n/**\n * Retrieves the text for order status.\n * @param status - The sales order.\n * @param resources - Resources where we can find the text.\n * @returns The text for the order status.\n */\nexport const getOrderStatusLabel = (\n status: SalesStatus | undefined,\n resources: IOrderHistoryWithSearchAndFiltersOrderStatusResources\n): string => {\n switch (status) {\n case SalesStatus.Created:\n return resources.orderStatusCreated;\n case SalesStatus.Delivered:\n return resources.orderStatusDelivered;\n case SalesStatus.Invoiced:\n return resources.orderStatusInvoiced;\n case SalesStatus.Canceled:\n return resources.orderStatusCanceled;\n default:\n return '';\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 Msdyn365 from '@msdyn365-commerce/core';\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport classnames from 'classnames';\n\nimport { SalesOrder } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Class names used in component.\n */\nconst componentClassName = 'ms-order-history-with-search-and-filters-header';\nconst headingClassName = `${componentClassName}__heading`;\nconst orderCountClassName = `${componentClassName}__order-count`;\n\n/**\n * IOrderHistoryWithSearchAndFiltersHeaderResources interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersHeaderResources {\n orderCountLabel: string;\n ordersCountLabel: string;\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersHeaderData interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersHeaderData {\n salesOrders: SalesOrder[];\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersHeaderProps interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersHeaderProps\n extends Msdyn365.IComponentProps<IOrderHistoryWithSearchAndFiltersHeaderData> {\n className?: string;\n resources: IOrderHistoryWithSearchAndFiltersHeaderResources;\n textProps: Msdyn365.ITextProps;\n showOrderCount: boolean;\n extraActions?: React.ReactNode;\n onChange(event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * OrderHistoryWithSearchAndFiltersHeader component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst OrderHistoryWithSearchAndFiltersHeaderFunctionalComponent: React.FC<IOrderHistoryWithSearchAndFiltersHeaderProps> = (\n props: IOrderHistoryWithSearchAndFiltersHeaderProps\n) => {\n const {\n resources,\n data: { salesOrders },\n textProps,\n showOrderCount,\n extraActions\n } = props;\n\n const orderCount = salesOrders?.length;\n const orderCountText = `(${orderCount} ${orderCount === 1 ? resources?.orderCountLabel : resources?.ordersCountLabel})`;\n\n return (\n <Node className={classnames(props.className, componentClassName)}>\n {textProps?.text && (\n <Msdyn365.Text\n {...textProps}\n className={headingClassName}\n tag={textProps.tag || 'h2'}\n editProps={{ onEdit: props.onChange, requestContext: props.context.request }}\n />\n )}\n {showOrderCount && <span className={orderCountClassName}>{orderCountText}</span>}\n {extraActions}\n </Node>\n );\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersHeader component.\n */\nexport const OrderHistoryWithSearchAndFiltersHeaderComponent: React.FunctionComponent<IOrderHistoryWithSearchAndFiltersHeaderProps> = Msdyn365.msdyn365Commerce.createComponent<\n // @ts-expect-error\n IOrderHistoryWithSearchAndFiltersHeaderProps\n>('OrderHistoryWithSearchAndFiltersHeaderComponent', { component: OrderHistoryWithSearchAndFiltersHeaderFunctionalComponent });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport {\n ChannelDeliveryOptionConfiguration,\n ChannelIdentity,\n Customer,\n OrderOriginator,\n OrgUnitLocation,\n SalesOrder,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Observer } from 'mobx-react';\nimport React from 'react';\n\nimport classnames from 'classnames';\n\nimport { getGroups, IGroup, IGroupDelivery, IGroups } from '../../../common/get-groups';\nimport { getOrderInformation, getOrderInformationInput, IOrderInformation } from '../../../common/get-order-information';\nimport { ISalesLine } from '../../../common/get-sales-line';\nimport { getSalesLines, getSalesLinesInput, IGetSalesLinesInput } from '../../../common/get-sales-lines';\nimport { ExpandButtonState, IPriceContext, SalesLineState } from '../../../common';\nimport {\n IOrderHistoryWithSearchAndFiltersProps,\n IOrderHistoryWithSearchAndFiltersResources\n} from '../order-history-with-search-and-filters.props.autogenerated';\nimport { IOrderHistoryWithSearchAndFiltersData } from '../order-history-with-search-and-filters.data';\nimport { getOrderDetailsPageUrl } from '../common/get-sales-order';\n\n/**\n * Class names used in component.\n */\nconst componentClassName = 'ms-order-history-with-search-and-filters-order-list';\nconst orderListItemClassName = `${componentClassName}__sales-order`;\nconst orderInformationHeaderClassName = `${componentClassName}__sales-order__header`;\nconst expandProductsButtonClassName = `${componentClassName}__sales-order__expand-products-button`;\nconst expandProductsButtonWrapperClassName = `${componentClassName}__sales-order__expand-products-button-wrapper`;\nconst orderDetailButtonClassName = `${componentClassName}__btn-order-details`;\nconst moduleName = componentClassName;\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrderListData interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrderListData {\n salesOrders: SalesOrder[];\n products: SimpleProduct[];\n channelIdentities?: ChannelIdentity[];\n orgUnitLocations?: OrgUnitLocation[];\n customer?: Customer;\n originators?: OrderOriginator[];\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrderListProps interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrderListProps extends IComponentProps<IOrderHistoryWithSearchAndFiltersOrderListData> {\n moduleProps: IOrderHistoryWithSearchAndFiltersProps<IOrderHistoryWithSearchAndFiltersData>;\n className?: string;\n resources: IOrderHistoryWithSearchAndFiltersResources;\n isMobileView?: boolean;\n showChannelInfo: boolean;\n showOrderPlacedBy?: boolean;\n salesLinesLimit?: number;\n telemetryContent?: ITelemetryContent;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrderItemProps interface.\n */\ninterface IOrderHistoryWithSearchAndFiltersOrderItemProps {\n orderInfomation: IOrderInformation;\n groups?: IGroups;\n orderDetailsLink: React.ReactNode;\n expandProductsButton?: React.ReactNode;\n}\n\n/**\n * OrderInfomation component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst OrderInfomationComponent: React.FC<IOrderInformation> = ({\n orderInformationProps,\n placedBy,\n salesId,\n receiptId,\n channelName,\n createdDate,\n count,\n amount,\n channelReferenceId\n}) => (\n <Node {...orderInformationProps}>\n {placedBy}\n <div className={orderInformationHeaderClassName}>\n {channelName}\n {count}\n </div>\n {salesId}\n {receiptId}\n {createdDate}\n {amount}\n {channelReferenceId}\n </Node>\n);\n\n/**\n * GroupDelivery component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst GroupDeliveryComponent: React.FC<IGroupDelivery> = ({ deliveryProps, heading, count, processing, address, trackingInfo }) => (\n <Node {...deliveryProps}>\n {heading}\n {count}\n {processing}\n {address}\n {trackingInfo}\n </Node>\n);\n\n/**\n * Group component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst GroupComponent: React.FC<IGroup> = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\n <Node {...groupProps}>\n {delivery && <GroupDeliveryComponent {...delivery} />}\n {salesLines && (\n <Node {...salesLinesProps}>\n {salesLines.map((salesLine: ISalesLine) => (\n <React.Fragment key={salesLine.data.salesLine.LineId}>{salesLine.salesLine}</React.Fragment>\n ))}\n </Node>\n )}\n </Node>\n);\n\n/**\n * Groups component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst GroupsComponent: React.FC<IGroups> = ({ groupsProps, groups }) => (\n <Node {...groupsProps}>\n {groups.map((group: IGroup, index: number) => (\n <GroupComponent key={index} {...group} />\n ))}\n </Node>\n);\n\n/**\n * Updates product states to show all products.\n * @param expandButtonState - Expand button state.\n * @param productStates - Product states.\n * @returns Callback method.\n */\nconst onExpandProductsCallback = (expandButtonState: ExpandButtonState, productStates: SalesLineState[]) => () => {\n for (const productState of productStates) {\n productState.isHidden = false;\n }\n expandButtonState.extraProductsCount = 0;\n};\n\n/**\n * Gets the IOrderHistoryWithSearchAndFiltersOrderItem configuration.\n * @param salesOrder The sales order\n * @param index The sales order index\n * @param props The component props\n * @returns The IOrderHistoryWithSearchAndFiltersOrderItem configuration.\n */\nconst createOrderHistoryWithSearchAndFiltersOrderItemProps = (\n salesOrder: SalesOrder,\n index: number,\n props: IOrderHistoryWithSearchAndFiltersOrderListProps\n): IOrderHistoryWithSearchAndFiltersOrderItemProps => {\n const {\n id,\n typeName,\n context,\n moduleProps: { telemetry },\n data: { products, channelIdentities, orgUnitLocations, customer, originators },\n showChannelInfo,\n telemetryContent,\n resources: { freePriceText, detailsAriaLabel, detailsLabel, orderItemLabel, orderItemsLabel },\n context: { actionContext },\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig\n } = props;\n\n const priceContext = {\n id,\n typeName,\n context,\n telemetry,\n freePriceText\n } as IPriceContext;\n\n const originator: OrderOriginator | undefined = originators?.find(\n originator =>\n (salesOrder.SalesId && originator.SalesId === salesOrder.SalesId) ||\n (salesOrder.Id && originator.TransactionId === salesOrder.Id)\n );\n\n const salesLinesInput =\n products &&\n getSalesLinesInput(\n props.moduleProps,\n moduleName,\n salesOrder,\n products,\n priceContext,\n undefined,\n undefined,\n undefined,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig\n );\n\n let salesLines: ISalesLine[] | undefined;\n let expandProductsButton: React.ReactNode;\n if (salesLinesInput) {\n const getSalesLinesInputProps: IGetSalesLinesInput = { ...salesLinesInput, imageOnly: true };\n if (!ObjectExtensions.isNullOrUndefined(props.salesLinesLimit)) {\n const extraProductsCount = getSalesLinesInputProps.salesLines.length - props.salesLinesLimit;\n getSalesLinesInputProps.salesLineStates = getSalesLinesInputProps.salesLines.map(\n (salesLine, index) => new SalesLineState(`${salesLine.LineId ?? ''}-${index}`, index >= props.salesLinesLimit!)\n );\n if (extraProductsCount > 0) {\n const expandButtonState = new ExpandButtonState(extraProductsCount);\n expandProductsButton = (\n <>\n <Observer>\n {() => {\n const text = format(\n props.resources.orderHistoryExpandProductsButtonText,\n expandButtonState.extraProductsCount\n );\n return (\n expandButtonState.extraProductsCount > 0 && (\n <Button\n className={expandProductsButtonClassName}\n title={text}\n role='button'\n onClick={onExpandProductsCallback(expandButtonState, getSalesLinesInputProps.salesLineStates!)}\n aria-label={text}\n >\n {text}\n </Button>\n )\n );\n }}\n </Observer>\n </>\n );\n }\n }\n salesLines = getSalesLines(getSalesLinesInputProps);\n }\n\n expandProductsButton = (\n <>\n {expandProductsButton}\n <div className={expandProductsButtonWrapperClassName} />\n </>\n );\n\n const groups =\n salesLines &&\n getGroups({\n moduleName,\n salesLines,\n resources: { orderItemLabel, orderItemsLabel },\n retailMultiplePickUpOptionEnabled\n });\n\n const orderInfomationInput = getOrderInformationInput(\n props.moduleProps,\n moduleName,\n salesOrder,\n priceContext,\n channelIdentities,\n orgUnitLocations,\n customer,\n originator,\n showChannelInfo\n );\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.OrderDetails);\n const orderDetailsAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n const orderDetailsLink = (\n <Button\n href={getOrderDetailsPageUrl(actionContext, salesOrder)}\n role='button'\n aria-label={\n salesOrder.ChannelReferenceId && detailsAriaLabel\n ? detailsAriaLabel.replace('{orderId}', salesOrder.ChannelReferenceId)\n : ''\n }\n className={orderDetailButtonClassName}\n {...orderDetailsAttributes}\n >\n {detailsLabel}\n </Button>\n );\n\n return {\n orderInfomation: getOrderInformation(orderInfomationInput),\n groups: groups,\n orderDetailsLink: orderDetailsLink,\n expandProductsButton: expandProductsButton\n };\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersOrderList component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst OrderHistoryWithSearchAndFiltersOrderListFunctionalComponent: React.FC<IOrderHistoryWithSearchAndFiltersOrderListProps> = (\n props: IOrderHistoryWithSearchAndFiltersOrderListProps\n) => {\n return (\n <Node className={classnames(props.className, componentClassName)}>\n {ArrayExtensions.hasElements(props.data.salesOrders) &&\n props.data.salesOrders.map((salesOrder: SalesOrder, index: number) => {\n const itemProps: IOrderHistoryWithSearchAndFiltersOrderItemProps = createOrderHistoryWithSearchAndFiltersOrderItemProps(\n salesOrder,\n index,\n props\n );\n return (\n <Node className={orderListItemClassName} key={salesOrder.SalesId || salesOrder.Id}>\n {itemProps.orderInfomation && <OrderInfomationComponent {...itemProps.orderInfomation} />}\n {itemProps.groups && <GroupsComponent {...itemProps.groups} />}\n {itemProps.expandProductsButton}\n {itemProps.orderDetailsLink}\n </Node>\n );\n })}\n </Node>\n );\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersOrderList component.\n */\nexport const OrderHistoryWithSearchAndFiltersOrderListComponent: React.FunctionComponent<IOrderHistoryWithSearchAndFiltersOrderListProps> = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IOrderHistoryWithSearchAndFiltersOrderListProps\n>('OrderHistoryWithSearchAndFiltersOrderListComponent', { component: OrderHistoryWithSearchAndFiltersOrderListFunctionalComponent });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext, IDateFormatOptions, msdyn365Commerce, isOboRequest } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ChannelIdentity, Customer, OrderOriginator, OrgUnitLocation, SalesOrder } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActionMenuComponent,\n TableCellComponent,\n TableComponent,\n TableCellContentType,\n TableHeaderComponent,\n TableRowComponent\n} from '@msdyn365-commerce/components';\nimport React from 'react';\n\nimport classnames from 'classnames';\n\nimport {\n Button,\n ITelemetryContent,\n TelemetryConstant,\n getPayloadObject,\n getTelemetryAttributes\n} from '@msdyn365-commerce-modules/utilities';\nimport { countItems, getOrderChannelAddress, getOrderChannelName, getOrderChannelTypeValue, isOnlineStoreChannel } from '../../../common';\nimport {\n IOrderHistoryWithSearchAndFiltersOrderStatusResources,\n getOrderDetailsPageUrl,\n getOrderStatusLabel\n} from '../common/get-sales-order';\n\n/**\n * Class names used in component.\n */\nconst componentClassName = 'ms-order-history-with-search-and-filters-order-table';\nconst placedByClassName = `${componentClassName}__row__placed-by`;\nconst orderNumberClassName = `${componentClassName}__row__order-number`;\nconst columnMobileClassName = `${componentClassName}__row__mobile-cell`;\nconst actionsClassName = `${componentClassName}__row__actions`;\nconst viewDetailsMenuItemClassName = `${componentClassName}__row__view-details-action`;\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrderTableResources interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrderTableResources extends IOrderHistoryWithSearchAndFiltersOrderStatusResources {\n orderHistoryOrderNumberText: string;\n orderHistoryCreatedDateText: string;\n orderHistoryItemsText: string;\n orderHistoryTotalText: string;\n orderHistoryOriginText: string;\n orderHistoryOrderStatusText: string;\n orderHistoryActionMenuButtonAriaLabel: string;\n orderHistoryViewDetailsButtonText: string;\n orderHistoryViewDetailsButtonAriaLabel: string;\n orderHistoryCreatedDateMobileDescriptionText: string;\n orderHistoryOrderNumberIsNotAvailable: string;\n onlineStoreChannelNameText: string;\n posChannelNameText: string;\n orderPlacedByFullText?: string;\n orderPlacedByYouText?: string;\n orderOnBehalfOfText?: string;\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrderTableData interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrderTableData {\n salesOrders: SalesOrder[];\n channelIdentities?: ChannelIdentity[];\n orgUnitLocations?: OrgUnitLocation[];\n customer?: Customer;\n originators?: OrderOriginator[];\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrderTableProps interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrderTableProps extends IComponentProps<IOrderHistoryWithSearchAndFiltersOrderTableData> {\n className?: string;\n resources: IOrderHistoryWithSearchAndFiltersOrderTableResources;\n isMobileView?: boolean;\n showChannelInfo: boolean;\n showOrderPlacedBy?: boolean;\n telemetryContent?: ITelemetryContent;\n}\n\ninterface IOnBehalfOfOrderResources {\n orderHistoryOrderNumberIsNotAvailable?: string;\n}\n\ninterface IOnBehalfOfOrderProps {\n salesOrder: SalesOrder;\n isOnBehalfOfOrder: boolean;\n originator?: OrderOriginator;\n placedByName: string;\n placedByText: string;\n onBehalfOfText: string;\n showOrderPlacedBy?: boolean;\n resources: IOnBehalfOfOrderResources;\n}\n\n/**\n * Formats amount.\n * @param context - Core context.\n * @param amount - Amount to display.\n * @param currencyCode - Currency for the amount.\n * @returns String value.\n */\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\n if (amount === undefined) {\n return '';\n }\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\n};\n\n/**\n * Formats date.\n * @param context - Core context.\n * @param date - Date to display.\n * @returns String value.\n */\nconst formatDate = (context: ICoreContext, date: Date | undefined) => {\n if (date === undefined) {\n return '';\n }\n\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'short', day: 'numeric' };\n return context.cultureFormatter.formatDate(date, dateOptions);\n};\n\nconst getShortEllipsisText = (originalText: string, maxTextLength: number) => {\n const isRtl = document.body.parentElement?.getAttribute('dir') === 'rtl';\n return originalText.length > maxTextLength\n ? isRtl\n ? `…${originalText.substring(0, maxTextLength - 1)}`\n : `${originalText.substring(0, maxTextLength - 1)}…`\n : originalText;\n};\n\nconst getOnBehalfOfOrderProps = (\n props: IOrderHistoryWithSearchAndFiltersOrderTableProps,\n salesOrder: SalesOrder\n): IOnBehalfOfOrderProps => {\n const {\n data: { channelIdentities, orgUnitLocations, customer, originators },\n resources: { orderPlacedByFullText, orderPlacedByYouText, orderOnBehalfOfText, orderHistoryOrderNumberIsNotAvailable }\n } = props;\n\n const channelAddress = getOrderChannelAddress(salesOrder, orgUnitLocations);\n const channelTypeValue = getOrderChannelTypeValue(salesOrder, channelIdentities);\n const isOnlineStore = isOnlineStoreChannel(channelTypeValue, channelAddress);\n\n const originator: OrderOriginator | undefined = originators?.find(\n originator =>\n (salesOrder.SalesId && originator.SalesId === salesOrder.SalesId) ||\n (salesOrder.Id && originator.TransactionId === salesOrder.Id)\n );\n\n const isYou =\n !isOboRequest(props.context.request) &&\n originator?.CustomerId &&\n originator?.CustomerName &&\n !originator?.StaffId &&\n !originator?.StaffName &&\n customer?.AccountNumber === originator?.CustomerId\n ? true\n : false;\n const isYouObo = !isYou && !isOboRequest(props.context.request);\n let placedByName =\n originator?.StaffId && originator.StaffName\n ? originator.StaffName\n : originator?.CustomerId && originator.CustomerName\n ? originator.CustomerName\n : '-';\n placedByName = `${placedByName} ${isYou ? orderPlacedByYouText : ''}`;\n const isOnBehalfOfOrder = isOnlineStore && originator?.StaffName && customer?.Name;\n const placedByText = `${orderPlacedByFullText} ${placedByName}`;\n const onBehalfOfText = `${orderOnBehalfOfText} ${customer?.Name} ${isYouObo ? orderPlacedByYouText : ''}`;\n\n return {\n resources: { orderHistoryOrderNumberIsNotAvailable: orderHistoryOrderNumberIsNotAvailable },\n salesOrder: salesOrder,\n isOnBehalfOfOrder: !!isOnBehalfOfOrder,\n originator: originator,\n placedByName: placedByName,\n placedByText: placedByText,\n onBehalfOfText: onBehalfOfText,\n showOrderPlacedBy: props.showOrderPlacedBy\n };\n};\n\nconst getOrderPlacedByCellContent = (props: IOnBehalfOfOrderProps): JSX.Element | null => {\n const maxOrderTextLength = window.innerWidth > 700 ? 20 : 12;\n return (\n <span className={placedByClassName} data-title={`${props.placedByName} ${props.isOnBehalfOfOrder ? props.onBehalfOfText : ''}`}>\n {props.placedByName}\n {props.isOnBehalfOfOrder && (\n <>\n <br /> {getShortEllipsisText(props.onBehalfOfText, maxOrderTextLength)}\n </>\n )}\n </span>\n );\n};\n\nconst getOrderNumberCellContent = (onBehalfOfOrderProps: IOnBehalfOfOrderProps, linkToOrderDetails: string): JSX.Element | null => {\n const maxOrderTextLength = window.innerWidth > 700 ? 20 : 12;\n const {\n salesOrder,\n isOnBehalfOfOrder,\n placedByText,\n showOrderPlacedBy,\n resources: { orderHistoryOrderNumberIsNotAvailable }\n } = onBehalfOfOrderProps;\n\n let orderNumberCellText = salesOrder.SalesId;\n if (StringExtensions.isNullOrWhitespace(orderNumberCellText)) {\n orderNumberCellText = orderHistoryOrderNumberIsNotAvailable;\n }\n\n return (\n <>\n <Button className={orderNumberClassName} href={linkToOrderDetails ?? ''}>\n {orderNumberCellText}\n </Button>\n {isOnBehalfOfOrder && !showOrderPlacedBy && (\n <span className={placedByClassName} data-title={placedByText}>\n {getShortEllipsisText(placedByText, maxOrderTextLength)}\n </span>\n )}\n </>\n );\n};\n\nconst getTableRowComponentChildren = (\n props: IOrderHistoryWithSearchAndFiltersOrderTableProps,\n index: number,\n salesOrder: SalesOrder\n): React.ReactElement[] => {\n const numItemsCellText: number = ArrayExtensions.hasElements(salesOrder.SalesLines) ? countItems(salesOrder.SalesLines) : 0;\n const totalAmountCellText: string = formatAmount(props.context, salesOrder.TotalAmount, salesOrder.CurrencyCode);\n\n const orderStatusCellText: string = getOrderStatusLabel(salesOrder.StatusValue, props.resources);\n\n const channelName: string = getOrderChannelName(salesOrder, props.data.channelIdentities);\n const channelAddress: string = getOrderChannelAddress(salesOrder, props.data.orgUnitLocations);\n const channelNameCellText: string =\n channelName &&\n (channelAddress ? `${props.resources.posChannelNameText} ${channelName}` : props.resources.onlineStoreChannelNameText);\n\n const onBehalfOfOrderProps: IOnBehalfOfOrderProps = getOnBehalfOfOrderProps(props, salesOrder);\n\n const linkToOrderDetails = getOrderDetailsPageUrl(props.context.actionContext, salesOrder);\n\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.OrderDetails);\n const orderDetailsAttributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n return [\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_0`}\n contentType={TableCellContentType.Text}\n isVisible={!!props.showOrderPlacedBy && !props.isMobileView}\n >\n {getOrderPlacedByCellContent(onBehalfOfOrderProps)}\n </TableCellComponent>,\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_1`}\n contentType={TableCellContentType.Text}\n isVisible={true}\n >\n {getOrderNumberCellContent(onBehalfOfOrderProps, linkToOrderDetails)}\n </TableCellComponent>,\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_2`}\n contentType={TableCellContentType.Text}\n isVisible={!!props.showChannelInfo && !props.isMobileView}\n >\n {channelNameCellText}\n </TableCellComponent>,\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_3`}\n contentType={TableCellContentType.Number}\n isVisible={!props.isMobileView}\n >\n {numItemsCellText}\n </TableCellComponent>,\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_4`}\n contentType={TableCellContentType.Amount}\n isVisible={!props.isMobileView}\n >\n {totalAmountCellText}\n </TableCellComponent>,\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_5`}\n contentType={TableCellContentType.Date}\n isVisible={!props.isMobileView}\n >\n {formatDate(props.context, salesOrder.CreatedDateTime)}\n </TableCellComponent>,\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_6`}\n contentType={TableCellContentType.Text}\n isVisible={true}\n >\n {orderStatusCellText}\n </TableCellComponent>,\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n key={`row_${index}_7`}\n className={classnames(actionsClassName)}\n contentType={TableCellContentType.Text}\n isVisible={true}\n >\n <ActionMenuComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n ariaLabel={props.resources.orderHistoryActionMenuButtonAriaLabel}\n >\n <Button\n className={viewDetailsMenuItemClassName}\n href={linkToOrderDetails ?? ''}\n title={props.resources.orderHistoryViewDetailsButtonText ?? ''}\n aria-label={props.resources.orderHistoryViewDetailsButtonAriaLabel ?? props.resources.orderHistoryViewDetailsButtonText}\n {...orderDetailsAttributes}\n >\n {props.resources.orderHistoryViewDetailsButtonText}\n </Button>\n </ActionMenuComponent>\n </TableCellComponent>\n ];\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersOrderTable component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst OrderHistoryWithSearchAndFiltersOrderTableFunctionalComponent: React.FC<IOrderHistoryWithSearchAndFiltersOrderTableProps> = (\n props: IOrderHistoryWithSearchAndFiltersOrderTableProps\n) => {\n return (\n <TableComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n className={classnames(props.className, componentClassName)}\n >\n <TableHeaderComponent context={props.context} id={props.id} typeName={props.typeName} data={{}}>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n contentType={TableCellContentType.Text}\n isVisible={!!props.showOrderPlacedBy && !props.isMobileView}\n >\n {props.resources.orderPlacedByFullText ?? ''}\n </TableCellComponent>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n className={classnames(props.isMobileView ? columnMobileClassName : '')}\n contentType={TableCellContentType.Text}\n isVisible={true}\n >\n {props.resources.orderHistoryOrderNumberText}\n </TableCellComponent>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n contentType={TableCellContentType.Text}\n isVisible={!!props.showChannelInfo && !props.isMobileView}\n >\n {props.resources.orderHistoryOriginText}\n </TableCellComponent>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n contentType={TableCellContentType.Number}\n isVisible={!props.isMobileView}\n >\n {props.resources.orderHistoryItemsText}\n </TableCellComponent>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n contentType={TableCellContentType.Amount}\n isVisible={!props.isMobileView}\n >\n {props.resources.orderHistoryTotalText}\n </TableCellComponent>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n contentType={TableCellContentType.Date}\n isVisible={!props.isMobileView}\n >\n {props.resources.orderHistoryCreatedDateText}\n </TableCellComponent>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n contentType={TableCellContentType.Text}\n isVisible={true}\n >\n {props.resources.orderHistoryOrderStatusText}\n </TableCellComponent>\n <TableCellComponent\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n data={{}}\n contentType={TableCellContentType.Text}\n isVisible={true}\n />\n </TableHeaderComponent>\n {props.data.salesOrders?.map((salesOrder: SalesOrder, index: number) => {\n return (\n <TableRowComponent context={props.context} id={props.id} typeName={props.typeName} data={{}} key={`row_${index}`}>\n {getTableRowComponentChildren(props, index, salesOrder)}\n </TableRowComponent>\n );\n })}\n </TableComponent>\n );\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersOrderTable component.\n */\nexport const OrderHistoryWithSearchAndFiltersOrderTableComponent: React.FunctionComponent<IOrderHistoryWithSearchAndFiltersOrderTableProps> = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IOrderHistoryWithSearchAndFiltersOrderTableProps\n>('OrderHistoryWithSearchAndFiltersOrderTableComponent', { component: OrderHistoryWithSearchAndFiltersOrderTableFunctionalComponent });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { Button, ITelemetryContent, getPayloadObject, getTelemetryAttributes } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport classnames from 'classnames';\n\n/**\n * Class names used in component.\n */\nconst componentClassName = 'ms-order-history-with-search-and-filters-organization-wide-selector';\nconst buttonClassName = `${componentClassName}__button`;\nconst buttonActiveClassName = `${componentClassName}__active-button`;\nconst buttonInactiveClassName = `${componentClassName}__inactive-button`;\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorResources interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorResources {\n currentUserOptionLabel: string;\n currentUserOptionAriaLabel?: string;\n organizationWideOptionLabel: string;\n organizationWideOptionAriaLabel?: string;\n}\n\n/**\n * OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState interface.\n */\nexport enum OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState {\n CurrentUser,\n OrganizationWide\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorData interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorData {\n customer: Customer;\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps\n extends IComponentProps<IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorData> {\n className?: string;\n resources: IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorResources;\n currentSelectorState: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState;\n telemetryContent?: ITelemetryContent;\n onChange(state: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState): void;\n}\n\n/**\n * OrderHistoryWithSearchAndFiltersOrganizationWideSelector component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst OrderHistoryWithSearchAndFiltersOrganizationWideSelectorFunctionalComponent: React.FC<IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps> = (\n props: IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps\n) => {\n // Current version doesn't include functionality for non b2b users or non-admin b2b users.\n if (!props.data.customer.IsB2bAdmin) {\n return <div className={classnames(props.className, componentClassName)} />;\n }\n\n const [selectorState, setSelectorState] = React.useState(props.currentSelectorState);\n\n const onClickHandler = (newSelectorState: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState) => {\n setSelectorState(newSelectorState);\n props.onChange(newSelectorState);\n };\n\n // define telemetry attributes\n const currentUserOrderHistoryAttributes = getTelemetryAttributes(\n props.telemetryContent!,\n getPayloadObject('click', props.telemetryContent!, props.resources?.currentUserOptionLabel ?? 'Current user order history')\n );\n const orgWideOrderHistoryAttributes = getTelemetryAttributes(\n props.telemetryContent!,\n getPayloadObject('click', props.telemetryContent!, props.resources?.currentUserOptionLabel ?? 'Org wide order history')\n );\n\n return (\n <div className={classnames(props.className, componentClassName)}>\n <Button\n className={classnames(\n buttonClassName,\n selectorState === OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.CurrentUser\n ? buttonActiveClassName\n : buttonInactiveClassName\n )}\n aria-label={props.resources?.currentUserOptionAriaLabel ?? props.resources?.currentUserOptionLabel}\n title={props.resources?.currentUserOptionAriaLabel ?? props.resources?.currentUserOptionLabel}\n onClick={() => onClickHandler(OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.CurrentUser)}\n {...currentUserOrderHistoryAttributes}\n >\n {props.resources?.currentUserOptionLabel}\n </Button>\n <Button\n className={classnames(\n buttonClassName,\n selectorState === OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.OrganizationWide\n ? buttonActiveClassName\n : buttonInactiveClassName\n )}\n aria-label={props.resources?.organizationWideOptionAriaLabel ?? props.resources?.organizationWideOptionLabel}\n title={props.resources?.organizationWideOptionAriaLabel ?? props.resources?.organizationWideOptionLabel}\n onClick={() => onClickHandler(OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.OrganizationWide)}\n {...orgWideOrderHistoryAttributes}\n >\n {props.resources?.organizationWideOptionLabel}\n </Button>\n </div>\n );\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersOrganizationWideSelector component.\n */\nexport const OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent: React.FunctionComponent<IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps> = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps\n>('OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent', {\n component: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorFunctionalComponent\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport {\n Button,\n ITelemetryContent,\n TelemetryConstant,\n getPayloadObject,\n getTelemetryAttributes\n} from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport classnames from 'classnames';\n\n/**\n * Class names used in component.\n */\nconst componentClassName = 'ms-order-history-with-search-and-filters-view-mode-selector';\nconst detailsViewClassName = `${componentClassName}__detailed-view`;\nconst listViewClassName = `${componentClassName}__list-view`;\nconst viewSelectedClassName = `${componentClassName}__selected`;\n\n/**\n * IOrderHistoryWithSearchAndFiltersViewModeResources interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersViewModeResources {\n listViewOptionAriaLabel?: string;\n detailedViewOptionAriaLabel?: string;\n}\n\n/**\n * OrderHistoryWithSearchAndFiltersViewModeState interface.\n */\nexport enum OrderHistoryWithSearchAndFiltersViewModeState {\n DetailedView,\n ListView\n}\n\n/**\n * IOrderHistoryWithSearchAndFiltersViewModeProps interface.\n */\nexport interface IOrderHistoryWithSearchAndFiltersViewModeProps extends IComponentProps<{}> {\n className?: string;\n resources?: IOrderHistoryWithSearchAndFiltersViewModeResources;\n currentViewModeState: OrderHistoryWithSearchAndFiltersViewModeState;\n telemetryContent?: ITelemetryContent;\n onClick(state: OrderHistoryWithSearchAndFiltersViewModeState): void;\n}\n\n/**\n * OrderHistoryWithSearchAndFiltersViewMode component.\n * @param props - Configuration of the component.\n * @returns React node.\n */\nconst OrderHistoryWithSearchAndFiltersViewModeFunctionalComponent: React.FC<IOrderHistoryWithSearchAndFiltersViewModeProps> = (\n props: IOrderHistoryWithSearchAndFiltersViewModeProps\n) => {\n const [viewModeState, setViewModeState] = React.useState(props.currentViewModeState);\n\n const onClickHandler = (newViewModeState: OrderHistoryWithSearchAndFiltersViewModeState) => {\n setViewModeState(newViewModeState);\n props.onClick(newViewModeState);\n };\n\n // define telemetry attributes\n const viewModeDetailedViewAttributes = getTelemetryAttributes(\n props.telemetryContent!,\n getPayloadObject('click', props.telemetryContent!, `${TelemetryConstant.ViewMode} - Detailed view`)\n );\n const viewModeListViewAttributes = getTelemetryAttributes(\n props.telemetryContent!,\n getPayloadObject('click', props.telemetryContent!, `${TelemetryConstant.ViewMode} - List view`)\n );\n\n return (\n <div className={classnames(props.className, componentClassName)}>\n <Button\n className={classnames(\n detailsViewClassName,\n viewModeState === OrderHistoryWithSearchAndFiltersViewModeState.DetailedView ? viewSelectedClassName : ''\n )}\n aria-label={props.resources?.detailedViewOptionAriaLabel ?? ''}\n title={props.resources?.detailedViewOptionAriaLabel ?? ''}\n role='button'\n onClick={() => onClickHandler(OrderHistoryWithSearchAndFiltersViewModeState.DetailedView)}\n {...viewModeDetailedViewAttributes}\n />\n <Button\n className={classnames(\n listViewClassName,\n viewModeState === OrderHistoryWithSearchAndFiltersViewModeState.ListView ? viewSelectedClassName : ''\n )}\n aria-label={props.resources?.listViewOptionAriaLabel ?? ''}\n title={props.resources?.listViewOptionAriaLabel ?? ''}\n role='button'\n onClick={() => onClickHandler(OrderHistoryWithSearchAndFiltersViewModeState.ListView)}\n {...viewModeListViewAttributes}\n />\n </div>\n );\n};\n\n/**\n * OrderHistoryWithSearchAndFiltersViewMode component.\n */\nexport const OrderHistoryWithSearchAndFiltersViewModeComponent: React.FunctionComponent<IOrderHistoryWithSearchAndFiltersViewModeProps> = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IOrderHistoryWithSearchAndFiltersViewModeProps\n>('OrderHistoryWithSearchAndFiltersViewModeComponent', { component: OrderHistoryWithSearchAndFiltersViewModeFunctionalComponent });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRefinerItemData, RefinerItemType } from '@msdyn365-commerce/components';\nimport { ChannelIdentity, SalesStatus } from '@msdyn365-commerce/retail-proxy';\nimport { IOrderHistoryWithSearchAndFiltersResources } from '../order-history-with-search-and-filters.props.autogenerated';\nimport { getOrderStatusLabel } from './get-sales-order';\nimport { DateRefinerOptionItem, IDateRange, OrderStatusRefinerOptionItem, RefinerSourceType } from './refiner-option';\n\nexport function mapChannelIdentityIntoIRefinerItemData(channelIdentity: ChannelIdentity): IRefinerItemData {\n return {\n sourceTypeValue: RefinerSourceType.Origin,\n label: channelIdentity.Name ?? channelIdentity.RecordId.toString(),\n value: channelIdentity.RecordId.toString(),\n refinerItemId: channelIdentity.RecordId,\n isChecked: false,\n itemType: RefinerItemType.Check\n };\n}\n\nexport function mapDateRefinerOptionIntoIRefinerItemData(\n dateRefinerOptionItem: DateRefinerOptionItem,\n resources: IOrderHistoryWithSearchAndFiltersResources\n): IRefinerItemData {\n let itemData: IRefinerItemData;\n switch (dateRefinerOptionItem) {\n case DateRefinerOptionItem.LastSevenDays:\n itemData = {\n label: resources.lastSevenDaysCreatedDateRefinerItemLabel,\n itemType: RefinerItemType.Check\n } as IRefinerItemData;\n break;\n case DateRefinerOptionItem.LastThirtyDays:\n itemData = {\n label: resources.lastThirtyDaysCreatedDateRefinerItemLabel,\n itemType: RefinerItemType.Check\n } as IRefinerItemData;\n break;\n case DateRefinerOptionItem.LastThreeMonths:\n itemData = {\n label: resources.lastThreeMonthsCreatedDateRefinerItemLabel,\n itemType: RefinerItemType.Check\n } as IRefinerItemData;\n break;\n case DateRefinerOptionItem.LastSixMonths:\n itemData = {\n label: resources.lastSixMonthsCreatedDateRefinerItemLabel,\n itemType: RefinerItemType.Check\n } as IRefinerItemData;\n break;\n case DateRefinerOptionItem.Customized:\n itemData = {\n label: resources.customizedCreatedDateRefinerItemLabel,\n minLabel: resources.customizedStartDateRefinerItemLabel,\n maxLabel: resources.customizedEndDateRefinerItemLabel,\n itemType: RefinerItemType.DateRange\n } as IRefinerItemData;\n break;\n default:\n throw new Error(`Invalid date refiner option: ${dateRefinerOptionItem}`);\n }\n\n return {\n ...itemData,\n sourceTypeValue: RefinerSourceType.CreatedDate,\n value: dateRefinerOptionItem.toString(),\n refinerItemId: dateRefinerOptionItem,\n isChecked: false\n } as IRefinerItemData;\n}\n\nexport function mapIRefinerItemDataIntoDateRefinerOptionItem(refinerItemData?: IRefinerItemData): DateRefinerOptionItem | undefined {\n if (!refinerItemData) {\n return;\n }\n\n const value = Number(refinerItemData.value);\n if (isNaN(value)) {\n return;\n }\n\n switch (value) {\n case DateRefinerOptionItem.LastSevenDays:\n case DateRefinerOptionItem.LastThirtyDays:\n case DateRefinerOptionItem.LastThreeMonths:\n case DateRefinerOptionItem.LastSixMonths:\n case DateRefinerOptionItem.Customized:\n return value;\n default:\n return;\n }\n}\n\nexport function getDateRange(dateRefinerOptionItem: DateRefinerOptionItem): IDateRange {\n switch (dateRefinerOptionItem) {\n case DateRefinerOptionItem.LastSevenDays:\n return {\n startDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),\n endDate: new Date()\n } as IDateRange;\n case DateRefinerOptionItem.LastThirtyDays:\n return {\n startDate: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),\n endDate: new Date()\n } as IDateRange;\n case DateRefinerOptionItem.LastThreeMonths:\n return {\n startDate: new Date(Date.now() - 3 * 30 * 24 * 60 * 60 * 1000),\n endDate: new Date()\n } as IDateRange;\n case DateRefinerOptionItem.LastSixMonths:\n return {\n startDate: new Date(Date.now() - 6 * 30 * 24 * 60 * 60 * 1000),\n endDate: new Date()\n } as IDateRange;\n default:\n return {} as IDateRange;\n }\n}\n\nexport function getDateFromString(dateString?: string): Date | undefined {\n if (!dateString) {\n return undefined;\n }\n\n const parts: string[] = dateString.split('-');\n if (parts.length !== 3) {\n return undefined;\n }\n\n const now = new Date();\n return new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]), now.getHours(), now.getMinutes(), now.getSeconds());\n}\n\nexport function mapOrderStatusRefinerOptionIntoIRefinerItemData(\n orderStatusRefinerOptionItem: OrderStatusRefinerOptionItem,\n resources: IOrderHistoryWithSearchAndFiltersResources\n): IRefinerItemData {\n let itemData: IRefinerItemData;\n switch (orderStatusRefinerOptionItem) {\n case OrderStatusRefinerOptionItem.Created:\n case OrderStatusRefinerOptionItem.Delivered:\n case OrderStatusRefinerOptionItem.Invoiced:\n case OrderStatusRefinerOptionItem.Canceled:\n itemData = {\n label: getOrderStatusRefinerOptionItemLabel(orderStatusRefinerOptionItem, resources)\n } as IRefinerItemData;\n break;\n default:\n throw new Error(`Invalid order status refiner option: ${orderStatusRefinerOptionItem}`);\n }\n\n return {\n ...itemData,\n sourceTypeValue: RefinerSourceType.OrderStatus,\n value: orderStatusRefinerOptionItem.toString(),\n refinerItemId: orderStatusRefinerOptionItem,\n isChecked: false,\n itemType: RefinerItemType.Check\n } as IRefinerItemData;\n}\n\nfunction getOrderStatusRefinerOptionItemLabel(\n orderStatusRefinerOptionItem: OrderStatusRefinerOptionItem,\n resources: IOrderHistoryWithSearchAndFiltersResources\n): string {\n return getOrderStatusLabel(mapOrderStatusRefinerOptionItemIntoSalesStatus(orderStatusRefinerOptionItem), resources);\n}\n\nexport function mapIRefinerItemDataIntoOrderStatusRefinerOptionItem(\n refinerItemData?: IRefinerItemData\n): OrderStatusRefinerOptionItem | undefined {\n if (!refinerItemData) {\n return;\n }\n\n const value = Number(refinerItemData.value);\n if (isNaN(value)) {\n return;\n }\n\n switch (value) {\n case OrderStatusRefinerOptionItem.Created:\n case OrderStatusRefinerOptionItem.Delivered:\n case OrderStatusRefinerOptionItem.Invoiced:\n case OrderStatusRefinerOptionItem.Canceled:\n return value as OrderStatusRefinerOptionItem;\n default:\n return;\n }\n}\n\nexport function mapOrderStatusRefinerOptionItemIntoSalesStatus(\n orderStatusRefinerOptionItem?: OrderStatusRefinerOptionItem\n): SalesStatus | undefined {\n switch (orderStatusRefinerOptionItem) {\n case OrderStatusRefinerOptionItem.Created:\n return SalesStatus.Created;\n case OrderStatusRefinerOptionItem.Delivered:\n return SalesStatus.Delivered;\n case OrderStatusRefinerOptionItem.Invoiced:\n return SalesStatus.Invoiced;\n case OrderStatusRefinerOptionItem.Canceled:\n return SalesStatus.Canceled;\n default:\n return;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRefinerSortOption } from '@msdyn365-commerce/components';\nimport { IOrderHistoryWithSearchAndFiltersResources } from '../order-history-with-search-and-filters.props.autogenerated';\nimport { SortOption } from './sort-option';\n\nexport function mapSortOptionIntoIRefinerSortOption(\n sortOption: SortOption,\n resources: IOrderHistoryWithSearchAndFiltersResources\n): IRefinerSortOption {\n switch (sortOption) {\n case SortOption.CreatedDateTimeAscending:\n return {\n label: resources.createdDateTimeAscendingSortOptionLabel,\n value: SortOption.CreatedDateTimeAscending\n } as IRefinerSortOption;\n case SortOption.CreatedDateTimeDescending:\n return {\n label: resources.createdDateTimeDescendingSortOptionLabel,\n value: SortOption.CreatedDateTimeDescending\n } as IRefinerSortOption;\n case SortOption.ConfirmedShipDateAscending:\n return {\n label: resources.confirmedShipDateAscendingSortOptionLabel,\n value: SortOption.ConfirmedShipDateAscending\n } as IRefinerSortOption;\n case SortOption.ConfirmedShipDateDescending:\n return {\n label: resources.confirmedShipDateDescendingSortOptionLabel,\n value: SortOption.ConfirmedShipDateDescending\n } as IRefinerSortOption;\n default:\n throw new Error(`Invalid sort option: ${sortOption}`);\n }\n}\n\nexport function mapIRefinerSortOptionIntoSortOption(refinerSortOption?: IRefinerSortOption): SortOption | undefined {\n if (!refinerSortOption) {\n return;\n }\n\n if (refinerSortOption.value === SortOption.CreatedDateTimeAscending.toString()) {\n return SortOption.CreatedDateTimeAscending;\n }\n\n if (refinerSortOption.value === SortOption.CreatedDateTimeDescending.toString()) {\n return SortOption.CreatedDateTimeDescending;\n }\n\n if (refinerSortOption.value === SortOption.ConfirmedShipDateAscending.toString()) {\n return SortOption.ConfirmedShipDateAscending;\n }\n\n if (refinerSortOption.value === SortOption.ConfirmedShipDateDescending.toString()) {\n return SortOption.ConfirmedShipDateDescending;\n }\n\n return;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n TelemetryConstant,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\n\nimport {\n getUpdatedRefinementCriteria,\n IRefinerApplyProps,\n IRefinerChoiceSummaryClickNotification,\n IRefinerChoiceSummaryProps,\n IRefinerFooterProps,\n IRefinerHeaderProps,\n IRefinerItemData,\n IRefinerItemToggleNotification,\n IRefinerModalProps,\n IRefinerModalToggleProps,\n IRefinerProps,\n IRefinerSortOption,\n IRefinerSortProps,\n IRefinerToggleProps,\n ISearchBarOption,\n ISearchBarProps,\n isMatchingRefinementCriterion,\n RefinerOptionsComponent,\n RefinerOptionsType\n} from '@msdyn365-commerce/components';\n\nimport classname from 'classnames';\nimport { computed, observable, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OrderOriginator, OrderSearchCriteria, SalesOrder, SalesStatus } from '@msdyn365-commerce/retail-proxy';\nimport { Label } from '../../common/label';\nimport {\n getGetOrderHistoryWithSearchAndFiltersAction,\n GetOrderHistoryWithSearchAndFiltersInput,\n IGetOrderHistoryWithSearchAndFiltersSorting,\n IOrderHistoryWithSearchAndFiltersResult\n} from './actions/get-order-history-with-search-and-filters';\nimport { getOriginatorsAction, GetOrderOriginatorsInput } from '../../actions/get-sales-order-originators';\nimport {\n IOrderHistoryWithSearchAndFiltersHeaderProps,\n IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps,\n OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState,\n OrderHistoryWithSearchAndFiltersViewModeState,\n IOrderHistoryWithSearchAndFiltersViewModeProps,\n OrderHistoryWithSearchAndFiltersViewModeComponent,\n OrderHistoryWithSearchAndFiltersOrderTableComponent\n} from './components';\nimport { IOrderHistoryWithSearchAndFiltersData } from './order-history-with-search-and-filters.data';\nimport { IOrderHistoryWithSearchAndFiltersProps } from './order-history-with-search-and-filters.props.autogenerated';\nimport { SearchOption } from './common/search-option';\nimport { mapISearchBarOptionIntoSearchOption, mapSearchOptionIntoISearchBarOption } from './common/search-option-mappings';\nimport { DateRefinerOptionItem, RefinerSourceType } from './common/refiner-option';\nimport {\n getDateFromString,\n getDateRange,\n mapChannelIdentityIntoIRefinerItemData,\n mapDateRefinerOptionIntoIRefinerItemData,\n mapIRefinerItemDataIntoDateRefinerOptionItem,\n mapIRefinerItemDataIntoOrderStatusRefinerOptionItem,\n mapOrderStatusRefinerOptionIntoIRefinerItemData,\n mapOrderStatusRefinerOptionItemIntoSalesStatus\n} from './common/refiner-option-mappings';\nimport { OrderHistoryWithSearchAndFiltersOrderListComponent } from './components/order-history-with-search-and-filters-order-list.component';\nimport { mapIRefinerSortOptionIntoSortOption, mapSortOptionIntoIRefinerSortOption } from './common/sort-option-mappings';\nimport { SortOption } from './common/sort-option';\n\ninterface IOrderHistoryWithSearchAndFiltersViewRefinerState {\n isModalOpen: boolean;\n isExpanded: boolean;\n currentSortOption?: IRefinerSortOption;\n}\n\ninterface IOrderHistoryWithSearchAndFiltersViewSearchBarState {\n currentSearchOption?: ISearchBarOption;\n currentSearchText?: string;\n}\n\nexport interface IOrderHistoryWithSearchAndFiltersViewState {\n isDataReady: boolean;\n hasError: boolean;\n isLoading: boolean;\n isShowMoreButton: boolean;\n errorCode?: string;\n errorMessage?: string;\n}\n\nexport interface IOrderHistoryWithSearchAndFiltersViewProps\n extends IOrderHistoryWithSearchAndFiltersProps<IOrderHistoryWithSearchAndFiltersData> {\n orderHistoryWithSearchAndFiltersProps: IModuleProps;\n headerProps: IOrderHistoryWithSearchAndFiltersHeaderProps;\n organizationWideSelectorProps?: IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps;\n viewState: IOrderHistoryWithSearchAndFiltersViewState;\n searchBarProps?: ISearchBarProps;\n refinerProps: IRefinerProps;\n orderHistorywithSearchAndFiltersResult: IOrderHistoryWithSearchAndFiltersResult;\n alert?: React.ReactNode;\n loading?: React.ReactNode;\n emptyMessage?: React.ReactNode;\n backToShoppingLink?: React.ReactNode;\n list?: React.ReactNode;\n table?: React.ReactNode;\n moreButton?: React.ReactNode;\n}\n\n/**\n * Grid size enum.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n *\n * OrderHistoryWithSearchAndFilters component.\n * @extends {React.Component<IOrderHistoryWithSearchAndFiltersProps<IOrderHistoryWithSearchAndFiltersData>>}\n */\n@observer\nclass OrderHistoryWithSearchAndFilters extends React.Component<\n IOrderHistoryWithSearchAndFiltersProps<IOrderHistoryWithSearchAndFiltersData>\n> {\n @observable private orderHistoryWithSearchAndFilters!: IOrderHistoryWithSearchAndFiltersResult;\n\n @observable private viewState!: IOrderHistoryWithSearchAndFiltersViewState;\n\n @observable private _refinerState!: IOrderHistoryWithSearchAndFiltersViewRefinerState;\n\n @observable private _activeRefinementCriteria: IRefinerItemData[];\n\n private originatorList!: OrderOriginator[];\n\n @observable private _ordersViewModeState: OrderHistoryWithSearchAndFiltersViewModeState;\n\n @observable private _viewport: GridSize;\n\n private _organizationWideSelectorState: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState;\n\n private pageSize!: number;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private readonly _refinerModalToggleRef: React.RefObject<HTMLButtonElement>;\n\n private _searchBarState: IOrderHistoryWithSearchAndFiltersViewSearchBarState;\n\n private readonly orderHistoryClassName = 'ms-order-history-with-search-and-filters';\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderHistoryWithSearchAndFiltersProps<IOrderHistoryWithSearchAndFiltersData>) {\n super(props);\n this.initState();\n this._organizationWideSelectorState = OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState.CurrentUser;\n this._ordersViewModeState = OrderHistoryWithSearchAndFiltersViewModeState.DetailedView;\n this._searchBarState = {\n currentSearchOption: undefined,\n currentSearchText: ''\n };\n this._activeRefinementCriteria = [];\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._refinerModalToggleRef = React.createRef<HTMLButtonElement>();\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\n public componentDidMount(): void {\n if (this.props.context.actionContext.requestContext.user.isAuthenticated) {\n this._updateOrderHistory();\n } else {\n this.viewState.isDataReady = true;\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n this._activeRefinementCriteria = [];\n }\n\n public componentWillUnmount(): void {\n if (Msdyn365.msdyn365Commerce.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderHistoryWithSearchAndFiltersProps<IOrderHistoryWithSearchAndFiltersData>,\n nextState: IOrderHistoryWithSearchAndFiltersViewState\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 {\n const {\n config: { className, shouldShowCount },\n resources: { genericErrorMessage, noOrderHistoryLable, moreButtonText, backToShopping, loadingLabel }\n } = this.props;\n const { salesOrders, products } = this.orderHistoryWithSearchAndFilters;\n const { isDataReady, hasError, isShowMoreButton, isLoading } = this.viewState;\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const channelIdentities = this.props.data.channels.result && this.props.data.channels.result.channelIdentities;\n const orgUnitLocations = this.props.data.orgUnitLocations.result && this.props.data.orgUnitLocations.result.orgUnitLocations;\n const customer = this.props.data.customerInformation && this.props.data.customerInformation.result;\n\n let viewProps: IOrderHistoryWithSearchAndFiltersViewProps = {\n ...this.props,\n orderHistorywithSearchAndFiltersResult: this.orderHistoryWithSearchAndFilters,\n viewState: this.viewState,\n orderHistoryWithSearchAndFiltersProps: {\n moduleProps: this.props,\n className: classname(this.orderHistoryClassName, className)\n },\n headerProps: this._getHeaderProps(),\n searchBarProps: this._getSearchBarProps(),\n refinerProps: this._getRefinerProps(),\n organizationWideSelectorProps: this._getOrganizationWideSelectorProps(),\n backToShoppingLink: backToShoppingUrl && (\n <Button className={`${this.orderHistoryClassName}__btn-keep-shopping`} href={backToShoppingUrl}>\n {backToShopping}\n </Button>\n )\n };\n\n if (hasError) {\n viewProps = {\n ...viewProps,\n alert: <Label className={`${this.orderHistoryClassName}__alert`} label={genericErrorMessage} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!isDataReady) {\n viewProps = {\n ...viewProps,\n loading: <Label className={`${this.orderHistoryClassName}__loading`} label={loadingLabel} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!salesOrders || salesOrders.length === 0) {\n if (this.viewState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\n viewProps = {\n ...viewProps,\n emptyMessage: <p className={`${this.orderHistoryClassName}__empty-message`}>{this.viewState.errorMessage}</p>\n };\n } else {\n viewProps = {\n ...viewProps,\n emptyMessage: <p className={`${this.orderHistoryClassName}__empty-message`}>{noOrderHistoryLable}</p>\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n this.payLoad.contentAction.etext = TelemetryConstant.ViewMore;\n const viewMoreAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\n\n const productsDetailedViewLimit = 5;\n\n viewProps = {\n ...viewProps,\n headerProps: {\n ...viewProps.headerProps,\n showOrderCount: shouldShowCount ?? true\n },\n table:\n this._ordersViewModeState === OrderHistoryWithSearchAndFiltersViewModeState.ListView ? (\n <OrderHistoryWithSearchAndFiltersOrderTableComponent\n context={this.props.context}\n id={this.props.id}\n typeName={this.props.typeName}\n className={`${this.orderHistoryClassName}__table-list`}\n showChannelInfo={this.props.config.showChannelInfo ?? false}\n showOrderPlacedBy={Msdyn365.isChannelTypeB2B(this.props.context.request) ?? false}\n isMobileView={this.isMobile}\n telemetryContent={this.telemetryContent}\n data={{\n salesOrders,\n channelIdentities,\n orgUnitLocations,\n customer,\n originators: this.originatorList\n }}\n resources={this.props.resources}\n />\n ) : (\n undefined\n ),\n list:\n this._ordersViewModeState === OrderHistoryWithSearchAndFiltersViewModeState.DetailedView ? (\n <OrderHistoryWithSearchAndFiltersOrderListComponent\n context={this.props.context}\n id={this.props.id}\n typeName={this.props.typeName}\n className={`${this.orderHistoryClassName}__sales-order-list`}\n showChannelInfo={this.props.config.showChannelInfo ?? false}\n showOrderPlacedBy={Msdyn365.isChannelTypeB2B(this.props.context.request) ?? false}\n isMobileView={this.isMobile}\n salesLinesLimit={productsDetailedViewLimit}\n telemetryContent={this.telemetryContent}\n data={{\n salesOrders,\n products,\n channelIdentities,\n orgUnitLocations,\n customer,\n originators: this.originatorList\n }}\n resources={this.props.resources}\n moduleProps={this.props}\n />\n ) : (\n undefined\n ),\n moreButton: isShowMoreButton && (\n <Button\n className={`${this.orderHistoryClassName}__btn-more ${isLoading ? 'is-busy' : ''}`}\n {...viewMoreAttributes}\n disabled={isLoading}\n onClick={this._onMoreButtonClick}\n >\n {moreButtonText}\n </Button>\n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Initializes the view state.\n */\n private readonly initState = () => {\n this.viewState = {\n isDataReady: false,\n hasError: false,\n isShowMoreButton: (this.props.config.pageSize || 0) > 0,\n isLoading: false,\n errorCode: '',\n errorMessage: ''\n };\n this.originatorList = [];\n this.pageSize = this.props.config.pageSize || 10;\n this.orderHistoryWithSearchAndFilters = {\n salesOrders: [],\n products: [],\n paging: {\n top: this.pageSize,\n nextPageToken: '0,0,0'\n }\n };\n this._refinerState = {\n isModalOpen: false,\n isExpanded: false,\n currentSortOption: (() => {\n // keep existing sort option if it exists\n if (this._refinerState?.currentSortOption) {\n return this._refinerState.currentSortOption;\n }\n // otherwise, use the first sort option if it exists\n const sortOptions = this.props.data?.sortOptions?.result ?? [];\n const sortOption = sortOptions.length > 0 ? sortOptions[0] : undefined;\n return sortOption ? mapSortOptionIntoIRefinerSortOption(sortOption, this.props.resources) : undefined;\n })()\n };\n };\n\n /**\n * Handles the heading change.\n */\n private _handleOrderHistoryHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.heading!.text = event.target.value);\n\n /**\n * Handles the viewport change.\n * Updates the viewport state.\n */\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this._refinerState.isModalOpen && !this.isMobile) {\n this._toggleRefinerModal();\n }\n }\n\n private _getViewport(): GridSize {\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n /**\n * Handles the click on a choice in refiner choice summary.\n * Removes the choice from refinement criteria.\n * @param notification\n */\n private readonly _clickRefinerChoice = (notification: IRefinerChoiceSummaryClickNotification): void => {\n const { telemetry } = this.props;\n let currentRefinementCriteria = this._activeRefinementCriteria ?? [];\n\n if (!notification.shouldClearAll) {\n const selectedChoice: IRefinerItemData | undefined = notification.selectedRefinerItem;\n if (!selectedChoice) {\n telemetry.warning(`[${this.orderHistoryClassName}._clickRefinerChoice] Choice could not be determined`);\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: IRefinerItemData) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n this._activeRefinementCriteria = currentRefinementCriteria;\n\n // if the refiner is collapsed, apply the refinement criteria automatically\n if (!this._refinerState.isExpanded) {\n this._applyRefinerChoices();\n }\n };\n\n /**\n * Handles the click on refiner clear all option.\n * Removes all choices from refinement criteria.\n * @param notification\n */\n private readonly _clickRefinerClearAll = (notification: IRefinerChoiceSummaryClickNotification): void => {\n this._clickRefinerChoice(notification);\n };\n\n /**\n * Handles the click on refiner item.\n * Updates the refiner item state and the refinement criteria.\n * @param notification The selected refiner item.\n */\n private readonly _toggleRefinerItem = (notification: IRefinerItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required\n if (!requestContext || !actionContext) {\n const error = `Refiner cannot refine search criteria:\n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(notification, this._activeRefinementCriteria || []);\n transaction(() => {\n this._activeRefinementCriteria = updatedRefinementCriteria;\n });\n };\n\n /**\n * Handles the click on refiner toggle.\n * Updates the refiner modal state.\n */\n private readonly _toggleRefinerModal = (): void => {\n this._refinerState.isModalOpen = !this._refinerState.isModalOpen;\n };\n\n /**\n * Handles the click on apply button.\n * Resets the view state and updates the order history information.\n */\n private readonly _applyRefinerChoices = (): void => {\n this.initState();\n this._updateOrderHistory();\n };\n\n /**\n * Handles the click on more button.\n * Updates the order history information.\n */\n private readonly _onMoreButtonClick = (): void => {\n this._updateOrderHistory();\n };\n\n /**\n * Handles the click on order view mode option.\n * Updates the order view mode information.\n * @param state The new orders view mode state.\n */\n private readonly _clickOrderViewMode = (state: OrderHistoryWithSearchAndFiltersViewModeState) => {\n this._ordersViewModeState = state;\n };\n\n /**\n * Handles the click on organization wide selector option.\n * It updates the organization wide selector state and updates the order history information.\n * @param state The new organization wide selector state.\n */\n private readonly _clickOrganizationWideSelectorOption = (state: OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState) => {\n this.initState();\n this._organizationWideSelectorState = state;\n this._updateOrderHistory();\n };\n\n /**\n * Handles the click on search button.\n */\n private readonly _clickSearchButton = (searchOption?: ISearchBarOption, searchText?: string): void => {\n this.initState();\n this._searchBarState = {\n currentSearchOption: searchOption,\n currentSearchText: searchText\n };\n this._updateOrderHistory();\n };\n\n /**\n * Handles the selection of a sort option.\n */\n private readonly _selectRefinerSortOption = (sortOption: IRefinerSortOption): void => {\n if (this._refinerState.isExpanded || this._refinerState.isModalOpen) {\n this._refinerState.currentSortOption = sortOption;\n } else {\n this.initState();\n this._refinerState.currentSortOption = sortOption;\n this._updateOrderHistory();\n }\n };\n\n /**\n * Gets the order originator information for each order.\n */\n private readonly getOriginator = async (salesOrders: SalesOrder[]): Promise<void> => {\n if (Msdyn365.isUserTypeB2B(this.props.context.request)) {\n const actionContext = this.props.context.actionContext;\n let result: OrderOriginator[] | undefined;\n try {\n const salesIds = salesOrders.map(order => order.SalesId ?? '').filter(id => id !== '');\n const transactionIds = salesOrders.map(order => order.Id ?? '').filter(id => id !== '');\n const originatorsInput = new GetOrderOriginatorsInput(transactionIds, salesIds, this.props.context.request.apiSettings);\n result = await getOriginatorsAction(originatorsInput, actionContext);\n } catch (error) {\n result = undefined;\n }\n if (result) {\n this.originatorList.push(...result);\n }\n }\n };\n\n /**\n * Gets the order history information and updates the view state.\n */\n private readonly _updateOrderHistory = () => {\n this.getOrderHistory()\n .then(() => {\n this.viewState.isDataReady = true;\n })\n .catch(() => {\n this.viewState.hasError = true;\n });\n };\n\n /**\n * Gets the order history information and updates the view state.\n */\n private readonly getOrderHistory = async (): Promise<void> => {\n const actionContext = this.props.context.actionContext;\n\n let searchCriteria: OrderSearchCriteria | undefined;\n try {\n searchCriteria = this._getSearchCriteria();\n } catch (error) {\n // update order history information\n this.orderHistoryWithSearchAndFilters.products.push(...[]);\n this.orderHistoryWithSearchAndFilters.salesOrders.push(...[]);\n\n // update pagination information\n this.orderHistoryWithSearchAndFilters.paging = {\n top: this.pageSize,\n nextPageToken: '0,0,0'\n };\n this.viewState.isShowMoreButton = false;\n this.viewState.isLoading = false;\n return Promise.resolve();\n }\n\n const input = new GetOrderHistoryWithSearchAndFiltersInput(\n this.orderHistoryWithSearchAndFilters.paging,\n this.props.context.request.apiSettings,\n this._organizationWideSelectorState,\n searchCriteria,\n this._getSortingCriteria()\n );\n\n try {\n this.viewState.isLoading = true;\n const response = await getGetOrderHistoryWithSearchAndFiltersAction(input, actionContext);\n if (response) {\n const { products, salesOrders, paging, error } = response;\n\n if (error && error.statusCode && error.statusCode === 500) {\n this.viewState.errorMessage = this.props.resources.orderHistoryApiTimeoutErrorMessage;\n this.viewState.isLoading = false;\n return Promise.reject();\n }\n // update order history information\n this.orderHistoryWithSearchAndFilters.products.push(...products);\n this.orderHistoryWithSearchAndFilters.salesOrders.push(...salesOrders);\n\n // update pagination information\n this.orderHistoryWithSearchAndFilters.paging = paging;\n this.viewState.isShowMoreButton =\n this.viewState.isShowMoreButton && response.salesOrders.length > 0 && response.salesOrders.length === this.pageSize;\n\n // retrieve originator information\n await this.getOriginator(salesOrders);\n }\n this.viewState.isLoading = false;\n await Promise.resolve();\n return;\n } catch (error) {\n this.viewState.isLoading = false;\n\n // check the error to determine if the error is due to authorization failure\n if (error?.error?.name === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\n this.viewState.errorCode = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n this.viewState.errorMessage = error.error?.name;\n return Promise.reject();\n }\n\n return Promise.reject();\n }\n };\n\n /**\n * Gets the order search criteria based on the active refinement criteria.\n * @returns The order search criteria.\n * @throws Error if the channel name is not found.\n */\n private readonly _getSearchCriteria = (): OrderSearchCriteria => {\n const orderSearchCriteria: OrderSearchCriteria = {};\n\n // retrieve the channel refiner information and populate the search criteria\n const channelIds: number[] = this._activeRefinementCriteria\n .filter(refinement => refinement.sourceTypeValue === RefinerSourceType.Origin && !isNaN(Number(refinement.value)))\n .map(refinement => Number(refinement.value));\n if (channelIds.length > 0) {\n orderSearchCriteria.ChannelIds = channelIds;\n }\n\n // retrieve the order status refiner information and populate the search criteria\n const statusValues: SalesStatus[] = this._activeRefinementCriteria\n .filter(refinement => refinement.sourceTypeValue === RefinerSourceType.OrderStatus)\n .map(refinement => mapIRefinerItemDataIntoOrderStatusRefinerOptionItem(refinement))\n .map(orderStatusRefinerItem => mapOrderStatusRefinerOptionItemIntoSalesStatus(orderStatusRefinerItem))\n .filter(salesStatus => salesStatus !== undefined) as SalesStatus[];\n if (statusValues.length > 0) {\n orderSearchCriteria.OrderStatusValues = statusValues;\n }\n\n // retrieve the date refiner information and populate the search criteria\n const dates: IRefinerItemData[] = this._activeRefinementCriteria.filter(\n refinement => refinement.sourceTypeValue === RefinerSourceType.CreatedDate\n );\n if (dates.length === 1) {\n const dateOption: DateRefinerOptionItem | undefined = mapIRefinerItemDataIntoDateRefinerOptionItem(dates[0]);\n if (dateOption === DateRefinerOptionItem.Customized) {\n orderSearchCriteria.StartDateTime = getDateFromString(dates[0].minValue);\n orderSearchCriteria.EndDateTime = getDateFromString(dates[0].maxValue);\n } else {\n const { startDate, endDate } = getDateRange(dates[0].refinerItemId);\n orderSearchCriteria.StartDateTime = startDate;\n orderSearchCriteria.EndDateTime = endDate;\n }\n } else if (dates.length > 1) {\n this.props.telemetry.warning(`[${this.orderHistoryClassName}._getSearchCriteria] Multiple date refiners are selected`);\n }\n\n // retrieve the search option information and populate the search criteria\n const searchOption: SearchOption | undefined = mapISearchBarOptionIntoSearchOption(this._searchBarState.currentSearchOption);\n\n if (searchOption === SearchOption.OrderNumber) {\n orderSearchCriteria.SalesId = this._searchBarState.currentSearchText;\n }\n\n if (searchOption === SearchOption.ConfirmationId) {\n orderSearchCriteria.ChannelReferenceId = this._searchBarState.currentSearchText;\n }\n\n if (searchOption === SearchOption.CustomerRequisition) {\n orderSearchCriteria.CustomerRequisition = this._searchBarState.currentSearchText;\n }\n\n if (searchOption === SearchOption.ChannelName) {\n const channelIdentities = (this.props.data.channels.result && this.props.data.channels.result.channelIdentities) ?? [];\n const searchChannelName = this._searchBarState.currentSearchText ?? '';\n\n if (searchChannelName) {\n orderSearchCriteria.ChannelIds = channelIdentities\n .filter(channel => channel.Name?.toLowerCase()?.includes(searchChannelName.toLocaleLowerCase().replace('*', '')))\n .map(channel => channel.RecordId);\n\n // we must not return orders if there is no channel whose name is equals to given search text.\n if (orderSearchCriteria.ChannelIds.length === 0) {\n throw new Error('No channel found with given channel name.');\n }\n }\n }\n\n return orderSearchCriteria;\n };\n\n /**\n * Gets the sorting criteria based on the refiner sort option.\n * @returns The sorting criteria.\n */\n private readonly _getSortingCriteria = (): IGetOrderHistoryWithSearchAndFiltersSorting | undefined => {\n let sorting: IGetOrderHistoryWithSearchAndFiltersSorting | undefined;\n const sortOption: SortOption | undefined = mapIRefinerSortOptionIntoSortOption(this._refinerState.currentSortOption);\n switch (sortOption) {\n case SortOption.CreatedDateTimeAscending:\n sorting = {\n columnName: 'CREATEDDATETIME',\n isDescending: false\n };\n break;\n case SortOption.CreatedDateTimeDescending:\n sorting = {\n columnName: 'CREATEDDATETIME',\n isDescending: true\n };\n break;\n case SortOption.ConfirmedShipDateAscending:\n sorting = {\n columnName: 'CONFIRMEDSHIPDATE',\n isDescending: false\n };\n break;\n case SortOption.ConfirmedShipDateDescending:\n sorting = {\n columnName: 'CONFIRMEDSHIPDATE',\n isDescending: true\n };\n break;\n default:\n break;\n }\n\n return sorting;\n };\n\n /**\n * Gets the header.\n * @returns Header props.\n */\n private readonly _getHeaderProps = (): IOrderHistoryWithSearchAndFiltersHeaderProps => {\n const {\n context,\n id,\n typeName,\n config: { heading }\n } = this.props;\n\n return {\n context: context,\n id: id,\n typeName: typeName,\n data: {\n salesOrders: this.orderHistoryWithSearchAndFilters.salesOrders\n },\n className: `${this.orderHistoryClassName}__header`,\n resources: {\n orderCountLabel: this.props.resources.orderCountLabel,\n ordersCountLabel: this.props.resources.ordersCountLabel\n },\n textProps: heading,\n showOrderCount: false,\n onChange: this._handleOrderHistoryHeadingChange\n } as IOrderHistoryWithSearchAndFiltersHeaderProps;\n };\n\n /**\n * Gets the orders view mode selector.\n * @returns Orders view mode selector props.\n */\n private readonly _getOrdersViewModeProps = (): IOrderHistoryWithSearchAndFiltersViewModeProps | undefined => {\n const { context, id, typeName } = this.props;\n\n if (this.props.config.isGridViewEnabled) {\n return {\n context: context,\n id: id,\n typeName: typeName,\n data: {},\n className: `${this.orderHistoryClassName}__orders-view-mode-selector`,\n resources: {\n listViewOptionAriaLabel: this.props.resources.orderHistoryListViewModeAriaLabel,\n detailedViewOptionAriaLabel: this.props.resources.orderHistoryDetailedViewModeAriaLabel\n },\n currentViewModeState: this._ordersViewModeState,\n telemetryContent: this.telemetryContent,\n onClick: this._clickOrderViewMode\n } as IOrderHistoryWithSearchAndFiltersViewModeProps;\n }\n\n return;\n };\n\n /**\n * Gets organization wide order history selector.\n * @returns Organization wide order history selector props.\n */\n private readonly _getOrganizationWideSelectorProps = (): IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps | undefined => {\n const { context, id, typeName } = this.props;\n\n if (this.props.data.customerInformation && this.props.data.customerInformation.result) {\n return {\n context: context,\n id: id,\n typeName: typeName,\n className: `${this.orderHistoryClassName}__organization-wide-selector`,\n resources: {\n currentUserOptionLabel: this.props.resources.orderHistoryFilterYourOrderHistory,\n organizationWideOptionLabel: this.props.resources.orderHistoryFilterOrganizationWide\n },\n currentSelectorState: this._organizationWideSelectorState,\n data: { customer: this.props.data.customerInformation.result },\n onChange: this._clickOrganizationWideSelectorOption\n } as IOrderHistoryWithSearchAndFiltersOrganizationWideSelectorProps;\n }\n\n return;\n };\n\n /**\n * Gets the search bar.\n * @returns Search bar props.\n */\n private readonly _getSearchBarProps = (): ISearchBarProps => {\n const { context, id: moduleId, typeName } = this.props;\n\n const options = (this.props.data.searchOptions?.result ?? []).map(option =>\n mapSearchOptionIntoISearchBarOption(option, this.props.resources)\n );\n\n // set the default search option as the first option of list if any; otherwise, set it to undefined\n this._searchBarState.currentSearchOption = this._searchBarState.currentSearchOption ?? options[0];\n\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n className: `${this.orderHistoryClassName}__search-bar`,\n currentSearchOption: this._searchBarState.currentSearchOption,\n currentSearchText: this._searchBarState.currentSearchText,\n resources: {\n searchOptionsAriaLabel: this.props.resources.searchOptionsAriaLabel,\n searchBarPlaceholder: this.props.resources.searchBarPlaceholder,\n searchButtonAriaLabel: this.props.resources.searchButtonAriaLabel\n },\n data: {\n options: options\n },\n clearSearchTextOnOptionChange: true,\n onClick: this._clickSearchButton\n };\n };\n\n /**\n * Gets refiner options.\n * @returns Refiner options.\n */\n private readonly _getRefinerOptions = (): React.ReactNode[] => {\n const { context, id: moduleId, typeName } = this.props;\n\n const selectedRefinerItems = this._activeRefinementCriteria ?? [];\n const channelIdentities = (this.props.data.channels.result && this.props.data.channels.result.channelIdentities) ?? [];\n const dateRefinerOptions = this.props.data.dateRefinerOptions?.result ?? [];\n const orderStatusRefinerOptions = this.props.data.orderStatusRefinerOptions?.result ?? [];\n\n return [\n <RefinerOptionsComponent\n context={context}\n id={moduleId}\n typeName={typeName}\n key={RefinerSourceType.Origin}\n className={`${this.orderHistoryClassName}__refiner-options-${RefinerSourceType.Origin}`}\n isDisabled={false}\n isExpandedOnInitialLoad={true}\n telemetryContent={this.telemetryContent}\n onUpdateRefiners={this._toggleRefinerItem}\n data={{\n refinerOptionsId: RefinerSourceType.Origin,\n sourceTypeValue: RefinerSourceType.Origin,\n name: this.props.resources.channelRefinerOptionLabel,\n typeValue: RefinerOptionsType.MultiSelect,\n isExpanded: true,\n selectedRefinerItems: selectedRefinerItems,\n refinerItems: channelIdentities?.map(channelIdentity => mapChannelIdentityIntoIRefinerItemData(channelIdentity))\n }}\n />,\n <RefinerOptionsComponent\n context={context}\n id={moduleId}\n typeName={typeName}\n key={RefinerSourceType.CreatedDate}\n className={`${this.orderHistoryClassName}__refiner-options-${RefinerSourceType.CreatedDate}`}\n isDisabled={false}\n isExpandedOnInitialLoad={true}\n telemetryContent={this.telemetryContent}\n onUpdateRefiners={this._toggleRefinerItem}\n data={{\n refinerOptionsId: RefinerSourceType.CreatedDate,\n sourceTypeValue: RefinerSourceType.CreatedDate,\n name: this.props.resources.createdDateRefinerOptionLabel,\n typeValue: RefinerOptionsType.SingleSelect,\n isExpanded: true,\n selectedRefinerItems: selectedRefinerItems,\n refinerItems: dateRefinerOptions?.map(dateRefinerOptionItem =>\n mapDateRefinerOptionIntoIRefinerItemData(dateRefinerOptionItem, this.props.resources)\n )\n }}\n />,\n <RefinerOptionsComponent\n context={context}\n id={moduleId}\n typeName={typeName}\n key={RefinerSourceType.OrderStatus}\n className={`${this.orderHistoryClassName}__refiner-options-${RefinerSourceType.OrderStatus}`}\n isDisabled={false}\n isExpandedOnInitialLoad={true}\n telemetryContent={this.telemetryContent}\n onUpdateRefiners={this._toggleRefinerItem}\n data={{\n refinerOptionsId: RefinerSourceType.OrderStatus,\n sourceTypeValue: RefinerSourceType.OrderStatus,\n name: this.props.resources.orderStatusRefinerOptionLabel,\n typeValue: RefinerOptionsType.SingleSelect,\n isExpanded: true,\n selectedRefinerItems: selectedRefinerItems,\n refinerItems: orderStatusRefinerOptions?.map(orderStatusRefinerOptionItem =>\n mapOrderStatusRefinerOptionIntoIRefinerItemData(orderStatusRefinerOptionItem, this.props.resources)\n )\n }}\n />\n ];\n };\n\n /**\n * Gets the refiner.\n * @returns Refiner props.\n */\n private readonly _getRefinerProps = (): IRefinerProps => {\n const { context, id: moduleId, typeName } = this.props;\n\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: {},\n refinerOptions: this._getRefinerOptions(),\n isMobileView: this.isMobile,\n isExpanded: this._refinerState.isExpanded,\n refinerModalToggleProps: this._getRefinerModalToggleProps(),\n refinerModalProps: this._getRefinerModalProps(),\n refinerHeaderProps: this._getRefinerHeaderProps(),\n refinerFooterProps: this._getRefinerFooterProps()\n };\n };\n\n /**\n * Gets the refiner modal toggle.\n * @returns Refiner modal toggle props.\n */\n private readonly _getRefinerModalToggleProps = (): IRefinerModalToggleProps => {\n const { resources, context, id: moduleId, typeName } = this.props;\n\n return {\n context: context,\n id: `${moduleId}__refiner-modal-toggle`,\n typeName: typeName,\n data: {},\n text: resources.filterAndSortText,\n ariaLabel: resources.filterAndSortTextAriaLabel,\n innerRef: this._refinerModalToggleRef,\n onClick: this._toggleRefinerModal\n };\n };\n\n /**\n * Gets the refiner modal.\n * @returns Refiner modal props.\n */\n private readonly _getRefinerModalProps = (): IRefinerModalProps => {\n const { resources, context, id: moduleId, typeName } = this.props;\n\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: {},\n modalTitle: resources.filterAndSortText,\n modalCloseButtonText: resources.doneText,\n isOpen: this._refinerState.isModalOpen,\n returnRef: this._refinerModalToggleRef,\n refinerSortProps: this._getRefinerSortProps(),\n refinerOptions: this._getRefinerOptions(),\n onToggle: () => {\n this._toggleRefinerModal();\n this._applyRefinerChoices();\n }\n };\n };\n\n /**\n * Gets the refiner header.\n * @returns Refiner header props.\n */\n private readonly _getRefinerHeaderProps = (): IRefinerHeaderProps => {\n const { context, id: moduleId, typeName } = this.props;\n const ordersViewModeComponentProps = this._getOrdersViewModeProps();\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: {},\n refinerToggleProps: this._getRefinerToggleProps(),\n refinerChoiceSummaryProps: this._getRefinerChoiceSummaryProps(),\n refinerSortProps: this.props.config?.showSortingOptions ? this._getRefinerSortProps() : undefined,\n extraActions: ordersViewModeComponentProps && (\n <OrderHistoryWithSearchAndFiltersViewModeComponent {...ordersViewModeComponentProps} />\n )\n };\n };\n\n /**\n * Gets the refiner toggle.\n * @returns Refiner toggle props.\n */\n private readonly _getRefinerToggleProps = (): IRefinerToggleProps => {\n const { context, id: moduleId, typeName, resources } = this.props;\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: {},\n text: resources.filterText,\n ariaLabel: resources.filterText,\n isExpanded: this._refinerState.isExpanded,\n onClick: () => {\n this._refinerState.isExpanded = !this._refinerState.isExpanded;\n }\n };\n };\n\n /**\n * Gets the refiner choice summary.\n * @returns Refiner choice summary props.\n */\n private readonly _getRefinerChoiceSummaryProps = (): IRefinerChoiceSummaryProps => {\n const { context, id: moduleId, typeName, resources } = this.props;\n const selectedRefiners = this._activeRefinementCriteria ?? [];\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: { selectedChoices: selectedRefiners },\n clearAllText: resources.clearAllText,\n label: resources.choiceSummaryLabel,\n choiceAriaLabel: resources.choiceAriaLabel,\n choiceFormat: resources.orderHistoryChoiceFormat,\n closeAriaLabel: resources.closeAriaLabel,\n telemetryContent: this.telemetryContent,\n onClickChoice: this._clickRefinerChoice,\n onClickClearAll: this._clickRefinerClearAll\n };\n };\n\n /**\n * Gets the refiner sort.\n * @returns Refiner sort props.\n */\n private readonly _getRefinerSortProps = (): IRefinerSortProps => {\n const { context, id: moduleId, typeName, resources } = this.props;\n\n // fetch the sorting options\n const options = (this.props.data.sortOptions?.result ?? []).map(option =>\n mapSortOptionIntoIRefinerSortOption(option, this.props.resources)\n );\n\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: { options: options },\n className: `${this.orderHistoryClassName}__refiner-sort`,\n currentSortOption: this._refinerState.currentSortOption,\n label: resources.sortLabel,\n ariaLabel: resources.sortAriaLabel,\n telemetryContent: this.telemetryContent,\n onSelectOption: this._selectRefinerSortOption\n };\n };\n\n /**\n * Gets the refiner footer.\n * @returns Refiner footer props.\n */\n private readonly _getRefinerFooterProps = (): IRefinerFooterProps => {\n const { context, id: moduleId, typeName } = this.props;\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: {},\n refinerApplyProps: this._getRefinerApplyProps()\n };\n };\n\n /**\n * Gets the refiner apply.\n * @returns Refiner apply props.\n */\n private readonly _getRefinerApplyProps = (): IRefinerApplyProps => {\n const { context, id: moduleId, typeName, resources } = this.props;\n return {\n context: context,\n id: moduleId,\n typeName: typeName,\n data: {},\n text: resources.doneText,\n ariaLabel: resources.doneTextAriaLabel,\n telemetryContent: this.telemetryContent,\n onClick: () => {\n this._refinerState.isExpanded = false;\n this._applyRefinerChoices();\n }\n };\n };\n}\n\nexport default OrderHistoryWithSearchAndFilters;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchBarOption } from '@msdyn365-commerce/components';\nimport { IOrderHistoryWithSearchAndFiltersResources } from '../order-history-with-search-and-filters.props.autogenerated';\nimport { SearchOption } from './search-option';\n\nexport function mapSearchOptionIntoISearchBarOption(\n searchOption: SearchOption,\n resources: IOrderHistoryWithSearchAndFiltersResources\n): ISearchBarOption {\n switch (searchOption) {\n case SearchOption.OrderNumber:\n return {\n label: resources.orderNumberSearchOptionLabel,\n value: SearchOption.OrderNumber.toString()\n } as ISearchBarOption;\n case SearchOption.ConfirmationId:\n return {\n label: resources.confirmationIdSearchOptionLabel,\n value: SearchOption.ConfirmationId.toString()\n } as ISearchBarOption;\n case SearchOption.ChannelName:\n return {\n label: resources.channelNameSearchOptionLabel,\n value: SearchOption.ChannelName.toString()\n } as ISearchBarOption;\n case SearchOption.CustomerRequisition:\n return {\n label: resources.customerRequistionSearchOptionLabel,\n value: SearchOption.CustomerRequisition.toString()\n } as ISearchBarOption;\n default:\n throw new Error(`Invalid search option: ${searchOption}`);\n }\n}\n\nexport function mapISearchBarOptionIntoSearchOption(searchBarOption?: ISearchBarOption): SearchOption | undefined {\n if (!searchBarOption) {\n return;\n }\n\n if (searchBarOption.value === SearchOption.OrderNumber.toString()) {\n return SearchOption.OrderNumber;\n }\n\n if (searchBarOption.value === SearchOption.ConfirmationId.toString()) {\n return SearchOption.ConfirmationId;\n }\n\n if (searchBarOption.value === SearchOption.ChannelName.toString()) {\n return SearchOption.ChannelName;\n }\n\n if (searchBarOption.value === SearchOption.CustomerRequisition.toString()) {\n return SearchOption.CustomerRequisition;\n }\n\n return;\n}\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 { RefinerComponent, SearchBarComponent } from '@msdyn365-commerce/components';\nimport * as React from 'react';\n\nimport { IOrderHistoryWithSearchAndFiltersViewProps } from './order-history-with-search-and-filters';\nimport {\n OrderHistoryWithSearchAndFiltersHeaderComponent,\n OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent\n} from './components';\n\nconst OrderHistoryWithSearchAndFiltersView: React.FC<IOrderHistoryWithSearchAndFiltersViewProps> = props => {\n const {\n orderHistoryWithSearchAndFiltersProps,\n headerProps,\n organizationWideSelectorProps,\n searchBarProps,\n refinerProps,\n alert,\n loading,\n emptyMessage,\n backToShoppingLink,\n list,\n table,\n moreButton\n } = props;\n\n return (\n <Module {...orderHistoryWithSearchAndFiltersProps}>\n {headerProps && <OrderHistoryWithSearchAndFiltersHeaderComponent {...headerProps} />}\n {searchBarProps && <SearchBarComponent {...searchBarProps} />}\n {organizationWideSelectorProps && (\n <OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent {...organizationWideSelectorProps} />\n )}\n {refinerProps && <RefinerComponent {...refinerProps} />}\n {loading}\n {alert && (\n <>\n {alert}\n {backToShoppingLink}\n </>\n )}\n {emptyMessage && (\n <Node className='ms-order-history-with-search-and-filters__empty-message-container'>\n {emptyMessage}\n {backToShoppingLink}\n </Node>\n )}\n {list}\n {table}\n {moreButton && moreButton}\n </Module>\n );\n};\n\nexport default OrderHistoryWithSearchAndFiltersView;\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 ICommerceApiSettings\n} from '@msdyn365-commerce/core';\nimport { IQueryResultSettings, SalesLine } from '@msdyn365-commerce/retail-proxy';\nimport { getOrderShipmentsHistoryAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g';\nimport { OrderShipments, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n buildCacheKey,\n getOrganizationWideOrderHistory,\n GetOrganizationWideOrderHistoryInput,\n getSimpleProducts,\n ProductInput\n} from '@msdyn365-commerce-modules/retail-actions';\n\nimport { OrderHistoryFilterState } from '../components/order-history-filter';\n\n/**\n * IPaging Interface.\n */\nexport interface IPaging {\n top: number;\n skip: number;\n}\n\n/**\n * IOrderHistory Interface.\n */\nexport interface IOrderHistory {\n salesOrders: OrderShipments[];\n products: SimpleProduct[];\n nextPageToken?: string;\n}\n\n/**\n * IOrderHistoryResult Interface.\n */\nexport interface IOrderHistoryResult {\n salesOrders: OrderShipments[];\n nextPageToken?: string;\n}\n\n/**\n * Calls the Retail API and returns the products.\n * @param paging - Paging interface.\n * @param nextPageToken - Next Page Link.\n * @returns Collection of OrderShipments.\n */\nconst getOrderShipmentHistory = (paging: IPaging, nextPageToken?: string) => async (ctx: IActionContext): Promise<IOrderHistoryResult> => {\n const orderHistoryResults = getOrderShipmentsHistoryAsync(\n {\n callerContext: ctx,\n bypassCache: 'get',\n queryResultSettings: {\n Paging: {\n Top: paging.top,\n NextPageToken: nextPageToken\n }\n }\n },\n '',\n nextPageToken\n );\n\n const orderHistoryResponse = await orderHistoryResults;\n const nextLinkUrl = orderHistoryResults.metadata?.others?.nextLink;\n const nextPageLink = nextLinkUrl !== undefined ? new URL(nextLinkUrl).searchParams.get('nextPageToken') : undefined;\n const nextPage = nextPageLink !== null ? nextPageLink : undefined;\n return {\n salesOrders: orderHistoryResponse,\n nextPageToken: nextPage\n };\n};\n\n/**\n * Calls the Retail API and returns the products.\n * @param paging - Paging props.\n * @param nextPageToken - Next Page Link.\n * @returns Collections of order shipments.\n */\nconst getOrganizationWideOrderShipmentHistory = (paging: IPaging, nextPageToken?: string) => async (\n context: IActionContext\n): Promise<IOrderHistoryResult> => {\n const queryResultSetting: IQueryResultSettings = {\n Paging: {\n Top: paging.top,\n Skip: paging.skip,\n NextPageToken: nextPageToken\n }\n };\n\n const orgOrderHistoryResults = getOrganizationWideOrderHistory(new GetOrganizationWideOrderHistoryInput(queryResultSetting), context);\n\n const orgOrderHistoryResponse = await orgOrderHistoryResults;\n const nextLinkUrl = orgOrderHistoryResults.metadata?.others?.nextLink;\n const nextPageLink = nextLinkUrl !== undefined ? new URL(nextLinkUrl).searchParams.get('nextPageToken') : undefined;\n const nextPage = nextPageLink !== null ? nextPageLink : undefined;\n return {\n salesOrders: orgOrderHistoryResponse,\n nextPageToken: nextPage\n };\n};\n\n/**\n * Calls the Retail API and returns the products.\n * @param productIds - Collection of products id.\n * @param channelId - ChannelId number.\n * @returns Collections of simple products.\n */\nconst getProducts = (productIds: number[] = [], channelId?: number) => (ctx: IActionContext): Promise<SimpleProduct[]> => {\n const productInputs = productIds.map(\n productId => new ProductInput(productId, ctx.requestContext.apiSettings, channelId, undefined, ctx.requestContext)\n );\n return getSimpleProducts(productInputs, ctx);\n};\n\n/**\n * Action input.\n */\nexport class GetSalesOrderHistoryWithHydrationsInput implements IActionInput {\n public paging: IPaging;\n\n public filterState: OrderHistoryFilterState;\n\n public nextPageToken?: string;\n\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(paging: IPaging, apiSettings: ICommerceApiSettings, filterState?: OrderHistoryFilterState, nextPageLink?: string) {\n this.apiSettings = apiSettings;\n this.paging = paging;\n this.filterState = filterState || OrderHistoryFilterState.CurrentUser;\n this.nextPageToken = nextPageLink;\n }\n\n public getCacheKey = () => buildCacheKey('OrderHistory', this.apiSettings);\n\n /**\n * GetCacheObjectType.\n * @returns String.\n */\n public getCacheObjectType = () => 'OrderHistory';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * Splits product ids from the given orders into lists by their channel id.\n * @param {OrderShipments[]} salesOrders Orders with the products.\n * @param {number} currentChannelId Channel id to use by default if no channel id is provided for a product.\n * @returns {{ [x: number]: number[] }} A dictionary where the key is a channel id,\n * and the value is a list of product ids in which all items correspond to the key channel id.\n * @remark The list of product ids is always non-empty.\n */\nconst splitProductsByChannelId = (salesOrders: OrderShipments[], currentChannelId: number): { [x: number]: number[] } => {\n const productIdsByChannel: { [x: number]: number[] } = {};\n\n salesOrders.forEach(salesOrder =>\n salesOrder?.SalesLines?.forEach(line => {\n const orderProductId = line.ProductId || 0;\n const orderChannelId = salesOrder.ChannelId || currentChannelId;\n if (!productIdsByChannel[orderChannelId]) {\n productIdsByChannel[orderChannelId] = [];\n }\n productIdsByChannel[orderChannelId].push(orderProductId);\n })\n );\n\n return productIdsByChannel;\n};\n\n/**\n * Get sales order with hydrations action.\n * @param input - GetOrderHistory hydration input.\n * @param context - Channel context.\n * @returns - Order History props.\n */\nexport async function getSalesOrderHistoryWithHydrationsAction(\n input: GetSalesOrderHistoryWithHydrationsInput,\n context: IActionContext\n): Promise<IOrderHistory> {\n if (!context) {\n throw new Error('getSalesOrderWithHydrationsAction - Action context cannot be null/undefined');\n }\n const channelId = context.requestContext.apiSettings.channelId;\n let salesOrders: OrderShipments[] = [];\n let nextPage: string | undefined = '';\n let orderHistoryResponse: IOrderHistoryResult;\n\n switch (input.filterState) {\n case OrderHistoryFilterState.CurrentUser:\n orderHistoryResponse = await getOrderShipmentHistory(input.paging, input.nextPageToken)(context);\n salesOrders = orderHistoryResponse.salesOrders;\n nextPage = orderHistoryResponse.nextPageToken;\n break;\n case OrderHistoryFilterState.OrganizationWide:\n orderHistoryResponse = await getOrganizationWideOrderShipmentHistory(input.paging, input.nextPageToken)(context);\n salesOrders = orderHistoryResponse.salesOrders;\n nextPage = orderHistoryResponse.nextPageToken;\n break;\n default:\n throw new Error('getSalesOrderWithHydrationsAction - Invalid OrderHistoryFilterState passed');\n }\n\n salesOrders.map(salesOrder => {\n return (salesOrder.SalesLines = salesOrder.SalesLines?.filter((saleline: SalesLine) => !saleline.IsVoided));\n });\n\n if (!salesOrders || salesOrders.length === 0) {\n return {\n salesOrders: [],\n products: [],\n nextPageToken: nextPage\n };\n }\n\n // Splits the data by channel ids so that the products from different channels can be processed separately.\n const productIdsByChannelId = splitProductsByChannelId(salesOrders, channelId);\n\n // Promise that retrieves information about the products for each channel id.\n // Note, the list of product ids should not be empty\n // as it will generate an empty request which will force the promise to fail.\n const getProductsPromise = Object.entries(productIdsByChannelId).map(([entryChannelId, entryProductIdsList]) => {\n const getProductsCall = getProducts(entryProductIdsList, Number(entryChannelId));\n return getProductsCall(context);\n });\n\n return Promise.all(getProductsPromise)\n .then(\n (productList): IOrderHistory => {\n const products = productList.reduce((memo, list) => {\n return [...memo, ...list];\n }, []);\n return {\n salesOrders,\n products,\n nextPageToken: nextPage\n };\n }\n )\n .catch(error => {\n context.telemetry.exception(error);\n context.telemetry.debug('Failed to get products');\n throw error;\n });\n}\n\nexport const getSalesOrderHistoryWithHydrationsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/order-management/order-history/get-order-shipment-history',\n action: <IAction<IOrderHistory>>getSalesOrderHistoryWithHydrationsAction\n});\n\nexport default getSalesOrderHistoryWithHydrationsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getUrlSync, IActionContext } from '@msdyn365-commerce/core';\nimport {\n ChannelDeliveryOptionConfiguration,\n ChannelIdentity,\n Customer,\n format,\n OrderOriginator,\n OrderShipments,\n OrgUnitLocation,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { Observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ExpandButtonState, SalesLineState } from '../../../common';\nimport { getGroups, IGroups } from '../../../common/get-groups';\nimport { getOrderInformation, getOrderInformationInput, IOrderInformation } from '../../../common/get-order-information';\nimport { ISalesLine } from '../../../common/get-sales-line';\nimport { getSalesLines, getSalesLinesInput, IGetSalesLinesInput } from '../../../common/get-sales-lines';\nimport { IOrderHistoryData } from '../order-history.data';\nimport { IOrderHistoryProps } from '../order-history.props.autogenerated';\n\nexport interface ISalesOrderProps extends IOrderHistoryProps<IOrderHistoryData> {\n salesOrder: OrderShipments;\n products: SimpleProduct[];\n channelIdentities?: ChannelIdentity[];\n orgUnitLocations?: OrgUnitLocation[];\n customer?: Customer;\n originator?: OrderOriginator;\n showChannelInfo?: boolean;\n telemetryContent?: ITelemetryContent;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n salesLinesLimit?: number;\n}\n\nexport interface ISalesOrder {\n salesOrderProps: INodeProps;\n orderInfomation: IOrderInformation;\n groups?: IGroups;\n orderDetailsLink: React.ReactNode;\n expandProductsButton?: React.ReactNode;\n}\n\n/**\n * Retrieves the url for order details page.\n * @param actionContext - Core action context.\n * @param salesOrder - Order information.\n * @returns Url to order details.\n */\nexport const getOrderDetailsPageUrl = (actionContext: IActionContext, salesOrder: OrderShipments): string => {\n const orderDetailsUrl = getUrlSync('orderDetails', actionContext) || '';\n const separator = orderDetailsUrl.includes('?') ? '&' : '?';\n if (salesOrder.SalesId) {\n // Redirect with sales order sales id\n return `${orderDetailsUrl}${separator}salesId=${salesOrder.SalesId}`;\n }\n\n // Redirect with sales order transaction id\n return `${orderDetailsUrl}${separator}transactionId=${salesOrder.TransactionId!}`;\n};\n\n/**\n * Updates product states to show all products.\n * @param expandButtonState - Expand button state.\n * @param productStates - Product states.\n * @returns Callback method.\n */\nconst onExpandProductsCallback = (expandButtonState: ExpandButtonState, productStates: SalesLineState[]) => () => {\n for (const productState of productStates) {\n productState.isHidden = false;\n }\n expandButtonState.extraProductsCount = 0;\n};\n\nexport const getSalesOrder = (input: ISalesOrderProps): ISalesOrder => {\n const {\n id,\n typeName,\n context,\n telemetry,\n products,\n salesOrder,\n showChannelInfo,\n channelIdentities,\n orgUnitLocations,\n customer,\n originator,\n telemetryContent,\n resources: { freePriceText, detailsAriaLabel, detailsLabel, orderItemLabel, orderItemsLabel },\n context: { actionContext },\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig\n } = input;\n\n const moduleName = 'ms-order-history';\n\n const priceContext = {\n id,\n typeName,\n context,\n telemetry,\n freePriceText\n };\n\n const salesOrderProps = { className: 'ms-order-history__sales-order', key: salesOrder.SalesId || salesOrder.TransactionId };\n\n const orderInfomationInput = getOrderInformationInput(\n input,\n moduleName,\n salesOrder,\n priceContext,\n channelIdentities,\n orgUnitLocations,\n customer,\n originator,\n showChannelInfo\n );\n\n const orderInfomation = getOrderInformation(orderInfomationInput);\n\n const salesLinesInput =\n products &&\n getSalesLinesInput(\n input,\n moduleName,\n salesOrder,\n products,\n priceContext,\n undefined,\n undefined,\n undefined,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig\n );\n\n let salesLines: ISalesLine[] | undefined;\n let expandProductsButton: React.ReactNode;\n if (salesLinesInput) {\n const getSalesLinesInputProps: IGetSalesLinesInput = { ...salesLinesInput, imageOnly: true };\n if (!ObjectExtensions.isNullOrUndefined(input.salesLinesLimit)) {\n const extraProductsCount = getSalesLinesInputProps.salesLines.length - input.salesLinesLimit;\n getSalesLinesInputProps.salesLineStates = getSalesLinesInputProps.salesLines.map(\n (salesLine, index) => new SalesLineState(`${salesLine.LineId ?? ''}-${index}`, index >= input.salesLinesLimit!)\n );\n if (extraProductsCount > 0) {\n const expandButtonState = new ExpandButtonState(extraProductsCount);\n expandProductsButton = (\n <>\n <Observer>\n {() => {\n const text = format(\n input.resources.orderHistoryExpandProductsButtonText,\n expandButtonState.extraProductsCount\n );\n return (\n expandButtonState.extraProductsCount > 0 && (\n <Button\n className={`${moduleName}__sales-order__expand-products-button`}\n title={text}\n role='button'\n onClick={onExpandProductsCallback(expandButtonState, getSalesLinesInputProps.salesLineStates!)}\n aria-label={text}\n >\n {text}\n </Button>\n )\n );\n }}\n </Observer>\n </>\n );\n }\n }\n salesLines = getSalesLines(getSalesLinesInputProps);\n }\n\n expandProductsButton = (\n <>\n {expandProductsButton}\n <div className={`${moduleName}__sales-order__expand-products-button-wrapper`} />\n </>\n );\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.OrderDetails);\n const orderDetailsAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n const groups =\n salesLines &&\n getGroups({\n moduleName,\n salesLines,\n resources: { orderItemLabel, orderItemsLabel },\n retailMultiplePickUpOptionEnabled\n });\n\n const orderDetailsLink = (\n <Button\n href={getOrderDetailsPageUrl(actionContext, salesOrder)}\n role='button'\n aria-label={\n salesOrder.ChannelReferenceId && detailsAriaLabel\n ? detailsAriaLabel.replace('{orderId}', salesOrder.ChannelReferenceId)\n : ''\n }\n className='ms-order-history__btn-order-details'\n {...orderDetailsAttributes}\n >\n {detailsLabel}\n </Button>\n );\n\n return {\n salesOrderProps,\n orderInfomation,\n groups,\n orderDetailsLink,\n expandProductsButton\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { EnumExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Popover } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IOrderHistoryFilterResources {\n orderHistoryFilterYourOrderHistory: string;\n orderHistoryFilterOrganizationWide: string;\n}\n\nexport interface IOrderHistoryFilterData {\n customerInformation: Customer;\n}\n\nexport interface IOrderHistoryFilterProps extends IComponentProps<IOrderHistoryFilterData> {\n className: string;\n\n resources: IOrderHistoryFilterResources;\n\n currentState: OrderHistoryFilterState;\n onFilterStateChanged(state: OrderHistoryFilterState): void;\n}\n\nexport enum OrderHistoryFilterState {\n CurrentUser,\n OrganizationWide\n}\n\nconst getOrderHistoryFilterStateResources = (filterState: OrderHistoryFilterState, resources: IOrderHistoryFilterResources): string => {\n switch (filterState) {\n case OrderHistoryFilterState.CurrentUser:\n return resources.orderHistoryFilterYourOrderHistory;\n case OrderHistoryFilterState.OrganizationWide:\n return resources.orderHistoryFilterOrganizationWide;\n default:\n throw new Error('Failed to retrieve resource description for unknown order history filter state.');\n }\n};\n\n/**\n * On Click functionality.\n * @param onStateClick -Filter state function.\n * @param filterState -Order history filter state.\n * @returns On state click functionality.\n */\nconst onClickHandler = (onStateClick: (filterState: OrderHistoryFilterState) => void, filterState: OrderHistoryFilterState) => () => {\n onStateClick(filterState);\n};\n\nconst renderFilterStateItem = (\n filterState: OrderHistoryFilterState,\n resources: IOrderHistoryFilterResources,\n className: string,\n onStateClick: (filterState: OrderHistoryFilterState) => void\n): React.ReactNode => {\n const stateStringRepresentation = OrderHistoryFilterState[filterState];\n\n return (\n <button className={`${className}__item__${stateStringRepresentation}`} onClick={onClickHandler(onStateClick, filterState)}>\n {getOrderHistoryFilterStateResources(filterState, resources)}\n </button>\n );\n};\n\n/**\n * On Toggle Popover functionality.\n * @param setPopoverState -Set popover state function.\n * @param isPopoverState -Boolean value.\n * @returns Set toggle popover state functionality.\n */\nconst togglePopoverHandler = (setPopoverState: React.Dispatch<React.SetStateAction<boolean>>, isPopoverState: boolean) => () => {\n setPopoverState(!isPopoverState);\n};\n\nconst OrderHistoryFilter: React.FC<IOrderHistoryFilterProps> = (props: IOrderHistoryFilterProps) => {\n // Current version of filter doesn't include functionality for non b2b users or non-admin b2b users.\n if (!props.data.customerInformation.IsB2bAdmin) {\n return <div className={props.className} />;\n }\n\n const popoverRef = React.createRef<HTMLButtonElement>();\n const [popoverState, setPopoverState] = React.useState(false);\n\n const [filterState, setFilterState] = React.useState(props.currentState);\n\n const onFilterStateClick = (clickedState: OrderHistoryFilterState) => {\n setFilterState(clickedState);\n setPopoverState(false);\n props.onFilterStateChanged(clickedState);\n };\n\n return (\n <div className={props.className}>\n <Button\n className={`${props.className}__expand-filter-button`}\n innerRef={popoverRef}\n aria-expanded={popoverState}\n aria-describedby={props.className}\n onClick={togglePopoverHandler(setPopoverState, popoverState)}\n >\n {getOrderHistoryFilterStateResources(filterState, props.resources)}\n </Button>\n <Popover\n id={props.className}\n placement='bottom-end'\n isOpen={popoverState}\n target={popoverRef}\n toggle={togglePopoverHandler(setPopoverState, popoverState)}\n >\n {EnumExtensions.getEnumValues<OrderHistoryFilterState>(OrderHistoryFilterState).map(state => {\n return renderFilterStateItem(state, props.resources, props.className, onFilterStateClick);\n })}\n </Popover>\n </div>\n );\n};\n\nexport const OrderHistoryFilterComponent: React.FunctionComponent<IOrderHistoryFilterProps> = msdyn365Commerce.createComponent<\n // @ts-expect-error\n IOrderHistoryFilterProps\n>('OrderHistoryFilterComponent', { component: OrderHistoryFilter });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Resources which are used in order history header.\n */\nexport interface IOrderHistoryTableHeaderResources {\n orderHistoryOrderNumberText: string;\n orderHistoryCreatedDateText: string;\n orderHistoryItemsText: string;\n orderHistoryTotalText: string;\n orderHistoryOriginText: string;\n orderPlacedByFullText?: string;\n}\n\n/**\n * Configuration of the component.\n */\nexport interface IOrderHistoryTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n resources: IOrderHistoryTableHeaderResources;\n\n shouldShowChannelInfo: boolean;\n shouldShowOrderPlacedBy?: boolean;\n}\n\n/**\n * Renders desktop view cells.\n * @param props - Configuration of the module.\n * @returns List of cells for the header.\n */\nconst getDesktopHeaderCells = (props: IOrderHistoryTableHeaderProps) => {\n const { resources } = props;\n\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n\n return (\n <>\n {props.shouldShowOrderPlacedBy && <th>{resources.orderPlacedByFullText}</th>}\n <th>{resources.orderHistoryOrderNumberText}</th>\n <th>{resources.orderHistoryCreatedDateText}</th>\n <th className={columnWithNumberClassName}>{resources.orderHistoryItemsText}</th>\n <th className={columnWithNumberClassName}>{resources.orderHistoryTotalText}</th>\n {props.shouldShowChannelInfo && <th>{resources.orderHistoryOriginText}</th>}\n <th />\n </>\n );\n};\n\n/**\n * Renders mobile view cells.\n * @param props - Configuration of the module.\n * @returns List of cells for the header.\n */\nconst getMobileHeaderCells = (props: IOrderHistoryTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n <th className={`${props.className}__row__mobile-cell`}>{resources.orderHistoryOrderNumberText}</th>\n <th />\n </>\n );\n};\n\n/**\n * Order history table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const OrderHistoryTableHeaderComponent: React.FC<IOrderHistoryTableHeaderProps> = (props: IOrderHistoryTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n if (isMobileView) {\n headerCells = getMobileHeaderCells(props);\n } else {\n headerCells = getDesktopHeaderCells(props);\n }\n\n return (\n <thead className={props.className}>\n <tr className={rowClassName}>{headerCells}</tr>\n </thead>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IComponentProps, ICoreContext, IDateFormatOptions, isOboRequest } from '@msdyn365-commerce/core';\nimport { ChannelIdentity, Customer, format, OrderOriginator, OrderShipments, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport {\n getOrderChannelAddress,\n getOrderChannelName,\n getOrderChannelTypeValue,\n isOnlineStoreChannel\n} from '../../../../../common/get-order-information';\nimport { countItems } from '../../../../../common/utilities';\nimport { getOrderDetailsPageUrl } from '../../get-sales-order';\n\n/**\n * Data required to render each order history row.\n */\nexport interface IOrderHistoryTableRowData {\n salesOrder: OrderShipments;\n channelIdentities?: ChannelIdentity[];\n orgUnitLocations?: OrgUnitLocation[];\n customer?: Customer;\n originator?: OrderOriginator;\n}\n\n/**\n * Resources for order history table rows.\n */\nexport interface IOrderHistoryTableRowResources {\n orderHistoryViewDetailsButtonText: string;\n orderHistoryViewDetailsButtonAriaLabel: string;\n orderHistoryCreatedDateMobileDescriptionText: string;\n orderHistoryOrderNumberIsNotAvailable: string;\n onlineStoreChannelNameText: string;\n posChannelNameText: string;\n orderPlacedByFullText?: string;\n orderPlacedByYouText?: string;\n orderOnBehalfOfText?: string;\n}\n\n/**\n * Configuration for the order history rows.\n */\nexport interface IOrderHistoryTableRowProps extends IComponentProps<IOrderHistoryTableRowData> {\n context: ICoreContext;\n className: string;\n\n resources: IOrderHistoryTableRowResources;\n\n shouldShowChannelInfo: boolean;\n shouldShowOrderPlacedBy?: boolean;\n}\n\n/**\n * Formats amount.\n * @param context - Core context.\n * @param amount - Amount to display.\n * @param currencyCode - Currency for the amount.\n * @returns String value.\n */\nconst formatAmount = (context: ICoreContext, amount: number | undefined, currencyCode: string | undefined) => {\n if (amount === undefined) {\n return '';\n }\n return context.cultureFormatter.formatCurrency(amount, currencyCode);\n};\n\n/**\n * Formats date.\n * @param context - Core context.\n * @param date - Date to display.\n * @returns String value.\n */\nconst formatDate = (context: ICoreContext, date: Date | undefined) => {\n if (date === undefined) {\n return '';\n }\n\n const dateOptions: IDateFormatOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\n return context.cultureFormatter.formatDate(date, dateOptions);\n};\n\nconst getShortEllipsisText = (originalText: string, maxTextLength: number) => {\n const isRtl = document.body.parentElement?.getAttribute('dir') === 'rtl';\n return originalText.length > maxTextLength\n ? isRtl\n ? `…${originalText.substring(0, maxTextLength - 1)}`\n : `${originalText.substring(0, maxTextLength - 1)}…`\n : originalText;\n};\n\n/**\n * Renders rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of order history rows for desktop view.\n */\nexport const OrderHistoryDesktopTableRowCellComponent: React.FC<IOrderHistoryTableRowProps> = (props: IOrderHistoryTableRowProps) => {\n const {\n data: { salesOrder, channelIdentities, orgUnitLocations, customer, originator },\n resources: { orderPlacedByFullText, orderPlacedByYouText, orderOnBehalfOfText }\n } = props;\n\n const linkToOrderHistoryDetails = getOrderDetailsPageUrl(props.context.actionContext, props.data.salesOrder);\n\n const defaultCount = 0;\n const itemsCount = ArrayExtensions.hasElements(salesOrder.SalesLines) ? countItems(salesOrder.SalesLines) : defaultCount;\n const channelName = getOrderChannelName(salesOrder, channelIdentities);\n const channelAddress = getOrderChannelAddress(salesOrder, orgUnitLocations);\n const channelTypeValue = getOrderChannelTypeValue(salesOrder, channelIdentities);\n const isOnlineStore = isOnlineStoreChannel(channelTypeValue, channelAddress);\n\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n\n let orderNumberCellText = props.resources.orderHistoryOrderNumberIsNotAvailable;\n if (!StringExtensions.isNullOrWhitespace(salesOrder.SalesId)) {\n orderNumberCellText = salesOrder.SalesId!;\n }\n\n const isYou =\n !isOboRequest(props.context.request) &&\n originator?.CustomerId &&\n originator?.CustomerName &&\n !originator?.StaffId &&\n !originator?.StaffName &&\n customer?.AccountNumber === originator?.CustomerId\n ? true\n : false;\n const isYouObo = !isYou && !isOboRequest(props.context.request);\n let placedByName =\n originator?.StaffId && originator.StaffName\n ? originator.StaffName\n : originator?.CustomerId && originator.CustomerName\n ? originator.CustomerName\n : '-';\n placedByName = `${placedByName} ${isYou ? orderPlacedByYouText : ''}`;\n const isOnBehalfOfOrder = isOnlineStore && originator?.StaffName && customer?.Name;\n const maxOrderTextLength = window.innerWidth > 700 ? 20 : 12;\n const placedByText = `${orderPlacedByFullText} ${placedByName}`;\n const onBehalfOfText = `${orderOnBehalfOfText} ${customer?.Name} ${isYouObo ? orderPlacedByYouText : ''}`;\n\n return (\n <>\n {props.shouldShowOrderPlacedBy && (\n <td>\n <span\n className={`${props.className}__placed-by`}\n data-title={`${placedByName} ${isOnBehalfOfOrder ? onBehalfOfText : ''}`}\n >\n {placedByName}\n {isOnBehalfOfOrder && (\n <>\n <br /> {getShortEllipsisText(onBehalfOfText, maxOrderTextLength)}\n </>\n )}\n </span>\n </td>\n )}\n <td>\n <span className={`${props.className}__order-number`}>{orderNumberCellText}</span>\n {isOnBehalfOfOrder && !props.shouldShowOrderPlacedBy && (\n <>\n <span className={`${props.className}__placed-by`} data-title={placedByText}>\n {getShortEllipsisText(placedByText, maxOrderTextLength)}\n </span>\n </>\n )}\n </td>\n <td>{formatDate(props.context, salesOrder.CreatedDateTime)}</td>\n <td className={columnWithNumberClassName}>{itemsCount}</td>\n <td className={columnWithNumberClassName}>{formatAmount(props.context, salesOrder.TotalAmount, salesOrder.CurrencyCode)}</td>\n {props.shouldShowChannelInfo && (\n <td>\n {channelName &&\n (channelAddress\n ? `${props.resources.posChannelNameText} ${channelName}`\n : props.resources.onlineStoreChannelNameText)}\n </td>\n )}\n <td>\n <Button\n className={`${props.className}__view-details-button`}\n href={linkToOrderHistoryDetails}\n title={props.resources.orderHistoryViewDetailsButtonText}\n aria-label={props.resources.orderHistoryViewDetailsButtonAriaLabel}\n >\n {props.resources.orderHistoryViewDetailsButtonText}\n </Button>\n </td>\n </>\n );\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of order history rows for mobile view.\n */\nexport const OrderHistoryMobileTableRowCellComponent: React.FC<IOrderHistoryTableRowProps> = (props: IOrderHistoryTableRowProps) => {\n const {\n data: { salesOrder }\n } = props;\n\n const linkToOrderHistoryDetails = getOrderDetailsPageUrl(props.context.actionContext, props.data.salesOrder);\n\n const onClickViewDetails = React.useCallback(() => {\n if (MsDyn365.isBrowser) {\n window.location.href = linkToOrderHistoryDetails;\n }\n }, [linkToOrderHistoryDetails]);\n\n const orderNumber = StringExtensions.isNullOrWhitespace(salesOrder.SalesId)\n ? props.resources.orderHistoryOrderNumberIsNotAvailable\n : salesOrder.SalesId!;\n\n const dateText = format(\n props.resources.orderHistoryCreatedDateMobileDescriptionText,\n formatDate(props.context, salesOrder.CreatedDateTime)\n );\n\n const cellClassName = `${props.className}__mobile-cell`;\n\n return (\n <>\n <td className={cellClassName}>\n <div\n className={`${cellClassName}__open-details`}\n onClick={onClickViewDetails}\n onKeyPress={onClickViewDetails}\n role='button'\n tabIndex={0}\n >\n <span className={`${cellClassName}__mobile-order-id`}>{orderNumber}</span>\n <span className={`${cellClassName}__mobile-created-date`}>{dateText}</span>\n </div>\n </td>\n <td>\n <Button\n className={`${cellClassName}__view-details-button`}\n href={linkToOrderHistoryDetails}\n title={props.resources.orderHistoryViewDetailsButtonText}\n aria-label={props.resources.orderHistoryViewDetailsButtonAriaLabel}\n >\n {props.resources.orderHistoryViewDetailsButtonText}\n </Button>\n </td>\n </>\n );\n};\n\n/**\n * Renders order history rows.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of order history rows.\n */\nexport const OrderHistoryTableRowComponent: React.FC<IOrderHistoryTableRowProps> = (props: IOrderHistoryTableRowProps) => {\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n\n return (\n <tr className={props.className}>\n {isMobileView ? (\n <OrderHistoryMobileTableRowCellComponent {...props} />\n ) : (\n <OrderHistoryDesktopTableRowCellComponent {...props} />\n )}\n </tr>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ChannelIdentity, Customer, OrderOriginator, OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport React from 'react';\n\nimport { IOrderHistory } from '../../actions/get-order-shipment-history';\nimport { IOrderHistoryTableHeaderResources, OrderHistoryTableHeaderComponent } from './components/order-history-table-header-component';\nimport { IOrderHistoryTableRowResources, OrderHistoryTableRowComponent } from './components/order-history-table-row-component';\n\n/**\n * Interface with the data required for order history.\n */\nexport interface IOrderHistoryTableData {\n orderHistory: IOrderHistory;\n channelIdentities?: ChannelIdentity[];\n orgUnitLocations?: OrgUnitLocation[];\n customer?: Customer;\n originators?: OrderOriginator[];\n}\n\n/**\n * Resources needed to render order history table.\n */\nexport interface IOrderHistoryTableResources extends IOrderHistoryTableHeaderResources, IOrderHistoryTableRowResources {}\n\n/**\n * Configuration of order history table.\n */\nexport interface IOrderHistoryTableProps extends IComponentProps<IOrderHistoryTableData> {\n context: ICoreContext;\n className: string;\n\n resources: IOrderHistoryTableResources;\n\n shouldShowChannelInfo: boolean;\n shouldShowOrderPlacedBy?: boolean;\n}\n\n/**\n * Renders order history table.\n * @param props - Configuration for order history table.\n * @returns React node with the table.\n */\nexport const OrderHistoryTableComponent: React.FC<IOrderHistoryTableProps> = (props: IOrderHistoryTableProps) => {\n const rowClassName = `${props.className}__row`;\n const headerClassName = `${props.className}__header`;\n\n return (\n <table className={props.className}>\n <OrderHistoryTableHeaderComponent\n context={props.context}\n typeName={props.typeName}\n id={headerClassName}\n className={headerClassName}\n resources={props.resources}\n data={{}}\n shouldShowChannelInfo={props.shouldShowChannelInfo}\n shouldShowOrderPlacedBy={props.shouldShowOrderPlacedBy}\n />\n {props.data.orderHistory.salesOrders.map((salesOrder, index) => {\n return (\n <OrderHistoryTableRowComponent\n context={props.context}\n typeName={props.typeName}\n id={`${rowClassName}-${index}`}\n key={salesOrder.SalesId}\n className={rowClassName}\n resources={props.resources}\n data={{\n salesOrder,\n channelIdentities: props.data.channelIdentities,\n orgUnitLocations: props.data.orgUnitLocations,\n customer: props.data.customer,\n originator: props.data.originators?.find(\n o =>\n (salesOrder.SalesId && o.SalesId === salesOrder.SalesId) ||\n (salesOrder.TransactionId && o.TransactionId === salesOrder.TransactionId)\n )\n }}\n shouldShowChannelInfo={props.shouldShowChannelInfo}\n shouldShowOrderPlacedBy={props.shouldShowOrderPlacedBy}\n />\n );\n })}\n </table>\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 Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OrderOriginator, OrderShipments } from '@msdyn365-commerce/retail-proxy';\nimport { Label } from '../../common/label';\nimport {\n getSalesOrderHistoryWithHydrationsAction,\n GetSalesOrderHistoryWithHydrationsInput,\n IOrderHistory,\n IPaging\n} from './actions/get-order-shipment-history';\nimport { getOriginatorsAction, GetOrderOriginatorsInput } from '../../actions/get-sales-order-originators';\nimport { getSalesOrder, ISalesOrder } from './components/get-sales-order';\nimport { OrderHistoryFilterComponent, OrderHistoryFilterState } from './components/order-history-filter';\nimport { OrderHistoryTableComponent } from './components/table-view';\nimport { IOrderHistoryData } from './order-history.data';\nimport { IOrderHistoryProps } from './order-history.props.autogenerated';\n\n/**\n * Specifies different layouts for order history.\n */\nexport enum OrderHistoryViewMode {\n listView = 0,\n detailedView = 1\n}\n\nexport interface IHeader {\n headerProps: INodeProps;\n heading: React.ReactNode;\n orderCountLabel?: React.ReactNode;\n extraActions?: React.ReactNode;\n}\n\nexport interface IList {\n listProps: INodeProps;\n salesOrders: ISalesOrder[];\n}\n\nexport interface IOrderHistoryViewState {\n isDataReady: boolean;\n hasError: boolean;\n isLoading: boolean;\n isShowMoreButton: boolean;\n errorCode?: string;\n errorMessage?: string;\n}\n\nexport interface IOrderHistoryViewProps extends IOrderHistoryProps<IOrderHistoryData> {\n orderHistory: IOrderHistory;\n orderHistoryProps: IModuleProps;\n alert?: React.ReactNode;\n loading?: React.ReactNode;\n emptyMessage?: React.ReactNode;\n header: IHeader;\n backToShoppingLink?: React.ReactNode;\n list?: IList;\n table?: React.ReactNode;\n moreButton?: React.ReactNode;\n viewState: IOrderHistoryViewState;\n}\n\n/**\n *\n * OrderHistory component.\n * @extends {React.Component<IOrderHistoryProps<IOrderHistoryData>>}\n */\n@observer\nclass OrderHistory extends React.Component<IOrderHistoryProps<IOrderHistoryData>> {\n @observable private orderHistory!: IOrderHistory;\n\n @observable private viewState!: IOrderHistoryViewState;\n\n @observable private _viewMode: OrderHistoryViewMode;\n\n private originatorList!: OrderOriginator[];\n\n private filterState: OrderHistoryFilterState;\n\n private pageSize!: number;\n\n private paging!: IPaging;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: IOrderHistoryProps<IOrderHistoryData>) {\n super(props);\n this.initState();\n this._viewMode = OrderHistoryViewMode.detailedView;\n this.filterState = OrderHistoryFilterState.CurrentUser;\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 }\n\n public componentDidMount(): void {\n if (this.props.context.actionContext.requestContext.user.isAuthenticated) {\n this._updateOrderHistory();\n } else {\n this.viewState.isDataReady = true;\n }\n }\n\n public shouldComponentUpdate(nextProps: IOrderHistoryProps<IOrderHistoryData>, nextState: IOrderHistoryViewState): 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 {\n config: { heading, className, showChannelInfo, shouldShowCount },\n resources: {\n genericErrorMessage,\n noOrderHistoryLable,\n moreButtonText,\n backToShopping,\n orderCountLabel,\n ordersCountLabel,\n loadingLabel\n }\n } = this.props;\n const { salesOrders, products } = this.orderHistory;\n const { isDataReady, hasError, isShowMoreButton, isLoading } = this.viewState;\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const channelIdentities = this.props.data.channels.result && this.props.data.channels.result.channelIdentities;\n const orgUnitLocations = this.props.data.orgUnitLocations.result && this.props.data.orgUnitLocations.result.orgUnitLocations;\n const customer = this.props.data.customerInformation && this.props.data.customerInformation.result;\n\n let viewProps: IOrderHistoryViewProps = {\n ...this.props,\n orderHistory: this.orderHistory,\n viewState: this.viewState,\n orderHistoryProps: {\n moduleProps: this.props,\n className: classname('ms-order-history', className)\n },\n header: {\n headerProps: { className: 'ms-order-history__header' },\n heading: heading && heading.text && (\n <Msdyn365.Text\n {...heading}\n className='ms-order-history__heading'\n text={heading.text}\n tag={heading.tag || 'h2'}\n editProps={{ onEdit: this.handleOrderHistoryHeadingChange, requestContext: this.props.context.request }}\n />\n ),\n extraActions: this.renderExtraActions()\n },\n backToShoppingLink: backToShoppingUrl && (\n <Button className='ms-order-history__btn-keep-shopping' href={backToShoppingUrl}>\n {backToShopping}\n </Button>\n )\n };\n\n if (hasError) {\n viewProps = {\n ...viewProps,\n alert: <Label className='ms-order-history__alert' label={genericErrorMessage} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!isDataReady) {\n viewProps = {\n ...viewProps,\n loading: <Label className='ms-order-history__loading' label={loadingLabel} />\n };\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n if (!salesOrders || salesOrders.length === 0) {\n if (this.viewState.errorCode === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\n viewProps = {\n ...viewProps,\n emptyMessage: <p className='ms-order-history__empty-message'>{this.viewState.errorMessage}</p>\n };\n } else {\n viewProps = {\n ...viewProps,\n emptyMessage: <p className='ms-order-history__empty-message'>{noOrderHistoryLable}</p>\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n const _orderCountLabel = salesOrders.length === 1 ? orderCountLabel : ordersCountLabel;\n this.payLoad.contentAction.etext = TelemetryConstant.ViewMore;\n const viewMoreAttributes = getTelemetryAttributes(this.telemetryContent!, this.payLoad);\n\n const productsDetailedViewLimit = 5;\n\n viewProps = {\n ...viewProps,\n header: {\n ...viewProps.header,\n orderCountLabel: shouldShowCount ? (\n <span className='ms-order-history__order-count'>{`(${salesOrders.length} ${_orderCountLabel})`}</span>\n ) : (\n undefined\n ),\n extraActions: this.renderExtraActions()\n },\n table:\n this._viewMode === OrderHistoryViewMode.listView ? (\n <OrderHistoryTableComponent\n id={this.props.id}\n typeName={this.props.typeName}\n context={this.props.context}\n className='ms-order-history__table-list'\n shouldShowChannelInfo={this.props.config.showChannelInfo ?? false}\n shouldShowOrderPlacedBy={Msdyn365.isChannelTypeB2B(this.props.context.request) ?? false}\n data={{\n orderHistory: this.orderHistory,\n channelIdentities,\n orgUnitLocations,\n customer,\n originators: this.originatorList\n }}\n resources={this.props.resources}\n />\n ) : (\n undefined\n ),\n list:\n this._viewMode === OrderHistoryViewMode.detailedView\n ? {\n listProps: { className: 'ms-order-history__sales-order-list' },\n salesOrders: salesOrders.map(salesOrder =>\n getSalesOrder({\n ...this.props,\n products,\n salesOrder,\n channelIdentities,\n orgUnitLocations,\n showChannelInfo,\n customer,\n originator: this.originatorList.find(\n o =>\n (salesOrder.SalesId && o.SalesId === salesOrder.SalesId) ||\n (salesOrder.TransactionId && o.TransactionId === salesOrder.TransactionId)\n ),\n salesLinesLimit: productsDetailedViewLimit,\n telemetryContent: this.telemetryContent\n })\n )\n }\n : undefined,\n moreButton: isShowMoreButton && (\n <Button\n className={`ms-order-history__btn-more ${isLoading ? 'is-busy' : ''}`}\n {...viewMoreAttributes}\n disabled={isLoading}\n onClick={this.onMoreButtonClick}\n >\n {moreButtonText}\n </Button>\n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleOrderHistoryHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.heading!.text = event.target.value);\n\n private readonly onMoreButtonClick = () => {\n this.getOrderHistory();\n };\n\n private readonly renderExtraActions = () => {\n return (\n <>\n {this._renderOrderHistoryFilter()}\n {this._renderViewModes()}\n </>\n );\n };\n\n /**\n * Renders a filter for order history.\n * @returns A react node or undefined if customer info is not ready.\n */\n private readonly _renderOrderHistoryFilter = () => {\n return (\n this.props.data.customerInformation &&\n this.props.data.customerInformation.result && (\n <OrderHistoryFilterComponent\n id={this.props.id}\n typeName={this.props.typeName}\n context={this.props.context}\n className='ms-order-history__ms-order-history-filter'\n resources={this.props.resources}\n data={{ customerInformation: this.props.data.customerInformation.result }}\n currentState={this.filterState}\n onFilterStateChanged={this.onFilterStateChanged}\n />\n )\n );\n };\n\n /**\n * Renders view mode switches for order history.\n * @returns A react node.\n */\n private readonly _renderViewModes = () => {\n if (!this.props.config.isGridViewEnabled) {\n return null;\n }\n\n const viewModesClassName = 'ms-order-history__ms-order-history-view-modes';\n return (\n <div className={viewModesClassName}>\n <Button\n className={classname(\n `${viewModesClassName}__detailed-view`,\n this._viewMode === OrderHistoryViewMode.detailedView ? 'msc-view-modes__selected' : ''\n )}\n title={this.props.resources.orderHistoryDetailedViewModeAriaLabel}\n aria-label={this.props.resources.orderHistoryDetailedViewModeAriaLabel}\n role='button'\n onClick={this._setDetailedViewMode}\n />\n <Button\n className={classname(\n `${viewModesClassName}__list-view`,\n this._viewMode === OrderHistoryViewMode.listView ? 'msc-view-modes__selected' : ''\n )}\n title={this.props.resources.orderHistoryListViewModeAriaLabel}\n aria-label={this.props.resources.orderHistoryListViewModeAriaLabel}\n role='button'\n onClick={this._setListViewMode}\n />\n </div>\n );\n };\n\n private readonly initState = () => {\n this.orderHistory = {\n salesOrders: [],\n products: [],\n nextPageToken: ''\n };\n this.originatorList = [];\n this.viewState = {\n isDataReady: false,\n hasError: false,\n isShowMoreButton: (this.props.config.pageSize || 0) > 0,\n isLoading: false,\n errorCode: '',\n errorMessage: ''\n };\n this.pageSize = this.props.config.pageSize || 10;\n this.paging = {\n top: this.pageSize,\n skip: 0\n };\n };\n\n /**\n * Updates view mode to be list view.\n */\n private readonly _setListViewMode = () => {\n this._viewMode = OrderHistoryViewMode.listView;\n };\n\n /**\n * Updates view mode to be detailed view.\n */\n private readonly _setDetailedViewMode = () => {\n this._viewMode = OrderHistoryViewMode.detailedView;\n };\n\n private readonly onFilterStateChanged = (state: OrderHistoryFilterState) => {\n this.initState();\n this.filterState = state;\n this._updateOrderHistory();\n };\n\n /**\n * Retrieves the data and updates the view state.\n */\n private readonly _updateOrderHistory = () => {\n this.getOrderHistory()\n .then(() => {\n this.viewState.isDataReady = true;\n })\n .catch(() => {\n this.viewState.hasError = true;\n });\n };\n\n private readonly getOriginator = async (salesOrders: OrderShipments[]): Promise<void> => {\n if (Msdyn365.isUserTypeB2B(this.props.context.request)) {\n const actionContext = this.props.context.actionContext;\n let result: OrderOriginator[] | undefined;\n try {\n const salesIds = salesOrders.map(order => order.SalesId ?? '').filter(id => id !== '');\n const transactionIds = salesOrders.map(order => order.TransactionId ?? '').filter(id => id !== '');\n const originatorsInput = new GetOrderOriginatorsInput(transactionIds, salesIds, this.props.context.request.apiSettings);\n result = await getOriginatorsAction(originatorsInput, actionContext);\n } catch (error) {\n result = undefined;\n }\n if (result) {\n this.originatorList.push(...result);\n }\n }\n };\n\n private readonly getOrderHistory = async (): Promise<void> => {\n const actionContext = this.props.context.actionContext;\n const input = new GetSalesOrderHistoryWithHydrationsInput(\n this.paging,\n this.props.context.request.apiSettings,\n this.filterState,\n this.orderHistory.nextPageToken\n );\n\n try {\n this.viewState.isLoading = true;\n const response = await getSalesOrderHistoryWithHydrationsAction(input, actionContext);\n if (response) {\n const { products, salesOrders } = response;\n this.orderHistory.products.push(...products);\n this.orderHistory.salesOrders.push(...salesOrders);\n this.viewState.isShowMoreButton =\n this.viewState.isShowMoreButton && response.salesOrders.length > 0 && response.salesOrders.length === this.pageSize;\n this.paging.skip += this.pageSize;\n this.orderHistory.nextPageToken = response.nextPageToken;\n await this.getOriginator(salesOrders);\n }\n this.viewState.isLoading = false;\n\n await Promise.resolve();\n return;\n } catch (error) {\n this.viewState.isLoading = false;\n\n if (error?.error?.name === 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed') {\n this.viewState.errorCode = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n this.viewState.errorMessage = error.error?.name;\n return Promise.reject();\n }\n\n return Promise.reject();\n }\n };\n}\n\nexport default OrderHistory;\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 { IGroup, IGroupDelivery, IGroups } from '../../common/get-groups';\nimport { IOrderInformation } from '../../common/get-order-information';\nimport { ISalesLine } from '../../common/get-sales-line';\nimport { ISalesOrder } from './components/get-sales-order';\nimport { IHeader, IList, IOrderHistoryViewProps } from './order-history';\n\nexport const OrderHistoryOrderInfomation: React.FC<IOrderInformation> = ({\n orderInformationProps,\n salesId,\n receiptId,\n channelName,\n createdDate,\n count,\n amount,\n channelReferenceId\n}) => (\n <Node {...orderInformationProps}>\n {channelName}\n {salesId}\n {receiptId}\n {createdDate}\n {count}\n {amount}\n {channelReferenceId}\n </Node>\n);\n\nexport const OrderHistoryGroupDelivery: React.FC<IGroupDelivery> = ({\n deliveryProps,\n heading,\n count,\n processing,\n address,\n trackingInfo\n}) => (\n <Node {...deliveryProps}>\n {heading}\n {count}\n {processing}\n {address}\n {trackingInfo}\n </Node>\n);\n\nexport const OrderHistoryGroup: React.FC<IGroup> = ({ groupProps, delivery, salesLinesProps, salesLines }) => (\n <Node {...groupProps}>\n {delivery && <OrderHistoryGroupDelivery {...delivery} />}\n {salesLines && (\n <Node {...salesLinesProps}>\n {salesLines.map((salesLine: ISalesLine) => (\n <React.Fragment key={salesLine.data.salesLine.LineId}>{salesLine.salesLine}</React.Fragment>\n ))}\n </Node>\n )}\n </Node>\n);\n\nexport const OrderHistoryGroups: React.FC<IGroups> = ({ groupsProps, groups }) => (\n <Node {...groupsProps}>\n {groups.map((group: IGroup, index: number) => (\n <OrderHistoryGroup key={index} {...group} />\n ))}\n </Node>\n);\n\nexport const OrderHistoryHeader: React.FC<IHeader> = ({ headerProps, heading, orderCountLabel, extraActions }) => (\n <Node {...headerProps}>\n {heading}\n {orderCountLabel}\n {extraActions}\n </Node>\n);\n\nexport const OrderHistorySalesOder: React.FC<ISalesOrder> = ({\n salesOrderProps,\n orderInfomation,\n groups,\n orderDetailsLink,\n expandProductsButton\n}) => (\n <Node {...salesOrderProps}>\n {orderInfomation && <OrderHistoryOrderInfomation {...orderInfomation} />}\n {groups && <OrderHistoryGroups {...groups} />}\n {expandProductsButton}\n {orderDetailsLink}\n </Node>\n);\n\nexport const OrderHistoryList: React.FC<IList> = ({ listProps, salesOrders }) => (\n <Node {...listProps}>\n {salesOrders && salesOrders.map((salesOrder: ISalesOrder, index: number) => <OrderHistorySalesOder key={index} {...salesOrder} />)}\n </Node>\n);\n\nconst OrderHistoryView: React.FC<IOrderHistoryViewProps> = ({\n orderHistoryProps,\n header,\n alert,\n loading,\n emptyMessage,\n backToShoppingLink,\n list,\n table,\n moreButton\n}) => (\n <Module {...orderHistoryProps}>\n {header && <OrderHistoryHeader {...header} />}\n {loading}\n {alert && (\n <>\n {alert}\n {backToShoppingLink}\n </>\n )}\n {emptyMessage && (\n <>\n {emptyMessage}\n {backToShoppingLink}\n </>\n )}\n {list && <OrderHistoryList {...list} />}\n {table}\n {moreButton && moreButton}\n </Module>\n);\n\nexport default OrderHistoryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ExtensibleEnumeration } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, EmailRegex } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { IOrderLookupResources, IOrderLookupSearchAdditionalFieldsData } from '../order-lookup.props.autogenerated';\n\n/**\n * Render label.\n * @param className - Classname for label.\n * @param value - Text for label.\n * @returns -The JSX Element.\n */\nexport const labelGroup = (className: string, value: string): JSX.Element => {\n return <div className={className}>{value}</div>;\n};\n\n/**\n * Error label.\n * @param responseErrorMessage - Error message for label.\n * @param errorMessageClassName - Error message for class name.\n * @returns - Error ReactNode.\n */\nexport const renderErrorLabel = (responseErrorMessage: string, errorMessageClassName: string): React.ReactNode => {\n return responseErrorMessage && <div className={errorMessageClassName}>{responseErrorMessage}</div>;\n};\n\n/**\n * Registered user message.\n * @param resources - Resource values.\n * @param signInUrl - Signin url.\n * @param signInLinkClassName - Signin link classname.\n * @param registeredUserClassName - Registered user message classname.\n * @returns - ReactNode.\n */\nexport const renderRegisteredUserMessage = (\n resources: IOrderLookupResources,\n signInUrl: string,\n signInLinkClassName: string,\n registeredUserClassName: string\n): React.ReactNode => {\n const { orderLookupRegisteredUserText, orderLookupViewAccountText, orderLookupSignInLinkText } = resources;\n const message: string = orderLookupRegisteredUserText;\n const infoMessage: string = orderLookupViewAccountText;\n const signInText: string = orderLookupSignInLinkText;\n return (\n <div className={registeredUserClassName}>\n {message}\n <a className={signInLinkClassName} href={signInUrl}>\n {signInText}\n </a>\n {infoMessage}\n </div>\n );\n};\n\n/**\n * EmailValid submit.\n * @param email - Onsubmit of form and button click.\n * @returns - Boolean.\n */\nexport const isEmailValid = (email: string): boolean => {\n return EmailRegex.defaultRegex.test(email);\n};\n\n/**\n * Additional field validation for on submit.\n * @param name - Onsubmit of form and button click.\n * @returns - Boolean.\n */\nexport const isAdditionalFieldValid = (name: string): boolean => {\n const regEx = new RegExp('^(?!\\\\s)[A-Za-z0-9\\\\s]+$', 'u');\n return regEx.test(name);\n};\n\n/**\n * Validate order lookup field against extensible enum.\n * @param orderStatusLookUpParameter - Order lookup parameter.\n * @param orderLookupExtensibleEnum - Order lookup extensible enum.\n * @returns - Boolean.\n */\nexport const validateOrderLookupField = (\n orderStatusLookUpParameter: string,\n orderLookupExtensibleEnum: ExtensibleEnumeration[]\n): boolean => {\n let isValidField: boolean = false;\n for (const item of orderLookupExtensibleEnum) {\n if (item.Name.toLocaleLowerCase() === orderStatusLookUpParameter.toLocaleLowerCase()) {\n isValidField = true;\n return isValidField;\n }\n }\n return isValidField;\n};\n\n/**\n * Validate order lookup additional fields with proxy values.\n * @param value - Value to be validated.\n * @param orderLookupExtensibleEnum - Order lookup extensible enum.\n * @returns - Boolean.\n */\nexport const validateAdditionalFieldWithProxy = (value: string, orderLookupExtensibleEnum: ExtensibleEnumeration[]): boolean => {\n return !orderLookupExtensibleEnum.some(item => item.Name.toLocaleLowerCase() === value.toLocaleLowerCase());\n};\n\n/**\n * Validate order lookup additional fields against extensible enum.\n * @param orderStatusLookUpAdditionalParameters - Order lookup parameter.\n * @param orderLookupExtensibleEnum - Order lookup extensible enum.\n * @returns - Boolean.\n */\nexport const validateOrderLookupAdditionalField = (\n orderStatusLookUpAdditionalParameters: IOrderLookupSearchAdditionalFieldsData[],\n orderLookupExtensibleEnum: ExtensibleEnumeration[]\n): boolean => {\n let isValidAdditionalField: boolean = false;\n if (ArrayExtensions.hasElements(orderStatusLookUpAdditionalParameters)) {\n orderStatusLookUpAdditionalParameters.map(item => {\n const fieldKey: string = item.fieldKey ?? '';\n if (!isValidAdditionalField) {\n isValidAdditionalField = validateAdditionalFieldWithProxy(fieldKey, orderLookupExtensibleEnum);\n }\n return isValidAdditionalField;\n });\n } else {\n isValidAdditionalField = false;\n }\n return isValidAdditionalField;\n};\n\n/**\n * Render validation message if field does not matches with extensible enum.\n * @param orderLookupFieldValidationErrorMessage - Order lookup validation message.\n * @returns - ReactNode.\n */\nexport const renderFieldErrors = (orderLookupFieldValidationErrorMessage: string): React.ReactNode => {\n return <div className='ms-order-lookup__field-value__error-message'>{orderLookupFieldValidationErrorMessage}</div>;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { labelGroup } from '../utilities/order-lookup-utility';\n\n/**\n * Additional input field props.\n */\nexport interface IOrderLookupAdditionalFieldInfoInput {\n className: string;\n ariaLabel: string;\n inputType: string;\n value: string;\n name: string;\n additionalFieldLabel: string;\n additionalFieldLabelClassName: string;\n isValidAdditionalFieldName: boolean;\n additionalFieldValidationMessage: string;\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\n}\n\n/**\n * Order lookup additional field props.\n */\nexport interface IOrderLookupAdditionalFieldInfo {\n additionalFieldLabel: React.ReactNode;\n additionalFieldInput: React.ReactNode;\n additionalFieldError: React.ReactNode;\n}\n\n/**\n * RenderOrderLookupAdditionalFieldInput component.\n */\n@observer\nexport default class RenderOrderLookupAdditionalFieldInput extends React.Component<IOrderLookupAdditionalFieldInfoInput> {\n public constructor(props: IOrderLookupAdditionalFieldInfoInput) {\n super(props);\n }\n\n public shouldComponentUpdate(nextProps: IOrderLookupAdditionalFieldInfoInput): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n return (\n <div className='ms-order-lookup__details__form__additional-fields'>\n {this._getOrderLookupAdditionalFields().additionalFieldLabel}\n {this._getOrderLookupAdditionalFields().additionalFieldError}\n {this._getOrderLookupAdditionalFields().additionalFieldInput}\n </div>\n );\n }\n\n /**\n * Function to create the order lookup additional fields.\n * @returns IOrderLookupFieldInfo.\n */\n private _getOrderLookupAdditionalFields(): IOrderLookupAdditionalFieldInfo {\n return {\n additionalFieldLabel: labelGroup(this.props.additionalFieldLabelClassName, this.props.additionalFieldLabel),\n additionalFieldInput: (\n <div className='ms-order-lookup__details__form__additional-fields__input-detail'>\n <input\n type={this.props.inputType}\n onChange={this.props.onChange}\n aria-label={this.props.ariaLabel}\n value={this.props.value}\n name={this.props.name}\n />\n </div>\n ),\n additionalFieldError: (\n <div className='ms-order-lookup__details__form__additional-fields__input-error'>\n {!this.props.isValidAdditionalFieldName ? this.props.additionalFieldValidationMessage : ''}\n </div>\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 { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { labelGroup } from '../utilities/order-lookup-utility';\n\n/**\n * Input field props.\n */\nexport interface IOrderLookupFieldInfoInput {\n inputReference?: React.RefObject<HTMLInputElement>;\n className: string;\n ariaLabel: string;\n inputType: string;\n value: string;\n name: string;\n orderLookupLabel: string;\n orderLookupLabelClassName: string;\n fieldErrorClassName: string;\n isInputTypeError: boolean;\n isValidInputField: boolean;\n renderAlert(className: string): JSX.Element;\n onChange(event: React.ChangeEvent<HTMLInputElement>): void;\n}\n\n/**\n * Order lookup field props.\n */\nexport interface IOrderLookupFieldInfo {\n label: React.ReactNode;\n input: React.ReactNode;\n error: React.ReactNode;\n}\n\n/**\n * RenderOrderLookupInputs component.\n */\n@observer\nexport default class RenderOrderLookupFormFields extends React.Component<IOrderLookupFieldInfoInput> {\n public constructor(props: IOrderLookupFieldInfoInput) {\n super(props);\n }\n\n public shouldComponentUpdate(nextProps: IOrderLookupFieldInfoInput): boolean {\n if (this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n return (\n <div className={this.props.className}>\n {this._getOrderLookupFields().label}\n {this._getOrderLookupFields().error}\n {this._getOrderLookupFields().input}\n </div>\n );\n }\n\n /**\n * Function to create the order lookup fields.\n * @returns IOrderLookupFieldInfo.\n */\n private _getOrderLookupFields(): IOrderLookupFieldInfo {\n return {\n label: labelGroup(this.props.orderLookupLabelClassName, this.props.orderLookupLabel),\n input: (\n <div className='ms-order-lookup__details__form__fields__input-detail'>\n <input\n ref={this.props.inputReference}\n type={this.props.inputType}\n onChange={this.props.onChange}\n aria-label={this.props.ariaLabel}\n value={this.props.value}\n name={this.props.name}\n />\n </div>\n ),\n error: (\n <div className={this.props.fieldErrorClassName}>\n {this.props.isInputTypeError ? this.props.renderAlert(this.props.name) : ''}\n {this.props.isValidInputField ? this.props.renderAlert(this.props.name) : ''}\n </div>\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 Msdyn365 from '@msdyn365-commerce/core';\nimport { IActionContext } from '@msdyn365-commerce/core-internal';\nimport { ExtensibleEnumeration, StoreOperationsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport RenderOrderLookupAdditionalFieldInput from './components/order-lookup-additional-fields';\nimport RenderOrderLookupFormFields from './components/order-lookup-fields';\nimport {\n IOrderLookupProps,\n IOrderLookupSearchAdditionalFieldsData,\n orderStatusLookUpParametersType as orderStatusLookUpParametersTypes\n} from './order-lookup.props.autogenerated';\nimport {\n isAdditionalFieldValid,\n isEmailValid,\n renderErrorLabel,\n renderFieldErrors,\n renderRegisteredUserMessage,\n validateOrderLookupAdditionalField,\n validateOrderLookupField\n} from './utilities/order-lookup-utility';\n\n/**\n * OrderLookup view props.\n */\nexport interface IOrderLookupViewProps extends IOrderLookupProps<{}> {\n additionalProperties: JSX.Element[] | undefined;\n orderLookup: IModuleProps;\n orderLookupContainer: INodeProps;\n orderLookupAdditionalFieldContainer: INodeProps;\n paragraph?: React.ReactNode;\n heading?: React.ReactNode;\n submitButton?: INodeProps;\n submitButtonLabelText?: string;\n orderLookupForm?: INodeProps;\n renderOrderLookupInputField: JSX.Element | undefined;\n orderNumberInput?: JSX.Element | undefined;\n errorMessage?: React.ReactNode;\n fieldErrorMessage?: React.ReactNode;\n registeredUserMessage?: React.ReactNode;\n onChange?(event: React.ChangeEvent<HTMLInputElement>): void;\n submit?(): void;\n}\n\n/**\n * OrderLookupSearchValues -- supported values.\n */\nenum OrderLookupSearchValues {\n email = 'email',\n ordernumber = 'ordernumber'\n}\n\n/**\n * To render and handle state for additional order lookup fields.\n */\nexport interface IOrderLookupAdditionalFields {\n labelName: string;\n isValidFieldName: boolean;\n fieldValue: string;\n ariaLabel: string;\n additionalfieldErrorMessage: string;\n}\n\n/**\n * OrderLookup view props.\n */\nexport interface IOrderLookupFormState {\n orderNumber: string;\n email: string;\n isOrdNumberError: boolean;\n isEmailError: boolean;\n isValidEmailError: boolean;\n isReqError: boolean;\n isDisabled: boolean;\n isValidLookupField: boolean;\n isValidAdditionalLookupField: boolean;\n responseErrorMessage: string;\n additionalProperties: IOrderLookupAdditionalFields[];\n}\n\n/**\n *\n * OrderLookup component.\n * @extends {React.PureComponent<IOrderLookupProps<{}>>}\n */\nclass OrderLookup extends React.PureComponent<IOrderLookupProps<{}>, IOrderLookupFormState> {\n public orderNumberInputRef: React.RefObject<HTMLInputElement>;\n\n public emailInputRef: React.RefObject<HTMLInputElement>;\n\n public isEmailValue: boolean = false;\n\n private requiredErrorMessage: string | undefined;\n\n private emailValidationErrorMessage: string | undefined;\n\n private isOrderNumberValue: boolean = false;\n\n private orderLookupExtensibleEnum: ExtensibleEnumeration[] = [];\n\n public constructor(props: IOrderLookupProps<{}>) {\n super(props);\n this.orderNumberInputRef = React.createRef();\n this.emailInputRef = React.createRef();\n const { config } = this.props;\n const { orderLookupSearchAdditionalFields } = config;\n const additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n\n if (orderLookupSearchAdditionalFields) {\n for (const item of orderLookupSearchAdditionalFields) {\n additionalPropertyStates.push({\n labelName: item.labelName ?? '',\n isValidFieldName: true,\n fieldValue: '',\n ariaLabel: item.ariaLabel ?? '',\n additionalfieldErrorMessage: item.validationMessage ?? ''\n });\n }\n }\n\n this.state = {\n orderNumber: '',\n email: '',\n isOrdNumberError: false,\n isEmailError: false,\n isValidEmailError: false,\n isReqError: false,\n isDisabled: true,\n isValidLookupField: true,\n isValidAdditionalLookupField: false,\n responseErrorMessage: '',\n additionalProperties: additionalPropertyStates\n };\n }\n\n public render(): JSX.Element | null {\n const {\n config: { paragraph, heading },\n resources,\n context\n } = this.props;\n\n const {\n orderLookupDefaultHeadingText,\n orderLookupButtonLabel,\n orderLookupFormAriaLabel,\n orderLookupOrderNumberLabel,\n orderLookupOrderNumberAriaLabel,\n orderLookupSubmitAriaLabel,\n orderLookupFieldValidationErrorMessage\n } = resources;\n\n const { responseErrorMessage, isDisabled, orderNumber, isOrdNumberError } = this.state;\n\n const headingText = StringExtensions.isNullOrEmpty(heading?.text) ? orderLookupDefaultHeadingText : heading?.text;\n const headingTag = heading?.tag ?? 'h1';\n\n const moduleClassName = 'ms-order-lookup';\n const orderLookupContainerClassName = `${moduleClassName}__details`;\n const orderLookupHeadingClassName = `${orderLookupContainerClassName}__heading`;\n const orderLookupFormClassName = `${orderLookupContainerClassName}__form`;\n const orderLookupAdditionalFiledContainerClassName = `${orderLookupFormClassName}__additional-fields-container`;\n const orderLookupFormFieldsClassName = `${orderLookupFormClassName}__fields`;\n const orderNumberLabelClassName = `${orderLookupFormFieldsClassName}__order-number-label`;\n const orderNumberInputErrorClassName = `${orderLookupFormFieldsClassName}__order-number-input-error`;\n const submitButtonClassName = `${orderLookupFormClassName}__submit`;\n const labelErrorMessageClassName = `${moduleClassName}__error-message`;\n const registeredUserClassName = `${moduleClassName}__registered-user`;\n const signinLinkClassName = `${registeredUserClassName}__sign-in-link msc-btn`;\n\n const orderLookupHeading = (\n <Msdyn365.Text\n className={orderLookupHeadingClassName}\n tag={headingTag}\n text={headingText}\n editProps={{ onEdit: this.handleTextChange, requestContext: this.props.context.request }}\n />\n );\n\n const viewProps: IOrderLookupViewProps = {\n ...this.props,\n orderLookup: {\n moduleProps: this.props,\n className: moduleClassName\n },\n\n orderLookupContainer: {\n className: orderLookupContainerClassName\n },\n orderLookupAdditionalFieldContainer: {\n className: orderLookupAdditionalFiledContainerClassName\n },\n paragraph: paragraph && this._createParagraph(paragraph),\n heading: orderLookupHeading,\n\n renderOrderLookupInputField: this._renderOrderLookupInput(),\n orderLookupForm: {\n className: orderLookupFormClassName,\n tag: 'form',\n 'aria-label': orderLookupFormAriaLabel,\n name: 'orderLookupForm',\n role: 'form',\n autoComplete: 'off',\n onSubmit: this.handleSubmit\n },\n orderNumberInput: (\n <RenderOrderLookupFormFields\n inputReference={this.orderNumberInputRef}\n ariaLabel={orderLookupOrderNumberAriaLabel}\n className={orderLookupFormFieldsClassName}\n inputType='text'\n value={orderNumber}\n name={OrderLookupSearchValues.ordernumber}\n orderLookupLabel={orderLookupOrderNumberLabel}\n orderLookupLabelClassName={orderNumberLabelClassName}\n fieldErrorClassName={orderNumberInputErrorClassName}\n isInputTypeError={false}\n isValidInputField={isOrdNumberError}\n renderAlert={this._renderOrderNumberAlert}\n onChange={this.onChange}\n />\n ),\n\n submitButton: {\n className: submitButtonClassName,\n tag: Button,\n 'aria-label': orderLookupSubmitAriaLabel,\n type: 'submit',\n role: 'button',\n title: orderLookupButtonLabel,\n onClick: this.handleSubmit,\n disabled: isDisabled\n },\n\n submitButtonLabelText: orderLookupButtonLabel,\n errorMessage: renderErrorLabel(responseErrorMessage, labelErrorMessageClassName),\n fieldErrorMessage:\n (!this.state.isValidLookupField || this.state.isValidAdditionalLookupField) &&\n renderFieldErrors(orderLookupFieldValidationErrorMessage),\n registeredUserMessage: renderRegisteredUserMessage(\n resources,\n context.request.user.signInUrl ?? '',\n signinLinkClassName,\n registeredUserClassName\n ),\n onChange: this.onChange,\n submit: this.handleSubmit,\n additionalProperties: this._renderAdditionalFields()\n };\n return this.props.renderView(viewProps);\n }\n\n public async componentDidMount(): Promise<void> {\n const { config, context } = this.props;\n const { actionContext } = context;\n const { orderStatusLookUpParametersType, orderLookupSearchAdditionalFields } = config;\n let isOrderLookupAdditionalFieldValid: boolean = false;\n let isOrderLookupFieldValid: boolean = false;\n\n const getExtensibleEnumerations = await StoreOperationsDataActions.getExtensibleEnumerationsAsync({ callerContext: actionContext });\n this.orderLookupExtensibleEnum =\n getExtensibleEnumerations.find(item => item.TypeName === 'OrderLookupAdditionalCriteriaType')?.ExtensibleEnumerations ?? [];\n\n const orderLookupParameter: string = orderStatusLookUpParametersType ?? '';\n const orderLookupAdditionalParameter: IOrderLookupSearchAdditionalFieldsData[] = orderLookupSearchAdditionalFields ?? [];\n\n isOrderLookupFieldValid = validateOrderLookupField(orderLookupParameter, this.orderLookupExtensibleEnum);\n isOrderLookupAdditionalFieldValid = validateOrderLookupAdditionalField(\n orderLookupAdditionalParameter,\n this.orderLookupExtensibleEnum\n );\n this.setLookupFieldState(isOrderLookupFieldValid, isOrderLookupAdditionalFieldValid);\n }\n\n /**\n * Handle text change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: Msdyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * Handle paragraph change.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: Msdyn365.ContentEditableEvent): void => {\n const { config } = this.props;\n config.paragraph = event.target.value;\n };\n\n /**\n * Sets isValidLookupField after validating with extensible emun.\n * @param isValidField - Sets the property.\n * @param isValidAdditionalField - Sets the additional field property.\n */\n public setLookupFieldState(isValidField: boolean, isValidAdditionalField: boolean): void {\n this.setState({ isValidLookupField: isValidField, isValidAdditionalLookupField: isValidAdditionalField });\n }\n\n /**\n * HandleSubmit submit.\n */\n public readonly handleSubmit = (): void => {\n const { config, context } = this.props;\n const { actionContext } = context;\n const { additionalProperties, orderNumber, email } = this.state;\n const orderLookupValue = email;\n const { orderStatusLookUpParametersType } = config;\n const orderLookupName = orderStatusLookUpParametersType !== undefined ? orderStatusLookUpParametersType : '';\n const isValid: boolean = this._validateOrderLookupForm();\n if (isValid) {\n const actionContextValue: IActionContext = actionContext;\n const orderDetailsPath = Msdyn365.getUrlSync('orderDetails', actionContextValue) ?? '';\n if (orderDetailsPath) {\n const baseUrl = new URL(window.location.origin);\n const redirectUrl = new URL(orderDetailsPath, baseUrl);\n const searchParameters = redirectUrl.searchParams;\n\n searchParameters.set('confirmationId', orderNumber);\n searchParameters.set('propertyName', orderLookupName);\n searchParameters.set('propertyValue', orderLookupValue);\n\n if (ArrayExtensions.hasElements(additionalProperties)) {\n additionalProperties.map((item, index) => {\n const fieldName = !StringExtensions.isNullOrWhitespace(item.ariaLabel)\n ? item.ariaLabel.replace(' ', '').toLocaleLowerCase()\n : '';\n const fieldValue = !StringExtensions.isNullOrWhitespace(item.fieldValue) ? item.fieldValue : '';\n searchParameters.set(`field${index + 1}Name`, fieldName);\n searchParameters.set(`field${index + 1}Value`, fieldValue);\n return item;\n });\n }\n\n window.location.assign(redirectUrl.toString());\n }\n }\n };\n\n /**\n * OnChange event.\n * @param event - Value of input field.\n */\n public readonly onChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n const { additionalProperties } = this.state;\n const { config } = this.props;\n const { orderStatusLookUpParametersType } = config;\n const name = event.target.name || '';\n const value = event.target.value || '';\n this.isOrderNumberValue = !StringExtensions.isNullOrWhitespace(this.orderNumberInputRef.current?.value);\n this.isEmailValue = !StringExtensions.isNullOrWhitespace(this.emailInputRef.current?.value);\n\n if (orderStatusLookUpParametersType?.toLocaleLowerCase() === 'none') {\n this.isEmailValue = true;\n }\n\n this.setState({ responseErrorMessage: '' });\n const additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n let isAdditionalFieldError: boolean = true as boolean;\n let isKeyExistInAdditionalFieldArray: boolean = false as boolean;\n\n for (const item of additionalProperties) {\n const fieldName: string = item.ariaLabel.replace(' ', '');\n if (fieldName.toLocaleLowerCase() === name.toLocaleLowerCase()) {\n additionalPropertyStates.push({\n labelName: item.labelName,\n isValidFieldName: true,\n fieldValue: value,\n ariaLabel: item.ariaLabel,\n additionalfieldErrorMessage: item.additionalfieldErrorMessage\n });\n } else {\n additionalPropertyStates.push({\n labelName: item.labelName,\n isValidFieldName: item.isValidFieldName,\n fieldValue: item.fieldValue,\n ariaLabel: item.ariaLabel,\n additionalfieldErrorMessage: item.additionalfieldErrorMessage\n });\n }\n if (fieldName.toLocaleLowerCase() === orderStatusLookUpParametersType?.toLocaleLowerCase()) {\n isKeyExistInAdditionalFieldArray = true;\n }\n }\n\n for (const items of additionalPropertyStates) {\n if (StringExtensions.isNullOrWhitespace(items.fieldValue)) {\n isAdditionalFieldError = false;\n }\n }\n\n this.setState({ additionalProperties: additionalPropertyStates });\n\n if (!isKeyExistInAdditionalFieldArray) {\n switch (name.toLocaleLowerCase()) {\n case OrderLookupSearchValues.ordernumber: {\n this.setState({\n orderNumber: value,\n isOrdNumberError: false,\n isReqError: false\n });\n break;\n }\n case OrderLookupSearchValues.email: {\n this.setState({\n email: value,\n isEmailError: false,\n isValidEmailError: false,\n isReqError: false\n });\n break;\n }\n default: {\n this.setState({ isReqError: false });\n }\n }\n }\n\n if (\n this.isOrderNumberValue &&\n this.isEmailValue &&\n isAdditionalFieldError &&\n this.state.isValidLookupField &&\n !this.state.isValidAdditionalLookupField\n ) {\n this.setState({ isDisabled: false });\n } else {\n this.setState({ isDisabled: true });\n }\n };\n\n private _createParagraph(text?: Msdyn365.RichText): React.ReactNode | null {\n const { context } = this.props;\n const { request } = context;\n if (!text) {\n return null;\n }\n return (\n <Msdyn365.RichTextComponent\n text={text}\n className='ms-order-lookup__details__text'\n editProps={{ onEdit: this.handleParagraphChange, requestContext: request }}\n />\n );\n }\n\n /**\n * Render order lookup validation message.\n * @param className - Class name for error field.\n * @returns - JSX.Element.\n */\n private readonly _renderAlert = (className: string): JSX.Element => {\n const {\n resources: { orderLookupEmailValidationErrorMessage, orderLookupRequiredTextErrorMessage }\n } = this.props;\n\n const { isEmailError, email, isValidEmailError, isReqError } = this.state;\n if (isEmailError) {\n this.requiredErrorMessage = orderLookupRequiredTextErrorMessage;\n }\n\n if (!StringExtensions.isNullOrEmpty(email) && isValidEmailError) {\n this.emailValidationErrorMessage = orderLookupEmailValidationErrorMessage;\n }\n\n const isRequireError = isReqError;\n const isEmailValidError = isValidEmailError;\n const isValidEmailInput = className.toLocaleLowerCase() === OrderLookupSearchValues.email;\n return (\n <>\n {isRequireError && (\n <span className={`${className}__alert`} role='alert'>\n {this.requiredErrorMessage}\n </span>\n )}\n {isEmailValidError && isValidEmailInput && (\n <span className={`${className}__alert`} role='alert'>\n {this.emailValidationErrorMessage}\n </span>\n )}\n </>\n );\n };\n\n /**\n * Render order number validation message.\n * @param className - Class name for error field.\n * @returns - JSX.Element.\n */\n private readonly _renderOrderNumberAlert = (className: string): JSX.Element => {\n const {\n resources: { orderLookupOrderNumberValidationErrorMessage, orderLookupRequiredTextErrorMessage }\n } = this.props;\n\n const { isOrdNumberError, isReqError } = this.state;\n return (\n <>\n {isReqError && (\n <span className={`${className}__alert`} role='alert'>\n {orderLookupRequiredTextErrorMessage}\n </span>\n )}\n {isOrdNumberError && (\n <span className={`${className}__alert`} role='alert'>\n {orderLookupOrderNumberValidationErrorMessage}\n </span>\n )}\n </>\n );\n };\n\n private _renderAdditionalFields(): JSX.Element[] | undefined {\n const { additionalProperties } = this.state;\n const additionalFieldsInput: JSX.Element[] = [];\n for (const item of additionalProperties) {\n const name: string = item.ariaLabel.replace(' ', '');\n additionalFieldsInput.push(\n <RenderOrderLookupAdditionalFieldInput\n className={name.toLocaleLowerCase()}\n ariaLabel={item.ariaLabel}\n inputType='text'\n value={item.fieldValue}\n name={name.toLocaleLowerCase()}\n additionalFieldLabel={item.labelName}\n additionalFieldLabelClassName='ms-order-lookup__details__form__additional-fields__label'\n isValidAdditionalFieldName={item.isValidFieldName}\n additionalFieldValidationMessage={item.additionalfieldErrorMessage}\n onChange={this.onChange}\n />\n );\n }\n return additionalFieldsInput;\n }\n\n /**\n * Render Input field for order lookup.\n * @returns - IOrderLookupFieldInfo.\n */\n private readonly _renderOrderLookupInput = (): JSX.Element | undefined => {\n const { email, isEmailError, isValidEmailError } = this.state;\n const {\n config: { orderStatusLookUpParametersType },\n resources: { orderLookupEmailLabel, orderLookupEmailAriaLabel }\n } = this.props;\n\n switch (orderStatusLookUpParametersType) {\n case orderStatusLookUpParametersTypes.none:\n return undefined;\n case orderStatusLookUpParametersTypes.email:\n default:\n return (\n <RenderOrderLookupFormFields\n inputReference={this.emailInputRef}\n ariaLabel={orderLookupEmailAriaLabel}\n className='ms-order-lookup__details__form__fields'\n inputType='text'\n value={email}\n name={OrderLookupSearchValues.email}\n orderLookupLabel={orderLookupEmailLabel}\n orderLookupLabelClassName='ms-order-lookup__details__form__fields__email-label'\n fieldErrorClassName='ms-order-lookup__details__form__fields__email-input-error'\n isInputTypeError={isEmailError}\n isValidInputField={isValidEmailError}\n renderAlert={this._renderAlert}\n onChange={this.onChange}\n />\n );\n }\n };\n\n /**\n * _validation for additional fields.\n * @returns - Returns IOrderLookupAdditionalFields[].\n */\n private readonly _additionalFieldValidation = (): IOrderLookupAdditionalFields[] => {\n const additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n for (const item of this.state.additionalProperties) {\n const isFieldValid: boolean = !StringExtensions.isNullOrWhitespace(item.fieldValue) && isAdditionalFieldValid(item.fieldValue);\n additionalPropertyStates.push({\n labelName: item.labelName,\n isValidFieldName: isFieldValid,\n fieldValue: item.fieldValue,\n ariaLabel: item.ariaLabel,\n additionalfieldErrorMessage: item.additionalfieldErrorMessage\n });\n }\n return additionalPropertyStates;\n };\n\n /**\n * _validateOrderLookupForm submit.\n * @returns - Returns boolean.\n */\n private readonly _validateOrderLookupForm = (): boolean => {\n const { config } = this.props;\n const { orderNumber, email } = this.state;\n const { orderStatusLookUpParametersType } = config;\n let additionalPropertyStates: IOrderLookupAdditionalFields[] = [];\n let isValid = false;\n let isDisable = false;\n\n if (ArrayExtensions.hasElements(this.state.additionalProperties)) {\n additionalPropertyStates = this._additionalFieldValidation();\n for (const item of additionalPropertyStates) {\n if (!item.isValidFieldName) {\n isDisable = true;\n }\n }\n\n if (isDisable) {\n this.setState({\n additionalProperties: additionalPropertyStates,\n isDisabled: true\n });\n }\n }\n\n if (StringExtensions.isNullOrWhitespace(orderNumber)) {\n this.setState({\n isOrdNumberError: true,\n isReqError: true,\n isDisabled: true\n });\n } else if (orderNumber.trim() !== orderNumber) {\n this.setState({\n isOrdNumberError: true,\n isReqError: false,\n isDisabled: true\n });\n } else if (\n orderStatusLookUpParametersType === orderStatusLookUpParametersTypes.email &&\n StringExtensions.isNullOrWhitespace(email)\n ) {\n this.setState({\n isEmailError: true,\n isReqError: true,\n isDisabled: true\n });\n } else if (orderStatusLookUpParametersType === orderStatusLookUpParametersTypes.email && !isEmailValid(email)) {\n this.setState({\n isValidEmailError: true,\n isDisabled: true\n });\n } else if (isDisable || !this.state.isValidLookupField || this.state.isValidAdditionalLookupField) {\n this.setState({\n isDisabled: true\n });\n } else {\n this.setState({\n isDisabled: false\n });\n isValid = true;\n }\n return isValid;\n };\n}\n\nexport default OrderLookup;\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<IOrderSummaryLineProps> = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n <p className={`msc-order-summary__line-${cssLabel}`}>\n <span className=\"msc-order-summary__label\">{label}</span>\n {price || price === 0 ? (\n <PriceComponent\n data={{\n price: { CustomerContextualPrice: price }\n }}\n freePriceText={freeText}\n context={context}\n id={id}\n typeName={typeName}\n className=\"msc-order-summary__value\"\n currencyCode={priceCurrency}\n />\n ) : (\n <span className=\"msc-order-summary__value\">{toBeCalculatedText}</span>\n )}\n </p>\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n <OrderSummaryLine\n price={price}\n label={label}\n context={props.context}\n id={props.id}\n typeName={props.typeName}\n toBeCalculatedText={props.toBeCalculatedText}\n freeText={props.freeText}\n telemetry={props.telemetry}\n cssLabel={cssLabel}\n priceCurrency={props.channelConfiguration.Currency}\n />\n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n"],"names":["cartLinesSortOrder","_renderDeliveryLocation","cartLine","props","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","length","find","deliveryOption","ProductId","delivery","DeliveryOptions","option","Code","DeliveryMode","location","Description","resources","shippingText","_renderStoreLocation","React","className","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","cartlines","products","reactNodes","map","cartline","index","product","foundProductAvailability","_foundProductAvailabi","isQuantityLimitsFeatureEnabled","getProductByProductIdAndWarehouse","WarehouseId","cartState","getProductByProductId","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","push","_assembleNode","foundProductDeliveryOptions","_product$Behavior","imageSettings","gridSettings","id","typeName","context","removeButtonText","removeItemClickHandler","customerTaxPercentage","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","Behavior","MaximumQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","payLoad","getPayloadObject","telemetryContent","TelemetryConstant","RemoveCartItem","removeCartItemAttribute","getTelemetryAttributes","productUrl","getProductUrlSync","actionContext","undefined","MsDyn365","isBrowser","isChannelTypeB2B","requestContext","_cartline$CatalogId","fullUrl","URL","window","href","searchParams","set","CatalogId","data","hasError","Quantity","CartLineItemComponent","catalogs","currentQuantity","isOutOfStock","key","isQuantityEditable","primaryImageUrl","PrimaryImageUrl","displayMode","channelDeliveryOptionConfig","deliveryLocation","remove","Button","Object","assign","onClick","title","storeLocation","telemetry","error","async","getMiniCartData","ctx","miniCartData","cart","CartLines","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","then","catch","exception","Error","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","apiSettings","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","constructor","super","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","lines","descending","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","_removeItemFromCartHandler","cartlineToRemove","this","result","input","cartLineIds","LineId","toString","removeCartLines","warning","debug","state","isCartValid","getTelemetryObject","request","telemetryPageName","friendlyName","payload","TelemetryEvent","CheckOut","Checkout","checkoutBySignInAttributes","contentAction","etext","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","reaction","_this$props$data$cart","setState","_setQuantityLimitsFeatureFlag","_validateCart","componentDidUpdate","prevProps","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","_this$props$data$feat","config","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","getUrlSync","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","app","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","channel","EmailDeliveryModeCode","cartLines","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","includeFlyout","status","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","replace","flyoutTitle","flyoutTooltip","tag","UncontrolledTooltip","placement","hideArrow","trigger","target","shouldShowCloseButton","cartPageUrl","hideAriaHidden","price","TotalAmount","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","featureState","feature","Name","IsEnabled","viewProps","_objectSpread","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","CartlinesWrapper","miniCartWrapper","classnames","miniCartItemWrapper","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","goToCartButton","checkoutBlockedDueToUnavailableFunds","totalPrice","renderView","_cart$result$cart$Ver","_cart$result","cartVersion","Version","lastValidatedCartVersion","validateCartAsync","ArrayExtensions","hasElements","ValidationResultsPairs","isAbsoluteUrl","urlCheck","returnURL","msdyn365Commerce","origin","includes","_this$props$data$cust","_this$props$data$cata","PickupDeliveryModeCode","taxPercentage","customerInformation","FlyoutCartLineItems","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","quantityDisplayString","quantityDisplayText","salesAgreementPricePrompt","inputQuantityAriaLabel","discountStringText","originalPriceText","currentPriceText","shippingChargesText","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","pickupDeliveryModeCode","_featureStatuses$find","_featureStatuses$find2","featureStatuses","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find3","customerInfo","IsB2b","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","__decorate","observer","_props$cartlines","_props$data$customerI","_props$data$cart$resu","cartItem","customGoToCartButton","children","subtotalPrice","SubtotalAmount","Node","renderModuleAttributes","_renderCartlines","incExcPriceFormat","ProductComponent","createComponentOverride","component","_ref","_context$actionContex","_trafficLightATP$","_promotionBadge","_trafficLightATP$2","_context$request$chan","quickViewButton","productComparisonButton","requestPriceBtn","activePrices","atpData","imgURI","setImgURL","producerName","setProducerName","isBundle","setIsBundle","_imageUrl","imageUrl","generateImageUrl","isBundleProduct","_product$AttributeVal","findProducerName","AttributeValues","e","BooleanValue","productAttributes","filteredProductAttributeList","kcProductAttribute","identifier","_e$ExtensionPropertie","manufactuerValueforImage","ExtensionProperties","eProperty","Key","Value","StringValue","_renderProducerName","prod","_productAttributes$fi","attr","TextValue","_renderProducerKeyName","_productAttributes$fi2","urlPath","formatUrlPath","_prod$ExtensionProper","extension","pathName","url","requestUrl","pathname","split","isAddingPathWithUrl","addPathWithUrl","RecordId","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","search","updateProductUrl","attribute","activePrice","val","trafficLightATP","filter","item","ItemId","atpMsgRes","JsonResponseObject","atpMsgResParsed","JSON","parse","extensionsProps","promotionBadge","_extensionsProps$find","quickview","attributevalues","onTelemetryClick","PromotionBadges","promotionalBadge","src","alt","_renderCategoryImg","_renderProductPlacementImage","altText","img","imageProps","Image","loadFailureBehavior","itemNumberLabel","TrafficLights","lightColor","TrafficLight","isVisible","IsVisible","atpDiscontinuedMessageLabel","ATPMessage","locale","dateFormat","currency","Currency","isRequestPrice","LineDiscountGroup","requestPriceLabel","tabIndex","tooltipText","PriceComponent","String","freePriceText","priceFree","isIncExPriceFormatEnabled","_calculateWpPrice","catalogId","validateCatalogId","renderProductComparisonButton","getCatalogId","selectedProductId","viewDetailsLabel","linkUrl","destinationUrl","linkText","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Decimal","isRangeTypeForInteger","Integer","isCustomRangeTypeIntegerSelected","selectedRefinementCriterion","parentProductRefinerHierarchy","RowNumber","DataTypeValue","DisplayTemplateValue","DisplayTemplate","Range","isSingleSelectRangeTypeIntegerSelected","productRefinerValue","LeftValueBoundString","RightValueBoundString","findMatchingRefinementCriterion","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","parent","RefinerRecordId","RefinerSourceValue","getIntegerRangeName","rangeValue","RightValueBoundLocalizedString","LeftValueBoundLocalizedString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","r","forEach","selectedCriterion","isSelecting","next","rangeStart","rangeEnd","Text","TrueFalse","RefinerTypeValue","RefinerType","SingleSelect","Values","child","matchingIndex","findIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","preventDefault","stopPropagation","currentTarget","clearAll","getAttribute","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","hierarchy","value","_rangeParentDisplay$","rangeParentDisplay","p","_getKeyForRefinerValue","rangeDisplayType","clearAllText","label","classNames","choiceAriaLabel","closeAriaLabel","items","selectedRefinersMap","clearAllAttributes","newIntRange","urlBuilder","role","_parent","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","_formatPrice","UnitText","filterValue","refiner","amount","trace","Number","selected","computed","ErrorMessage","text","FeatureSearchResultItem","recommendation","productName","productRecordId","getProductPageUrlSync","fallbackImage","getFallbackImageUrl","heading","featureSimilarDescriptionTitle","featureSimilarLooksTitle","fallBackSrc","renderProductPlacementImage","Link","ariaLabel","ModalToggle","innerRef","ref","modalNode","Modal","autoFocus","applicationNode","returnFocusRef","returnRef","isOpen","toggle","onModalToggle","zIndex","modalHeaderNode","ModalHeader","modalTitle","modalFooterNode","ModalFooter","modalCloseButtonText","getInventoryLabel","inventoryAttribute","ProductSearchResultItems","moduleType","moduleId","allowBackNavigation","quickviewSlot","isPriceMinMaxEnabled","productsDimensionAvailabilities","gridListView","priceResources","priceRangeSeparator","ratingAriaLabel","allowBack","inventoryLabel","swatchItemAriaLabel","dimensionAvailabilities","dimensionAvailability","masterProductId","MasterProductId","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_ref2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","currencyCode","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","bind","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","initialMin","initialMax","minValue","maxValue","labels","sliderKeyString","sliderThumbs","isChecked","validationErrorMin","validationErrorMax","touchedMin","touchedMax","minValueState","maxValueState","componentDidMount","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_ref3","_this$props$selectedR5","_this$props$selectedR6","_ref4","_this$props$selectedR7","_this$props$selectedR8","isDisabled","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","currencySign","minLabel","onChange","onFocus","onBlur","maxLabel","placeholder","placeholderTextMax","ariaAttributes","Slider","inForm","min","max","step","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","event","_changeValue","inputType","selectedKey","touchedKey","maxCheckValue","_getInputWithoutFormatting","selectedMinValue","minTouched","onToggle","maxNum","isNaN","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","setTimeout","current","focus","touched","validationError","validationErrorRange","inputAsNum","get","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","element","document","getElementById","tooltip","toolTipLabel","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","_objectWithoutProperties","_excluded","stringify","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productText","productCount","Count","refineMenuItemAriaLabel","format","dimensionType","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","StringExtensions","isNullOrWhitespace","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","itemId","colorHexCode","SwatchComponent","list","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","parseInt","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","isMobileView","RatingComponent","avgRating","ratingCount","hideCount","readOnly","moduleTypeName","RangeRefineItemInput","_changeMinInputRange","_changeMaxInputRange","_applyCustom","invalidData","updateInputRangerProps","_isUndefined","trim","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpanded","isExpandedOnInitialLoad","expanded","_this$props$context$a","productRefinerHierarchy","hideRating","Price","Collapse","timeout","_renderChildItems","_renderSingleMultiSelect","_renderRange","isMobile","refinerValuesList","listItems","selectedValue","_getRangeType","SliderWithBars","onUpdateRefiners","prevState","Separator","separator","Title","expandRefinersCount","SearchResultContainer","SearchResultContainer_1","_props$context$reques","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","_viewport","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","isLoadMore","_updateListPageState","listPageState","_this$props$context$r2","_this$props$config$it","_this$props$config$it2","_this$props$context$r3","querySorting","query","sorting","decodeURIComponent","loading","recordIds","getActivePrices","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","count","activeFilters","hydrateRefinersFromUrl","productId","featureProduct","_getProductsDimensionsAvailabilities","_this$props$data$list","_this$props$data$list2","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","ModalBody","SearchResultModal","modalIsOpen","_modalToggleRef","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r4","category","getFriendlyName","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","toLowerCase","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","skipCount","ObjectExtensions","isNullOrUndefined","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","_this$props$config","_validRefiners","_this$props$config2","_validRefiners2","_this$props$data$list5","_this$props$data$list6","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","refiners","_shouldHideFromRefiners","needsToSort","refinersToBeSorted","_refiner$Values","refinerAttribute","a","b","_a$LeftValueBoundStri","localeCompare","needToFilter","filteredRefiners","_refiner$Values2","subRefiner","ntfRefiner","refinerCategory","activeRefiners","_getexpandRefinerCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","channelInventoryConfiguration","isInventorySortableAttribute","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","isInventoryProductAttribute","InventoryProductAttributeRecordId","_getChoiceSummary","_this$props$data$refi","selectedRefiners","rating","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","_this$props$data","shouldAllowBackNavigation","plpRequestPriceButton","breadCrumbType","breadcrumbType","shouldAllowBack","productList","slots","isPriceMinMaxFeatureState","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list7","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","validValues","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list8","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","all","one","two","three","four","paginationPreviousText","paginationNextText","_loadMoreProducts","pageNumber","info","information","_this$props$data$list9","scrollBy","gridView","listView","renderGridAndListView","listLabel","gridLabel","RecordIds","_this$props$data$cust2","_this$props$data2","getActivePricesAsync","callerContext","ChannelId","channelId","Date","AccountNumber","_renderCategoryDiscription","_category$ExtensionPr","categoryDisp","property","device","Type","_updateViewport","productPrices","pending","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","_this$props$context$a2","addEventListener","productCollection","_listPageState$result","_listPageState$result2","_listPageState$result3","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r5","_this$props$context$r6","_this$props$context$r7","_newListPageState$act2","newListPageState","GetFullProductsByCollectionInput","Paging","Top","Skip","Math","Sorting","recordId","Recommendation","includeAttributes","productResults","getCollectionProducts","Set","uniqueProducts","Array","from","_newListPageState$act3","atpDataPlpParams","GetAtpdataPlpInput","response","atpDataPlpaction","concat","ATPTrafficLights","enableAffiliationBasedPricing","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","DimensionTypes","none","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act4","_this$props$context$r8","_this$props$context$r9","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","componentWillUnmount","removeEventListener","_listPageState$result4","_listPageState$result5","_this$props$context$r10","_this$props$data$list10","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","moduleProps","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","errorMessage","FeatureSearchContainer","similarLookProduct","loadMore","categoryDiscription","_getViewport","variant","VariantType","Browser","Viewport","observable","action","createSearchResultModal","modalProps","isRecoSearchPage","filtersLabel","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","_renderTitleCount","productsLabel","_props$data$listPageS2","_props$data$listPageS3","_props$data$listPageS4","_props$context$action","krannichActiveProducts","selectedFilterCount","setSelectedFilterCount","isSelectedFilterCount","setIsSelectedFilterCount","_props$data","_props$data2","_props$data$listPageS","Module","Waiting","InfiniteScroll","threshold","pageStart","hasMore","propagateResult","onAdd","propagateError","onError","getAddToCartInputFromProps","_props$orderDetailsPr","orderDetailsProducts","simpleProduct","salesLine","_props$catalogId","searchCriteriaInput","Context","IncludeAttributes","Ids","productSearchResultsWithImages","ProductsDataActions","productSearchResult","newProductSearchResult","newImageUrl","generateProductImageUrl","productData","_productData$BasePric","ProductTypeValue","ProductType","Variant","AdjustedPrice","BasePrice","quantity","_props$quantity","addItemsToCart","setDisabled","setItemsAddedToCartDialogOpen","setErrorMessage","addToCartInput","getCartState","addToCartResult","addProductsToCart","_validationResult$Val","_props$dialogStrings2","_props$dialogStrings3","_props$dialogStrings$2","_props$dialogStrings4","errorCount","CartsDataActions","bypassCache","Id","ValidationFailuresByCartLines","dialogStrings","oneErrorText","multiErrorsText","validationErrorMessage","showModal","showNotification","_props$dialogStrings$3","itemsAddedResource","viewCartButtonText","goToCartText","closeButtonLabel","closeNotificationLabel","itemsAddedToCartHeaderText","headerMessageText","itemsAddedToCartFormatText","headerItemFormatText","linesAddedToCartFormatText","headerLinesFormatText","itemsAddedValidationErrorMessage","MultiItemsSuccessfullyAddedToCartNotification","navigationUrl","NotificationsManager","instance","addNotification","isNavigationToCartPageDisabled","goToCart","handleAddItemsToCartSuccess","_props$dialogStrings5","_props$dialogStrings$4","_addToCartResult$erro3","_addToCartResult$erro4","_props$dialogStrings$5","_props$dialogStrings6","buyAgainNotificationTitle","ErrorNotification","buyAgainNotificationCloseAriaLabel","errorDetails","LocalizedMessage","failureReason","cartActionResult","AddToCartComponentActions","_event","openModal","cartError","addToCartError","hasOrderDetailsProducts","hasProducts","hasMultipleProducts","shouldSkipSiteSettings","_props$productAvailab","addProductToCart","additionalProperties","validateQunatity","isOrderQuantityLimitsFeatureEnabled","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","ItemSuccessfullyAddedToCartNotification","isStatusTwoZeroFour","reload","_addToCartResult$erro","_addToCartResult$erro2","_props$dialogStrings$","_props$dialogStrings","addOneItemToCart","AddToCartFunctionalComponent","_props$context","_props$data5","_props$dialogStrings7","_props$dialogStrings8","_props$dialogStrings9","_addToCartInput$","_props$data6","_addToCartInput$2","_addToCartInput$3","_props$dialogStrings$6","_props$dialogStrings10","_props$dialogStrings$7","_props$dialogStrings11","_props$dialogStrings$8","_props$dialogStrings12","_props$dialogStrings$9","_props$dialogStrings13","_props$dialogStrings$10","_props$dialogStrings14","_props$addToCartArial","_props$addToCartArial2","useState","modalOpen","setModalOpen","isItemsAddedToCartDialogOpen","setcustomerTaxPercentage","setAddToCartInput","disountedWpPrice","setDiscountedwpPrice","attributes","setAttributes","getAttributeValuesAsync","queryResultSettings","findAttributesValues","getCustomerTaxInfo","calculateWpPrice","_props$data3","_props$data4","tempBasePrice","tempDiscountedPrice","displayWpPrice","basePrice","CustomerContextualPrice","discountedPrice","IntegerValue","closeItemsAddedToCartDialog","customerInput","GetCustomerInput","customer","getCustomer","enabledIncExPrices","ppwPrice","oun","ounNumberForUsSite","priceComponent","wpPrice","popupProps","productQuantity","mode","renderModalPopup","Popup","getLinkText","AddToCart","tAttributes","buttonClassName","retrievedInput","retrieveAddToCartInput","addToCartArialLabel","isIntermediateState","shouldShowOutOfStock","ItemsAddedToCartDialogComponent","isModalOpen","onClose","defaultProps","addToCartText","isCustomPriceSelected","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","Dimensions","missingDimensions","dimension","DimensionValue","defaultAvailableQuantity","stockLeft","includeCurrentQuantity","_props$hasAvailablePr","isLoading","isProductQuantityLoading","isUpdatingDimension","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","isAddServiceItemToCart","hasAvailableProducts","includedQuantityNumber","_props$data7","AddToCartComponent","OrderHistoryOrderInfomation","_orderHistory$salesOr","_salesOrderBasedOnSal","_customContext$reques","_amountProps$props","AttributeKeyName","orderInformationProps","salesId","channelReferenceId","orderDetailsLink","order","customContext","orderHistory","usSiteFlag","getAttributeValue","type","textValue","salesOrderBasedOnSalesId","salesOrders","saleOrder","SalesId","requestedDeliveryDate","RequestedDeliveryDate","toLocaleDateString","createdDateInGBFormat","CreatedDateTime","dateLocale","requestedDeliveryDateByLocale","createdDateInGBFormatByLocale","dateFormatByLocale","amountProps","amountValue","salesOrderLable","siteNameLable","Commission","customerRefNoLable","CustomerReference","orderDateLable","estShipDateLable","netAmountLable","StatusValue","NetAmountWithNoTax","currencyFormat","GrossAmount","totalAmountLable","currencyLable","statusLable","getOrderStatus","OrderHistorySearchOrderInfomation","_searchOrder$Extensio","_searchOrder$Extensio2","_searchOrder$Extensio3","_customContext$reques2","searchOrder","sitePath","siteName","customerRefNo","estimatedShipDate","estimatedShipDateByLocale","orderDetailsUrl","getOrderDetailsPageUrl","linkToDetailPage","orderDetailsLinkButton","viewOrderDetailsLable","ChannelReferenceId","confirmationIdText","NetAmount","TaxAmount","orderNumLable","OrderHistoryGroupDelivery","deliveryProps","processing","address","trackingInfo","OrderHistoryGroup","groupProps","salesLinesProps","salesLines","OrderHistoryGroups","_ref5","groupsProps","groups","group","OrderHistoryHeader","_ref6","headerProps","OrderHistorySalesOder","_ref7","_orderInfomation$sale","salesOrderProps","orderInfomation","salesOrder","expandProductsButton","orderNo","substr","setOrder","getSalesOrder","res","orderId","arguments","getSalesOrderDetailsBySalesIdAsync","OrderHistoryList","_ref8","listProps","searchResult","noResultFoundText","tableHeadings","actionLable","orderHistoryProps","header","alert","emptyMessage","backToShoppingLink","table","moreButton","orderStatusText","salesIdText","searchCriteriaText","confirmationIdPlaceHolder","salesIdPlaceHolder","setIsMobile","setRes","searchText","setSearchText","setIsLoading","clearButton","setClearButton","orderStatusOption","searchCriteriaDropdownValues","orderStatusDropdownValues","setSelectedOption","selectedStatus","setSelectedStatus","viewport","innerWidth","md","onSubmit","_orderStatusDropdownV","searchOrderInput","SearchOrderHistoryInput","searchTerm","accountNumber","SearchOrderHistoryAction","htmlFor","searchButtonText","handleClear","clearButtonText","PurchaseLeadTimeDate","PODate","atpMessage","IsDiscontinuedProduct","Message","POQuantity","InvoiceSummaryLine","toBeCalculatedText","freeText","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","checkoutState","loyaltyAmount","InvoiceSummary","invoiceLines","IsInvoiceLine","invoices","invoiceLine","InvoiceAmount","invoiceLabel","InvoiceId","orderTotal","orderTotalLabel","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","reduce","giftCardCounter","giftCard","Balance","totalAmountAfterGiftCard","loyalty","loyaltyLabel","giftcardLabel","Address","moduleName","deliveryType","showCompleteAddress","resource","shipToLabel","storeLabel","phoneLabel","Street","City","State","County","ZipCode","ThreeLetterISORegionName","Phone","FullAddress","BuySelectedComponent","_props$resources$orde10","_props$resources$orde11","buttonLabel","isIcon","orderDetailsBuySelectedButtonText","orderDetailsBuyItAgainLabel","buttonAriaLabel","orderDetailsBuySelectedButtonAriaLabel","orderDetailsBuyItAgainAriaLabel","isProductAvailable","orderDetailsUnavailableProductText","firstProduct","isReorderingEnabled","style","opacity","_props$resources$orde","_props$resources$orde2","_props$resources$orde3","_props$resources$orde4","_props$resources$orde5","_props$resources$orde6","_props$resources$orde7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$orde8","_props$resources$orde9","orderDetailsGoToCartText","continueShoppingText","orderDetailsDialogCloseText","orderDetailsBuySelectedAddingToCartErrorNotificationCloseAriaLabel","headerItemOneText","orderDetailsSingleItemText","orderDetailsMultiLineItemFormatText","orderDetailsMultiLinesFormatText","orderDetailsHeaderMessageText","addedQuantityText","orderDetailsBuySelectedAddingToCartErrorNotificationTitle","orderDetailsMultiItemsValidationErrorMessage","orderDetailsOneErrorText","orderDetailsMultiErrorText","getDialogStrings","getGroups","showAddress","showTimeslot","isConfirmationView","isCashAndCarryTransaction","isSelectionModeEnabled","customerName","isOboRequest","orderItemLabel","orderItemsLabel","pickupItemsHeader","pickingItemsLabel","shippingAddressTitle","shippingItemToYouLabel","shippingItemToOBOCustomerLabel","emailItemsHeader","emailingItemsLabel","groupSalesLines","salesStatus","_salesLines","itemLabel","pickingItemsLabelText","shippingItemsToText","emailingItemsLabelText","getSalesLinesProps","isProcessing","pickDateTimeslot","pickupDateTimeslot","shippedStatusCheck","pickupProps","shippingItemsToYou","requestDeliveryDate","getChannelReference","confirmationIdLabel","shouldShowQrCode","qrCodeSrText","confirmationIdNode","QRCode","size","getOrderNote","note","noteLabel","getOrderInformation","channelName","channelAddress","channelTypeValue","showChannelInfo","receiptEmail","createdDate","priceContext","isOnlineStore","originator","receiptId","receiptEmailMessage","orderIdLabel","orderPlacedByFullText","orderPlacedByYouText","orderOnBehalfOfText","receiptIdLabel","posChannelNameText","onlineStoreChannelNameText","orderPlacedOnLabel","callCenterChannelNameText","isSalesInvoice","priceCurrency","channelNameNode","getChannelName","posChannelName","onlineChannelName","placedBy","getPlacedBy","getOrderChannelName","channelIdentities","_orderChannel$Name","orderChannel","getOrderChannelTypeValue","ChannelType","isOnlineStoreChannel","getOrderChannelAddress","_orderOrgUnitLocation","orderOrgUnitLocation","getOrderInformationInput","_order$TotalAmount","showNotes","Notes","SalesLines","countItems","countNote","CurrencyCode","isYou","isB2bAdmin","IsB2bAdmin","ReceiptId","ReceiptEmail","placedByNode","staffPlacedOrder","StaffId","StaffName","currentCustomerOwnsOrder","CustomerId","CustomerName","placedOnBehalfOfName","placedByName","wasPlacedByCurrentCustomer","wasPlacedOnBehalfOf","wasPlacedOnBehalfOfCurrentCustomer","deliveryTypeEnum","onSelectLine","orderDetailsProduct","isSelected","SalesLineComponent","_props$product$Name","_props$product","_props$resources$ship","_props$product3","_props$product4","_props$moduleComponen2","moduleComponentProps","imageOnly","_props$product2","_props$moduleComponen","fallbackImageUrl","OmniChannelMedia","getSalesLinePicture","salesLineState","Observer","_product$PrimaryImage","isHidden","defaultImageSettings","OrderDetailsProduct","orderDetailCheckbox","getOrderDetailsSalesLineCheckbox","orderDetailsSelectRadioAriaLabelText","checkboxRowAriaLabel","checked","_props$salesLine$Cata","amountString","productDimensionTypeAmount","salesLineQuantityText","shippingCharges","confirmedShipDateLabel","orderDetailsConfirmedShipDateText","requestDeliveryDateLabel","orderDetailsRequestDeliveryDateText","isSalesLine","showShippingChargesForLineItems","getSalesLine","_context$request$chan2","_product$Name","shipment","phoneAriaLabel","buyItAgainLabel","buyItAgainAriaLabel","orderStatusReadyForPickup","orderStatusProcessing","orderStatusShipped","orderStatusPickedUp","orderStatusCanceled","orderStatusEmailed","pickedUpSalesLines","deliveredSalesLines","carryOutSalesLines","emailSalesLines","trackingLabel","trackingAriaLabel","trackingComingSoonLabel","pickupDateTimeslotText","pickupTimeslotPlaceHolder","salesStatusStringMap","getSalesStatusStringMap","canceled","readyForPickup","pickedUp","shipped","unknown","emailed","deliveryTypeStringMap","pickUp","ship","carryOut","email","_salesLine$CatalogId","pickupMode","getPickupModeDesc","getDeliveryType","getSalesStatusCode","SalesStatusValue","salesStatusString","deliveryTypeString","getDeliveryTypeString","deliveryTypeClass","getDeliveryTypeClassName","deliveryTypeComp","getDeliveryTypeComp","storePickUp","isMultiplePickUpOptionEnabled","deliveryTypePickup","LabelComponent","deliveryTypeNoPickup","getStoreName","salesStatusComp","getTrackingInfo","TrackingUrl","TrackingNumber","orderDetailProducts","pickupDateTimeslotInfo","getPickupDateTimeslotInfo","shouldShowTimeslot","isDeliveryPickupSame","canShowTimeslot","PickupTimeslotStartDateTime","PickupTimeslotEndDateTime","getDateTimeslot","buyItAgainLinkClassName","cropFocalRegion","salesLineClassName","salesLineFullClassName","salesLineProps","ShippingAddress","getRequestDeliveryDate","buyAgainButton","errors","salesLineDeliveryMode","retailMultiplePickupOption","isPickupDeliveryMode","_channelDeliveryOptio","PickupDeliveryModeCodes","dM","defaultDeliveryOption","getDeliveryDescriptionByProductId","_productDeliveryOptio","productDeliveryOption","currentDeliveryOption","deliveryDescription","_salesLine$ShippingAd","requestDeliveryDateTitle","getSalesLines","shipments","isCurrentChannel","salesLineStates","productStates","isChannelMultipleCatalogsFeatureEnabled","currentShipment","_currentShipment$Ship","ShipmentLines","shipmentLine","InventoryTransactionId","currentProduct","productState","_salesLine$LineId","stateId","getSalesLinesInput","Shipments","ExpandButtonState","extraProductsCount","SalesLineState","Label","getTenderIdOperationIdMap","tenderTypes","tenderType","TenderTypeId","OperationId","statusValue","flatGroup","groupBy","entries","groupByDeliveryType","getGroupBySalesStatusCode","groupBySalesStatusCode","getGroupByAddressId","addressId","groupByAddressId","TrackingId","getGroupByTrackingId","trackingId","groupByTrackingId","placeHolder","startDate","endDate","date","Intl","DateTimeFormat","timeZone","timeslotformatter","hour","minute","hour12","OrderConfirmation","handleCheckoutOrderConfirmationHeadingChange","BackToShopping","backToShoppingAttributes","loyaltyCard","RewardPoints","pointPrograms","point","RewardPointId","rewardLines","LoyaltyRewardPointLines","total","line","RewardPointAmountQuantity","has","orderSummaryHeading","orderSummaryItemsTotalLabel","orderSummaryShippingFeeLabel","orderSummaryTaxLabel","orderSummaryGrandTotalLabel","pointsEarnedLabel","earnedPoints","TenderLines","paymentMethodsTitle","creditCardEndingLabel","giftCardEndingLabel","amountCoveredLabel","cashUsedLabel","loyaltyCardUsedLabel","customerAccountUsedLabel","tenderLines","tenderIdOperationIdMap","_featureState$result","noSalesOrderText","genericErrorMessage","needHelpLabel","helpLineNumberLabel","loadingLabel","backToShopping","helpLineContactAriaLabel","contactNumber","classname","backToShoppingUrl","Msdyn365","editProps","onEdit","footerProps","isDataReady","salesLinesInput","orderInfomationInput","orderSummary","orderSummaryProps","getOrderConfirmationOrderSummary","payment","paymentMethodsProps","getOrderConfirmationPaymentMethods","help","getOrderConfirmationHelp","OrderConfirmationOrderInfomation","OrderConfirmationSalesLine","OrderConfirmationGroupDelivery","OrderConfirmationGroup","OrderConfirmationGroups","OrderConfirmationOrderSummary","subtotal","shipping","tax","totalAmount","OrderConfirmationPayment","methods","OrderConfirmationHelp","helpProps","_ref9","OrderSummaryLine","name","canShip","isTaxIncludedInPrice","isShowTaxBreakUp","subTotal","SubtotalAmountWithoutTax","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","shippingCharge","getLastFourDigit","digits","tenderLine","RetailOperation","PayCard","showAmount","cardLastFourDigit","MaskedCardNumber","isValidCardNumber","AuthorizedAmount","Amount","showAmountCovered","CardTypeId","getCard","PayGiftCertificate","GiftCardId","getGiftCertificate","PayLoyalty","LoyaltyCardId","getLoyalty","PayCash","getCash","PayCustomerAccount","_tenderLine$Amount","getCustomerAccountPayment","handleOrderConfirmationHeadingChange","getDeliveryMode","featureSate","pickupDeliveryMode","deliveryMode","_this$props$data$acco","accountInformation","FirstName","_this$order","orderDetailsLines","orderDetailsLine","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","IsTaxIncludedInPrice","_this$props2","_featureState$result2","TransactionTypeValue","TransactionType","SalesInvoice","orderInformationInput","getOrderDetailsHelp","ContactNumber","getOrderDetailsOrderSummary","getOrderDetailsPaymentMethods","OPERATIONS","OrderDetailsHeaderCheckboxComponent","switchCheckedState","onSelectAll","isSelectedAll","orderDetailsSelectAllRadioAriaLabelText","OrderDetailsDesktopHeaderCellsComponent","columnWithNumberClassName","shouldDisplayUnitOfMeasure","unitOfMeasureDisplayType","orderDetailsProductNumberText","orderDetailsProductText","orderDetailsUnitPriceText","orderDetailsModeOfDeliveryText","orderDetailsStatusText","orderDetailsQuantityText","orderDetailsUnitOfMeasureText","orderDetailsTotalText","orderDetailsConfirmedShipDateTextForTableHeader","orderDetailsRequestDeliveryDateTextForTableHeader","orderDetailsAddressTextForTableHeader","orderDetailsActionsText","OrderDetailsMobileHeaderCellsComponent","OrderDetailsTableHeaderComponent","rowClassName","headerCells","formatAmount","OrderDetailsRowCheckboxComponent","OrderDetailsRowProductImageComponent","_product$simpleProduc","_product$simpleProduc2","_product$simpleProduc3","_product$simpleProduc4","_props$imageSettings","containerClassName","OrderDetailsDesktopTableRowCellComponent","_props$context$reques2","_props$context$reques3","_product$simpleProduc5","_product$simpleProduc6","_product$simpleProduc7","isRetailMultiplePickUpOptionEnabled","formatDate","year","month","day","confirmedShipDateAvailable","ConfirmedShipDate","requestDeliveryDateAvailable","_dimension$DimensionV","dimensionValue","join","orderDetailsProductDimensionsSeparator","UnitOfMeasureSymbol","isExtraButtonDialogViewEnabled","OrderDetailsDesktopExtraActionsPopupComponent","orderDetailsBuyItAgainButtonText","orderDetailsBuyItAgainButtonAriaLabel","setShowPreviousActions","OrderDetailsExtraActionsPopupComponent","_props$data$product$s","_props$data$product$s2","orderDetailsViewDetailsButtonAriaLabel","orderDetailsViewDetailsButtonText","shouldShowActions","setShowActions","_salesLine$CatalogId2","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","_props$data$product$s3","_props$data$product$s4","_salesLine$CatalogId3","ViewTrackingButton","innerReference","orderDetailsReferences","viewTrackingButtonLabel","onClicked","onViewTrackingClick","requestInvoiceButtonReference","OrderDetailsMobileTableRowCellComponent","_product$simpleProduc8","_product$simpleProduc9","orderDetailsQuantityMobileText","OrderDetailsTableRowComponent","onSelectAllHandler","OrderDetailsTableComponent","headerClassName","availableProducts","OrderDetailsViewMode","OrderDetails","multiplePickupStoreSwitchName","handleOrderDetailsHeadingChange","_setListViewMode","_viewMode","_setDetailedViewMode","detailedView","_renderOrderGroups","_this$props$data$orde","shouldShowAddress","addressOptions","_isSelectionModeEnabled","orderHydration","isSameSiteType","_renderOrderSummary","_renderOrderPayment","_renderOrderHelp","_renderOrderDetailsTable","_this$props$data$orde2","_this$props$data$orde3","isMultipleCatalogsFeatureEnabled","enableBuyAgain","isDialogGridEnabled","_orderDetailsProducts","_enableSelection","_orderDetailsAvailableProducts","_disableSelection","_renderTableViewActions","_renderBuySelected","_renderEnableSelectionButton","_renderDisableSelectionButton","_renderViewModes","isGridViewEnabled","viewModesClassName","orderDetailsDetailedViewModeAriaLabel","orderDetailsListViewModeAriaLabel","getOrderDetailsProps","_getUrlSync","_heading$tag","orderDetailsBuyItemsAgainHeaderText","_products","_featureState$result3","_initProductsModel","selectedProducts","_featureState$result4","_featureState$result5","_this$props$data$orde4","noSalesOrderDetailsText","showFullAddress","channels","originators","orderOriginators","confirmationId","transactionId","orderInformation","isUserTypeB2B","isEnabled","isCatalogFetaure","tableViewActions","viewModes","_this$props$data$orde5","orderDetailsEnableSelectionButtonAriaLabel","orderDetailsEnableSelectionButtonText","orderDetailsDisableSelectionButtonAriaLabel","orderDetailsDisableSelectionButtonText","_this$props$data$orde6","_selectedProducts","_this$props$data$orde7","_this$props$data$orde8","salesOrderProduct","OrderDetailsOrderInfomation","OrderDetailsSalesLine","OrderDetailsGroupDelivery","OrderDetailsGroup","OrderDetailsGroups","OrderDetailsOrderSummary","OrderDetailsPayment","OrderDetailsHelp","GetOrderHistoryWithSearchAndFiltersInput","paging","organizationWideSelectorState","orderSearchCriteria","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","OrderHistoryWithSearchAndFiltersOrganizationWideSelectorState","CurrentUser","getGetOrderHistoryWithSearchAndFiltersAction","getOrders","_searchOrdersResults$","searchCriteria","CustomerAccountNumber","customerAccountNumber","OrderType","CustomerOrderType","SalesOrder","OrganizationWide","businessPartner","getCurrentAsync","BusinessPartnerId","top","NextPageToken","nextPageToken","columnName","isDescending","searchOrdersResults","searchOrdersAsync","searchOrdersResponse","statusCode","errorMessageResource","message","nextLinkUrl","metadata","others","nextLink","nextPageLink","newNextPageToken","salesOrdersLookupCriteria","SalesOrderLookups","isNullOrWhiteSpace","TransactionId","StoreId","TerminalId","orderHistoryResults","getSalesOrdersByLookupCriteriaAsync","orderHistoryResponse","orderHistoryResponseMap","_salesOrder$SalesLine2","saleline","IsVoided","productIdsByChannelId","splitProductsByChannelId","currentChannelId","productIdsByChannel","_salesOrder$SalesLine","orderProductId","orderChannelId","getProductsPromise","entryChannelId","entryProductIdsList","productIds","productInputs","ProductInput","getSimpleProducts","getProducts","getProductsCall","Promise","memo","createObservableDataAction","getOrderStatusLabel","SalesStatus","Created","orderStatusCreated","Delivered","orderStatusDelivered","Invoiced","orderStatusInvoiced","Canceled","componentClassName","headingClassName","orderCountClassName","OrderHistoryWithSearchAndFiltersHeaderComponent","createComponent","textProps","showOrderCount","extraActions","orderCount","orderCountText","orderCountLabel","ordersCountLabel","orderListItemClassName","orderInformationHeaderClassName","expandProductsButtonClassName","expandProductsButtonWrapperClassName","orderDetailButtonClassName","OrderInfomationComponent","GroupDeliveryComponent","GroupComponent","GroupsComponent","onExpandProductsCallback","expandButtonState","OrderHistoryWithSearchAndFiltersOrderListComponent","itemProps","createOrderHistoryWithSearchAndFiltersOrderItemProps","detailsAriaLabel","detailsLabel","getSalesLinesInputProps","salesLinesLimit","orderHistoryExpandProductsButtonText","orderDetailsAttributes","placedByClassName","orderNumberClassName","columnMobileClassName","actionsClassName","viewDetailsMenuItemClassName","getShortEllipsisText","originalText","maxTextLength","_document$body$parent","isRtl","body","parentElement","substring","getOrderPlacedByCellContent","maxOrderTextLength","isOnBehalfOfOrder","onBehalfOfText","getOrderNumberCellContent","onBehalfOfOrderProps","linkToOrderDetails","placedByText","showOrderPlacedBy","orderHistoryOrderNumberIsNotAvailable","orderNumberCellText","getTableRowComponentChildren","numItemsCellText","totalAmountCellText","orderStatusCellText","channelNameCellText","getOnBehalfOfOrderProps","isYouObo","TableCellComponent","contentType","TableCellContentType","ActionMenuComponent","orderHistoryActionMenuButtonAriaLabel","orderHistoryViewDetailsButtonText","orderHistoryViewDetailsButtonAriaLabel","OrderHistoryWithSearchAndFiltersOrderTableComponent","_props$data$salesOrde","TableComponent","TableHeaderComponent","orderHistoryOrderNumberText","orderHistoryOriginText","orderHistoryItemsText","orderHistoryTotalText","orderHistoryCreatedDateText","orderHistoryOrderStatusText","TableRowComponent","buttonActiveClassName","buttonInactiveClassName","OrderHistoryWithSearchAndFiltersOrganizationWideSelectorComponent","_props$resources","_props$resources$curr2","_props$resources2","_props$resources$curr3","_props$resources3","_props$resources4","_props$resources$curr4","_props$resources5","_props$resources6","_props$resources7","_props$resources$orga","_props$resources8","_props$resources9","_props$resources$orga2","_props$resources10","_props$resources11","_props$resources12","selectorState","setSelectorState","currentSelectorState","onClickHandler","newSelectorState","currentUserOrderHistoryAttributes","currentUserOptionLabel","orgWideOrderHistoryAttributes","currentUserOptionAriaLabel","organizationWideOptionAriaLabel","organizationWideOptionLabel","detailsViewClassName","listViewClassName","viewSelectedClassName","OrderHistoryWithSearchAndFiltersViewModeState","OrderHistoryWithSearchAndFiltersViewModeComponent","_props$resources$deta","_props$resources$deta2","_props$resources$list","_props$resources$list2","viewModeState","setViewModeState","currentViewModeState","newViewModeState","viewModeDetailedViewAttributes","ViewMode","viewModeListViewAttributes","DetailedView","detailedViewOptionAriaLabel","ListView","listViewOptionAriaLabel","getDateFromString","dateString","parts","now","getHours","getMinutes","getSeconds","getOrderStatusRefinerOptionItemLabel","orderStatusRefinerOptionItem","mapOrderStatusRefinerOptionItemIntoSalesStatus","OrderStatusRefinerOptionItem","mapSortOptionIntoIRefinerSortOption","sortOption","SortOption","CreatedDateTimeAscending","createdDateTimeAscendingSortOptionLabel","CreatedDateTimeDescending","createdDateTimeDescendingSortOptionLabel","ConfirmedShipDateAscending","confirmedShipDateAscendingSortOptionLabel","ConfirmedShipDateDescending","confirmedShipDateDescendingSortOptionLabel","OrderHistoryWithSearchAndFilters","orderHistoryClassName","initState","viewState","isShowMoreButton","errorCode","originatorList","orderHistoryWithSearchAndFilters","_refinerState","currentSortOption","_this$_refinerState","_this$props$data$sort","_handleOrderHistoryHeadingChange","_clickRefinerChoice","_this$_activeRefineme","_activeRefinementCriteria","shouldClearAll","selectedRefinerItem","_applyRefinerChoices","_clickRefinerClearAll","_toggleRefinerItem","_toggleRefinerModal","_updateOrderHistory","_onMoreButtonClick","_clickOrderViewMode","_ordersViewModeState","_clickOrganizationWideSelectorOption","_organizationWideSelectorState","_clickSearchButton","searchOption","_searchBarState","currentSearchOption","currentSearchText","_selectRefinerSortOption","getOriginator","salesIds","_order$SalesId","transactionIds","_order$Id","originatorsInput","GetOrderOriginatorsInput","getOriginatorsAction","getOrderHistory","_getSearchCriteria","resolve","_getSortingCriteria","orderHistoryApiTimeoutErrorMessage","reject","_error$error","_error$error2","channelIds","refinement","sourceTypeValue","RefinerSourceType","Origin","ChannelIds","statusValues","OrderStatus","refinerItemData","mapIRefinerItemDataIntoOrderStatusRefinerOptionItem","orderStatusRefinerItem","OrderStatusValues","dates","CreatedDate","DateRefinerOptionItem","LastSevenDays","LastThirtyDays","LastThreeMonths","LastSixMonths","Customized","mapIRefinerItemDataIntoDateRefinerOptionItem","StartDateTime","EndDateTime","dateRefinerOptionItem","getDateRange","refinerItemId","searchBarOption","SearchOption","OrderNumber","ConfirmationId","ChannelName","CustomerRequisition","mapISearchBarOptionIntoSearchOption","_this$_searchBarState","searchChannelName","_channel$Name","refinerSortOption","mapIRefinerSortOptionIntoSortOption","_getHeaderProps","_getOrdersViewModeProps","orderHistoryListViewModeAriaLabel","orderHistoryDetailedViewModeAriaLabel","_getOrganizationWideSelectorProps","orderHistoryFilterYourOrderHistory","orderHistoryFilterOrganizationWide","_getSearchBarProps","_this$props$data$sear","_this$props$data$sear2","_this$_searchBarState2","options","searchOptions","orderNumberSearchOptionLabel","confirmationIdSearchOptionLabel","channelNameSearchOptionLabel","customerRequistionSearchOptionLabel","mapSearchOptionIntoISearchBarOption","searchOptionsAriaLabel","searchBarPlaceholder","searchButtonAriaLabel","clearSearchTextOnOptionChange","_getRefinerOptions","_this$_activeRefineme2","_this$props$data$date","_this$props$data$date2","selectedRefinerItems","dateRefinerOptions","orderStatusRefinerOptions","RefinerOptionsComponent","refinerOptionsId","channelRefinerOptionLabel","typeValue","RefinerOptionsType","MultiSelect","refinerItems","channelIdentity","_channelIdentity$Name","itemType","RefinerItemType","Check","mapChannelIdentityIntoIRefinerItemData","createdDateRefinerOptionLabel","itemData","lastSevenDaysCreatedDateRefinerItemLabel","lastThirtyDaysCreatedDateRefinerItemLabel","lastThreeMonthsCreatedDateRefinerItemLabel","lastSixMonthsCreatedDateRefinerItemLabel","customizedCreatedDateRefinerItemLabel","customizedStartDateRefinerItemLabel","customizedEndDateRefinerItemLabel","DateRange","mapDateRefinerOptionIntoIRefinerItemData","orderStatusRefinerOptionLabel","mapOrderStatusRefinerOptionIntoIRefinerItemData","_getRefinerProps","refinerOptions","refinerModalToggleProps","_getRefinerModalToggleProps","refinerModalProps","_getRefinerModalProps","refinerHeaderProps","_getRefinerHeaderProps","refinerFooterProps","_getRefinerFooterProps","filterAndSortText","filterAndSortTextAriaLabel","_refinerModalToggleRef","doneText","refinerSortProps","_getRefinerSortProps","ordersViewModeComponentProps","refinerToggleProps","_getRefinerToggleProps","refinerChoiceSummaryProps","_getRefinerChoiceSummaryProps","showSortingOptions","filterText","_this$_activeRefineme3","orderHistoryChoiceFormat","onClickChoice","onClickClearAll","_this$props$data$sort2","_this$props$data$sort3","sortLabel","sortAriaLabel","refinerApplyProps","_getRefinerApplyProps","doneTextAriaLabel","_this$props$config$sh","_Msdyn365$isChannelTy","_this$props$config$sh2","_Msdyn365$isChannelTy2","shouldShowCount","noOrderHistoryLable","moreButtonText","orderHistorywithSearchAndFiltersResult","orderHistoryWithSearchAndFiltersProps","searchBarProps","refinerProps","organizationWideSelectorProps","ViewMore","viewMoreAttributes","SearchBarComponent","RefinerComponent","GetSalesOrderHistoryWithHydrationsInput","filterState","OrderHistoryFilterState","getSalesOrderHistoryWithHydrationsAction","nextPage","_orderHistoryResults$","getOrderShipmentsHistoryAsync","getOrganizationWideOrderShipmentHistory","_orgOrderHistoryResul","queryResultSetting","orgOrderHistoryResults","getOrganizationWideOrderHistory","GetOrganizationWideOrderHistoryInput","orgOrderHistoryResponse","getOrderShipmentHistory","getOrderHistoryFilterStateResources","onStateClick","togglePopoverHandler","setPopoverState","isPopoverState","OrderHistoryFilterComponent","popoverRef","popoverState","setFilterState","currentState","onFilterStateClick","clickedState","onFilterStateChanged","Popover","EnumExtensions","getEnumValues","renderFilterStateItem","stateStringRepresentation","OrderHistoryTableHeaderComponent","getMobileHeaderCells","shouldShowOrderPlacedBy","shouldShowChannelInfo","getDesktopHeaderCells","OrderHistoryDesktopTableRowCellComponent","linkToOrderHistoryDetails","itemsCount","OrderHistoryMobileTableRowCellComponent","orderNumber","dateText","orderHistoryCreatedDateMobileDescriptionText","cellClassName","onKeyPress","OrderHistoryTableRowComponent","OrderHistoryTableComponent","_props$data$originato","o","OrderHistoryViewMode","OrderHistory","handleOrderHistoryHeadingChange","onMoreButtonClick","renderExtraActions","_renderOrderHistoryFilter","_order$TransactionId","_orderCountLabel","labelGroup","renderErrorLabel","responseErrorMessage","errorMessageClassName","renderRegisteredUserMessage","signInLinkClassName","registeredUserClassName","orderLookupRegisteredUserText","orderLookupViewAccountText","orderLookupSignInLinkText","infoMessage","signInText","renderFieldErrors","orderLookupFieldValidationErrorMessage","RenderOrderLookupAdditionalFieldInput","_getOrderLookupAdditionalFields","additionalFieldLabel","additionalFieldError","additionalFieldInput","additionalFieldLabelClassName","isValidAdditionalFieldName","additionalFieldValidationMessage","RenderOrderLookupFormFields","_getOrderLookupFields","orderLookupLabelClassName","orderLookupLabel","inputReference","fieldErrorClassName","isInputTypeError","renderAlert","isValidInputField","OrderLookupSearchValues","OrderLookup","isEmailValue","isOrderNumberValue","orderLookupExtensibleEnum","handleTextChange","handleParagraphChange","paragraph","handleSubmit","orderLookupValue","orderStatusLookUpParametersType","orderLookupName","_validateOrderLookupForm","_Msdyn365$getUrlSync","actionContextValue","orderDetailsPath","redirectUrl","searchParameters","fieldName","fieldValue","_this$orderNumberInpu","_this$emailInputRef$c","orderNumberInputRef","emailInputRef","additionalPropertyStates","isAdditionalFieldError","isKeyExistInAdditionalFieldArray","labelName","isValidFieldName","additionalfieldErrorMessage","ordernumber","isOrdNumberError","isReqError","isEmailError","isValidEmailError","isValidLookupField","isValidAdditionalLookupField","_renderAlert","orderLookupEmailValidationErrorMessage","orderLookupRequiredTextErrorMessage","requiredErrorMessage","isNullOrEmpty","emailValidationErrorMessage","isRequireError","isEmailValidError","isValidEmailInput","_renderOrderNumberAlert","orderLookupOrderNumberValidationErrorMessage","_renderOrderLookupInput","orderLookupEmailLabel","orderLookupEmailAriaLabel","_additionalFieldValidation","isFieldValid","RegExp","test","isDisable","EmailRegex","defaultRegex","isEmailValid","orderLookupSearchAdditionalFields","_item$labelName","_item$ariaLabel","_item$validationMessa","validationMessage","_context$request$user","orderLookupDefaultHeadingText","orderLookupButtonLabel","orderLookupFormAriaLabel","orderLookupOrderNumberLabel","orderLookupOrderNumberAriaLabel","orderLookupSubmitAriaLabel","headingText","headingTag","moduleClassName","orderLookupContainerClassName","orderLookupFormClassName","orderLookupAdditionalFiledContainerClassName","orderLookupFormFieldsClassName","orderNumberLabelClassName","orderNumberInputErrorClassName","submitButtonClassName","signinLinkClassName","orderLookupHeading","orderLookup","orderLookupContainer","orderLookupAdditionalFieldContainer","_createParagraph","renderOrderLookupInputField","orderLookupForm","autoComplete","orderNumberInput","submitButton","submitButtonLabelText","fieldErrorMessage","registeredUserMessage","submit","_renderAdditionalFields","_getExtensibleEnumera","_getExtensibleEnumera2","isOrderLookupAdditionalFieldValid","isOrderLookupFieldValid","getExtensibleEnumerations","StoreOperationsDataActions","TypeName","ExtensibleEnumerations","orderLookupAdditionalParameter","validateOrderLookupField","orderStatusLookUpParameter","isValidField","validateOrderLookupAdditionalField","orderStatusLookUpAdditionalParameters","isValidAdditionalField","_item$fieldKey","fieldKey","validateAdditionalFieldWithProxy","setLookupFieldState","additionalFieldsInput","_buildOrderSummarySection","channelConfiguration","OrderSummary","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","isShowTaxBreakup","deliveryModes","subTotalLabel","taxLabel","otherCharge","otherChargeLabel","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","shippingLabel","customerAccountAmount","customerAccount","customerAccountLabel","totalDiscounts","totalDiscountsLabel"],"sourceRoot":""}