{"version":3,"file":"static/js/15.2538e8e14ed414602790.chunk.js","mappings":"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","sources":["webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/utilities/popup/Popup.tsx?8e42","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/views/components/product.component.tsx?a3c6","webpack://venchi-ecommerce-msdyn365/./src/modules/media-gallery/media-gallery.tsx?24d7","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/order-template.view.tsx?a45e","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://venchi-ecommerce-msdyn365/./src/modules/gift-with-purchase/gift-with-purchase.tsx?4361","webpack://venchi-ecommerce-msdyn365/./src/modules/media-gallery/media-gallery.view.tsx?5061","webpack://venchi-ecommerce-msdyn365/./src/modules/active-image-utilities/active-product.tsx?69b2","webpack://venchi-ecommerce-msdyn365/./src/modules/active-image-utilities/additional-content.tsx?6946","webpack://venchi-ecommerce-msdyn365/./src/modules/active-image-utilities/image-mapper.tsx?dd86","webpack://venchi-ecommerce-msdyn365/./src/modules/active-image/active-image.tsx?00d3","webpack://venchi-ecommerce-msdyn365/./src/modules/carousel/carousel.tsx?80d4","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/cart.tsx?d4e4","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/order-template.tsx?4ecb","webpack://venchi-ecommerce-msdyn365/./src/modules/product-collection/product-collection.tsx?4008","webpack://venchi-ecommerce-msdyn365/./src/search-state.ts?dd10","webpack://venchi-ecommerce-msdyn365/./src/modules/search/actions/get-auto-suggest-suggestions.ts?4735","webpack://venchi-ecommerce-msdyn365/./src/modules/search/components/search.categorysuggest.tsx?c65d","webpack://venchi-ecommerce-msdyn365/./src/modules/search/components/search.form.tsx?25a5","webpack://venchi-ecommerce-msdyn365/./src/modules/search/components/search.keywordsuggest.tsx?297c","webpack://venchi-ecommerce-msdyn365/./src/modules/search/components/search.label.tsx?0c17","webpack://venchi-ecommerce-msdyn365/./src/modules/search/components/search.productsuggest.tsx?2af9","webpack://venchi-ecommerce-msdyn365/./src/modules/search/search.tsx?72fb","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/utilities.ts?8569","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/error-message.tsx?6302","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/link.tsx?52c2","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/modal.tsx?d78e","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/refine-item.tsx?a594","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/range-refine-item-input.tsx?09aa","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/separator.tsx?4ea6","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/components/title.tsx?c269","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/search-result-container.tsx?7500","webpack://venchi-ecommerce-msdyn365/./src/modules/video-player/components/additional-content.tsx?b368","webpack://venchi-ecommerce-msdyn365/./src/modules/video-player/video-player.tsx?53e5","webpack://venchi-ecommerce-msdyn365/./src/modules/wishlist-items/components/wishlist-items-dimensions.tsx?15c5","webpack://venchi-ecommerce-msdyn365/./src/modules/wishlist-items/components/wishlist-item.tsx?d2da","webpack://venchi-ecommerce-msdyn365/./src/modules/wishlist-items/components/wishlist-items-status-message.tsx?cdb3","webpack://venchi-ecommerce-msdyn365/./src/modules/wishlist-items/wishlist-items.tsx?df8b","webpack://venchi-ecommerce-msdyn365/./src/modules/gift-with-purchase/gift-with-purchase.view.tsx?55d6","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/views/product-collection.view.tsx?495a","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/views/search-result-container.view.tsx?5f49","webpack://venchi-ecommerce-msdyn365/./src/modules/active-image/active-image.view.tsx?a935","webpack://venchi-ecommerce-msdyn365/./src/modules/carousel/carousel.view.tsx?d82f","webpack://venchi-ecommerce-msdyn365/./src/modules/cart/cart.view.tsx?d8c2","webpack://venchi-ecommerce-msdyn365/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://venchi-ecommerce-msdyn365/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://venchi-ecommerce-msdyn365/./src/modules/search/search.view.tsx?1505","webpack://venchi-ecommerce-msdyn365/./src/modules/video-player/video-player.view.tsx?fedb","webpack://venchi-ecommerce-msdyn365/./src/modules/wishlist-items/wishlist-items.view.tsx?4d80","webpack://venchi-ecommerce-msdyn365/./src/modules/adventureworks/views/media-gallery.view.tsx?7624","webpack://venchi-ecommerce-msdyn365/./src/themes/venchi/views/components/cartlineitem.component.tsx?e58f","webpack://venchi-ecommerce-msdyn365/./src/modules/fabrikam/views/components/cartlineitem.component.tsx?eb8c","webpack://venchi-ecommerce-msdyn365/./src/modules/fabrikam/views/components/promocode.component.tsx?d9d6","webpack://venchi-ecommerce-msdyn365/./src/modules/media-gallery/utils/helper.ts?b895","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://venchi-ecommerce-msdyn365/./src/validate-cart.ts?cd50","webpack://venchi-ecommerce-msdyn365/./src/invoice-summary-lineitem.tsx?5f61","webpack://venchi-ecommerce-msdyn365/./src/order-summary-lineitem.tsx?8a98","webpack://venchi-ecommerce-msdyn365/./src/Common/get-product.ts?0a21","webpack://venchi-ecommerce-msdyn365/./src/modules/media-gallery/utils/get-valid-product-images.ts?a364","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://venchi-ecommerce-msdyn365/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c"],"sourcesContent":["import { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Modal, ModalBody, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport { Image } from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { IPopupProps } from './Popup.props';\r\n\r\nexport const Popup = (popupProps: IPopupProps) => {\r\n const {\r\n dialogStrings,\r\n className,\r\n imageSettings,\r\n gridSettings,\r\n data: { product },\r\n productQuantity,\r\n modalOpen,\r\n setModalOpen,\r\n context\r\n } = popupProps;\r\n\r\n if (!dialogStrings || !product) {\r\n return null;\r\n }\r\n const closeModal = () => {\r\n setModalOpen(false);\r\n };\r\n const fallbackImageUrl = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\r\n const quantity = productQuantity !== undefined ? productQuantity : 1;\r\n const itemsString =\r\n quantity === 1 ? dialogStrings.headerItemOneText : dialogStrings.headerItemFormatText.replace('{0}', quantity.toString());\r\n\r\n // console.log(product.AttributeValues?.slice());\r\n const tags = ['20Glutenfree', '18Vegan', '22Noaddedsugar'];\r\n const tagFriendlyNames = ['Gluten free', 'Vegan friendly', 'Light'];\r\n const specificationsList = ['25Productdescription(webs', '17Nutritionalvalues', '15Ingredients'];\r\n const specificationsListFiendly = ['Description', 'Nutritional values', 'Ingredients'];\r\n return (\r\n \r\n \r\n {itemsString}\r\n {dialogStrings.headerMessageText}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {product.Name}\r\n \r\n {context.cultureFormatter.formatCurrency(product.Price)}{' '}\r\n \r\n \r\n {// @ts-ignore\r\n product.AttributeValues?.slice()?.map((item, i) => {\r\n if (item.KeyName && tags.includes(item.KeyName) && item.TextValue !== 'No') {\r\n const tagFriendlyName = tagFriendlyNames[tags.indexOf(item.KeyName)];\r\n const tagId = tagFriendlyName.replace(/\\s+/g, '');\r\n return (\r\n <>\r\n {tagFriendlyName}\r\n >\r\n );\r\n }\r\n })}\r\n \r\n\r\n \r\n {// @ts-ignore\r\n product.AttributeValues?.slice()?.map((item, i) => {\r\n if (item.KeyName && specificationsList.includes(item.KeyName) && item.TextValue !== 'No') {\r\n const specificationFriendlyName = specificationsListFiendly[specificationsList.indexOf(item.KeyName)];\r\n const specificationId = specificationFriendlyName.replace(/\\s+/g, '');\r\n return (\r\n \r\n {specificationFriendlyName}\r\n {item.TextValue}\r\n \r\n );\r\n }\r\n })}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default Popup;\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 MsDyn365, {\r\n getCatalogId,\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGridSettings,\r\n IImageData,\r\n IImageProps,\r\n IImageSettings,\r\n Image,\r\n IRequestContext,\r\n msdyn365Commerce,\r\n getUrlSync\r\n} from '@msdyn365-commerce/core';\r\nimport {\r\n // AttributeSwatch,\r\n // ProductDimension,\r\n ProductPrice,\r\n ProductSearchResult,\r\n ProductType,\r\n SimpleProduct\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n // ArrayExtensions,\r\n // checkIfShouldDisplayAsSwatch,\r\n // convertDimensionTypeToProductDimensionType,\r\n // Dictionary,\r\n // DimensionSwatchDisplayTypes,\r\n // DimensionTypes,\r\n // generateImageUrl,\r\n getProductPageUrlSync\r\n // IDimensionsApp,\r\n // StringExtensions,\r\n // validateCatalogId\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport React from 'react';\r\n// import {useState} from 'react';\r\n\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\n\r\nimport {\r\n IPriceComponentResources,\r\n PriceComponent,\r\n AddToCartBehavior\r\n // ISwatchItem,\r\n // RatingComponent,\r\n // ProductComponentSwatchComponent\r\n} from '@msdyn365-commerce/components';\r\nimport { IPopupProps, Popup } from '../../utilities/popup';\r\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { trackAddToCartFromListing, trackProductTileClick } from '../../utilities/datalayer/index';\r\nimport { GIFTCARD_ITEMID } from '../../utils/constants';\r\n\r\ninterface ProductComponentResources {\r\n addToCartText: string;\r\n omnibusRecentLowestPrice: string;\r\n outOfStockString: string;\r\n}\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 productCategoryUserPath?: string;\r\n productListName?: string;\r\n resources?: ProductComponentResources;\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\n// function 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 savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n ratingAriaLabel,\r\n // ratingCountAriaLabel,\r\n allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n // quickViewButton,\r\n // productComparisonButton,\r\n // inventoryLabel,\r\n isPriceMinMaxEnabled,\r\n priceResources,\r\n // dimensionAvailabilities,\r\n // swatchItemAriaLabel\r\n productCategoryUserPath,\r\n productListName,\r\n resources\r\n}) => {\r\n const product = data.product;\r\n // const dimensionContext = context as ICoreContext;\r\n // const dimensionToPreSelectInProductCard = dimensionContext.app.config.dimensionToPreSelectInProductCard;\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n //P&M DETAILS AND MODAL\r\n\r\n const valuemin = 0;\r\n const valuemax = 1000;\r\n\r\n // MODAL\r\n const [modalOpen, setModalOpen] = React.useState(false);\r\n\r\n const popupProps: IPopupProps = {\r\n context: context,\r\n className: 'msc-add-to-pmcart',\r\n id: id,\r\n typeName: typeName,\r\n data: { product: product, price: product.Price },\r\n // @ts-ignore\r\n dialogStrings: {},\r\n imageSettings: imageSettings,\r\n gridSettings: context.request.gridSettings,\r\n productQuantity: 1,\r\n navigationUrl: '',\r\n modalOpen: modalOpen,\r\n setModalOpen: setModalOpen\r\n };\r\n\r\n const renderModalPopup = ;\r\n\r\n const catPage = context.request.urlTokens.categories !== undefined ? context.request.urlTokens.categories[0] : '';\r\n\r\n //FINISHP&M\r\n\r\n //AVAILABILITY\r\n const [available, setAvailable] = React.useState(true);\r\n const [loading, setLoading] = React.useState(true);\r\n const [availableLabel, setAvailableLabel] = React.useState('Available');\r\n const _isAvailable = React.useCallback(async () => {\r\n try {\r\n const productAvailabilites = await getEstimatedAvailabilityAsync(\r\n { callerContext: context.actionContext },\r\n { ProductIds: [product.RecordId], DefaultWarehouseOnly: true, QuantityUnitTypeValue: 2 }\r\n );\r\n\r\n if (!productAvailabilites?.ProductWarehouseInventoryAvailabilities?.length) {\r\n setAvailable(false);\r\n setAvailableLabel(resources?.outOfStockString || '');\r\n return;\r\n }\r\n\r\n // Skip availability check for gift cards\r\n if (product.ItemId === GIFTCARD_ITEMID) {\r\n return;\r\n }\r\n\r\n const inventory = productAvailabilites.ProductWarehouseInventoryAvailabilities[0];\r\n const maxQuantity = inventory.MaximumPurchasablePhysicalAvailableQuantity || 0;\r\n\r\n if (maxQuantity >= 1) {\r\n setAvailable(true);\r\n } else {\r\n setAvailable(false);\r\n setAvailableLabel(inventory.PhysicalAvailableInventoryLevelLabel || resources?.outOfStockString || '');\r\n }\r\n setLoading(false);\r\n } catch (err) {\r\n console.error('Error checking product availability:', err);\r\n setAvailable(false);\r\n setLoading(false);\r\n }\r\n }, [context.actionContext, product.RecordId, product.ItemId, resources?.outOfStockString]);\r\n\r\n React.useEffect(() => {\r\n void _isAvailable();\r\n }, [_isAvailable]);\r\n\r\n const _ontoProductPDP = () => {\r\n trackProductTileClick(context, product as SimpleProduct, productCategoryUserPath ?? '', productListName ?? '');\r\n };\r\n\r\n // ADD TO CART\r\n const _onAddSelectionToBag = async (event: React.MouseEvent): Promise => {\r\n event?.stopPropagation();\r\n event?.preventDefault();\r\n\r\n // Also manage the removal from cart?\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n const addToCartBehavior = context.app.config.addToCartBehavior;\r\n const navigationUrl: string | undefined = getUrlSync('cart', context.actionContext);\r\n\r\n const catalogId = getCatalogId(context.actionContext.requestContext);\r\n\r\n const quantity: number = 1;\r\n\r\n trackAddToCartFromListing(context, product as SimpleProduct, productCategoryUserPath ?? '', productListName ?? '');\r\n\r\n const cartState = await getCartState(context.actionContext);\r\n const addToCartResult = await cartState.addProductToCart({\r\n product: data.product as SimpleProduct,\r\n count: quantity,\r\n availableQuantity: undefined,\r\n additionalProperties: undefined,\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\r\n enableStockCheck: context.app.config.enableStockCheck,\r\n isPriceKeyedIn: undefined,\r\n customPrice: undefined,\r\n isAddEmailDeliveryItemToCart: undefined,\r\n shouldSkipSiteSettings: undefined,\r\n catalogId: catalogId\r\n });\r\n\r\n if (addToCartResult.status === 'SUCCESS') {\r\n if (addToCartBehavior === AddToCartBehavior.showModal) {\r\n // setDisabled(false);\r\n } else if (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 // undefined,\r\n // product,\r\n // data?.product?.Price,\r\n // quantity,\r\n // props.navigationUrl,\r\n // undefined,\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 navigationUrl &&\r\n (addToCartBehavior === undefined || addToCartBehavior === AddToCartBehavior.goToCart)\r\n ) {\r\n window.location.assign(navigationUrl);\r\n } else {\r\n // setDisabled(false);\r\n }\r\n // propagateResult(props, addToCartResult);\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 // propagateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: addToCartResult });\r\n // setDisabled(false);\r\n }\r\n };\r\n\r\n //FINISHADDTOCART\r\n\r\n //OMNIBUS //TODO move in price component\r\n\r\n let percent_discount = '';\r\n let discount_string = '';\r\n\r\n if (product.Price && product.BasePrice && product.BasePrice !== product.Price) {\r\n percent_discount = (100 - (product.Price / product.BasePrice) * 100).toFixed(0);\r\n discount_string = `-${percent_discount}%`;\r\n }\r\n\r\n const custom_basePrice = context.cultureFormatter.formatCurrency(product.BasePrice!.toFixed(2));\r\n const custom_adjustedPrice = context.cultureFormatter.formatCurrency(product.Price.toFixed(2));\r\n const omnibus_price = data.product?.AttributeValues?.filter(attribute => attribute.Name?.includes('Minimum Price Last 30 Days'));\r\n let omnibus_price_currency = '';\r\n if (omnibus_price !== undefined && omnibus_price?.length !== 0 && omnibus_price[0] !== undefined) {\r\n omnibus_price_currency = context.cultureFormatter.formatCurrency(omnibus_price[0].CurrencyValue!, omnibus_price[0].CurrencyCode);\r\n }\r\n\r\n //FINISHOMNIBUS\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\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\r\n let productUrl = product ? getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined) : '';\r\n if (allowBack && productUrl) {\r\n productUrl = updateProductUrl(productUrl, context, 'back=true');\r\n }\r\n\r\n //MICROSOFT FUNCTIONS NOT USED FOR NOW\r\n\r\n // /**\r\n // * Gets the product page url from the default swatch selected.\r\n // * @param productData - Product card to be rendered.\r\n // * @returns The default swatch selected if any.\r\n // */\r\n // function getDefaultSwatchSelected(productData?: ProductSearchResult): AttributeSwatch | null {\r\n // if (!productData || !productData.AttributeValues) {\r\n // return null;\r\n // }\r\n\r\n // const attributeSwatches = productData.AttributeValues.find(\r\n // attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === dimensionToPreSelectInProductCard\r\n // )?.Swatches;\r\n\r\n // if (!ArrayExtensions.hasElements(attributeSwatches)) {\r\n // return null;\r\n // }\r\n\r\n // const defaultSwatch = attributeSwatches.find(item => item.IsDefault === true) ?? attributeSwatches[0];\r\n // return defaultSwatch;\r\n // }\r\n\r\n // /**\r\n // * Gets the product image from the default swatch selected.\r\n // * @param coreContext - Context of the module using the component.\r\n // * @param productData - Product card to be rendered.\r\n // * @returns The product card image url.\r\n // */\r\n // function getProductImageUrlFromDefaultSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\r\n // const defaultSwatch = getDefaultSwatchSelected(productData);\r\n // const swatchProductImageUrls = defaultSwatch?.ProductImageUrls;\r\n // if (!ArrayExtensions.hasElements(swatchProductImageUrls)) {\r\n // return productData?.PrimaryImageUrl;\r\n // }\r\n\r\n // return generateImageUrl(swatchProductImageUrls[0], coreContext.request.apiSettings);\r\n // }\r\n\r\n // /**\r\n // * Gets the product page url from the default swatch selected.\r\n // * @param coreContext - Context of the module using the component.\r\n // * @param productUrl - Product page url for the product card.\r\n // * @param productData - Product card to be rendered.\r\n // * @returns The product card image url.\r\n // */\r\n // function getProductPageUrlFromDefaultSwatch(\r\n // coreContext: ICoreContext,\r\n // productUrl: string,\r\n // productData?: ProductSearchResult\r\n // ): string | undefined {\r\n // const defaultSwatch = getDefaultSwatchSelected(productData);\r\n // if (!defaultSwatch?.SwatchValue) {\r\n // return productUrl;\r\n // }\r\n\r\n // const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\r\n // const queryString = `${dimensionToPreSelectInProductCard}=${queryStringEncoded}`;\r\n // return updateProductUrl(productUrl, coreContext, queryString);\r\n // }\r\n\r\n // const productImageUrlFromSwatch = getProductImageUrlFromDefaultSwatch(context, product) ?? product?.PrimaryImageUrl;\r\n // const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\r\n\r\n // const [productPageUrl, setProductPageUrl] = useState(productPageUrlFromSwatch);\r\n // const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\r\n // const [selectedSwatchItems] = useState(new Dictionary());\r\n // // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n // const enableStockCheck = context.app.config.enableStockCheck;\r\n\r\n // /**\r\n // * Updates the product page and Image url based on swatch selected.\r\n // * @param coreContext - Context of the caller.\r\n // * @param swatchItem - Dimension swatch selected.\r\n // */\r\n // const updatePageAndImageUrl = React.useCallback(\r\n // (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\r\n // const dimensionType = swatchItem.dimensionType;\r\n // selectedSwatchItems.setValue(dimensionType, swatchItem);\r\n // if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\r\n // return;\r\n // }\r\n // const queryString = `${dimensionType}=${swatchItem.value}`;\r\n // let productPageUrlWithSwatch = '';\r\n // if (productPageUrl.includes(dimensionType)) {\r\n // const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\r\n // newUrl.searchParams.delete(dimensionType);\r\n // productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\r\n // } else {\r\n // productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\r\n // }\r\n // setProductPageUrl(productPageUrlWithSwatch);\r\n // if (dimensionType === dimensionToPreSelectInProductCard) {\r\n // const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\r\n // ? swatchItem.productImageUrls[0]\r\n // : undefined;\r\n // const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\r\n // setProductImageUrl(newImageUrl);\r\n // }\r\n // },\r\n // [selectedSwatchItems, context, productPageUrl]\r\n // );\r\n\r\n // const swatchItems = ArrayExtensions.validValues(\r\n // product.AttributeValues?.map(item => {\r\n // const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\r\n // const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(\r\n // dimensionTypeValue as DimensionTypes,\r\n // context as ICoreContext,\r\n // DimensionSwatchDisplayTypes.productCard\r\n // );\r\n // if (!shouldDisplayAsSwatch) {\r\n // return null;\r\n // }\r\n\r\n // const dimensionType = dimensionTypeValue as DimensionTypes;\r\n // const swatches =\r\n // item.Swatches?.map(swatchItem => {\r\n // return {\r\n // itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\r\n // value: swatchItem.SwatchValue ?? '',\r\n // dimensionType,\r\n // colorHexCode: swatchItem.SwatchColorHexCode,\r\n // imageUrl: swatchItem.SwatchImageUrl,\r\n // productImageUrls: swatchItem.ProductImageUrls,\r\n // isDefault: swatchItem.IsDefault,\r\n // swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\r\n // isDisabled:\r\n // enableStockCheck &&\r\n // dimensionAvailabilities?.find(\r\n // dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\r\n // )?.isDisabled\r\n // };\r\n // }) ?? [];\r\n // if (\r\n // dimensionType === dimensionToPreSelectInProductCard &&\r\n // ArrayExtensions.hasElements(swatches) &&\r\n // !swatches.some(swatch => swatch.isDefault)\r\n // ) {\r\n // swatches[0].isDefault = true;\r\n // }\r\n // return { recordId: item.RecordId, swatches };\r\n // })\r\n // );\r\n\r\n //ORIGINAL MICROSOFT FUNCTIONS NOT USED FOR NOW\r\n\r\n // // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\r\n // const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\r\n\r\n // /**\r\n // * Gets the react node for product unit of measure display.\r\n // * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\r\n // * @returns The node representing markup for unit of measure component.\r\n // */\r\n // function renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\r\n // if (!unitOfMeasure) {\r\n // return null;\r\n // }\r\n // return (\r\n // \r\n // {unitOfMeasure}\r\n // \r\n // );\r\n // }\r\n\r\n // /**\r\n // * Gets the react node for product availability.\r\n // * @param inventoryAvailabilityLabel - The product information.\r\n // * @returns The node representing markup for product availability.\r\n // */\r\n // function renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\r\n // if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\r\n // return null;\r\n // }\r\n\r\n // return (\r\n // \r\n // {inventoryAvailabilityLabel}\r\n // \r\n // );\r\n // }\r\n\r\n // /**\r\n // * Gets the react node for product dimension as swatch.\r\n // * @returns The node representing markup for unit of measure component.\r\n // */\r\n // function renderProductDimensions(): JSX.Element | null {\r\n // if (!ArrayExtensions.hasElements(swatchItems)) {\r\n // return null;\r\n // }\r\n\r\n // return (\r\n // \r\n // {swatchItems.map(item => {\r\n // return (\r\n // \r\n // );\r\n // })}\r\n // \r\n // );\r\n // }\r\n\r\n // /**\r\n // * Gets the react node for product description.\r\n // * @param quickview - Quick view node.\r\n // * @param item - Product id to de displayed in quickview.\r\n // * @returns The product quickview component.\r\n // */\r\n // function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\r\n // if (quickview === null) {\r\n // return undefined;\r\n // }\r\n // const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\r\n // return {\r\n // DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\r\n // DimensionValue: {\r\n // RecordId: 0,\r\n // Value: swatches.value\r\n // }\r\n // };\r\n // });\r\n // return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\r\n // }\r\n\r\n /**\r\n * Gets the aria label for rating.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Aria label format for rating.\r\n * @returns The product rating aria label string.\r\n */\r\n function getRatingAriaLabel(rating?: number, ratingAriaLabelText?: string): string {\r\n if (rating && ratingAriaLabelText) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabelText || '', roundedRating, '5');\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label for review count.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Aria label format for review.\r\n * @returns The product review count aria label string.\r\n */\r\n function getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\r\n if (reviewCount && ratingCountAriaLabelText) {\r\n return format(ratingCountAriaLabelText || '', reviewCount);\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label string for product that includes product name with its price and rating.\r\n * @param name - Product name.\r\n * @param price - Product price.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Rating aria label text.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Number of ratings.\r\n * @returns The aria label string for the product card.\r\n */\r\n function renderLabel(\r\n name?: string,\r\n price?: string,\r\n rating?: number,\r\n ratingAriaLabelText?: string,\r\n reviewCount?: number,\r\n ratingCountAriaLabelText?: string,\r\n availability?: string\r\n ): string {\r\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\r\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\r\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\r\n } ${availability ?? ''}`;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param productCardimageSettings - Module image settings for product card.\r\n * @param gridSettings - Grid settings defined in theme.\r\n * @param imageUrl - Image url.\r\n * @param fallbackImageUrl - Fallback url for imge.\r\n * @param altText - Image Alt text.\r\n * @param requestContext - Request context using the component.\r\n * @returns React component for product image.\r\n */\r\n function renderProductPlacementImage(\r\n productCardimageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n fallbackImageUrl?: string,\r\n altText?: string,\r\n requestContext?: IRequestContext\r\n ): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !productCardimageSettings) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n const emptyPlaceHolderImage = context.app.config.placeholderImageName as string;\r\n let fallbackImageSource = fallbackImageUrl;\r\n if (emptyPlaceHolderImage && fallbackImageUrl) {\r\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\r\n }\r\n const image: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : '',\r\n fallBackSrc: fallbackImageSource\r\n };\r\n const imageProps: IImageProps = { gridSettings };\r\n\r\n imageProps.gridSettings = gridSettings;\r\n imageProps.imageSettings = productCardimageSettings;\r\n imageProps.imageSettings.cropFocalRegion = true;\r\n return ;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param productSearchResult - Product search result.\r\n * @param savingsPriceResourceText - Product price saving text.\r\n * @param freePriceResourceText - Product price free text.\r\n * @param originalPriceResourceText - Product price original text.\r\n * @param currentPriceResourceText - Product price current text.\r\n * @returns React component for Product price.\r\n */\r\n function renderPrice(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n productSearchResult: ProductSearchResult,\r\n savingsPriceResourceText?: string,\r\n freePriceResourceText?: string,\r\n originalPriceResourceText?: string,\r\n currentPriceResourceText?: string\r\n ): JSX.Element {\r\n const product: SimpleProduct = {\r\n // This is a fake product. The product type is only used for price component to determine if it should show price range or not.\r\n ProductTypeValue: productSearchResult.IsMasterProduct ? ProductType.Master : ProductType.Standalone\r\n } as SimpleProduct;\r\n\r\n const price: ProductPrice = {\r\n BasePrice: productSearchResult.BasePrice,\r\n AdjustedPrice: productSearchResult.Price,\r\n CustomerContextualPrice: productSearchResult.Price,\r\n // TODO from [gaweiche]: We should not put productSearchResult.Price into min/max price.\r\n // To minimize the change in a backport PR, I'll keep it as is for now.\r\n MaxVariantPrice: productSearchResult.MaxVariantPrice ? productSearchResult.MaxVariantPrice : productSearchResult.Price,\r\n MinVariantPrice: productSearchResult.MinVariantPrice ? productSearchResult.MinVariantPrice : productSearchResult.Price\r\n } as ProductPrice;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n // /**\r\n // * Gets the react node for product description.\r\n // * @param description - Product description.\r\n // * @returns The product description component.\r\n // */\r\n // function renderDescription(description?: string): JSX.Element | null {\r\n // return {description};\r\n // }\r\n\r\n // /**\r\n // * Gets the react component for product rating.\r\n // * @param coreContext - Context of the module using the component.\r\n // * @param moduleTypeName - Module type name.\r\n // * @param moduleId - Module id using the component.\r\n // * @param avgRating - Average rating.\r\n // * @param totalRatings - Total rating.\r\n // * @param ariaLabel - Aria label for rating.\r\n // * @returns React component for Product rating.\r\n // */\r\n // function renderRating(\r\n // coreContext: ICoreContext,\r\n // moduleTypeName: string,\r\n // moduleId: string,\r\n // avgRating?: number,\r\n // totalRatings?: number,\r\n // ariaLabel?: string\r\n // ): JSX.Element | null {\r\n // if (!avgRating) {\r\n // return null;\r\n // }\r\n\r\n // const numberRatings = totalRatings?.toString() || undefined;\r\n // const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\r\n // const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\r\n\r\n // return (\r\n // \r\n // );\r\n // }\r\n\r\n //PICK&MIX\r\n\r\n if (catPage === 'pick-mix') {\r\n // @ts-ignore\r\n const searchContainerResaurces = context?.actionContext?.requestCache?.internalCache?.__MR['SEARCH-RESULT-CONTAINER']?.item;\r\n // @ts-ignore\r\n const pmProducts = context.pmProducts;\r\n const RecordId = product.RecordId;\r\n const initialQuntity = pmProducts && pmProducts[RecordId] && pmProducts[RecordId].Qty;\r\n const [add, setAdd] = React.useState(initialQuntity > 0 && initialQuntity !== undefined ? false : true);\r\n\r\n const [quantity, setQuantity] = React.useState(initialQuntity > 0 && initialQuntity !== undefined ? initialQuntity : 0);\r\n\r\n const removedFromCart = () => {\r\n const localPm = localStorage && localStorage.getItem('pm_products');\r\n const localPmProds = localPm && localPm !== null ? localPm : JSON.stringify({});\r\n const pmProductsList = JSON.parse(localPmProds);\r\n if (pmProductsList[product.RecordId] === undefined) {\r\n setQuantity(0);\r\n setAdd(true);\r\n }\r\n };\r\n const cookiePMset = typeof window !== 'undefined' ? localStorage.setItem('pm_products', JSON.stringify(pmProducts)) : undefined;\r\n React.useEffect(() => {\r\n const wrapper = document.getElementsByClassName('pm-cart--ctn')[0];\r\n\r\n // tslint:disable-next-line:typedef no-any\r\n function handleButtonClick(event: any) {\r\n const isButton = event.target.nodeName === 'BUTTON';\r\n\r\n if (!isButton) {\r\n return;\r\n }\r\n const timer = setTimeout(() => {\r\n removedFromCart();\r\n }, 100);\r\n return () => {\r\n clearTimeout(timer);\r\n };\r\n }\r\n\r\n wrapper.addEventListener('click', handleButtonClick);\r\n return () => wrapper.removeEventListener('click', handleButtonClick);\r\n });\r\n\r\n function plusOneProductToPmCart(pRecordId: number): void {\r\n // @ts-ignore\r\n const pmProductsList = context.pmProducts;\r\n const productQuantity = Number(pmProductsList[pRecordId]?.Qty) + 1;\r\n if (pmProductsList[pRecordId] !== undefined) {\r\n pmProductsList[pRecordId].Qty = productQuantity;\r\n cookiePMset;\r\n setQuantity(productQuantity);\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n function removeOneProductFromPmCart(pRecordId: number): void {\r\n // @ts-ignore\r\n const pmProductsList = context.pmProducts;\r\n const productQuantity = Number(pmProductsList[pRecordId]?.Qty) - 1;\r\n\r\n if (productQuantity >= 0) {\r\n pmProductsList[pRecordId].Qty = productQuantity;\r\n cookiePMset;\r\n setQuantity(productQuantity);\r\n }\r\n if (productQuantity === 0) {\r\n delete pmProductsList[pRecordId];\r\n cookiePMset;\r\n setAdd(true);\r\n }\r\n }\r\n\r\n function addProductToPmCart(\r\n pRecordId: number,\r\n Name: string | undefined,\r\n Description: string | undefined,\r\n PrimaryImageUrl: string | undefined,\r\n pQuantity: number,\r\n Price: number\r\n ): void {\r\n // @ts-ignore\r\n const pmProductsList = context.pmProducts;\r\n setAdd(false);\r\n pmProductsList[pRecordId] = {\r\n Id: pRecordId,\r\n Item: Name,\r\n Qty: pQuantity,\r\n UOM: '',\r\n Price: Price,\r\n Description: Description,\r\n DataAreaId: '',\r\n PrimaryImageUrl: PrimaryImageUrl\r\n };\r\n // @ts-ignore\r\n context.pmProducts = pmProductsList;\r\n cookiePMset;\r\n setQuantity(1);\r\n }\r\n\r\n // @ts-ignore\r\n const AddToCartButtons = ({ showadd }) => {\r\n if (showadd) {\r\n return (\r\n <>\r\n {/* tslint:disable-next-line:jsx-no-lambda react-this-binding-issue */}\r\n \r\n addProductToPmCart(\r\n product.RecordId,\r\n product.Name,\r\n product.ItemId,\r\n product.PrimaryImageUrl,\r\n 1,\r\n product.Price\r\n )\r\n }\r\n >\r\n {searchContainerResaurces.addText}\r\n \r\n >\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n {/* tslint:disable-next-line:jsx-no-lambda react-this-binding-issue */}\r\n removeOneProductFromPmCart(product.RecordId)}\r\n title='Press to decrease the quantity by 1'\r\n className='decrement quantity__controls'\r\n aria-hidden='true'\r\n aria-label='Press to decrease the quantity by 1'\r\n color='secondary'\r\n />\r\n {/* tslint:disable-next-line:max-line-length */}\r\n \r\n {/* tslint:disable-next-line:jsx-no-lambda react-this-binding-issue max-line-length */}\r\n plusOneProductToPmCart(product.RecordId)}\r\n title='Press to increment quantity by 1'\r\n className='increment quantity__controls '\r\n aria-hidden='true'\r\n aria-label='Press to increment quantity by 1'\r\n color='secondary'\r\n />\r\n >\r\n );\r\n };\r\n // @ts-ignore\r\n return (\r\n \r\n \r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n product.PrimaryImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context.actionContext.requestContext\r\n )}\r\n \r\n \r\n {product.Name}\r\n {renderModalPopup}\r\n {/* tslint:disable-next-line:max-line-length jsx-no-lambda react-this-binding-issue react-a11y-event-has-role */}\r\n {\r\n setModalOpen(true)}\r\n aria-label={renderLabel(\r\n product.Name,\r\n context.cultureFormatter.formatCurrency(product.Price),\r\n product.AverageRating,\r\n ratingAriaLabel\r\n )}\r\n className='hyperlink view_details '\r\n {...attribute}\r\n >\r\n {searchContainerResaurces.viewDetailsText}\r\n \r\n }\r\n {product.Description}\r\n {renderPrice(context, typeName, id, product, savingsText, freePriceText, originalPriceText, currentPriceText)}\r\n \r\n {available ? (\r\n \r\n ) : (\r\n {availableLabel}\r\n )}\r\n \r\n \r\n {product.RecordId}\r\n {product.ItemId}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n //FINISHPICKMIX\r\n\r\n // console.log(\"category\");\r\n // console.log(productCategoryUserPath);\r\n //STDPRODUCT\r\n return (\r\n <>\r\n {\r\n _ontoProductPDP();\r\n onTelemetryClick(telemetryContent!, payLoad, product.Name!);\r\n }}\r\n aria-label={renderLabel(\r\n product.Name,\r\n context.cultureFormatter.formatCurrency(product.Price),\r\n product.AverageRating,\r\n ratingAriaLabel\r\n // product.TotalRatings,\r\n // ratingCountAriaLabel,\r\n // inventoryLabel\r\n )}\r\n className={`msc-product status_${available ? 'AVAL' : 'OOS'}`}\r\n {...attribute}\r\n >\r\n \r\n \r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n product.PrimaryImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context.actionContext.requestContext\r\n )}\r\n \r\n \r\n \r\n {product.Name}\r\n \r\n \r\n {product.Description}\r\n \r\n \r\n {/*\r\n //TODO restore way of saving list attribute\r\n {card_guid}\r\n */}\r\n {product.RecordId}\r\n {product.ItemId}\r\n \r\n {/* {!context.app.config.hideRating && (\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)\r\n )} */}\r\n {product.BasePrice !== product.Price && (\r\n \r\n \r\n {custom_basePrice}\r\n {discount_string}\r\n \r\n \r\n )}\r\n \r\n \r\n {product.BasePrice !== 0 ? (\r\n \r\n {product.BasePrice === product.Price ? (\r\n <>\r\n \r\n {custom_basePrice}\r\n \r\n\r\n {/* THE FOLLOWING IS SHOWN FOR SPACING REASONS */}\r\n \r\n {/* DO NOT REMOVE THIS */}\r\n >\r\n ) : (\r\n <>\r\n \r\n {custom_adjustedPrice}\r\n \r\n \r\n {omnibus_price_currency ? (\r\n <>\r\n {resources?.omnibusRecentLowestPrice} \r\n {omnibus_price_currency}\r\n >\r\n ) : (\r\n <> >\r\n )}\r\n \r\n >\r\n )}\r\n {/* */}\r\n \r\n {available ? (\r\n \r\n {/* */}\r\n {resources?.addToCartText}\r\n \r\n ) : (\r\n {availableLabel}\r\n )}\r\n \r\n {/* */}\r\n \r\n ) : null}\r\n \r\n\r\n {/*MICROSOFTCODE\r\n \r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context.actionContext.requestContext\r\n )}\r\n \r\n {product.Name}\r\n \r\n {renderProductDimensions()}\r\n \r\n {renderPrice(context, typeName, id, product, savingsText, freePriceText, originalPriceText, currentPriceText)}\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n {renderDescription(product.Description)}\r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\r\n {renderProductAvailability(inventoryLabel)}\r\n \r\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\r\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))} */}\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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel, ICarouselProps, Player, IPlayerData, IPlayerOptions, IVideoMetadata } from '@msdyn365-commerce/components';\nimport { IImageData, IImageSettings, Image, Video } from '@msdyn365-commerce/core';\nimport { MediaLocation, MediaType, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n defaultDataScale,\n IComponentNodeProps,\n ImagefullView,\n IModalViewProps,\n IModuleProps,\n inlineZoomImageOnHover,\n inlineZoomImageOnMouseMove,\n inlineZoomImageOnMouseOut,\n inlineZoomInitClick,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n KeyCodes,\n NodeTag,\n onContainerZoomInit,\n onMouseMoveLensContainer,\n onMouseOutLensContainer,\n onMouseOverImageContainer,\n removeContainerZoomStyle,\n removeInlineZoomStyle,\n SingleSlideCarousel,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IMediaGalleryData } from './media-gallery.data';\nimport { imageSource, imageZoom, IMediaGalleryProps, thumbnailsOrientation } from './media-gallery.props.autogenerated';\nimport { getProductImages, getValidProductImages, getVideoMetadataFromApi, validateProductImages } from './utils';\nimport { getAltText, IMediaData } from './utils/helper';\n\n/**\n * IMediaGalleryState Interface.\n */\nexport interface IMediaGalleryState {\n animating: boolean;\n activeIndex: number;\n isImageZoomed: boolean;\n modalIsOpen: boolean;\n lastUpdate?: number;\n isMobileImageZoomed?: boolean;\n mediaGalleryItems?: IMediaData[];\n isInitialLoad?: boolean;\n shouldUseOptimizedImage?: boolean;\n}\n\n/**\n * IMediaGalleryThumbnailsViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IMediaGalleryThumbnailItemViewProps[];\n}\n\n/**\n * IMediaGalleryThumbnailItemViewProps Interface.\n */\nexport interface IMediaGalleryThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * IMediaGalleryViewProps Interface.\n */\nexport interface IMediaGalleryViewProps extends IMediaGalleryProps {\n state: IMediaGalleryState;\n MediaGallery: IModuleProps;\n CarouselProps: INodeProps;\n Thumbnails: IMediaGalleryThumbnailsViewProps;\n Modal?: React.ReactElement | null;\n callbackToggle?(): void;\n callbackThumbnailClick?(index: number): void;\n callbackThumbnailKeyDown?(index: number): void;\n}\n\n/**\n * Props for carousel.\n */\ninterface IMediaGalleryCarouselItems {\n items: ItemType[];\n keys: (string | undefined)[];\n}\n\n/**\n * Media gallery component.\n */\nclass MediaGallery extends React.Component, IMediaGalleryState> {\n private readonly _inlineZoomDivRef: Map = new Map();\n\n private readonly fullScreenOverlayButtonRef: React.RefObject = React.createRef();\n private readonly player: React.RefObject = React.createRef();\n private fallbackImage?: string;\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly _zoomedImageSettings: IImageSettings;\n\n public constructor(props: IMediaGalleryProps) {\n super(props);\n this._toggleModal = this._toggleModal.bind(this);\n const mediaGalleryImages = this.getImagesData();\n this.state = {\n activeIndex: 0,\n animating: false,\n isImageZoomed: false,\n modalIsOpen: false,\n isInitialLoad: true,\n shouldUseOptimizedImage: !!this.props.config.skipImageValidation,\n mediaGalleryItems: mediaGalleryImages\n };\n\n this._zoomedImageSettings =\n props.config.zoomedImageSettings ?? props.config.galleryImageSettings ?? this.defaultGalleryImageSettings;\n\n this._onImageMouseOut = this._onImageMouseOut.bind(this);\n this._inlineZoomImageOnHover = this._inlineZoomImageOnHover.bind(this);\n this._onInlineImageClick = this._onInlineImageClick.bind(this);\n this._onContainerZoomImageClick = this._onContainerZoomImageClick.bind(this);\n this._onMouseOutLensContainer = this._onMouseOutLensContainer.bind(this);\n }\n\n public isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public async componentDidMount(): Promise {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n const shouldUpdateOnPartialDimensionSelection = this.props.config.shouldUpdateOnPartialDimensionSelection;\n this._setRenderType();\n if (!this.props.context.request.app?.config?.OmniChannelMedia) {\n if (source === imageSource.pageContext) {\n if (this.state.mediaGalleryItems === undefined && this.props.data.mediaLocationsForSelectedVariant.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocationsForSelectedVariant.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n } else if (this.state.mediaGalleryItems === undefined && this.props.data.product.result) {\n const product = this.props.data.product.result;\n const images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant\n );\n\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n }\n }\n\n reaction(\n () => {\n const product = this.props.data.product.result;\n if (!product) {\n return null;\n }\n\n if (!shouldUpdateOnPartialDimensionSelection || !product.productVariant?.RecordId) {\n return `${product.RecordId}`;\n }\n\n return `${product.RecordId}-${product.productVariant.RecordId}`;\n },\n async () => {\n const product = this.props.data.product.result;\n let images: IImageData[] = [];\n if (product) {\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n } else {\n images = await getValidProductImages(\n product.RecordId,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n shouldUpdateOnPartialDimensionSelection ? product.productVariant : undefined\n );\n }\n await this._setImages(images);\n } else {\n await this._setImages([]);\n }\n },\n { fireImmediately: true }\n );\n\n if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n const images = await validateProductImages(\n this.props.data.mediaLocations.result,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings\n );\n await this._setImages(images);\n }\n }\n\n public shouldComponentUpdate(nextProps: IMediaGalleryProps, nextState: IMediaGalleryState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const { id, config, resources } = this.props;\n\n const { className, showPaginationTooltip } = config;\n\n const isVertical: boolean = config.thumbnailsOrientation === thumbnailsOrientation.vertical;\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- || is required.\n const isFullscreenAllowed: boolean = this.isMobile() || config.allowFullScreen || false;\n const zoomViewMode: string =\n config.imageZoom === imageZoom.inline ? imageZoom.inline : config.imageZoom === imageZoom.container ? imageZoom.container : '';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\n const emptyPlaceHolderImage = this.props.context.app.config?.placeholderImageName as string;\n if (this.props.data.product.result) {\n this.fallbackImage = getFallbackImageUrl(\n this.props.data.product.result.ItemId,\n this.props.context.request.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n );\n }\n if (emptyPlaceHolderImage && this.fallbackImage) {\n this.fallbackImage = `${this.fallbackImage}&fallback=${emptyPlaceHolderImage}`;\n }\n\n const mediaGalleryCarouselItems = this._getMediaGalleryItems(isFullscreenAllowed, zoomViewMode);\n const mediaGalleryThumbnailCarouselItems = this._getMediaGalleryThumbnailItems();\n const viewProps: IMediaGalleryViewProps = {\n ...(this.props as IMediaGalleryProps),\n state: this.state,\n MediaGallery: {\n moduleProps: this.props,\n className: classnames(`ms-media-gallery ${isVertical ? 'vertical' : ''}`, className)\n },\n Modal: isFullscreenAllowed ? this.imageModalSlider(zoomViewMode) : null,\n callbackToggle: this.openModalDialog,\n callbackThumbnailClick: this._generateOnThumbnailClick,\n callbackThumbnailKeyDown: this._generateOnThumbnailKeyDown,\n CarouselProps: {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryCarouselItems.items,\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: showPaginationTooltip === true,\n indicatorAriaText: resources.ariaLabelForSlide,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: mediaGalleryCarouselItems.keys\n } as IComponentNodeProps,\n Thumbnails: {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n vertical: isVertical,\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(mediaGalleryThumbnailCarouselItems.keys)\n } as IComponentNodeProps,\n items: mediaGalleryThumbnailCarouselItems.items\n }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Zoomed out image on previous/next click.\n */\n public updateZoomedInImage(): void {\n this.setState({ isImageZoomed: false });\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n /**\n * On click next in carousel.\n */\n private readonly next = (): void => {\n removeInlineZoomStyle();\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex + 1;\n this.goToIndex(nextIndex);\n\n this.updateZoomedInImage();\n };\n\n /**\n * On click previous in carousel.\n */\n private readonly previous = (): void => {\n removeInlineZoomStyle();\n const images = this.state.mediaGalleryItems;\n const nextIndex = this.isFirstItem() ? (images ? images.length - 1 : 0) : this.state.activeIndex - 1;\n this.goToIndex(nextIndex);\n this.updateZoomedInImage();\n };\n\n private readonly goToIndex = (index: number): void => {\n const { autoplay } = this.props.config;\n const currentIndex = this.state.activeIndex;\n const mediaItems = this.state.mediaGalleryItems;\n if (autoplay && mediaItems) {\n if (mediaItems[`${index}`]?.mediaTypeValue === MediaType.Video) {\n this.player.current?.play();\n } else if (mediaItems[`${currentIndex}`].mediaTypeValue === MediaType.Video) {\n this.player.current?.pause();\n }\n }\n this.setState({ activeIndex: index });\n };\n\n private _getMediaGalleryThumbnailItems(): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const thumbnailImageSettings = this.props.config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n const defaultKey = 0;\n return {\n items: [this._getEmptyThumbnailItem(thumbnailImageSettings, defaultKey, this.state.activeIndex)],\n keys: ['empty']\n };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n if (item.mediaTypeValue === MediaType.Video) {\n return this.getVideoThumbNailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n } else {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex\n );\n }\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private getImagesData = (): IImageData[] => {\n if (this.props.config.skipImageValidation || this.props.context.request.app?.config?.OmniChannelMedia) {\n const source = this.props.config.imageSource ?? imageSource.pageContext;\n let images: IImageData[] = [];\n let mediaLocations: MediaLocation[] = [];\n if (source === imageSource.pageContext && this.props.data.mediaLocationsForSelectedVariant.result) {\n mediaLocations = this.props.data.mediaLocationsForSelectedVariant.result;\n } else if (source === imageSource.productId && this.props.data.mediaLocations.result) {\n mediaLocations = this.props.data.mediaLocations.result;\n }\n images = mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(\n this.props.context.actionContext.requestContext,\n this.shouldUseCmsAltText(),\n this.props.data.product.result?.Name,\n mediaLocation.AltText\n ),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n const curatedImages = this.props.config.images ?? [];\n\n return [...this._filterMasterImageFromVariant(images), ...curatedImages];\n }\n return [];\n };\n\n private _getMediaGalleryItems(isFullscreenAllowed: boolean, zoomViewMode: string): IMediaGalleryCarouselItems {\n const mediaGalleryItems = this.state.mediaGalleryItems;\n const galleryImageSettings = this.props.config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n const zoomView = isFullscreenAllowed ? 'fullscreen' : zoomViewMode;\n\n const hasMediaGalleryItems = ArrayExtensions.hasElements(mediaGalleryItems);\n\n if (!hasMediaGalleryItems) {\n if (this.state.lastUpdate) {\n return { items: [this._renderEmptyImage(galleryImageSettings)], keys: ['empty'] };\n }\n return { items: [], keys: [] };\n }\n\n return {\n items: [\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n ...mediaGalleryItems!.map((item: IMediaData, index: number) => {\n return this._renderCarouselItemImageView(\n zoomView,\n item,\n galleryImageSettings ?? this.defaultGalleryImageSettings,\n index\n );\n })\n ],\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n keys: [...mediaGalleryItems!.map(item => item.src)]\n };\n }\n\n private async _setImages(images?: IMediaData[]): Promise {\n const curatedImage = this.props.config.images || [];\n const mediaToSet: IMediaData[] = this._filterMasterImageFromVariant(images);\n\n void Promise.all(\n mediaToSet.map(async mediaData => {\n if (mediaData.mediaTypeValue === MediaType.Video && mediaData.src) {\n try {\n const url = new URL(mediaData.src);\n const videoId = url.searchParams.get('CVID');\n if (videoId) {\n mediaData.videoData = await getVideoMetadataFromApi(videoId, this.props.context.actionContext);\n }\n } catch (error) {\n if (this.props.telemetry) {\n this.props.telemetry.debug('Error while fetching videoId');\n }\n }\n }\n return mediaData;\n })\n ).then(mediaData => {\n const mediaItems = mediaData.filter(element => {\n return (\n element.mediaTypeValue !== MediaType.Video ||\n (element.mediaTypeValue === MediaType.Video && element.videoData !== undefined)\n );\n });\n\n this.setState({\n mediaGalleryItems: [...mediaItems, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n });\n\n this.setState({\n mediaGalleryItems: [...mediaToSet, ...curatedImage],\n activeIndex: 0,\n lastUpdate: Date.now(),\n shouldUseOptimizedImage: false\n });\n }\n\n private _setRenderType(): void {\n this.setState({\n isInitialLoad: false\n });\n }\n\n private _renderCarouselItemImageView(\n zoomView: string,\n media: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode {\n if (media.mediaTypeValue === MediaType.Video) {\n if (isInPopup || zoomView !== 'fullscreen') {\n return <>{this._renderCarouselItemVideo(media, index, imageSettings)}>;\n }\n return <>{this._renderVideoThumbnail(media, index, imageSettings)}>;\n } else {\n if (this.isMobile()) {\n if (isInPopup) {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n switch (zoomView) {\n case 'container': {\n return this._renderImageInContainerOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'inline': {\n return this._renderImageInlineOnZoom(media, this._zoomedImageSettings, index);\n }\n case 'fullscreen': {\n return this._renderImageFullScreenOnZoom(media, imageSettings, index);\n }\n\n // No default\n }\n return <>{this._getCarouselItem(media, imageSettings, index, isInPopup)}>;\n }\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[]): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.MasterProductId) ||\n !ObjectExtensions.isNullOrUndefined(this.props.data.product.result?.productVariant);\n const itemId = this.props.data.product.result?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _renderCarouselItemVideo = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n if (videoData) {\n const options: IPlayerOptions = this.props.config as IPlayerOptions;\n const playerResources = this.props.resources;\n const videoMetaData: IVideoMetadata = {};\n videoMetaData.videoId = videoData.id;\n videoMetaData.title = videoData.title;\n videoMetaData.duration = videoData.playTime;\n if (videoData.thumbnail) {\n videoMetaData.posterframeUrl = videoData.thumbnail.src;\n }\n if (videoData._links?.binaryReferences) {\n videoMetaData.videoBinaryReferences = videoData._links.binaryReferences;\n }\n const videoPlayerData: IPlayerData = { options, metaData: videoMetaData };\n const attributes = {\n id: `${this.props.id}__carousel-item__${index}`\n };\n return (\n \n \n \n );\n }\n return this._renderEmptyImage(imageSettings);\n };\n\n private readonly _getCarouselItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n isInPopup: boolean = false\n ): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Gets the video thumbnail item to display media gallery.\n * @param props - The Media gallery view props from business layer.\n * @returns Return thumbnail view props which will be used to render video.\n */\n private readonly getVideoThumbNailItem = (\n mediaData: IMediaData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n /**\n * Ref Handler.\n * @param index -Remove item click function.\n * @returns Set inline zoom.\n */\n private readonly _refHandler = (index: number) => (divRef: HTMLDivElement) => {\n this._inlineZoomDivRef.set(index, divRef);\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n\n this.goToIndex(index);\n };\n };\n\n private _renderImageInlineOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n \n );\n }\n\n private _inlineZoomImageOnHover(event: React.MouseEvent): void {\n inlineZoomImageOnHover(event, this.props.config.dataScale ?? String(defaultDataScale));\n }\n\n private _handleMobileViewZoomedImageClick(event: React.MouseEvent) {\n const target = this.state.shouldUseOptimizedImage ? (event.target as HTMLImageElement) : event.currentTarget;\n const mobileZoomedInImageClassName = 'msc-mobile-zoomed-in';\n if (!this.state.isMobileImageZoomed) {\n const bounds = target.getBoundingClientRect();\n const dataScale = Number(this.props.config.dataScale ?? defaultDataScale);\n\n const positionX = event.clientX - bounds.left;\n const positionY = event.clientY - bounds.top;\n const scaledPositionX = positionX * dataScale;\n const scaledPositionY = positionY * dataScale;\n\n target.style.transform = `scale(${dataScale})`;\n target.classList.add(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = 'auto';\n target.parentElement!.scrollTo(scaledPositionX - positionX, scaledPositionY - positionY);\n this.setState({\n isMobileImageZoomed: true\n });\n } else {\n target.style.transform = '';\n target.classList.remove(mobileZoomedInImageClassName);\n target.parentElement!.style.overflow = '';\n this.setState({\n isMobileImageZoomed: false\n });\n }\n }\n\n private _onInlineImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n inlineZoomInitClick(event, this.props.config.dataScale ?? String(defaultDataScale));\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onImageMouseOut(event: React.MouseEvent): void {\n inlineZoomImageOnMouseOut(event);\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _onContainerZoomImageClick(event: React.MouseEvent): void {\n if (window.innerWidth <= 768) {\n // $msv-breakpoint-m\n this._handleMobileViewZoomedImageClick(event);\n return;\n }\n\n onContainerZoomInit(event);\n\n this.setState({\n isImageZoomed: true\n });\n }\n\n private _onMouseOutLensContainer(event: React.MouseEvent): void {\n onMouseOutLensContainer(event);\n\n this.setState({\n isImageZoomed: false\n });\n }\n\n private _renderImageInContainerOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n \n );\n }\n\n private _renderImageFullScreenOnZoom(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return (\n \n \n \n {}\n \n \n \n );\n }\n\n /**\n * Render the video thumbnail in full screen.\n * @param mediaData - Media Data.\n * @param index - Index\n * @param imageSettings - Image settings.\n * @returns - JSX.Element\n */\n private readonly _renderVideoThumbnail = (mediaData: IMediaData, index: number, imageSettings: IImageSettings): React.ReactNode => {\n const videoData = mediaData.videoData;\n let image: IImageData;\n if (videoData?.thumbnail) {\n image = videoData.thumbnail;\n } else {\n image = {\n src: 'empty'\n };\n }\n\n return (\n \n \n \n {}\n \n \n \n );\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl ?? ''\n };\n }\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n \n \n \n );\n }\n\n private _getEmptyThumbnailItem(\n imageSettings: IImageSettings | undefined,\n index: number,\n modifiedActiveIndex: number\n ): IMediaGalleryThumbnailItemViewProps {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: 'empty',\n 'aria-label': '',\n 'aria-selected': modifiedActiveIndex === index,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => {\n const images = this.state.mediaGalleryItems;\n return images && this.state.activeIndex === images.length - 1;\n };\n\n private readonly openModalDialog = (): void => {\n this._toggleModal();\n };\n\n private _toggleModal(): void {\n if (this.state.modalIsOpen) {\n this.fullScreenOverlayButtonRef.current?.focus();\n const parentDiv = this._inlineZoomDivRef.get(this.state.activeIndex);\n if (parentDiv && parentDiv.children && parentDiv.children.length >= 2) {\n const image = parentDiv.children[1].querySelector('img');\n if (image) {\n image.removeAttribute('style');\n }\n }\n this.setState({\n isImageZoomed: false\n });\n }\n this.setState({\n isImageZoomed: false,\n modalIsOpen: !this.state.modalIsOpen\n });\n removeInlineZoomStyle();\n removeContainerZoomStyle();\n }\n\n private readonly imageModalSlider = (ZoomView: string): React.ReactElement => {\n const {\n data: {\n product: { result: product }\n },\n resources\n } = this.props;\n let mediaGalleryItems = this.state.mediaGalleryItems;\n\n if (!mediaGalleryItems && product) {\n mediaGalleryItems = [this._mapProductToImageData(product)];\n }\n const carouselprops = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items:\n mediaGalleryItems &&\n mediaGalleryItems.map((item: IImageData, index: number) =>\n this._renderCarouselItemImageView(ZoomView, item, this._zoomedImageSettings, index, true)\n ),\n activeIndex: this.state.activeIndex,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n onIndicatorsClickHandler: this.goToIndex,\n showPaginationTooltip: true,\n hideIndicator: false,\n keyboard: false,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n isDisabledFunctionality: this.state.isMobileImageZoomed\n } as IComponentNodeProps;\n const carousel = ;\n\n const imageModalSliderProps: IModalViewProps = {\n modalIsOpen: this.state.modalIsOpen,\n ontoggle: this._toggleModal,\n galleryCarousel: carousel,\n classNames: classnames('ms-media-gallery__modal', 'msc-modal-input-required')\n };\n return ImagefullView(imageModalSliderProps) as React.ReactElement;\n };\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n}\n\nexport default MediaGallery;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n \n {detailedProductView?.productImage}\n \n {productText}:\n {detailedProductView?.productInfo}\n \n \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n \n \n {productNumberText}:\n {detailedProductView?.productNumber}\n \n \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n \n \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n \n \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n \n {productsStatusMessage && {productsStatusMessage}}\n \n \n \n {cancelBtnLabel}\n \n \n \n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n {productNumber}\n \n {quantityLabel}:{` `}\n {productQuantity}\n \n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n \n );\n};\n\nexport default OrderTemplateLinesView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n >\n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n \n \n {this.state.headerStatusMessage}\n \n \n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled()\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport { reaction } from 'mobx';\r\nimport { IGiftWithPurchaseProps } from './gift-with-purchase.props.autogenerated';\r\nimport { IGiftWithPurchaseData } from './gift-with-purchase.data';\r\nimport { availableGiftsWithPurchase_DLXAsync } from '../../actions/DataActionExtension.g';\r\nimport { IGiftWithPurchaseApiResponse_DLX } from '../../actions/DataServiceEntities.g';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { addCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\r\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { trackAddToCartFromGWP } from '../../themes/venchi/utilities/datalayer';\r\n\r\nexport interface IGiftWithPurchaseViewProps extends IGiftWithPurchaseProps {\r\n modalVisible: boolean;\r\n promotionProps: IGiftWithPurchasePromotionProps;\r\n closePopupCallback(): void;\r\n}\r\n\r\nexport interface IGiftWithPurchasePromotionProps {\r\n gwpType: GiftWithPurchaseType;\r\n numberProductsOfGift: number;\r\n productSelection: ProductSearchResult[];\r\n}\r\n\r\nexport enum GiftWithPurchaseType {\r\n AUTO = 0,\r\n MANUALADD = 1\r\n}\r\n\r\nconst GiftWithPurchase: React.FC> = props => {\r\n const [modalVisible, setModalVisible] = useState(false); // State to manage modal visibility\r\n const [gwpData, setGwpData] = useState(null);\r\n const productAddedAttempt = useRef(false); // Create ref to track if product is added\r\n\r\n if (typeof window === 'undefined') {\r\n return null;\r\n }\r\n //@ts-ignore\r\n const isOrderConfirmPage = window.___initialData___.requestContext.telemetryPageName.toLowerCase() === 'order confirmation';\r\n if (isOrderConfirmPage) {\r\n return null;\r\n }\r\n\r\n const closePopup = () => {\r\n if (modalVisible) {\r\n setModalVisible(false);\r\n setGwpData(null);\r\n }\r\n };\r\n const baseImageUrl: string = props.context.request.apiSettings.baseImageUrl;\r\n useEffect(() => {\r\n // Add reaction to listen for changes in cart lines\r\n const disposeReaction = reaction(\r\n () => props.data.cart.result?.cart.TotalItems!,\r\n async (totalItems: number) => {\r\n const currentURLPathName = props.context.request.url.requestUrl.pathname.replace(/\\/$/, '');\r\n const defaultRoutes = props.context.request.app?.routes;\r\n const isOrderConfirmPage_temp = defaultRoutes.orderConfirmation?.destinationUrl?.replace(/\\/$/, '') === currentURLPathName;\r\n if (\r\n totalItems &&\r\n !isOrderConfirmPage_temp &&\r\n !productAddedAttempt.current &&\r\n !(gwpData && gwpData.gwpType === GiftWithPurchaseType.AUTO) &&\r\n document.visibilityState === 'visible'\r\n ) {\r\n try {\r\n const response: IGiftWithPurchaseApiResponse_DLX = await availableGiftsWithPurchase_DLXAsync(\r\n { callerContext: props.context.actionContext },\r\n props.data.cart.result?.cart.Id!\r\n );\r\n if (\r\n // in questo caso considero che c'è almeno un prodotto da aggiungere\r\n response &&\r\n response.GWPItems &&\r\n response.GWPItems.length > 0 &&\r\n response.GWPItems[0].Items &&\r\n response.GWPItems[0].Items.length > 0 &&\r\n response.GWPItems[0].Qty &&\r\n response.GWPItems[0].Qty > 0\r\n ) {\r\n const firstGWPItem = response.GWPItems[0];\r\n const gwpTypeTemp =\r\n (firstGWPItem.Items?.length ?? 0) > 1 ? GiftWithPurchaseType.MANUALADD : GiftWithPurchaseType.AUTO;\r\n if (gwpTypeTemp === GiftWithPurchaseType.AUTO && firstGWPItem.Items?.length === 1) {\r\n // let productIds: number[] = [];\r\n // productIds = firstGWPItem!.Items!\r\n // // Map to array of ProductId, also filtering out any undefined or null values\r\n // .map(item => item.ProductId)\r\n // .filter(productId => productId !== undefined && productId !== null) as number[];\r\n // const productAvailabilityInfo = availabilityResult.AggregatedProductInventoryAvailabilities.find(aggregatedData => aggregatedData.ProductId === firstGWPItem.Items![0].ProductId!)\r\n //TODO fix this call and remove harcode\r\n const availabilityResult = await getEstimatedAvailabilityAsync(\r\n { callerContext: props.context.actionContext },\r\n {\r\n ProductIds: [firstGWPItem.Items[0].ProductId!],\r\n DefaultWarehouseOnly: true,\r\n QuantityUnitTypeValue: 2\r\n }\r\n );\r\n if (\r\n availabilityResult &&\r\n availabilityResult.AggregatedProductInventoryAvailabilities &&\r\n availabilityResult.AggregatedProductInventoryAvailabilities?.length > 0 &&\r\n availabilityResult.AggregatedProductInventoryAvailabilities[0]\r\n .MaximumPurchasablePhysicalAvailableQuantity &&\r\n availabilityResult.AggregatedProductInventoryAvailabilities[0]\r\n .MaximumPurchasablePhysicalAvailableQuantity >\r\n 2 * firstGWPItem.Qty!\r\n ) {\r\n productAddedAttempt.current = true;\r\n\r\n const cartLinesToAdd = [\r\n {\r\n ItemId: firstGWPItem.Items[0].ItemId,\r\n ProductId: firstGWPItem.Items[0].ProductId,\r\n Quantity: firstGWPItem.Qty,\r\n TrackingId: '',\r\n ExtensionProperties: [\r\n {\r\n Key: 'GWPItem',\r\n Value: { BooleanValue: true }\r\n },\r\n {\r\n Key: 'GWPType',\r\n Value: { StringValue: 'AUTO' }\r\n },\r\n {\r\n Key: 'venchiProductListName',\r\n Value: { StringValue: 'GWP' }\r\n },\r\n {\r\n Key: 'venchiProductCategoryHierarchy',\r\n Value: { StringValue: 'GWP||||' }\r\n }\r\n ]\r\n }\r\n ];\r\n const cartState = await getCartState(props.context.actionContext);\r\n addCartLinesAsync(\r\n { callerContext: props.context.actionContext },\r\n cartState.cart.Id,\r\n cartLinesToAdd,\r\n cartState.cart.Version\r\n )\r\n .then(async () => {\r\n // Code here will only run if addCartLinesAsync was successful\r\n await cartState.refreshCart({});\r\n if (firstGWPItem.Items?.[0]) {\r\n trackAddToCartFromGWP(\r\n props.context,\r\n {\r\n RecordId: firstGWPItem.Items[0].ProductId || 0,\r\n ItemId: firstGWPItem.Items[0].ItemId,\r\n Name: firstGWPItem.Items[0].Description,\r\n BasePrice: 0,\r\n Price: 0,\r\n AdjustedPrice: 0,\r\n ProductTypeValue: 0\r\n },\r\n firstGWPItem.Qty || 0\r\n );\r\n }\r\n const gwpProps: IGiftWithPurchasePromotionProps = {\r\n gwpType: gwpTypeTemp,\r\n numberProductsOfGift: firstGWPItem.Qty || 0,\r\n productSelection: firstGWPItem.Items!.map(\r\n product =>\r\n ({\r\n ItemId: product.ItemId,\r\n Name: product.Description,\r\n Price: 0,\r\n RecordId: product.ProductId,\r\n ProductNumber: product.ProductId,\r\n Description: product.Description,\r\n BasePrice: 0,\r\n PrimaryImageUrl: `${baseImageUrl}Products/${product.ItemId!}_000_001.jpg`\r\n } as ProductSearchResult)\r\n )\r\n };\r\n productAddedAttempt.current = false;\r\n if (!modalVisible) {\r\n setModalVisible(true);\r\n }\r\n setGwpData(gwpProps);\r\n\r\n // Add any other actions that should only occur if addCartLinesAsync was successful\r\n // ...\r\n })\r\n .catch(error => {\r\n productAddedAttempt.current = false;\r\n // Handle error. Error handling logic here.\r\n console.error('Error adding gwp cart lines: ', error);\r\n // Optional: Provide user feedback about the error via UI\r\n });\r\n }\r\n } else {\r\n //TODO gestire caso alternativo con più prodotti\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error fetching GWP data:', error);\r\n }\r\n }\r\n }\r\n );\r\n\r\n return () => {\r\n // Clean up the reaction when the component unmounts\r\n disposeReaction(); // Dispose of the reaction to avoid memory leaks\r\n };\r\n }, []);\r\n\r\n return props.renderView({\r\n ...props,\r\n modalVisible: modalVisible,\r\n promotionProps: gwpData,\r\n closePopupCallback: closePopup\r\n }) as React.ReactElement;\r\n};\r\n\r\nexport default GiftWithPurchase;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IMediaGalleryThumbnailItemViewProps, IMediaGalleryThumbnailsViewProps, IMediaGalleryViewProps } from '../..';\n\nconst MediaGalleryView: React.FC = props => {\n const { CarouselProps, Thumbnails, MediaGallery, Modal } = props;\n\n return (\n \n \n {Modal}\n {_renderThumbnails(Thumbnails)}\n \n );\n};\n\nconst _renderThumbnails = (thumbnails: IMediaGalleryThumbnailsViewProps): JSX.Element => {\n const { ThumbnailsContainerProps, SingleSlideCarouselComponentProps, items } = thumbnails;\n\n return (\n \n {items && items.map(_renderThumbnailItem)}\n \n );\n};\n\nconst _renderThumbnailItem = (thumbnail: IMediaGalleryThumbnailItemViewProps): JSX.Element => {\n const { ThumbnailItemContainerProps, Picture } = thumbnail;\n\n return {Picture};\n};\n\nexport default MediaGalleryView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent, RatingComponent } from '@msdyn365-commerce/components';\nimport {\n IComponent,\n IComponentProps,\n ICoreContext,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * IActiveProductProps interface.\n */\nexport interface IActiveProductProps extends IComponentProps<{ product?: ProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n}\n\n/**\n * IActiveProduct interface.\n */\nexport interface IActiveProduct extends IComponent {}\n\n/**\n * RenderDescription function.\n * @param description - Product description string.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderDescription(description?: string): JSX.Element | null {\n return {description};\n}\n\n/**\n * GetRatingAriaLabel function.\n * @param rating - Product rating number.\n * @param ratingAriaLabel - Product rating aria label.\n * @returns - Returns string.\n */\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n const numberTwo: number = 2;\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(numberTwo);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\n/**\n * RenderRating function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param ratingId - The rating id.\n * @param avgRating - The average rating.\n * @param totalRatings - The total ratings.\n * @param ariaLabel - The rating aria label.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderRating(\n context: ICoreContext,\n typeName: string,\n ratingId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() ?? undefined;\n const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\n\n return (\n \n );\n}\n\n/**\n * RenderPrice function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param productId - The product id.\n * @param basePrice - The base price of the product.\n * @param adjustedPrice - The adjusted price of the product.\n * @param savingsText - The savings text of the product.\n * @param freePriceText - The free price text.\n * @param originalPriceText - The original price text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n productId: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string\n): JSX.Element | null {\n const price: ProductPrice = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n \n );\n}\n\n/**\n * RenderProductPlacementImage function.\n * @param requestContext - RequestContext.\n * @param imageSettings - The product image settings.\n * @param gridSettings - The viewport gird settings.\n * @param imageUrl - The product image url.\n * @param altText - The product image alt text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderProductPlacementImage(\n requestContext: IRequestContext,\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const imgData: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return ;\n}\n\n/**\n * ActiveProduct constant.\n * @param props - The active product props.\n * @param props.data - The product search result data.\n * @param props.context - The core context.\n * @param props.imageSettings - The prodcut image settings.\n * @param props.savingsText - The product savings text.\n * @param props.freePriceText - The free price text.\n * @param props.originalPriceText - The original price text.\n * @param props.ratingAriaLabel - The product rating aria label.\n * @param props.typeName - The type name of the module.\n * @param props.id - The id of the product.\n * @returns - Returns JSX.Element | null.\n */\nexport const ActiveProductComponent: React.FC = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n ratingAriaLabel,\n typeName,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Do not need naming convention check for library prameters\n id\n}) => {\n const product = data.product;\n if (!product) {\n return null;\n }\n\n return (\n <>\n \n \n {renderProductPlacementImage(\n context.actionContext.requestContext,\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name\n )}\n \n \n {product.Name}\n {renderPrice(context, typeName, id, product.BasePrice, product.Price, savingsText, freePriceText, originalPriceText)}\n {renderDescription(product.Description)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\n \n \n >\n );\n};\n\nexport default ActiveProductComponent;\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 { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * ILinksData: Interface for\n * Additional content.\n */\ninterface ILinksData {\n linkText?: string;\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n isOpenInNewTab?: boolean;\n}\n\n/**\n * IAdditionalContentData: Interface for\n * Active content.\n */\ninterface IAdditionalContentData {\n heading?: string;\n subtext?: string;\n links?: ILinksData[];\n}\n\n/**\n * IActiveImageAdditionalContentProps: Interface for\n * Active Image Additional Content Component props.\n */\nexport interface IActiveImageAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData | undefined;\n handleAdditionalTextChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IActiveImageAdditionalContentViewProps: Interface for\n * Active Image Additional Content view props.\n */\nexport interface IActiveImageAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Active Image Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Active Image Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Active Image Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IActiveImageAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'msc-active-image__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.isOpenInNewTab,\n role: 'button'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Active Image additonal content item props.\n * @param props - Active Image Additional content component props.\n * @returns IActiveImageAdditionalContentItemViewProps.\n */\nconst assembleNode = (item: IAdditionalContentData, props: IActiveImageAdditionalContentProps): IActiveImageAdditionalContentViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, index);\n });\n\n return {\n additionalContentNode: { className: 'msc-active-image__details__additional-content' },\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentContainer: { className: 'msc-active-image__details__additional-content__container' },\n additionalContentItemLinks: { className: 'msc-active-image__details__additional__content__cta' }\n };\n};\n\n/**\n * ActiveImageAdditionalContent component.\n * @param props - Active Image Additional content component props.\n * @returns Active Image Additional content view props.\n */\nexport const activeImageAdditionalContent = (\n props: IActiveImageAdditionalContentProps\n): IActiveImageAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n return assembleNode(additionalContent, props);\n};\n\nexport default activeImageAdditionalContent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport React from 'react';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IRgbColor\n * @description - The IRgbColor interface contract.\n */\nexport interface IRgbColor {\n rValue: number;\n gValue: number;\n bValue: number;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IArea {\n areaId: string;\n coords: number[];\n href?: string;\n center?: number[];\n primaryImageUrl?: string;\n productUrl: string;\n productSearchResult?: ProductSearchResult;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IAreaMap {\n name: string;\n areas: IArea[];\n}\n\n/**\n * @enum CanvasCalculations\n * @description - The canvas calculations enum.\n */\nexport enum CanvasCalculations {\n defaultWidth = 0,\n defaultHeight = 0,\n defaultPositionX = 0,\n defaultPositionY = 0,\n defaultScale = 1,\n halfDivisor = 2,\n doubleMultiplier = 2,\n buttonHeight = 30,\n buttonPadding = 30,\n paddingAdjustment = 3,\n expandAnimationStartWidth = 10,\n expandAnimationEndWidth = 40,\n collapseAnimationStartWidth = 40,\n collapseAnimationEndWidth = 8,\n expandRadius = 12,\n collapseRadius = 8,\n rotation = 1.57,\n startAngle = 0,\n endAngle = 7,\n clearMargin = 50,\n clearHeight = 100,\n clearWidth = 100,\n textFadeInStartValue = 0,\n textFadeOutStartValue = 0.5,\n textFadeInterval = 0.01\n}\n\n/**\n * @enum CanvasStyles\n * @description - The canvas styles enum.\n */\nexport enum CanvasStyles {\n color = '#FFFFFF',\n buttonTextClor = '#000000'\n}\n\n/**\n * @enum\n * @description - The canvas styles enum.\n */\nexport interface IImageMapperResources {\n buttonText?: string;\n altText?: string;\n}\n\n/**\n * @interface IImageMapperProps\n * @description - The IImageMapperProps interface contract.\n */\nexport interface IImageMapperProps {\n imageData: IImageData;\n areaMap: IAreaMap;\n viewPort: string;\n requestContext: IRequestContext;\n color?: string;\n buttonTextClor?: string;\n width?: number;\n imgWidth?: number;\n activeImageRefs: React.RefObject;\n imageMapperResources?: IImageMapperResources;\n onLoad?(): void;\n onClick?(area: IArea, index: number, event: AreaEvent): void;\n onFocus?(area: IArea, index: number, event: AreaEvent): void;\n onMouseEnter?(area: IArea, index: number, event: AreaEvent): void;\n onMouseLeave?(area: IArea, index: number, event: AreaEvent): void;\n}\n\n/**\n * ImageMapper.\n */\nexport class ImageMapper extends React.Component {\n private readonly _backgroundImage: React.RefObject;\n\n private readonly _container: React.RefObject;\n\n private readonly _canvas: React.RefObject;\n\n private _isDesktopViewPort: boolean = false;\n\n private _context: CanvasRenderingContext2D | null | undefined = null;\n\n public constructor(props: IImageMapperProps) {\n super(props);\n this._backgroundImage = React.createRef();\n this._container = React.createRef();\n this._canvas = React.createRef();\n }\n\n /**\n * ComponentDidMount method.\n */\n public componentDidMount(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n this.renderAreas();\n this._context = null;\n }\n\n /**\n * ComponentDidUpdate method.\n */\n public componentDidUpdate(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n }\n\n /**\n * ShouldComponentUpdate method.\n * @param nextProps - Next props.\n * @returns Returns boolean.\n */\n public shouldComponentUpdate(nextProps: IImageMapperProps): boolean {\n let shouldRender = false;\n if (nextProps !== this.props) {\n shouldRender = true;\n }\n return shouldRender;\n }\n\n /**\n * GetActiveImageWidth method - Gets the active image width.\n * @returns Returns number | undefined.\n */\n public getActiveImageWidth = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return undefined;\n };\n\n /**\n * GetActiveImageHeight method - Gets the active image height.\n * @returns Returns number | undefined.\n */\n public getActiveImageHeight = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return undefined;\n };\n\n /**\n * ConvertHexToRgb method - This method takes color in HEX format and returns IRgbColor color object.\n * @param hexColor -The color hex value.\n * @returns -Returns IRgbColor object.\n */\n public convertHexToRgb = (hexColor: string): IRgbColor => {\n // RegEx used to execute the conversion of the hex color to rgb value.\n const regEx = new RegExp('^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$', 'u');\n\n // RegEx.exec method executes a search for a match in a specified string. Returns a result array, or null.\n const result = regEx.exec(hexColor);\n const defaultValue = 0;\n return result\n ? {\n rValue: Number.parseInt(result[1], 16),\n gValue: Number.parseInt(result[2], 16),\n bValue: Number.parseInt(result[3], 16)\n }\n : {\n rValue: defaultValue,\n gValue: defaultValue,\n bValue: defaultValue\n };\n };\n\n /**\n * ApplyFadingTransition method - Applys fading transition to button text.\n * @param text -The button text.\n * @param coords -The coordinates.\n * @param rgbColor -The RGB color object.\n * @param alpha -The alpha value of the button text.\n */\n public applyFadingTransition = (text: string, coords: number[], rgbColor: IRgbColor, alpha: number): void => {\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n context.fillStyle = `rgba(${rgbColor.rValue}, ${rgbColor.gValue}, ${rgbColor.bValue}, ${alpha} )`;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * Draw button method - Draws button and contains fixed hight, padding values.\n * @param text -The button text.\n * @param coords -The coordinates.\n */\n public drawButton = (text: string, coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonHeight = CanvasCalculations.buttonHeight;\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n const buttonPositionX = coords[0] - buttonWidth / halfDivisor;\n const buttonPositionY = coords[1] - buttonHeight / halfDivisor;\n const arcsize = buttonHeight / halfDivisor;\n\n context.beginPath();\n context.moveTo(buttonPositionX + arcsize, buttonPositionY);\n context.lineTo(buttonPositionX + buttonWidth - arcsize, buttonPositionY);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY,\n buttonPositionX + buttonWidth,\n buttonPositionY + arcsize,\n arcsize\n );\n context.lineTo(buttonPositionX + buttonWidth, buttonPositionY + buttonHeight - arcsize);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY + buttonHeight,\n buttonPositionX + buttonWidth - arcsize,\n buttonPositionY + buttonHeight,\n arcsize\n );\n context.lineTo(buttonPositionX + arcsize, buttonPositionY + buttonHeight);\n context.arcTo(buttonPositionX, buttonPositionY + buttonHeight, buttonPositionX, buttonPositionY - arcsize, arcsize);\n context.lineTo(buttonPositionX, buttonPositionY + arcsize);\n context.arcTo(buttonPositionX, buttonPositionY, buttonPositionX + arcsize, buttonPositionY, arcsize);\n context.lineTo(buttonPositionX + arcsize, buttonPositionY);\n context.stroke();\n context.closePath();\n context.fillStyle = color;\n context.fill();\n context.fillStyle = buttonTextClor;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * ExpandAnimation method - Shows expand animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public expandAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.expandAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.expandAnimationEndWidth;\n const radius = CanvasCalculations.expandRadius;\n const rotation = CanvasCalculations.rotation;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeInValue = CanvasCalculations.textFadeInStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Reders expand animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n context.fillStyle = color;\n if (buttonText) {\n if (animationStartWidth < animationEndWidth) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeInValue);\n textFadeInValue += CanvasCalculations.textFadeInterval;\n animationStartWidth++;\n } else {\n this.drawButton(buttonText, [pointPositionX, pointPositionY]);\n }\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * CollapseAnimation method - Shows collapse animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public collapseAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.collapseAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.collapseAnimationEndWidth;\n const rotation = CanvasCalculations.rotation;\n const clearMargin = CanvasCalculations.clearMargin;\n const clearHeight = CanvasCalculations.clearHeight;\n const clearWidth = CanvasCalculations.clearWidth;\n const radius = CanvasCalculations.collapseRadius;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeOutValue = CanvasCalculations.textFadeOutStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Renders collapse animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.clearRect(pointPositionX - clearMargin, pointPositionY - clearMargin, clearWidth, clearHeight);\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n if (animationEndWidth < animationStartWidth && buttonText) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeOutValue);\n textFadeOutValue -= CanvasCalculations.textFadeInterval;\n animationStartWidth--;\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * DrawCircle method - Renders active points.\n * @param coords -Coordinates.\n */\n public drawCircle = (coords: number[]): void => {\n const { color = CanvasStyles.color, viewPort } = this.props;\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n const startAngle: number = CanvasCalculations.startAngle;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n const radius = viewPort === 'xs' || viewPort === 'sm' ? coords[2] * doubleMultiplier : coords[2];\n if (!context) {\n return;\n }\n context.fillStyle = color;\n context.beginPath();\n context.strokeStyle = color;\n context.arc(coords[0], coords[1], radius, startAngle, Math.PI * doubleMultiplier);\n context.closePath();\n context.stroke();\n context.fill();\n };\n\n /**\n * ScaleCoords method - To scale the active point coordinates based on the window size.\n * @param coords -Coordinates.\n * @returns -Returns number[].\n */\n public scaleCoords = (coords: number[]): number[] => {\n const { imgWidth } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultScale: number = CanvasCalculations.defaultScale;\n\n // Calculate scale based on current 'width' and the original 'imgWidth'\n const width = this.getActiveImageWidth();\n const scale = width && imgWidth && imgWidth > defaultWidth ? width / imgWidth : defaultScale;\n return coords.map(coord => coord * scale);\n };\n\n /**\n * RenderPrefilledAreas method - To render active points in case of events.\n */\n public renderPrefilledAreas = (): void => {\n const { areaMap } = this.props;\n areaMap.areas.map(area => {\n this.drawCircle(this.scaleCoords(area.coords));\n return null;\n });\n };\n\n /**\n * ComputeCenter method - To re-calculate the center of active point based on window size.\n * @param area -IArea.\n * @returns -Returns number[].\n */\n public computeCenter = (area: IArea): number[] => {\n const scaledCoords = this.scaleCoords(area.coords);\n return [scaledCoords[0], scaledCoords[1]];\n };\n\n /**\n * HandleHoverOn method - To handle mouse hover on event.\n * @param area -IArea.\n */\n public handleHoverOn = (area: IArea): void => {\n if (area.center && this._canvas.current) {\n this.drawCircle(this.scaleCoords(area.coords));\n this.expandAnimation(area.center);\n }\n };\n\n /**\n * HandleHoverOff method - To handle mouse hover off event.\n * @param area -IArea.\n */\n public handleHoverOff = (area: IArea): void => {\n if (this._canvas.current) {\n const context = this._canvas.current.getContext('2d') ?? this._context;\n const canvasPositionX: number = CanvasCalculations.defaultPositionX;\n const canvasPositionY: number = CanvasCalculations.defaultPositionY;\n\n if (!context) {\n return;\n }\n context.clearRect(canvasPositionX, canvasPositionY, this._canvas.current.width, this._canvas.current.height);\n this.renderPrefilledAreas();\n if (area.center) {\n this.collapseAnimation(area.center);\n }\n }\n };\n\n /**\n * Click method - Mouse click event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public click = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onClick } = this.props;\n if (onClick) {\n event.preventDefault();\n onClick(area, index, event);\n }\n };\n\n /**\n * HoverOn method - Mouse hover on event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOn = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseEnter } = this.props;\n this.handleHoverOn(area);\n if (onMouseEnter) {\n onMouseEnter(area, index, event);\n }\n };\n\n /**\n * HoverOff method - Mouse hover off event.\n * @param area - IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOff = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseLeave } = this.props;\n\n this.handleHoverOff(area);\n\n if (onMouseLeave) {\n onMouseLeave(area, index, event);\n }\n };\n\n /**\n * RenderAreas method - Renders active points at given coordinates.\n * @returns -Returns JSX.Element[].\n */\n public renderAreas = (): JSX.Element[] => {\n const { areaMap, viewPort } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText ? this.props.imageMapperResources.buttonText : '';\n const altText = this.props.imageMapperResources?.altText ? this.props.imageMapperResources.altText : '';\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n\n return areaMap.areas.map((area, index) => {\n const scaledCoords = this.scaleCoords(area.coords);\n const xsRadius = area.coords[2] * doubleMultiplier;\n if (viewPort === 'xs') {\n scaledCoords[2] = xsRadius;\n }\n const center = this.computeCenter(area);\n const extendedArea = { ...area, scaledCoords, center };\n const areaKey = `area-${index}`;\n const altTextWithProductName = altText\n .replace('{buttonText}', buttonText ? buttonText : '')\n .replace('{productName}', area.productSearchResult?.Name ? area.productSearchResult.Name : '');\n return (\n \n );\n });\n };\n\n /**\n * InitCanvas method - To render the canvas.\n */\n public initCanvas = (): void => {\n if (!this._canvas.current || !this._backgroundImage.current || !this._container.current) {\n return;\n }\n\n const { color, onLoad } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultHeight: number = CanvasCalculations.defaultHeight;\n\n const canvasWidth = this.getActiveImageWidth() ?? defaultWidth;\n const canvasHeight = this.getActiveImageHeight() ?? defaultHeight;\n\n this._canvas.current.width = canvasWidth;\n this._canvas.current.height = canvasHeight;\n this._container.current.style.width = `${canvasWidth}px`;\n\n const context = this._canvas.current.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.fillStyle = color ?? '';\n\n if (onLoad) {\n onLoad();\n }\n\n this.renderPrefilledAreas();\n };\n\n /**\n * Render method - To render the image mapper component with active image, canvas and active points.\n * @returns -Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const { imageData, areaMap, requestContext } = this.props;\n\n return (\n \n \n \n \n {this.renderAreas()}\n \n \n );\n }\n}\n\nexport default ImageMapper;\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 { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n activeImageAdditionalContent,\n ActiveProductComponent,\n IActiveImageAdditionalContentViewProps,\n IArea,\n IAreaMap,\n IImageMapperProps,\n ImageMapper\n} from '../active-image-utilities';\nimport { IActiveImageData } from './active-image.data';\nimport { IActiveImageProps } from './active-image.props.autogenerated';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IActiveImageViewProps\n * @classdesc - The IActiveImageViewProps interface contract.\n */\nexport interface IActiveImageViewProps extends IActiveImageProps<{}>, IImageMapperProps {\n activePointContainer: IModuleProps;\n activePointDetailsContainer: INodeProps;\n imageMapper: React.ReactNode;\n overlay: React.ReactNode;\n productCard: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IActiveImageAdditionalContentViewProps;\n productCardleftPosition: number;\n productCardtopPosition: number;\n handleAdditionalText?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalParagraph?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalLinkText?(event: MsDyn365.ContentEditableEvent): void;\n}\n\n/**\n * @interface IActiveImageLinksData\n * @classdesc - The IActiveImageLinksData interface contract.\n */\nexport interface IActiveImageLinksData {\n linkText?: string;\n linkUrl: MsDyn365.ILinkData;\n ariaLabel?: string;\n willOpenInNewTab?: boolean;\n}\n\n/**\n * @interface IActiveImageState\n * @classdesc - The IActiveImageState interface contract.\n */\ninterface IActiveImageState {\n clientWidth: number;\n area: IArea | null;\n viewport: string;\n overlayClass: string;\n}\n\n/**\n * @enum ActiveImageConstants\n * @description - The active image constants enum.\n */\nexport enum ActiveImageConstants {\n timeoutInterval = 200,\n enterKey = 'Enter',\n escKey = 'Escape'\n}\n\n/**\n *\n * ActiveImage class.\n * @extends {React.PureComponent & IImageMapperProps, IActiveImageState>}\n */\nexport class ActiveImage extends React.PureComponent & IImageMapperProps, IActiveImageState> {\n private readonly _telemetryContent: ITelemetryContent;\n\n private _isDesktopViewPort: boolean;\n\n private readonly _defaultProductCardWidth: number = 315;\n\n private readonly _defaultProdutCardHight: number = 490;\n\n private readonly _activePoints: IArea[] = [];\n\n private readonly _activeImageRefs: React.RefObject;\n\n private readonly _activeImageClass: string;\n\n private readonly _productCardDivRef: React.RefObject;\n\n public constructor(props: IActiveImageProps & IImageMapperProps) {\n super(props);\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this._activeImageClass = `msc-active-image-${this.getActiveImageId()}`;\n this.state = {\n clientWidth: 0,\n area: null,\n viewport,\n overlayClass: ''\n };\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n this._activeImageRefs = React.createRef();\n this._productCardDivRef = React.createRef();\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this.updateClientWidth);\n document.addEventListener('keydown', this.keyDown, false);\n document.addEventListener('mousedown', this._handleOutsideClick);\n }\n setTimeout(() => {\n this.updateClientWidth();\n }, ActiveImageConstants.timeoutInterval);\n\n if (MsDyn365.msdyn365Commerce.isBrowser && this._activeImageRefs.current) {\n const images: HTMLCollectionOf = this._activeImageRefs.current.getElementsByClassName(\n 'msc-thumbnail_image msc-active-image-img'\n );\n if (ArrayExtensions.hasElements(Array.from(images))) {\n images[0].removeAttribute('usemap');\n }\n }\n }\n\n /**\n * AddActivePoints method - To handle add Active Points.\n * @param area - IArea.\n * @param product - ProductSearchResult.\n * @param coords - Coords.\n * @param productUrl - String.\n */\n public addActivePoints = (area: IArea | undefined, product: ProductSearchResult, coords: number[], productUrl: string): void => {\n if (!area) {\n this._activePoints.push({\n areaId: product.RecordId.toString(),\n coords,\n primaryImageUrl: product.PrimaryImageUrl ?? '',\n productUrl,\n productSearchResult: product\n });\n }\n };\n\n /**\n * ComponentWillUnmount method.\n */\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this.updateClientWidth);\n document.removeEventListener('keydown', (this.keyDown as unknown) as EventListener, false);\n document.removeEventListener('mousedown', this._handleOutsideClick, false);\n }\n }\n\n /**\n * UpdateClientWidth method to update client width in state.\n */\n public updateClientWidth = (): void => {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this.setState({ clientWidth: this.getActiveImageWidth(), viewport });\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n };\n\n /**\n * Render method.\n * @returns - Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const viewProps: IActiveImageViewProps = {\n ...(this.props as IImageMapperProps & IActiveImageProps<{}>),\n activePointContainer: {\n moduleProps: this.props,\n className: classnames('msc-active-image', this._activeImageClass, this.props.config.className)\n },\n activePointDetailsContainer: {\n tag: 'div',\n className: classnames('msc-active-image-wrapper', this._activeImageClass, this.props.config.className),\n ref: this._activeImageRefs\n },\n imgWidth: this.props.config.canvasWidth,\n imageMapper: this.renderImageMapper(),\n overlay: this.renderOverlay(),\n productCard: this.renderProductCard(),\n productCardleftPosition: this.getProductCardPositionX(),\n productCardtopPosition: this.getProductCardPositionY(),\n title: this.renderActiveImageDetailsHeading(),\n text: this.renderActiveImageDetailsParagraph(),\n links: this.renderActiveImageDetailsLinks(),\n detailsContainer: { className: 'msc-active-image__details' },\n detailsContainerCta: { className: 'msc-active-image__details__cta' },\n additionalContent: activeImageAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkText: this.handleAdditionalTextChange\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * RenderImageMapper method - To render image mapper.\n * @returns - Returns React.ReactNode | null.\n */\n public renderImageMapper = (): React.ReactNode | null => {\n const { config, context } = this.props;\n const defaultPosition: number = 0;\n const defaultLength: number = 0;\n const productResults = this.props.data.products.result;\n if (config.activePoints && productResults) {\n for (const product of productResults) {\n for (const configProduct of config.activePoints) {\n if (product.ItemId === configProduct.itemId) {\n const productUrl = getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined);\n const coords = [\n configProduct.xPosition ?? defaultPosition,\n configProduct.yPosition ?? defaultPosition,\n configProduct.radius ?? defaultPosition\n ];\n const area = this._activePoints.find(activePoint => JSON.stringify(activePoint.coords) === JSON.stringify(coords));\n this.addActivePoints(area, product, coords, productUrl);\n }\n }\n }\n }\n const mappedArea: IAreaMap = {\n name: `map-${this._activeImageClass}`,\n areas: this._activePoints.length > defaultLength ? this._activePoints : []\n };\n\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n return (\n \n );\n };\n\n /**\n * EnterArea method - To handle mouse enter event.\n * @param area - Active point area.\n * @param index - Active point index.\n * @param event - Active point AreaEvent.\n */\n public enterArea = (area: IArea, index: number, event: AreaEvent): void => {\n this.setState({ area, overlayClass: 'msc-active-image-overlay' });\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(area, index, event);\n }\n if (event.type.toLocaleLowerCase() === 'click' && this._isDesktopViewPort) {\n window.open(area.productUrl, '_self');\n }\n };\n\n /**\n * LeaveArea method - To handle mouse leave event.\n */\n public leaveArea = (): void => {\n if (this._isDesktopViewPort) {\n this.resetState();\n }\n };\n\n /**\n * ResetState method - To reset the state for area and overlayclass.\n */\n public resetState = (): void => {\n this.setState({ area: null, overlayClass: '' });\n };\n\n /**\n * RenderProductComponent method - To render the product card with product information.\n * @returns - Returns React.ReactNode.\n */\n public renderProductComponent = (): React.ReactNode => {\n if (this.state.area?.productSearchResult) {\n const baseImageUrl: string = this.props.context.request.apiSettings.baseImageUrl;\n const imageUrl: string = this.state.area.primaryImageUrl ?? '';\n const primaryImageUrl: string = `${baseImageUrl}${imageUrl}`;\n const product: ProductSearchResult = this.state.area.productSearchResult;\n product.PrimaryImageUrl = primaryImageUrl;\n\n return (\n \n );\n }\n return React.Fragment;\n };\n\n /**\n * RenderProductCard method - To render product cards.\n * @returns - Returns React.ReactNode.\n */\n public renderProductCard = (): React.ReactNode => {\n const { area } = this.state;\n\n return (\n <>\n {area?.center && (\n \n \n {!this._isDesktopViewPort && }\n {area.productSearchResult && this.renderProductComponent()}\n {!this._isDesktopViewPort && (\n \n {this.props.resources.seeMoreButtonText}\n \n )}\n \n \n )}\n >\n );\n };\n\n /**\n * RenderOverlay method - To render overlay for non desktop viewports.\n * @returns - Returns React.ReactNode.\n */\n public renderOverlay = (): React.ReactNode => {\n return <>{!this._isDesktopViewPort && }>;\n };\n\n /**\n * GetProductCardPositionX method - Provides product card x position to the left or right of active point based on available space.\n * For xs, sm and md viewports it provides x position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionX = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsWidth = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.w\n : defaultImageSettings.viewports.lg?.w;\n const defaultPositionX: number = 0;\n const halfDivisor: number = 2;\n const productCardWidth: number = productImageSettingsWidth ? productImageSettingsWidth : this._defaultProductCardWidth;\n const { area, clientWidth, viewport } = this.state;\n const pointPositionX = area?.center?.[0] ?? clientWidth / halfDivisor;\n const leftAllignPosition = pointPositionX - productCardWidth - productCardWidth / halfDivisor;\n const rightAllignPosition = pointPositionX + productCardWidth / halfDivisor;\n let position: number = (clientWidth - productCardWidth) / halfDivisor;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n if (leftAllignPosition < defaultPositionX) {\n position = rightAllignPosition;\n } else {\n position = leftAllignPosition;\n }\n }\n return position;\n };\n\n /**\n * GetProductCardPositionY method - Provides product card y position in center with respect to active point.\n * For xs, sm and md viewports it provides y position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionY = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsHeight = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.h\n : defaultImageSettings.viewports.lg?.h;\n const halfDivisor: number = 2;\n const { area, viewport } = this.state;\n const produtCardHight: number = productImageSettingsHeight ? productImageSettingsHeight : this._defaultProdutCardHight;\n const pointPositionY = (this.getActiveImageHeight() - produtCardHight) / halfDivisor;\n let position: number = pointPositionY;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n position = (area?.center?.[1] ?? this.getActiveImageHeight() / halfDivisor) - produtCardHight / halfDivisor;\n }\n return position;\n };\n\n /**\n * GetDefaultImageSettings method.\n * @returns MsDyn365.IImageSettings.\n */\n public getDefaultImageSettings = (): MsDyn365.IImageSettings => {\n const defaultImageSettings: MsDyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n lg: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n xl: { q: 'w=275&h=275&m=6', w: 275, h: 275 }\n },\n lazyload: true\n };\n\n return defaultImageSettings;\n };\n\n /**\n * KeyDown method - To handle keydown event.\n * @param event - KeyboardEvent.\n */\n public keyDown = (event: KeyboardEvent): void => {\n if (event.key === ActiveImageConstants.enterKey) {\n const target: HTMLElement = event.target as HTMLElement;\n if (target.nodeName === 'AREA') {\n const area: HTMLAreaElement = target as HTMLAreaElement;\n if (area.href) {\n window.open(area.href, '_self');\n }\n }\n }\n if (event.key === ActiveImageConstants.escKey) {\n this.resetState();\n }\n };\n\n /**\n * GetActiveImageWidth method - To get active image width.\n * @returns Returns number.\n */\n public getActiveImageWidth = (): number => {\n const defaultWidth: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return defaultWidth;\n };\n\n /**\n * GetActiveImageHeight method - To get active image height.\n * @returns Returns number.\n */\n public getActiveImageHeight = (): number => {\n const defaultHeight: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return defaultHeight;\n };\n\n /**\n * HandleLinkTextChange method - To handle link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleTextChange method - To handle text change event.\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 * HandleParagraphChange method - To handle paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * HandleAdditionalTextChange method - To handle additional text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.heading = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalLinkTextChange method - To handle additional link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n const additionalContent = this.props.config.additionalContent ?? {};\n if (additionalContent.links) {\n additionalContent.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalParagraphChange method - To handle additional paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.subtext = event.target.value;\n }\n }\n\n /**\n * RenderActiveImageDetailsLinks method - To render active image details links.\n * @returns - React node.\n */\n public renderActiveImageDetailsLinks = (): React.ReactNode[] | undefined => {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this._telemetryContent, '');\n\n return links?.map((linkData: IActiveImageLinksData, index: number) => {\n payLoad.contentAction.etext = linkData.linkText;\n const attributes = getTelemetryAttributes(this._telemetryContent, payLoad);\n const linkId = index;\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: linkData.ariaLabel,\n className: 'msc-active-image__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.willOpenInNewTab,\n role: 'button',\n additionalProperties: attributes\n };\n\n return (\n {\n this.handleLinkTextChange(index, event);\n },\n requestContext: this.props.context.request\n }}\n />\n );\n });\n };\n\n /**\n * RenderActiveImageDetailsHeading method - To render active image details heading.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsHeading = (): React.ReactNode | undefined => {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n };\n\n /**\n * RenderActiveImageDetailsParagraph method - To render active image details paragraph.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsParagraph = (): React.ReactNode | undefined => {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n };\n\n /**\n * GetActiveImageId - To get active image id from src.\n * @returns - String.\n */\n public getActiveImageId = (): string => {\n const { activeImage } = this.props.config;\n let activeImageId: string = '';\n if (activeImage?.src) {\n const activeImageSource = activeImage.src.split('/');\n const decrementOne: number = 1;\n const activeImageIdPart = activeImageSource[activeImageSource.length - decrementOne].split('?');\n activeImageId = activeImageIdPart[0] ?? '';\n }\n return activeImageId;\n };\n\n /**\n * Handle outside click method - To handle outside click of the active image product.\n * @param event - Mouse event.\n */\n private readonly _handleOutsideClick = (event: MouseEvent) => {\n if (this._productCardDivRef.current?.contains(event.target as Node)) {\n return;\n }\n this.resetState();\n };\n}\nexport default ActiveImage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getTelemetryObject, IModuleProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselData } from './carousel.data';\nimport { ICarouselProps } from './carousel.props.autogenerated';\nimport { ICarouselState } from './carousel.state';\n\nexport interface ICarouselViewProps extends ICarouselProps<{}>, ICarouselState {\n closeAnimation: string;\n carouselContainer: IModuleProps;\n telemetryContent: ITelemetryContent;\n next(): void;\n previous(): void;\n onIndicatorsClickHandler(): void;\n handleDismissCarousel(): void;\n handleOnExited(): void;\n handleOnExiting(): void;\n}\n\n/**\n *\n * CarouselModule component.\n * @extends {React.PureComponent>}\n */\nclass CarouselModule extends React.PureComponent, ICarouselState> {\n private animating: boolean;\n\n private readonly telemetryContent: ITelemetryContent;\n\n constructor(props: ICarouselProps, state: ICarouselState) {\n super(props);\n this.state = { activeIndex: 0, closeNow: false, dismissCarousel: false };\n this.animating = false;\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public componentDidMount(): void {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n if (this.props.context.request.cookies.get(`CarouselDismiss_${this.props.id}`) === undefined) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'false');\n this.setState({ dismissCarousel: false });\n }\n }\n }\n\n public render(): JSX.Element | null {\n if (this.state.dismissCarousel) {\n return null;\n }\n\n const { className } = this.props.config;\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n ...this.state,\n telemetryContent: this.telemetryContent,\n carouselContainer: {\n moduleProps: this.props,\n className: classnames('ms-carousel', className)\n },\n closeAnimation: this.state.closeNow ? 'close-now' : '',\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n handleDismissCarousel: this._handleDismissCarousel,\n handleOnExited: this._onExited,\n handleOnExiting: this._onExiting\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Function implementation to dismiss the Carousel.\n */\n private readonly _handleDismissCarousel = (): void => {\n if (this.props.context && this.props.context.request && this.props.context.request.cookies) {\n this.props.context.request.cookies.set(`CarouselDismiss_${this.props.id}`, 'true');\n this.setState({ dismissCarousel: true });\n }\n };\n\n /**\n * Function implementation to move to next slide.\n */\n private readonly _next = (): void => {\n const { slots } = this.props;\n const nextIndex = this.state.activeIndex === (slots && slots.content && slots.content.length - 1) ? 0 : this.state.activeIndex + 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n /**\n * Function implementation to move to previous slide.\n */\n private readonly _previous = (): void => {\n const slots = this.props.slots && this.props.slots.content;\n const nextIndex = this.state.activeIndex === 0 ? (slots ? slots.length - 1 : 0) : this.state.activeIndex - 1;\n\n if (this.animating) {\n this.setState({ closeNow: true, activeIndex: nextIndex });\n } else {\n this.setState({ activeIndex: nextIndex });\n }\n };\n\n private readonly _onExiting = (): void => {\n this.animating = true;\n };\n\n private readonly _onExited = (): void => {\n this.animating = false;\n this.setState({ closeNow: false });\n };\n\n /**\n * Function implementation to move to a given slide.\n * @param newIndex\n */\n private readonly _goToIndex = (newIndex: number): void => {\n if (this.animating) {\n return;\n }\n this.setState({ activeIndex: newIndex });\n };\n}\n\nexport default CarouselModule;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {shipItText}\n \n \n \n {pickupInStoretext}\n \n {cartLine.FulfillmentStoreId ? (\n \n {orgUnitName}\n \n {changeStoreText}\n \n \n ) : null}\n >\n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n {removeButtonText}\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title: {resources.cartTitle},\n cart: this.props.data.cart.result,\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\n cartlines: cartLines,\n cartLinesGroup,\n promoCode: this._getPromoCode(),\n promotionOptions: this._getPromotions(),\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry: this.props.telemetry,\n id: this.props.id,\n multiplePickUpEnabled,\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\n cart?.hasInvoiceLine ? (\n {resources.invoiceSummaryTitle}\n ) : (\n {resources.orderSummaryTitle}\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n \n {fullError}\n \n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n \n {this.props.resources.outOfStockErrorMessageHeader}\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n this.setState({\n cartlinesErrors: {}\n });\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ cartlinesErrors: {}, isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n >\n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n \n {promotionPopupHeading}\n \n \n \n \n {promotions.map(_promotion => {\n return (\n \n {_promotion.Promotion?.OfferName} {` `}\n \n );\n })}\n \n \n \n \n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n productCatalogs: [],\n content: CONTENT.Search,\n selectedProduct: null,\n selectedCatalogId: 0\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public componentDidMount(): void {\n this._getCatalogs();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n >\n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n \n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n \n {selectCatalogTitleText}\n \n \n {this._getCatalogNodes()}\n \n >\n )}\n \n \n \n \n \n );\n };\n\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n\n const query = get(this, 'searchTextInput.current.value', null);\n\n if (!query) {\n return;\n }\n\n this.setState({\n content: CONTENT.Loading\n });\n\n this._getSearchResults(query)\n .then(result => {\n if (result.length === 0) {\n this.setState({\n products: result,\n content: CONTENT.NotFound\n });\n } else {\n this.setState({\n products: result,\n content: CONTENT.ProductList\n });\n }\n })\n .catch(error => {\n this.setState({\n content: CONTENT.Error\n });\n });\n };\n\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = this.props.context;\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\n\n if (!productVariant) {\n this.props.context.telemetry.error('Error retrieving product variant');\n return Promise.resolve([]);\n }\n\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\n\n this.setState({\n selectedProductDimensions: dimensions,\n content: CONTENT.ProductConfiguration,\n selectedProduct: productVariant\n });\n\n return dimensions;\n };\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n this.setState({\n query: event.target.value\n });\n };\n\n private readonly _onBackButtonClickHandler = (): void => {\n this.setState({\n content: CONTENT.ProductList\n });\n };\n\n private readonly _highlightSearchTerm = (name: string) => {\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\n\n return (\n \n );\n };\n\n private readonly _resultCountText = (): string => {\n return this.props.resources.searchResultsCountVerbage\n .replace('{count}', this.state.products.length.toString())\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\n };\n\n private _renderContent(): React.ReactNode | null {\n switch (this.state.content) {\n case CONTENT.ProductConfiguration:\n const { selectedProduct, selectedProductDimensions } = this.state;\n const viewProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n product: selectedProduct!,\n dimensions: selectedProductDimensions!,\n addToTemplateHandler: this._addItemToTemplateHandler,\n onQuantityChangeHandler: this._onQuantityChangeHandler,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm()\n };\n\n return ;\n\n case CONTENT.ProductList:\n const productProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n clickHandler: this._onSelectItem,\n products: this.state.products,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm(),\n renderResultCountText: this._resultCountText\n };\n\n return (\n \n \n \n );\n\n case CONTENT.Loading:\n return (\n \n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n \n {this._resultCountText()}\n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.Error:\n return (\n \n {this._renderSearchForm()}\n \n {this.props.resources.searchErrorMessage}\n \n \n );\n\n default:\n return {this._renderSearchForm()};\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise => {\n const {\n orderTemplateId,\n context: { actionContext },\n isMultipleCatalogFeatureEnabledInHq\n } = this.props;\n const catalogId = this.state.selectedCatalogId;\n const input = isMultipleCatalogFeatureEnabledInHq\n ? new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea',\n isMultipleCatalogFeatureEnabledInHq,\n catalogId\n )\n : new AddItemToOrderTemplateInput(\n orderTemplateId,\n config.product.RecordId,\n config.quantity,\n config.product.DefaultUnitOfMeasure || 'ea'\n );\n const result = await addItemToOrderTemplate(input, actionContext);\n this.setState({\n isOpen: false,\n reloadPage: true\n });\n // reload when closing\n window.location.reload();\n return result;\n };\n\n /**\n *\n * Get all active product catalogs.\n */\n private _getCatalogs(): void {\n const { isMultipleCatalogFeatureEnabledInHq, catalogs } = this.props;\n\n // if Channel Multiple Catalogs Feature is enabled then show all catalogs.\n const productCatalogs = isMultipleCatalogFeatureEnabledInHq && catalogs ? catalogs : [];\n\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n // set the current catalog id as a default selected catalog id from the url\n this.setState({\n productCatalogs: productCatalogs,\n selectedCatalogId: catalogId\n });\n }\n\n private _getCatalogNodes(): JSX.Element[] | null {\n const { productCatalogs, selectedCatalogId } = this.state;\n if (productCatalogs && ArrayExtensions.hasElements(productCatalogs)) {\n return productCatalogs.map((productCatalog: ProductCatalog) => {\n // initially select default catalog in dropdown\n const isSelected = productCatalog.RecordId === selectedCatalogId;\n return (\n \n {productCatalog.Name}\n \n );\n });\n }\n return [];\n }\n\n private readonly _onCatalogSelectionChange = (event: React.ChangeEvent) => {\n this.setState({\n selectedCatalogId: Number.parseInt(event.target.value, 10)\n });\n };\n\n private _getSearchResults(searchText: string): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { selectedCatalogId } = this.state;\n const searchCriteriaInput: ProductSearchCriteria = {};\n\n searchCriteriaInput.Context = {\n ChannelId: channelId,\n CatalogId: selectedCatalogId\n };\n\n if (process.env.NODE_ENV === 'development' && process.env.ENABLE_CLOUD_SEARCH?.toLowerCase() !== 'true') {\n searchCriteriaInput.IncludeAttributes = false;\n } else {\n searchCriteriaInput.IncludeAttributes = true;\n }\n searchCriteriaInput.SearchCondition = searchText;\n\n return searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n }\n\n private async _getProductDimensions(product: SimpleProduct): Promise {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const id = product.MasterProductId ? product.MasterProductId : product.RecordId;\n\n return getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(id, channelId, [], this.props.context.request),\n actionContext\n );\n }\n\n private readonly _toggleModalHandler = () => {\n if (this.state.isOpen) {\n const payLoad = getPayloadObject('click', this.props.telemetryContent!, 'add-item-to-template', '');\n onTelemetryClick(this.props.telemetryContent!, payLoad, 'add-item-to-template');\n this._getCatalogs();\n this.addLineButtonRef.current!.focus();\n }\n\n this.setState({\n isOpen: !this.state.isOpen,\n content: CONTENT.Search\n });\n\n if (this.state.reloadPage) {\n window.location.reload();\n this.setState({\n reloadPage: false\n });\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\ninterface IDropdownState {\n /**\n * @friendlyName selectedIndex\n * @description Selected index.\n */\n selectedIndex: string;\n}\n\nexport interface IDropdownProps {\n dropdownId: number;\n dropdownName: string;\n dropdownList: IDropdownItemProps[];\n telemetryContent?: ITelemetryContent;\n onChange?(selection: IDropdownOnSelection): void;\n}\n\nexport interface IDropdownItemProps {\n value: string;\n id: number;\n}\n\nexport interface IDropdownOnSelection {\n dropdownId: number;\n selectId: string;\n selectedValue: string;\n}\n\n/**\n *\n * DropDown component.\n * @extends {React.PureComponent}\n */\nexport class Dropdown extends React.PureComponent {\n private readonly selectMenu: React.RefObject = React.createRef();\n\n constructor(props: IDropdownProps, state: IDropdownState) {\n super(props);\n this.state = {\n selectedIndex: ''\n };\n }\n\n public componentDidMount(): void {\n if (this.selectMenu.current) {\n this.selectMenu.current.selectedIndex = 0;\n }\n }\n\n public render(): JSX.Element {\n const { dropdownId, dropdownList, dropdownName } = this.props;\n\n return (\n \n {dropdownList.map(\n (item: IDropdownItemProps) =>\n item && (\n \n {item.value}\n \n )\n )}\n \n );\n }\n\n private readonly _onChanged = (event: React.ChangeEvent): void => {\n this.setState({ selectedIndex: event.target.value });\n\n if (this.props.onChange) {\n this.props.onChange({\n dropdownId: this.props.dropdownId,\n selectId: event.target.value,\n selectedValue: event.target.innerText\n });\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport const NotFoundComponent = (props: { error: string; msg: string }) => (\n <>\n \n {props.error}\n {props.msg}\n >\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { debounce } from 'lodash';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\ninterface IQuantityProps {\n min?: number;\n max: number;\n currentCount?: number;\n disabled?: boolean;\n incrementGlyphClass?: string;\n decrementGlyphClass?: string;\n decrementButtonAriaLabel?: string;\n incrementButtonAriaLabel?: string;\n inputQuantityAriaLabel?: string;\n id?: string;\n onChange?(newValue: number): void;\n}\n\ninterface IQuantityState {\n currentInput: number;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class OrderTemplateQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n constructor(props: IQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount || 1 };\n this._handleChange = this._handleChange.bind(this);\n\n reaction(\n () => this.props.currentCount,\n () => {\n this.setState({ currentInput: this.props.currentCount || 1 });\n }\n );\n }\n\n public render(): JSX.Element {\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const disabled = this.props.currentCount === this.props.min;\n const incDisabled = this.props.currentCount === this.props.max;\n const currentValue = this.state.currentInput;\n let extraClass = '';\n if (disabled) {\n // The quantity has reached its boundaries (max or min)\n extraClass = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClass = 'transition';\n }\n const getChangeHandler = (amount: number) => () => {\n this._onIncrementalChange(amount);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n );\n }\n\n private _onIncrementalChange(amount: number): void {\n const updatedQuantity = this.state.currentInput + amount;\n\n if (updatedQuantity >= 1 && updatedQuantity <= this.props.max) {\n this.props.onChange && this.props.onChange(updatedQuantity);\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n const currentValue = Number.parseInt(e.target.value, 10);\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n\n if (currentValue > this.props.max) {\n this.setState({ currentInput: this.props.max });\n } else {\n this.setState({ currentInput: currentValue }, () => {\n debounce(() => {\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, 200)();\n });\n }\n }\n\n private readonly _validateMin = (): void => {\n const minValue = this.props.min === undefined ? 1 : this.props.min;\n\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\n this.props.onChange && this.props.onChange(minValue);\n } else {\n this.props.onChange && this.props.onChange(this.state.currentInput);\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductDimensionValue, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getFallbackImageUrl,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IProductInventoryInformation,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent, ModalBody, ModalFooter } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport OrderTemplateQuantity from '../common/order-template-quantity';\nimport { Dropdown, IAddLineToTemplateProps, IAddLineToTemplateResources, IDropdownItemProps, IDropdownOnSelection } from '.';\n\nexport interface IProductCnnfigurationProps extends IAddLineToTemplateProps {\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n imageSettings: IImageSettings;\n telemetryContent?: ITelemetryContent;\n searchForm: React.ReactNode;\n addToTemplateHandler(params: IProductConfigurationState): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n}\n\nexport interface IProductConfigurationState {\n quantity: number;\n unitPrice: number;\n totalPrice: number;\n product: SimpleProduct;\n dimensions: ProductDimensionFull[];\n selectedDimensions: {};\n productAvailableQuantity?: IProductInventoryInformation;\n buttonDisabled: boolean;\n showAddConfirmation: boolean;\n errorMessage?: string;\n isBusy: boolean;\n errors: { dimension?: string[]; add?: string };\n}\n\n/**\n * Configure selected product for addition to order template.\n */\nexport class ProductConfiguration extends React.Component {\n private selectedDimensions: {} = {};\n\n constructor(props: IProductCnnfigurationProps) {\n super(props);\n\n this.state = {\n quantity: 1,\n unitPrice: props.product.Price,\n totalPrice: props.product.Price,\n product: props.product,\n dimensions: props.dimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n selectedDimensions: {},\n buttonDisabled: false,\n showAddConfirmation: false\n } as IProductConfigurationState;\n }\n\n public shouldComponentUpdate(nextProps: IProductCnnfigurationProps, nextState: IProductConfigurationState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings }\n },\n resources: {\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n totalPriceLabel\n },\n imageSettings,\n highlightSearchTerm\n } = this.props;\n const { buttonDisabled, product, quantity, unitPrice, totalPrice, showAddConfirmation, errors } = this.state;\n const isMultipleCatalogSelect = this.props.isMultipleCatalogFeatureEnabledInHq ? 'isMultipleCatalogSelect' : '';\n return (\n <>\n \n {this.props.searchForm}\n \n \n \n \n \n {product?.ItemId}\n {highlightSearchTerm(product?.Name ?? '')}\n \n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n \n \n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n \n \n \n {this._getDimensionsNodes()}\n \n \n {quantitySelectLabel}\n \n \n \n \n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n \n \n \n {showAddConfirmation && (\n \n \n {this._getConfirmationMessage()}\n \n )}\n {errors?.add && (\n \n \n {errors.add}\n \n )}\n \n {addItemToTemplateText}\n \n \n >\n );\n }\n\n private _getConfirmationMessage(): string {\n const selectedDimensionNames = this.state.dimensions\n .map(dimension => {\n let variant = dimension.DimensionValues?.find(\n value => value.RecordId === this.selectedDimensions[dimension.DimensionTypeValue]\n )?.Value;\n if (dimension.DimensionTypeValue === 3) {\n variant = `size ${variant}`;\n }\n return variant;\n })\n .filter(value => value);\n\n return this.props.resources.addToTemplateConfirmation\n .replace('{count}', this.state.quantity.toString())\n .replace('{productAndDimensions}', `${this.state.product.Name}, ${Object.values(selectedDimensionNames).join(', ')}`);\n }\n\n private _getDimensionsNodes(): React.ReactElement[] {\n const { dimensions } = this.state;\n const { resources } = this.props;\n\n return dimensions?.map((dimension: ProductDimensionFull) => {\n const { DimensionValues, DimensionTypeValue } = dimension;\n const mapDimensions = (value: ProductDimensionValue): IDropdownItemProps => ({\n id: value.RecordId,\n value: value.Value || ''\n });\n const dimensionName = this._getDropdownName(DimensionTypeValue, resources);\n const dropdownList: IDropdownItemProps[] = DimensionValues ? DimensionValues.map(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n \n {dimensionName}\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n \n \n \n {this._getDimensionsError(dimensionName)}\n \n \n )}\n \n \n );\n });\n }\n\n private readonly _getDimensionsError = (dimensionName: string) =>\n this.props.resources.dimensionMissingError.replace(/{dimensionName}/g, dimensionName);\n\n private readonly _addToTemplateHandler = async (event: React.MouseEvent) => {\n // Hide confirmation of previous addition when adding multiple items\n this.setState({\n isBusy: true,\n showAddConfirmation: false,\n errors: { ...this.state.errors, add: undefined }\n });\n\n const missingDimensions = this.state.dimensions\n .map(dimension => dimension.DimensionTypeValue.toString())\n .filter(type => !this.selectedDimensions[type]);\n\n this.setState({\n errors: { dimension: missingDimensions }\n });\n if (missingDimensions.length > 0) {\n this.setState({\n isBusy: false\n });\n return;\n }\n\n this.props\n .addToTemplateHandler({ ...this.state })\n .then(status => {\n // Validate against the existance of a ProductListId\n if (status.ProductListId) {\n this.setState({\n isBusy: false,\n showAddConfirmation: true\n });\n }\n })\n .catch(error => {\n const { addToTemplateDuplicateError, addToTemplateGenericError } = this.props.resources;\n let errorMessage;\n\n if (error.error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n errorMessage = addToTemplateDuplicateError;\n } else {\n errorMessage = addToTemplateGenericError;\n }\n\n this.setState({\n isBusy: false,\n errors: { ...this.state.errors, add: errorMessage }\n });\n this.props.context.telemetry.error('Error adding item to order template');\n });\n };\n\n private readonly _onQuantityChange = (newValue: number) => {\n this.setState({\n quantity: newValue,\n totalPrice: newValue * this.props.product.Price\n });\n };\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n // Rehydrate the selected variants price, available dimensions & sizes\n private readonly _onDimensionChanged = async (selection: IDropdownOnSelection): Promise => {\n const { product, dimensions, context } = this.props;\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = context;\n\n // Remaining error notifications for missing dimensions\n const remainingDimensionsErrors = this.state.errors?.dimension?.filter(id => id !== selection.dropdownId.toString());\n\n this.setState({\n isBusy: false,\n showAddConfirmation: false,\n buttonDisabled: true,\n errors: { add: undefined, dimension: remainingDimensionsErrors }\n });\n\n // Update currently selected dimensions\n this.selectedDimensions[selection.dropdownId] = +selection.selectId;\n\n const mappedDimensions = dimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, this.selectedDimensions[dimension.DimensionTypeValue]) ||\n dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n const variantProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n\n if (!variantProduct) {\n this.props.context.telemetry.error(\n `Error retrieving variant product for product ${product.MasterProductId ? product.MasterProductId : product.RecordId}`\n );\n return;\n }\n\n const dimensionInput = new GetDimensionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n );\n const variantDimensions = await getDimensionsForSelectedVariant(dimensionInput, actionContext);\n\n if (!variantDimensions) {\n this.props.context.telemetry.error('Error retrieving dimensions for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n const availabilityInput = new ProductAvailabilitiesForSelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId\n );\n\n // @TODO sync UX quantity w/ actual availability\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(availabilityInput, actionContext);\n const priceInput = new PriceForSelectedVariantInput(product.RecordId, channelId);\n const productPrice = await getPriceForSelectedVariant(priceInput, actionContext);\n\n if (!productPrice) {\n this.props.context.telemetry.error('Error retrieving price for reconfigured product variant');\n this.setState({\n buttonDisabled: false\n });\n return;\n }\n\n this.setState({\n buttonDisabled: false,\n productAvailableQuantity: (newAvailableQuantity && newAvailableQuantity[0]) || undefined,\n unitPrice: +(productPrice.BasePrice || product.Price),\n dimensions: variantDimensions.sort((a, b) => a.DimensionTypeValue - b.DimensionTypeValue),\n product: variantProduct\n });\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IAddLineToTemplateResources): string => {\n switch (dimensionType) {\n case 1: // Color\n return resources.productDimensionTypeColor;\n case 2: // Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // Size\n return resources.productDimensionTypeSize;\n case 4: // Style\n return resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private _formatPrice(price: number): string {\n const {\n context: {\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n }\n } = this.props;\n\n return formatCurrency(price.toFixed(2), currencyCode);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\nimport { IAddLineToTemplateProps } from '.';\n\nexport interface IProductListProps extends IAddLineToTemplateProps {\n products: ProductSearchResult[];\n imageSettings: IImageSettings;\n searchForm: React.ReactNode;\n clickHandler(product: ProductSearchResult): Promise;\n highlightSearchTerm(name: string): React.ReactNode;\n renderResultCountText(): string;\n}\n\nexport const ProductList = (props: IProductListProps) => {\n const {\n products,\n context: {\n actionContext: {\n requestContext: { apiSettings }\n },\n request: { gridSettings },\n cultureFormatter: {\n formatCurrency,\n\n // @ts-expect-error\n currencyCode\n }\n },\n clickHandler,\n highlightSearchTerm,\n renderResultCountText,\n resources: { selectProductButtonText },\n imageSettings\n } = props;\n\n return (\n <>\n \n {renderResultCountText()}\n \n {props.searchForm}\n \n {products.map((product: ProductSearchResult, index: number) => {\n const { Price, ItemId, Name, PrimaryImageUrl } = product;\n const price = formatCurrency(Price.toFixed(2), currencyCode);\n const primaryImageSource = generateImageUrl(PrimaryImageUrl ?? '', apiSettings) ?? '';\n const fallBackImg = getFallbackImageUrl(ItemId, apiSettings, props.context.request.app?.config?.OmniChannelMedia) ?? '';\n\n return (\n \n \n \n \n {ItemId}\n {highlightSearchTerm(Name ?? '')}\n \n \n \n {price}\n \n \n \n );\n })}\n \n >\n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise;\n}\n\nconst ProductSelectButton = (props: IProductSelectButton) => {\n const [isBusy, setBusy] = useState(false);\n const { product, buttonText, clickHandler } = props;\n const getClickHandler = React.useCallback(async () => {\n setBusy(!isBusy);\n await clickHandler(product);\n setBusy(!isBusy);\n }, [clickHandler, isBusy, product]);\n\n return (\n \n {buttonText}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport { IOrderTemplateData } from '../order-template.data';\nimport { IOrderTemplateProps } from '../order-template.props.autogenerated';\nimport { AddLineToTemplate } from '.';\n\ninterface IOrderTemplateBulkActionsProps extends IOrderTemplateProps {\n orderTemplateId: string;\n selectedLines: IOrderTemplateLineViewModel[];\n isMinifiedView: boolean;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n telemetryContent?: ITelemetryContent;\n onAddSelectionToBag(): void;\n onRemoveSelection(): void;\n}\n\ninterface IOrderTemplateBulkActionsState {\n isAddDisabled: boolean;\n isRemoveDisabled: boolean;\n}\n\n/**\n * Bulk Order Template line actions.\n */\nexport class OrderTemplateBulkActions extends React.PureComponent {\n public state: IOrderTemplateBulkActionsState = {\n isAddDisabled: true,\n isRemoveDisabled: true\n };\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateBulkActionsProps,\n state: IOrderTemplateBulkActionsState\n ): IOrderTemplateBulkActionsState {\n const selectedLines = props.selectedLines.length;\n let nextState = { ...state };\n nextState = {\n isAddDisabled: selectedLines === 0,\n isRemoveDisabled: selectedLines === 0\n };\n return nextState;\n }\n\n public render(): JSX.Element {\n const {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n addSelectedToBagButtonText,\n removeSelectedToBagButtonText,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n } = this.props.resources;\n\n const addLineProps = {\n context: this.props.context,\n telemetryContent: this.props.telemetryContent,\n resources: {\n addLineModalLinkText,\n searchButtonAriaLabel,\n searchInputAriaLabel,\n searchModalPlaceholderText,\n selectCatalogTitleText,\n selectProductButtonText,\n addItemToTemplateText,\n addLineProductUnitPricePrefix,\n backButtonText,\n decrementButtonAriaLabel,\n incrementButtonAriaLabel,\n quantitySelectLabel,\n addLineProductUnitOfMeasurePrefix,\n notFoundSearchErrorNotice,\n notFoundSearchErrorRedediation,\n searchErrorMessage,\n productDimensionTypeColor,\n productDimensionTypeConfiguration,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n searchResultsCountVerbage,\n searchResultsCountSubject,\n addToTemplateConfirmation,\n totalPriceLabel,\n progressNotificationText,\n addToTemplateDuplicateError,\n addToTemplateGenericError,\n dimensionMissingError\n },\n imageSettings: this.props.config.imageSettings,\n orderTemplateId: this.props.orderTemplateId,\n isMultipleCatalogFeatureEnabledInHq: this.props.isMultipleCatalogFeatureEnabledInHq,\n catalogs: this.props.data.catalogs?.result\n };\n\n return (\n <>\n \n \n \n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n \n \n \n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n \n >\n );\n }\n\n private readonly addHandler = (event: React.MouseEvent) => {\n this.setState({\n isAddDisabled: true\n });\n\n this.props.onAddSelectionToBag();\n\n this.setState({\n isAddDisabled: false\n });\n };\n\n private readonly removeHandler = (event: React.MouseEvent) => {\n this.setState({\n isRemoveDisabled: true\n });\n\n this.props.onRemoveSelection();\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddOrderTemplateToCartComponent,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n RenameOrderTemplateComponent,\n OrderTemplateNameDialog\n} from '@msdyn365-commerce/components';\nimport { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductList } from '@msdyn365-commerce/retail-proxy';\nimport { OrderTemplate, Random } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent, Popover } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { useState } from 'react';\n\nexport interface IOrderTemplateActionsData {\n orderTemplate: OrderTemplate;\n}\n\nexport interface IOrderTemplateActionsProps extends IComponentProps {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise;\n };\n renameOrderTemplateDialogStrings: IOrderTemplateNameDialogResources;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n resources: {\n addTemplateToBagButtonText: string;\n renameTemplateButtonText: string;\n deleteTemplateButtonText: string;\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n}\n\nexport interface IOrderTemplateActionsViewProps {\n addTemplateToBag: React.ReactNode;\n renameTemplate?: React.ReactNode;\n removeTemplate?: React.ReactNode;\n isMultipleCatalogsFeatureEnabled?: boolean;\n actionsSplitButton?: React.ReactNode;\n}\n\n/**\n * Remove Order Action.\n * @param props -Order template action props.\n * @returns Remove order template.\n */\nconst removeOrderActionHandler = (props: IOrderTemplateActionsProps) => () => {\n _removeOrderTemplate(props);\n};\n\nexport const OrderTemplateActionsView = (props: IOrderTemplateActionsProps): IOrderTemplateActionsViewProps => {\n const { resources, isMultipleCatalogFeatureEnabledInHq } = props;\n const { deleteTemplateButtonText } = resources;\n\n return {\n addTemplateToBag: _getOrderTemplateAddToCartDialog(props),\n renameTemplate: !isMultipleCatalogFeatureEnabledInHq && _getOrderTemplateRenameControl(props),\n removeTemplate: !isMultipleCatalogFeatureEnabledInHq && (\n \n {deleteTemplateButtonText}\n \n ),\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && \n };\n};\n\nconst _removeOrderTemplate = (props: IOrderTemplateActionsProps): void => {\n const {\n data: { orderTemplate },\n handlers\n } = props;\n const { onRemoveTemplate } = handlers;\n\n if (onRemoveTemplate) {\n onRemoveTemplate(orderTemplate.productList.Id);\n }\n};\n\nconst _getOrderTemplateAddToCartDialog = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const {\n data: { orderTemplate },\n typeName,\n id,\n context,\n telemetryContent,\n resources,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n const {\n addTemplateToBagButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n } = resources;\n\n const dialogStrings = {\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources\n };\n\n return (\n \n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\n return (\n \n );\n};\n\nlet buttonEventReference: HTMLButtonElement | undefined;\nexport const ActionsSplitButton: React.FC = (props: IOrderTemplateActionsProps) => {\n const [isStatementRequestAdminDropdownOpen, setIsStatementRequestAdminDropdownOpen] = useState(false);\n const [renameOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = React.useState(false);\n\n const onOrderTemplateNameCancel = () => {\n context.telemetry.debug('Rename of template was canceled.');\n buttonEventReference?.focus();\n };\n\n const onRenameButtonClick = (event: React.MouseEvent) => {\n buttonEventReference = event.target as HTMLButtonElement;\n setOrderTemplateNameDialogOpen(true);\n event.preventDefault();\n };\n const onToggleDropdown1 = () => {\n setIsStatementRequestAdminDropdownOpen(!isStatementRequestAdminDropdownOpen);\n };\n const {\n data: { orderTemplate },\n resources,\n renameOrderTemplateDialogStrings,\n context\n } = props;\n\n const className = 'ms-order-template-action-bar';\n\n const popoverReference = React.createRef();\n const renderModalPopup = (\n \n );\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n\n return (\n \n {renderModalPopup}\n \n {'Options'}\n \n \n \n {resources.renameTemplateButtonText}\n \n\n \n {'Delete'}\n \n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\nimport OrderTemplateQuantity from './common/order-template-quantity';\n\nexport interface IOrderTemplateLineProps extends ProductListLine {\n orderTemplateLine: IOrderTemplateLineViewModel;\n productListLine: ProductListLine;\n price?: ProductPrice;\n context: ICoreContext;\n productUrl: string;\n imageSettings?: IImageSettings;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n isQuantityDisabledForUpdate?: boolean;\n handlers: {\n onAddToBag(product: SimpleProduct, quantity: number, itemKey: string, catalogId?: number | undefined): void;\n onRemoveItem(line: IOrderTemplateLineViewModel): void;\n onChangeQuantity(orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps): void;\n onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void;\n };\n resources: {\n selectOneRowText?: string;\n moreButtonText?: string;\n viewProductDetailsText?: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n inputQuantityAriaLabel: string;\n removeFromOrderTemplateLinesText: string;\n addToBagButtonText: string;\n deleteButtonText: string;\n incrementButtonAriaLabel?: string;\n decrementButtonAriaLabel?: string;\n editOrderTemplateLineQuantityError?: string;\n unavailableProductErrorMessage?: string;\n outOfStockProductErrorMessage?: string;\n };\n index: number;\n isMobile: boolean;\n productQuantityView?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n toggleDetailsDisplayed(props: IOrderTemplateLineProps): void;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n catalogs?: ProductCatalog[];\n error?: string;\n shouldDisable?: boolean;\n}\n\nexport interface IOrderTemplateLineViewProps {\n key?: string;\n productImage: React.ReactNode;\n productPrice?: React.ReactNode;\n addToBagButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productName?: string;\n productNumber?: React.ReactNode;\n productInfo?: React.ReactNode;\n productLabel?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n productQuantity?: number;\n productQuantityView?: React.ReactNode;\n productListId?: string;\n selectLine?: React.ReactNode;\n popUp?: JSX.Element;\n extraActionsPopup?: JSX.Element | null | undefined;\n isMobile?: boolean;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalog?: React.ReactNode;\n disabled?: boolean;\n}\n\ninterface IEventHandlerFactory {\n getAddToBag(): (event: React.MouseEvent) => void;\n getRemoveItem(): (event: React.MouseEvent) => void;\n}\n\nconst OrderTemplateLineActions = (props: IOrderTemplateLineProps): IEventHandlerFactory => {\n const { orderTemplateLine, productListLine, quantity, handlers } = props;\n const { LineId, CatalogId } = productListLine;\n const { onAddToBag, onRemoveItem } = handlers;\n\n return {\n getAddToBag: () => (event: React.MouseEvent) => {\n LineId &&\n orderTemplateLine.fullProduct &&\n onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId, CatalogId);\n },\n getRemoveItem: () => (event: React.MouseEvent) => LineId && onRemoveItem(props.orderTemplateLine)\n };\n};\n\ninterface IPopupProps extends IOrderTemplateLineProps {\n addButtonClassName: string;\n removeButtonClassName: string;\n}\n\nconst PopUp = (props: IPopupProps): JSX.Element | null => {\n const { addToBagButtonText, removeFromOrderTemplateLinesText, moreButtonText, viewProductDetailsText } = props.resources;\n const [showMobile, setShowMobile] = useState(false);\n const componentClassName = 'ms-table';\n\n const getViewHandler = () => (event: React.MouseEvent) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n \n \n {showMobile && (\n \n \n View\n \n {getActionButton(\n props.isMobile,\n props.removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n {getActionButton(\n props.isMobile,\n props.addButtonClassName,\n addToBagButtonText,\n OrderTemplateLineActions(props).getAddToBag()\n )}\n \n )}\n \n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n {isMobile ? buttonText : ''}\n \n);\n\nconst getDesktopActionButton = (\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent) => void\n): React.ReactNode => (\n \n {buttonText}\n \n);\n/**\n * On Select line function.\n * @param orderTemplateLine -Order template line.\n * @param input -Order template line props.\n * @returns Set on select order template.\n */\nconst onSelectLineHandler = (orderTemplateLine: IOrderTemplateLineViewModel, input: IOrderTemplateLineProps) => (\n event: React.ChangeEvent\n) => {\n orderTemplateLine.isChecked = !orderTemplateLine.isChecked;\n\n input.handlers.onSelect(orderTemplateLine, event.target.checked);\n};\n\nexport const OrderTemplateLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | null => {\n const {\n orderTemplateLine,\n productListLine,\n price,\n context,\n imageSettings,\n quantity,\n resources,\n isMobile,\n isMultipleCatalogFeatureEnabledInHq\n } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n const { removeFromOrderTemplateLinesText, addToBagButtonText, selectOneRowText } = resources;\n if (!product) {\n return null;\n }\n\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const addButtonClassName = input.isMobile ? 'ms-table__row-links-add' : 'ms-order-template-table-line__product-add-button';\n const removeButtonClassName = input.isMobile ? 'ms-table__row-links-delete' : 'ms-order-template-table-line__product-remove-button';\n\n return {\n isMobile,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogFeatureEnabledInHq,\n selectLine: (\n \n \n \n \n ),\n key: LineId!,\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'ms-order-template-table-line__product-image',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: product && (\n <>\n {ItemId}\n {input.error !== 'NONE' ? (\n {_renderProductError(input)}\n ) : (\n undefined\n )}\n >\n ),\n productUnitOfMeasure: price ? (\n {UnitOfMeasure || price.UnitOfMeasure}\n ) : (\n undefined\n ),\n productListId: LineId!,\n removeButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(\n input.isMobile,\n removeButtonClassName,\n removeFromOrderTemplateLinesText,\n OrderTemplateLineActions(input).getRemoveItem()\n ),\n productQuantityView: {_generateQuantity(input, LineId!)},\n productQuantity: quantity,\n addToBagButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(input.isMobile, addButtonClassName, addToBagButtonText, OrderTemplateLineActions(input).getAddToBag()),\n extraActionsPopup:\n !isMobile && isMultipleCatalogFeatureEnabledInHq ? (\n \n ) : (\n undefined\n ),\n popUp: ,\n disabled: input.shouldDisable\n };\n};\n\nconst ExtraActionsPopup = (props: IPopupProps): JSX.Element | null => {\n const [showActions, setShowActions] = useState(false);\n const toggle = React.useCallback(() => {\n setShowActions(!showActions);\n }, [showActions]);\n\n const className = 'ms-order-template-table-line__extra-actions-cell';\n const actionsContainerClassName = `${className}__actions-container`;\n return (\n \n \n {showActions && (\n \n {getDesktopActionButton(\n 'ms-order-template-table-lines__products-add-button',\n 'Add to bag',\n OrderTemplateLineActions(props).getAddToBag()\n )}\n {getDesktopActionButton(\n 'ms-order-template-table-lines__products-remove-button',\n 'Remove item',\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n \n )}\n \n );\n};\n\nexport const OrderTemplateMobileLineView = (input: IOrderTemplateLineProps): IOrderTemplateLineViewProps | undefined => {\n const { orderTemplateLine, productListLine, price, context, imageSettings, isMultipleCatalogFeatureEnabledInHq } = input;\n const product = orderTemplateLine.fullProduct;\n const { LineId, UnitOfMeasure } = productListLine;\n if (!product) {\n return;\n }\n const { ItemId, PrimaryImageUrl } = product.ProductDetails;\n const fallbackImage = getFallbackImageUrl(\n ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n\n return {\n productLineCatalog: isMultipleCatalogFeatureEnabledInHq && renderProductCatalog(input),\n productImage: _renderProductImage(\n 'thumbnail',\n context,\n product.ProductDetails.Name!,\n PrimaryImageUrl,\n fallbackImage,\n imageSettings\n ),\n productInfo: renderProductInfo(input),\n productPrice: price && _renderPrice(input),\n productNumber: ItemId,\n productUnitOfMeasure: UnitOfMeasure || price?.UnitOfMeasure,\n productQuantityView: _generateQuantity(input, LineId!)\n };\n};\n\nexport interface IOrderTemplateProductQuantityViewProps {\n ContainerProps: INodeProps;\n input: React.ReactNode;\n}\n\n/**\n * On Change function.\n * @param onChangeQuantity -On change quantity function.\n * @param itemKey -String.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onChangeHandler = (\n onChangeQuantity: (orderTemplateLineId: string, quantity: number, props?: IOrderTemplateLineProps | undefined) => void,\n itemKey: string,\n props: IOrderTemplateLineProps\n) => (newValue: number) => {\n if (onChangeQuantity) {\n onChangeQuantity(itemKey, newValue, props);\n }\n};\n\nconst _generateQuantity = (props: IOrderTemplateLineProps, itemKey: string): React.ReactNode => {\n const { handlers, resources, quantity } = props;\n const { onChangeQuantity } = handlers;\n return (\n \n );\n};\n\nexport const _renderProductImage = (\n className: string,\n context: ICoreContext,\n heading: string,\n image?: string,\n fallbackImage?: string,\n imageSettings?: IImageSettings\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n};\n\nexport const renderProductCatalog = (props: IOrderTemplateLineProps) => {\n const catalogId = props.productListLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.catalogs)) {\n return null;\n }\n\n const catalog = props.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return {catalog.Name};\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n \n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IOrderTemplateLineProps): (string | undefined)[] => {\n const { orderTemplateLine } = props;\n\n if (!orderTemplateLine.fullProduct || !orderTemplateLine.fullProduct.ProductDetails.Dimensions) {\n return [];\n }\n\n return orderTemplateLine.fullProduct.ProductDetails.Dimensions.map(dimension => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n return dimension.DimensionValue.Value;\n });\n};\n\nconst _renderProductError = (props: IOrderTemplateLineProps) => {\n const { error, resources } = props;\n\n if (!error) {\n return '';\n }\n\n const errorMessages = {\n OOS: resources.outOfStockProductErrorMessage,\n UNASSORTED: resources.unavailableProductErrorMessage,\n NONE: ''\n };\n\n return errorMessages[error];\n};\n\nexport const renderProductInfo = (props: IOrderTemplateLineProps): React.ReactNode | undefined => {\n const { orderTemplateLine, productUrl } = props;\n const name = orderTemplateLine.fullProduct?.ProductDetails.Name;\n\n const dimensions = _renderProductDimensions(props);\n if (!orderTemplateLine.fullProduct) {\n return [];\n }\n\n const productName = productUrl ? (\n \n {name}\n \n ) : (\n {name}\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n \n {productName}\n {dimensionsLine}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateLinesStatus } from '../order-template';\n\nexport interface IOrderTemplateLinesStatusMessageProps {\n className?: string;\n errorType: orderTemplateLinesStatus;\n text?: string;\n}\n\nexport const OrderTemplateLinesStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return {text};\n case 'FAILED':\n return {text};\n case 'LOADING':\n default:\n return {text};\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions:\n orderTemplateResult &&\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n \n \n {this.state.userMessage}\n \n \n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText,\n productLineCatalogName\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n productLineCatalogName: productLineCatalogName\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\n telemetryContent={this.telemetryContent}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\n const catalogId = productLine.productListLine.CatalogId;\n await this._addItemToBag(product, quantity, itemKey, catalogId);\n } else {\n await this._addItemToBag(product, quantity, itemKey);\n }\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(\n orderTemplate: OrderTemplate,\n isMultipleCatalogFeatureEnabledInHq: boolean\n ): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n isMultipleCatalogFeatureEnabledInHq,\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n const isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\n ?.IsEnabled || false;\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n } = this.props.resources;\n\n const { context, telemetry, data } = this.props;\n const { catalogs } = data;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n error: line.error,\n shouldDisable: line.shouldDisable,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\n : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogs: catalogs && catalogs.result\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // This method is used to update the product url with the catalogId\n private readonly _updateProductUrlCatalog = (\n productDetails: SimpleProduct,\n context: ICoreContext,\n catalogId: number | undefined\n ): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const absoluteUrl = new URL(productUrl, window.location.href);\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return absoluteUrl.href;\n }\n\n return productUrl;\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = async (\n product: SimpleProduct,\n quantity: number,\n itemKey: string,\n catalogId?: number | undefined\n ): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity,\n catalogId\n };\n\n await cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else {\n switch (result.substatus) {\n case 'MAXQUANTITY':\n if (context.app.config.maxQuantityForCartLineItem) {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace(\n '{maxQuantity}',\n context.app.config.maxQuantityForCartLineItem.toString()\n ) || defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n } else {\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\n this.setState({\n itemKey,\n userMessage: defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n case 'INVOICEINCART': {\n this.setState({\n itemKey,\n userMessage: result.errorDetails?.LocalizedMessage || addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n default:\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n }\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n if (StringExtensions.isNullOrWhitespace(error.message)) {\n this.setState({\n itemKey,\n userMessage: error.message,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else {\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n }\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isMultipleCatalogFeatureEnabledInHq =\n featureStates.find(\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n line.productListLine.CatalogId = catalogId;\n }\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n \n \n {paginationPreviousText}\n \n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n \n {paginationNextText}\n \n \n );\n };\n}\n\nexport default OrderTemplateLines;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n ProductPriceForSelectedProductsInput,\n validateCatalogId,\n getProductPriceForSelectedProducts\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productPrices: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || [],\n productPrices: this.productPrices || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n const discountIds = this.props.config.productCollection.discountIds;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const productPrices = this.state.productPrices;\n\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n \n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(\n item,\n index,\n productPrices ? productPrices.find(p => p.ProductId === item.RecordId) : undefined\n );\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n (recommendation || discountIds) &&\n shouldDisplaySeeAllButton &&\n (ArrayExtensions.hasElements(updatedProducts) || this.props.config.productCollection.listType === 'promotional')\n ? this._getSeeAllButton(headingLabel, recommendation, discountIds)\n : undefined,\n resources: resources\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n let productPrices = this.state.productPrices;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n if (this.props.config.productCollection.listType === 'promotional') {\n productPrices = await getProductPriceForSelectedProducts(\n new ProductPriceForSelectedProductsInput(products.filter(p => !p.IsMasterProduct).map(p => p.RecordId)),\n this.props.context.actionContext\n );\n\n this.setState({ productPrices: productPrices });\n }\n };\n\n private readonly _getProduct = (\n product: ProductSearchResult,\n index: number,\n productPrice?: ProductPrice\n ): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param headingLabel - Heading label.\n * @param recommendation - Recommendation.\n * @param discountIds - Discount Ids.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (headingLabel: string, recommendation?: string, discountIds?: string[]): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n if (!recommendation && !discountIds) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n\n if (discountIds) {\n // see all button for promotion page\n url.searchParams.set('discountIds', discountIds.toString());\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n } else if (recommendation) {\n // See all button for recommendation\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n }\n\n return (\n \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\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 * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n ChannelInventoryConfiguration,\n ProductRefinerSource,\n ProductRefinerValue,\n ProductSearchCriteria,\n SearchSuggestion,\n SearchSuggestionCriteria\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n getInventoryConfigurationAsync,\n getSearchSuggestionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\n/**\n * Returns inventory in stock sortable refiner value.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @param isInStock - The flag indicating whether is getting in-stock refiner or out-of-stock refiner.\n * @returns Refiners.\n */\nconst getInventorySortableRefinerValue = (\n channelInventoryConfiguration: ChannelInventoryConfiguration,\n isInStock: boolean\n): ProductRefinerValue | undefined => {\n if (channelInventoryConfiguration && channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId) {\n return {\n RefinerRecordId: channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId,\n DataTypeValue: AttributeDataType.TrueFalse,\n LeftValueBoundString: isInStock ? 'true' : 'false',\n RightValueBoundString: isInStock ? 'true' : 'false',\n UnitText: '',\n RowNumber: 0,\n Count: 0,\n ExtensionProperties: [],\n RefinerSourceValue: ProductRefinerSource.Attribute\n };\n }\n return undefined;\n};\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise {\n const catalogId = getCatalogId(ctx.requestContext);\n let productSearchCriteria: ProductSearchCriteria = {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n };\n\n if (ctx.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: ctx });\n const isInStockRefiner = true;\n const inventoryRefinerValue = getInventorySortableRefinerValue(channelInventoryConfiguration, isInStockRefiner);\n\n if (inventoryRefinerValue) {\n productSearchCriteria = {\n ...productSearchCriteria,\n Refinement: [inventoryRefinerValue]\n };\n }\n }\n\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: productSearchCriteria,\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: >getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return {categoryAutoSuggestionHeading};\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n \n \n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n \n \n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n // eslint-disable-next-line react/no-danger\n return ;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\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\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n \n ) : (\n \n );\n\n const submitBtnNode = !disableSubmitSearch && ;\n\n const cancelBtNoden = (\n \n );\n\n return { input: inputNode, cancelBtn: cancelBtNoden, submitBtn: submitBtnNode };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchKeywordSuggestProps {\n searchKeywordSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface ISearchKeywordViewProps {\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * KeywordSuggestionsComponent.\n * @param props\n */\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\n const { suggestions, hitPrefix, hitSuffix } = props;\n\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n const reactNodes: React.ReactNode[] = [];\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\n });\n\n return { text: reactNodes };\n};\n\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = ariaLabel;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n \n \n {_generateLink(item, hitPrefix, hitSuffix, props) &&\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\n \n \n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\n const { searchPageURL, searchQsp } = props;\n\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n if (searchQsp && formattedLink) {\n queryUrl.searchParams.set(searchQsp, formattedLink);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n // eslint-disable-next-line react/no-danger\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 { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchLabelProps {\n isSearchFormExpanded: boolean;\n searchLabelClass: string;\n searchLabelArialLabel: string;\n searchtext: string;\n searchCollapsedLabel: React.RefObject;\n hideSearchLabel?: boolean;\n telemetryContent: ITelemetryContent;\n handleCancelSearchChange(): void;\n}\n\nexport const LabelComponent = (props: ISearchLabelProps) => {\n const {\n searchLabelClass,\n searchLabelArialLabel,\n isSearchFormExpanded,\n searchtext,\n searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange,\n telemetryContent\n } = props;\n const payLoad = getPayloadObject('click', telemetryContent, searchtext, '');\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n\n return (\n \n \n {!hideSearchLabel && (\n \n {searchtext}\n \n )}\n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return {productAutoSuggestionHeading};\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n return (\n // eslint-disable-next-line react/no-danger\n \n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n \n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n return (\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 { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component, ISearchState>}\n */\nclass Search extends React.Component, ISearchState> {\n private readonly searchTextInput: React.RefObject;\n\n private readonly searchCollapsedLabel: React.RefObject;\n\n private readonly formReference: React.RefObject;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject;\n\n private readonly autoSuggestResultDiv: React.RefObject;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return ;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { DimensionTypes } from '@msdyn365-commerce-modules/retail-actions';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\nexport interface IRefineItemData {\n sourceValue?: number;\n swatchImageUrl?: string;\n swatchColorHexCode?: string;\n refinerItemId: number;\n dataTypeValue?: number;\n name: string;\n label: string;\n count?: number;\n isChecked: boolean;\n refineItemUrl?: string;\n minValue?: string;\n maxValue?: string;\n dimensionType?: DimensionTypes;\n rowNumber?: number;\n unitText?: string;\n updatedSliderMaxValue?: string;\n updatedSliderMinValue?: string;\n}\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return dataTypeValue === AttributeDataType.Currency || dataTypeValue === AttributeDataType.Decimal;\n}\n\n/**\n * Checks if the data type value corresponds to a range type integer.\n * @param dataTypeValue\n */\nexport function isRangeTypeForInteger(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Checks if the data type value corresponds to a custom input box Range.\n * @param dataTypeValue\n */\nexport function isCustomRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy\n): boolean {\n return (\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion?.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n );\n}\n\n/**\n * Checks if the selectedRefinementCriterion is siingle type with API va;ues or custom type.\n * If custom type then RowNumber is null\n * @param dataTypeValue\n */\nexport function isSingleSelectRangeTypeIntegerSelected(\n selectedRefinementCriterion: ProductRefinerValue,\n productRefinerValue: ProductRefinerValue\n): boolean {\n return (\n productRefinerValue.LeftValueBoundString === selectedRefinementCriterion?.LeftValueBoundString &&\n productRefinerValue.RightValueBoundString === selectedRefinementCriterion?.RightValueBoundString &&\n selectedRefinementCriterion?.RowNumber !== undefined &&\n selectedRefinementCriterion?.RowNumber !== null &&\n selectedRefinementCriterion !== undefined\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriterion: ProductRefinerValue,\n parent?: IProductRefinerHierarchy\n): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n // Distinguish by displaytype also\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n ((parent?.DisplayTemplateValue === DisplayTemplate.Range\n ? isRangeType(refinementCriterion.DataTypeValue)\n : isRangeTypeForInteger(refinementCriterion.DataTypeValue)) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getIntegerRangeName(productRefinerValue: ProductRefinerValue): string {\n let rangeValue = '';\n\n if (productRefinerValue.LeftValueBoundString === '' && productRefinerValue.RightValueBoundString !== '') {\n rangeValue = `< ${productRefinerValue.RightValueBoundLocalizedString || productRefinerValue.RightValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString === '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `> ${productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}`;\n } else if (productRefinerValue.RightValueBoundString !== '' && productRefinerValue.LeftValueBoundString !== '') {\n rangeValue = `${productRefinerValue.LeftValueBoundLocalizedString ||\n productRefinerValue.LeftValueBoundString} - ${productRefinerValue.RightValueBoundString ||\n productRefinerValue.RightValueBoundString}`;\n }\n return rangeValue;\n}\n\n/**\n * Get input without formatting.\n * @param input - Input string.\n * @returns - Returns number.\n */\nexport function getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNumber = Number(input);\n if (!Number.isNaN(inputAsNumber)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n // const reverseLookupResult = formattedPriceReverseLookup.get(input);\n // return reverseLookupResult || input;\n return input;\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n\n // Keeping only itemToggled value for integer-range type in currentRefinementCriteria\n if (\n itemToggleNotification.parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n itemToggleNotification.parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n currentRefinementCriteria = currentRefinementCriteria.filter(r => {\n return r.RefinerRecordId !== itemToggleNotification.productRefinerValue.RefinerRecordId;\n });\n }\n\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (\n isMatchingRefinementCriterion(\n itemToggleNotification.productRefinerValue,\n selectedCriterion,\n itemToggleNotification.parentProductRefinerHierarchy\n )\n ) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion, itemToggleNotification.parentProductRefinerHierarchy)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AttributeDataType, DisplayTemplate, ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { getIntegerRangeName, isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n rangeDisplayType?: number | undefined;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\n const rangeParentDisplay = refinerHierarchy.filter(p => p.RecordId === selectedRefiner.RefinerRecordId);\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner,\n // parameter to store Display Template type\n rangeDisplayType: rangeParentDisplay[0]?.DisplayTemplateValue || undefined\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n \n {items.length > 0 && label && {label}}\n \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n // Get range value for Range display and integer type only (not for Integer with TextBox(4) display)\n const rangeInteger =\n item.value.DataTypeValue === AttributeDataType.Integer &&\n item.rangeDisplayType &&\n item.rangeDisplayType === DisplayTemplate.Range &&\n item.value.RefinerRecordId !== 0;\n const newIntRange = rangeInteger\n ? item.key\n : item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString || item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString;\n return (\n \n \n {newIntRange}\n \n \n \n );\n })}\n \n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n \n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n let parent: IProductRefinerHierarchy | undefined;\n if (refinerHierarchy && refinerHierarchy.find) {\n parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\n );\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n // Adding integer range format\n if (\n productRefinerValue.DataTypeValue === AttributeDataType.Integer &&\n parent?.DisplayTemplateValue === DisplayTemplate.Range &&\n productRefinerValue.RefinerRecordId !== 0\n ) {\n refinerValueName = getIntegerRangeName(productRefinerValue);\n return refinerValueName;\n }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || 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 * as React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n \n \n {` `}\n {text}\n {` `}\n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n \n \n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n \n \n \n {heading}\n {renderProductTitle(product?.Name)}\n \n \n );\n};\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string,\n fallbackImage?: string,\n context?: IRequestContext\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings,\n fallBackSrc: fallbackImage\n };\n return ;\n}\n\nfunction renderProductTitle(title?: string): JSX.Element | null {\n return {title};\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 ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, id } = props;\n return (\n \n {text}\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \n \n {props.resources.modalCloseButtonText}\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 { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n \n {products.map((product: ProductSearchResult, index: number) => (\n \n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n \n ))}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n \n \n {refineItemCommonProps.minLabel}\n \n \n \n {refineItemCommonProps.maxLabel}\n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n \n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { getIntegerRangeName, isSingleSelectRangeTypeIntegerSelected } from './utilities';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n if (\n parentProductRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n parentProductRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n const rangeValue = getIntegerRangeName(productRefinerValue);\n return (\n \n \n \n {rangeValue}\n {productRefinerValue.Count !== undefined && ` (${productRefinerValue.Count})`}\n \n \n \n );\n } else {\n return (\n \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n {/* eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string. */}\n {productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}\n {productRefinerValue.Count !== undefined && ` (${productRefinerValue.Count})`}\n \n \n \n );\n }\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \n \n );\n }\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isUndefined } from 'lodash';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport { IRefineItemState } from './refine-item';\nimport { isCustomRangeTypeIntegerSelected } from './utilities';\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\nexport type RangeRefineItemInputType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemInputProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n rangeType: RangeRefineItemInputType;\n\n /**\n * The telemetry content\n */\n onToggle(notfication: Readonly): void;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemInputState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n invalidData: boolean | undefined;\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItemInput extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n public constructor(props: IRangeRefineItemInputProps) {\n super(props);\n this._changeMinInputRange = this._changeMinInputRange.bind(this);\n this._changeMaxInputRange = this._changeMaxInputRange.bind(this);\n this._applyCustom = this._applyCustom.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n let initialMin = '';\n let initialMax = '';\n const { selectedRefinementCriterion, parentProductRefinerHierarchy } = this.props;\n if (selectedRefinementCriterion) {\n initialMin = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.LeftValueBoundString || '';\n initialMax = isCustomRangeTypeIntegerSelected(selectedRefinementCriterion, parentProductRefinerHierarchy)\n ? ''\n : selectedRefinementCriterion?.RightValueBoundString || '';\n }\n\n this.state = {\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n invalidData: !(initialMin && initialMax),\n isChecked: false\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemInputProps, nextState: IRangeRefineItemInputState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n nextState.invalidData = !(nextState.selectedMin && nextState.selectedMax);\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemInputProps): void {\n if (previousProps !== this.props) {\n this.updateInputRangerProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n return undefined;\n }\n\n // /**\n // * Function to update slider props.\n // */\n private updateInputRangerProps(): void {\n const selectedMin = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.LeftValueBoundString;\n const selectedMax = !isUndefined(this.props.selectedRefinementCriterion?.RowNumber)\n ? ''\n : this.props.selectedRefinementCriterion?.RightValueBoundString;\n this.setState({ selectedMin, selectedMax });\n }\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n return (\n \n \n \n \n {' - '}\n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n \n \n \n {'Apply'}\n \n \n \n \n );\n }\n\n private _applyCustom(event: React.MouseEvent): void {\n const selectedMinValue = this._getInputWithoutFormatting(this.state.selectedMin || '');\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const { onToggle, parentProductRefinerHierarchy } = this.props;\n const max = this.state.selectedMax;\n\n const maxNum = max ? Number(max) : undefined;\n const productRefinerValue: ProductRefinerValue = {\n RefinerRecordId: parentProductRefinerHierarchy.Values[0].RefinerRecordId,\n LeftValueBoundString: this.state.selectedMin,\n RightValueBoundString: this.state.selectedMax,\n DataTypeValue: parentProductRefinerHierarchy.DataTypeValue,\n RefinerSourceValue: parentProductRefinerHierarchy.Values[0].RefinerSourceValue\n };\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true\n });\n }\n }\n\n private _changeMinInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMin: event.target.value.trim()\n });\n }\n\n private _changeMaxInputRange(event: React.ChangeEvent): void {\n this.setState({\n selectedMax: event.target.value.trim()\n });\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n DisplayTemplate,\n ProductRefinerSource,\n ProductRefinerValue,\n RefinerType\n} from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeTypeForInteger } from './utilities';\nimport RangeRefineItemInput from './range-refine-item-input';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n const isExpanded = this.props.isExpandedOnInitialLoad;\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (\n productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range\n ) {\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n // Check if is of integer range type\n if (isRangeTypeForInteger(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n let selectedRefinementCriterion: ProductRefinerValue | undefined = {};\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n {productRefinerHierarchy.DataTypeValue === AttributeDataType.Integer &&\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range && (\n \n )}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n \n \n \n );\n });\n return {listItems};\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\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 ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput,\n ObjectExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { action, computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n IFullProductsSearchResultsWithCount,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n await this._updateVariantAvailability();\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n await this._updateVariantAvailability();\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n /**\n * Get products variants dimension availabilities.\n * @returns Void.\n */\n private readonly _updateVariantAvailability = async (): Promise => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n await this._getProductsDimensionsAvailabilities();\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n @action\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query?.skip &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && ;\n const titleCount = ;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n }\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n \n );\n });\n const categoryLinkSeparator = ;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n\n const dropdown = (\n \n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = !ObjectExtensions.isNullOrUndefined(listPageState?.currentPageNumber)\n ? listPageState!.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n \n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n return (\n index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n \n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation }\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n \n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.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 private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n \n
{description}
{product.Description}
{this._resultCountText()}
\n {renderResultCountText()}\n
{text}
{heading}