{"version":3,"file":"static/js/17.ebf81354182f7b92d75a.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\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 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 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 {props.totalPrice}\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}\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 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 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 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?.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>{amount}</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?.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>{amount}</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 : 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}: <span>{currencyFormat(Number(searchOrder?.TotalAmount), 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 {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 : currencyFormat(Number(searchOrder?.GrossAmount) - Number(searchOrder?.TaxAmount), customContext)}\r\n </td>\r\n <td>{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 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 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 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 } catch (error) {\r\n setRes(undefined);\r\n return error;\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n return;\r\n };\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 </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.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 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 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","cartItem","customGoToCartButton","children","Node","renderModuleAttributes","_renderCartlines","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$data$list5","_this$props$data$list6","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","refiners","_shouldHideFromRefiners","needToFilter","filteredRefiners","_refiner$Values","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","incExcPriceFormat","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","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","salesOrderLable","siteNameLable","Commission","customerRefNoLable","CustomerReference","orderDateLable","estShipDateLable","netAmountLable","NetAmountWithNoTax","currencyFormat","GrossAmount","totalAmountLable","currencyLable","StatusValue","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","orderStatusOption","searchCriteriaDropdownValues","orderStatusDropdownValues","setSelectedOption","selectedStatus","setSelectedStatus","viewport","innerWidth","md","onSubmit","_orderStatusDropdownV","searchOrderInput","SearchOrderHistoryInput","searchTerm","accountNumber","SearchOrderHistoryAction","htmlFor","searchButtonText","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","SubtotalAmount","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","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","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":""}