{"version":3,"file":"static/js/12.50340dac9ef02748b9a6.chunk.js","mappings":"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","sources":["webpack://msdyn365.commerce.online/./src/components/cartlineitem-variant.component.tsx?53a2","webpack://msdyn365.commerce.online/./src/components/master-prod-display-name.tsx?6719","webpack://msdyn365.commerce.online/./src/modules/smwe-search/actions/get-auto-suggest-suggestions.ts?511b","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.keywordsuggest.tsx?378f","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.productsuggest.tsx?3dda","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.categorysuggest.tsx?c893","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.form.tsx?b365","webpack://msdyn365.commerce.online/./src/modules/smwe-search/components/smwe-search.label.tsx?6de6","webpack://msdyn365.commerce.online/./src/modules/smwe-search/smwe-search.tsx?d385","webpack://msdyn365.commerce.online/./src/modules/smwe-search/smwe-search.view.tsx?12de","webpack://msdyn365.commerce.online/./src/themes/blend/views/smwe-search.view.tsx?7dc6","webpack://msdyn365.commerce.online/./src/themes/colsolare/views/smwe-search.view.tsx?6357","webpack://msdyn365.commerce.online/./src/themes/columbiacrest/views/smwe-search.view.tsx?353b","webpack://msdyn365.commerce.online/./src/themes/conn-creek/views/smwe-search.view.tsx?1efd","webpack://msdyn365.commerce.online/./src/themes/elicit/views/smwe-search.view.tsx?c5b3","webpack://msdyn365.commerce.online/./src/themes/emp/views/smwe-search.view.tsx?8bf9","webpack://msdyn365.commerce.online/./src/themes/enoteca/views/smwe-search.view.tsx?81b8","webpack://msdyn365.commerce.online/./src/themes/erath/views/smwe-search.view.tsx?4746","webpack://msdyn365.commerce.online/./src/themes/fth/views/smwe-search.view.tsx?3d00","webpack://msdyn365.commerce.online/./src/themes/generazioni/views/smwe-search.view.tsx?c1ed","webpack://msdyn365.commerce.online/./src/themes/intrinsic-wine-co/views/smwe-search.view.tsx?9431","webpack://msdyn365.commerce.online/./src/themes/north-star/views/smwe-search.view.tsx?b6a2","webpack://msdyn365.commerce.online/./src/themes/patzhall/views/smwe-search.view.tsx?7d90","webpack://msdyn365.commerce.online/./src/themes/spring-valley-vineyard/views/smwe-search.view.tsx?93ce","webpack://msdyn365.commerce.online/./src/themes/stagsleap/views/smwe-search.view.tsx?f319","webpack://msdyn365.commerce.online/./src/themes/stemichelle-new/views/smwe-search.view.tsx?cf97","webpack://msdyn365.commerce.online/./src/themes/stemichelle/views/smwe-search.view.tsx?d041","webpack://msdyn365.commerce.online/./src/themes/wine-estates/views/smwe-search.view.tsx?c04d","webpack://msdyn365.commerce.online/./src/modules/carousel/carousel.tsx?80d4","webpack://msdyn365.commerce.online/./src/modules/carousel/carousel.view.tsx?d82f","webpack://msdyn365.commerce.online/./src/validate-cart.ts?cd50","webpack://msdyn365.commerce.online/./src/Common/get-product.ts?0a21","webpack://msdyn365.commerce.online/./src/modules/cart-icon/components/flyout-cart-line-items.tsx?f2c4","webpack://msdyn365.commerce.online/./src/modules/cart-icon/utils/get-products-in-mini-cart.ts?3c15","webpack://msdyn365.commerce.online/./src/modules/cart-icon/cart-icon.tsx?4ae8","webpack://msdyn365.commerce.online/./src/modules/cart-icon/cart-icon.view.tsx?f9dd","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?840c","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8ca3","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?f7e7","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?9df9","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/address-detail-item.tsx?d9a2","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-date.tsx?bd12","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-grp.tsx?3a15","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-radio.tsx?045f","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/get-line-items.tsx?e389","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/components/checkout-shipping-cartlines-images.tsx?ab7c","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/checkout-delivery-options.tsx?6764","webpack://msdyn365.commerce.online/./src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?1e75","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-form.tsx?4540","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-item.tsx?d186","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/get-list.tsx?a3f3","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/components/title.tsx?3b2f","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/checkout-gift-card.tsx?8fc3","webpack://msdyn365.commerce.online/./src/modules/checkout-gift-card/checkout-gift-card.view.tsx?d99f","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?cadb","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?e02b","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?895a","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/checkout-loyalty.tsx?8b4b","webpack://msdyn365.commerce.online/./src/modules/checkout-loyalty/checkout-loyalty.view.tsx?b79f","webpack://msdyn365.commerce.online/./src/modules/checkout/checkout.tsx?6737","webpack://msdyn365.commerce.online/./src/modules/checkout/checkout.view.tsx?e4cc","webpack://msdyn365.commerce.online/./src/modules/checkout/components/alert.tsx?cb1e","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-invoice-payment-summary.tsx?9549","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-line-items.tsx?92f8","webpack://msdyn365.commerce.online/./src/modules/checkout/components/get-order-summary.tsx?4a81","webpack://msdyn365.commerce.online/./src/modules/checkout/components/guided-card.tsx?58e0","webpack://msdyn365.commerce.online/./src/modules/checkout/components/guided-form.tsx?f018","webpack://msdyn365.commerce.online/./src/modules/checkout/components/place-order-button.tsx?9b41","webpack://msdyn365.commerce.online/./src/modules/checkout/methods/checkout.ts?7b6b","webpack://msdyn365.commerce.online/./src/modules/checkout/methods/place-order.ts?5aa0","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/components/get-form.tsx?e249","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/components/get-item.tsx?4862","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/gift-card-balance-check.tsx?d1f8","webpack://msdyn365.commerce.online/./src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?a0c9","webpack://msdyn365.commerce.online/./src/modules/fabrikam/views/components/cartlineitem.component.tsx?eb8c","webpack://msdyn365.commerce.online/./src/invoice-summary-lineitem.tsx?5f61","webpack://msdyn365.commerce.online/./src/order-summary-lineitem.tsx?8a98","webpack://msdyn365.commerce.online/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://msdyn365.commerce.online/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack://msdyn365.commerce.online/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://msdyn365.commerce.online/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://msdyn365.commerce.online/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://msdyn365.commerce.online/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://msdyn365.commerce.online/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://msdyn365.commerce.online/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://msdyn365.commerce.online/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://msdyn365.commerce.online/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://msdyn365.commerce.online/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://msdyn365.commerce.online/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://msdyn365.commerce.online/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://msdyn365.commerce.online/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://msdyn365.commerce.online/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://msdyn365.commerce.online/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://msdyn365.commerce.online/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://msdyn365.commerce.online/./src/modules/order-template/order-template.tsx?4ecb","webpack://msdyn365.commerce.online/./src/modules/order-template/order-template.view.tsx?a45e","webpack://msdyn365.commerce.online/./src/modules/product-comparison-preview/product-comparison-preview.tsx?39f6","webpack://msdyn365.commerce.online/./src/modules/product-comparison-preview/product-comparison-preview.view.tsx?28cb","webpack://msdyn365.commerce.online/./src/modules/product-comparison/base/product-specification.tsx?75ed","webpack://msdyn365.commerce.online/./src/modules/product-comparison/base/remove-from-comparison-button.tsx?1d8c","webpack://msdyn365.commerce.online/./src/modules/product-comparison/product-comparison.tsx?4f74","webpack://msdyn365.commerce.online/./src/modules/product-comparison/product-comparison.view.tsx?a0a9","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/close-button.tsx?063b","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/links.tsx?2587","webpack://msdyn365.commerce.online/./src/modules/promo-banner/components/text.tsx?782b","webpack://msdyn365.commerce.online/./src/modules/promo-banner/promo-banner.tsx?9ee9","webpack://msdyn365.commerce.online/./src/modules/promo-banner/promo-banner.view.tsx?7f77","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?de21","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?ca97","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?8701","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-form.tsx?5cbb","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-product.ts?187e","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?69b3","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?cd92","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?7cbc","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/quick-order-grid.tsx?fddf","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/components/utilities.ts?1806","webpack://msdyn365.commerce.online/./src/modules/quick-order-grid/quick-order-grid.view.tsx?f941","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/utilities.ts?8569","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/error-message.tsx?6302","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/link.tsx?52c2","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/modal.tsx?d78e","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/refine-item.tsx?a594","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/range-refine-item-input.tsx?09aa","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/separator.tsx?4ea6","webpack://msdyn365.commerce.online/./src/modules/search-result-container/components/title.tsx?c269","webpack://msdyn365.commerce.online/./src/modules/search-result-container/search-result-container.tsx?7500","webpack://msdyn365.commerce.online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://msdyn365.commerce.online/./src/search-state.ts?dd10","webpack://msdyn365.commerce.online/./src/modules/social-share-item/social-share-item.tsx?bbcb","webpack://msdyn365.commerce.online/./src/modules/social-share-item/social-share-item.view.tsx?2d3e","webpack://msdyn365.commerce.online/./src/modules/wishlist-items/components/wishlist-items-dimensions.tsx?15c5","webpack://msdyn365.commerce.online/./src/modules/wishlist-items/components/wishlist-item.tsx?d2da","webpack://msdyn365.commerce.online/./src/modules/wishlist-items/components/wishlist-items-status-message.tsx?cdb3","webpack://msdyn365.commerce.online/./src/modules/wishlist-items/wishlist-items.tsx?df8b","webpack://msdyn365.commerce.online/./src/modules/wishlist-items/wishlist-items.view.tsx?4d80"],"sourcesContent":["/*!\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 { ArrayExtensions, getFallbackImageUrl, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { CartLine as CartLineType, SalesLine as SalesLineType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classNames from 'classnames';\r\nimport * as React from 'react';\r\nimport { MasterProdDisplay } from './master-prod-display-name';\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs\r\n */\r\nexport interface ICartlineResourceString {\r\n /** Display string for discount label */\r\n discountStringText: string;\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n /** String for amount key */\r\n amountString?: string;\r\n /** Display string for quantity label */\r\n quantityDisplayString: string;\r\n /** Display string for quantity label */\r\n inputQuantityAriaLabel: string;\r\n /** Aria label for the decrement button in quanitity component */\r\n decrementButtonAriaLabel?: string;\r\n /** Aria label for the increment button in quanitity component */\r\n incrementButtonAriaLabel?: string;\r\n /** original text screenreader */\r\n originalPriceText: string;\r\n /** current text screenreader */\r\n currentPriceText: string;\r\n /** shipping Charges Text */\r\n shippingChargesText: string;\r\n}\r\n\r\ninterface ICartLineData {\r\n cartLine: CartLineType | SalesLineType;\r\n product?: SimpleProduct;\r\n}\r\n\r\nexport type CartLineDisplayMode = 'DEFAULT' | 'COMPACT';\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n /** The flag to change the quantity component from interactible to static */\r\n disableQuantityInteractivity?: boolean;\r\n /** The primary image url */\r\n primaryImageUrl?: string;\r\n /** The product url */\r\n productUrl?: string;\r\n /** GridSettings for the product image in cartLine */\r\n gridSettings: IGridSettings;\r\n /** ImageSettings for the product image in cartLine */\r\n imageSettings: IImageSettings;\r\n /** Boolean flag to indicate if the item is out of stock */\r\n isOutOfStock?: boolean;\r\n /** Flag to make quantity section editable */\r\n isQuantityEditable?: boolean;\r\n /** Max quantity for line item */\r\n maxQuantity?: number;\r\n /** Current quantity for line item */\r\n currentQuantity?: number;\r\n /** Resource string for the component */\r\n resources: ICartlineResourceString;\r\n /** SalesLine flag */\r\n isSalesLine?: boolean;\r\n /** Error message to show in place of quantity */\r\n errorMessage?: string;\r\n /** Display mode to use */\r\n displayMode?: CartLineDisplayMode;\r\n /** Inventory information label */\r\n inventoryInformationLabel?: string;\r\n /** Inventory information class name */\r\n inventoryLabelClassName?: string;\r\n /** Flag to show/hide shipping charges for line items */\r\n showShippingChargesForLineItems?: boolean;\r\n /** Boolean flag to indicate if cart state status is ready */\r\n isCartStateReady?: boolean;\r\n /** Chanel Delivery Option configuration is from api. */\r\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n /** Quantity onChange callback */\r\n quantityOnChange?(cartLine: CartLineType, newQuantity: number): void;\r\n}\r\n\r\ninterface IDimensionStrings {\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n /** String for amount key */\r\n amountString?: string;\r\n}\r\n\r\nconst CartLineItemFunctions = {\r\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\r\n if (!Product || !Product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return Product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === 1) {\r\n return (\r\n
\r\n {DimensionStrings.colorString}\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 2) {\r\n return (\r\n
\r\n {DimensionStrings.configString}\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 3) {\r\n return (\r\n
\r\n {DimensionStrings.sizeString}\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
\r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 4) {\r\n return (\r\n
\r\n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
\r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\r\n return null;\r\n }\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
\r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}:\r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n \r\n {discountLine.DiscountCost && (\r\n <>\r\n \r\n \r\n )}\r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountLine.Percentage : ''}%)`}\r\n \r\n
\r\n );\r\n });\r\n },\r\n renderInventoryLabel: (props: ICartLineProps) => {\r\n if (!props.inventoryInformationLabel) {\r\n return null;\r\n }\r\n const inventoryCssName = props.inventoryLabelClassName ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}` : 'msc-cart-line__product-inventory-label';\r\n return (\r\n {props.inventoryInformationLabel}\r\n );\r\n },\r\n renderShippingLabel: (props: ICartLineProps) => {\r\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\r\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\r\n const cartline = props.data.cartLine;\r\n let hasShippingMethod = false;\r\n if(channelDeliveryOptionConfig !== undefined) {\r\n hasShippingMethod = !!cartline.DeliveryMode && channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode) ? true : false;\r\n } else {\r\n hasShippingMethod = !!cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode ? true : false;\r\n }\r\n if (!hasShippingMethod) {\r\n return undefined;\r\n }\r\n\r\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\r\n\r\n if (shippingChargeLines.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\r\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\r\n }, 0);\r\n\r\n const priceComponent = (\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {priceComponent}\r\n \r\n \r\n );\r\n },\r\n renderOtherCharges: (props: ICartLineProps) => {\r\n const cartline = props.data.cartLine;\r\n const otherCharges = cartline.ChargeLines?.filter((chargeline) => !chargeline.IsShipping);\r\n\r\n return otherCharges && otherCharges.map((otherCharge, key) => {\r\n return otherCharge && otherCharge.CalculatedAmount ? (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n ) : '';\r\n }) || undefined;\r\n }\r\n};\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { product, cartLine } = props.data;\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString,\r\n amountString: resources.amountString\r\n };\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const imageSettings = props.imageSettings;\r\n imageSettings.cropFocalRegion = !ObjectExtensions.isNullOrUndefined(imageSettings);\r\n const { inputQuantityAriaLabel } = props.resources;\r\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\r\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\r\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\r\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\r\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\r\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\r\n const prodAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n const productName = product?.Name || cartLine.Description;\r\n\r\n const _generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
\r\n \r\n {props.errorMessage}\r\n
\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const _updateQuantity = (event: React.ChangeEvent) => {\r\n if (props.quantityOnChange) {\r\n props.quantityOnChange(props.data.cartLine, parseInt(event.target.value, 10));\r\n }\r\n };\r\n\r\n const _generateMenu = (quantity: number) => {\r\n const nodes = [];\r\n\r\n for (let i = 1; i <= quantity; i++) {\r\n\r\n // tslint:disable-next-line:react-a11y-role-has-required-aria-props\r\n nodes.push();\r\n }\r\n\r\n return nodes;\r\n };\r\n\r\n const _generateSelectMenu = (quantity: number, currentQuantity: number | undefined): JSX.Element => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n const _generateQuantityAndPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n\r\n const errorMessage = _generateErrorMessage();\r\n\r\n if (props.isOutOfStock) {\r\n if (errorMessage) {\r\n return [errorMessage];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n if (props.isQuantityEditable && !props.data.product?.IsGiftCard) {\r\n if (errorMessage) {\r\n nodes.push(errorMessage);\r\n }\r\n nodes.push(_generateSelectMenu(props.maxQuantity || 10, props.currentQuantity));\r\n } else {\r\n nodes.push(\r\n
\r\n \r\n {errorMessage}\r\n {props.data.cartLine.Quantity}\r\n
\r\n );\r\n }\r\n\r\n nodes.push(\r\n
\r\n \r\n
\r\n );\r\n\r\n return nodes;\r\n };\r\n\r\n if (props.displayMode === 'COMPACT') {\r\n const reducedDimensions: string = product?.Dimensions ? product.Dimensions.reduce(\r\n (str, productDimension) => {\r\n if (productDimension.DimensionValue && productDimension.DimensionValue.Value) {\r\n if (str) {\r\n return `${str}, ${productDimension.DimensionValue.Value}`;\r\n }\r\n\r\n return `${productDimension.DimensionValue.Value}`;\r\n }\r\n\r\n return str;\r\n },\r\n '') : '';\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n {productName}\r\n {reducedDimensions !== '' ?\r\n
{reducedDimensions}
:\r\n ''\r\n }\r\n {\r\n _generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n }\r\n\r\n let jsxName = {productName};\r\n if (product?.MasterProductId) {\r\n jsxName = ;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {jsxName}\r\n {\r\n ArrayExtensions.hasElements(productDimensions) ?\r\n
{productDimensions}
:\r\n ''\r\n }\r\n {renderDisountLines}\r\n {renderInventoryLabel}\r\n {props.showShippingChargesForLineItems &&
\r\n {renderShippingLabel}\r\n
}\r\n {renderOtherCharges}\r\n
\r\n {\r\n _generateQuantityAndPrice()\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\n// @ts-ignore\r\nexport const CartLineItemComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'CartLineItem',\r\n { component: CartLine, ...CartLineItemFunctions }\r\n);","import React from 'react';\r\nimport { ICartLineProps } from './cartlineitem.component';\r\nimport { ICartLineProps as ICheckoutCartLineProps } from './cartlineitem-variant.component';\r\nimport { getSelectedVariant, SelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\n\r\ninterface IMasterProdDisplay {\r\n masterProdId: number,\r\n variantName: string,\r\n props: ICartLineProps | ICheckoutCartLineProps\r\n}\r\nexport class MasterProdDisplay extends React.Component {\r\n constructor(props: IMasterProdDisplay) {\r\n super(props);\r\n this.state = {\r\n prodName: ''\r\n };\r\n }\r\n public componentDidMount() {\r\n const masterProductInput = new SelectedVariantInput(this.props.masterProdId, this.props.props.context.request.apiSettings.channelId);\r\n getSelectedVariant(masterProductInput, this.props.props.context.actionContext).then(masterProduct => {\r\n this.setState({ prodName: masterProduct?.Name || '' });\r\n }).catch(e => console.error(e));\r\n }\r\n\r\n public render(): JSX.Element {\r\n let name = {this.props.variantName};\r\n if (this.state.prodName !== '') {\r\n name = {this.state.prodName} - {this.props.variantName};\r\n }\r\n return name;\r\n }\r\n}\r\n\r\nexport async function getMasterProduct(masterId: number, ctx: IActionContext): Promise {\r\n const masterProductInput = new SelectedVariantInput(masterId, ctx.requestContext.apiSettings.channelId);\r\n return getSelectedVariant(masterProductInput, ctx);\r\n}","/* eslint-disable no-duplicate-imports */\r\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getSearchSuggestionsAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\n\r\n// @ts-ignore\r\nexport const enum SuggestionType {\r\n Category = 'ScopedCategory',\r\n Keyword = 'Keyword',\r\n Product = 'Product',\r\n None = 'None'\r\n}\r\n\r\n/**\r\n * Input class for auto suggest search input\r\n */\r\nexport class AutoSuggestInput implements IActionInput {\r\n public searchQuery?: string;\r\n public topResultsCount?: number;\r\n public suggestionType?: string;\r\n public hitPrefix?: string;\r\n public hitSuffix?: string;\r\n\r\n constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\r\n this.searchQuery = searchText;\r\n this.topResultsCount = top;\r\n this.suggestionType = suggestionType;\r\n this.hitPrefix = hitPrefix;\r\n this.hitSuffix = hitSuffix;\r\n }\r\n\r\n public getCacheKey = () => `AutoSuggestSearchSuggestions`;\r\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext) => {\r\n return new AutoSuggestInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a auto-suggest suggestions\r\n */\r\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\r\n // If no input is provided fail out\r\n if (!input || !input.searchQuery) {\r\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\r\n }\r\n\r\n const autosuggest: Autosuggestions = {};\r\n\r\n const autoSuggestPromises = [\r\n _getAutoSuggest(input, autosuggest, ctx),\r\n ];\r\n return Promise.all(autoSuggestPromises).then(() => {\r\n return autosuggest;\r\n });\r\n}\r\n\r\nasync function _getAutoSuggest(\r\n input: AutoSuggestInput,\r\n autosuggest: Autosuggestions,\r\n ctx: IActionContext\r\n): Promise {\r\n const searchCriteria: SearchSuggestionCriteria = {\r\n ProductSearchCriteria: {\r\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n },\r\n HitPrefix: input.hitPrefix,\r\n HitSuffix: input.hitSuffix,\r\n SuggestionType: input.suggestionType\r\n };\r\n\r\n const searchSuggestions = await getSearchSuggestionsAsync(\r\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\r\n searchCriteria\r\n );\r\n\r\n if (searchSuggestions && searchSuggestions.length > 0) {\r\n // Generate image url\r\n searchSuggestions.map(\r\n (item: SearchSuggestion) =>\r\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\r\n );\r\n\r\n autosuggest.AllSearchResults = searchSuggestions;\r\n } else {\r\n ctx.telemetry.error(`[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`);\r\n }\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\r\n action: >getSearchSuggestionsAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchKeywordSuggestProps {\r\n searchKeywordSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchKeywordViewProps {\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * KeywordSuggestionsComponent\r\n */\r\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitPrefix,\r\n hitSuffix\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\r\n });\r\n\r\n return { text: reactNodes };\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = ariaLabel;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\r\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\r\n const { searchPageURL, searchQsp } = props;\r\n\r\n const formattedLink = (suggestion.Value as string)\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n const route = searchPageURL || '';\r\n return formattedLink && formattedLink.length > 0\r\n ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${formattedLink}`\r\n : route;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, INodeProps, IPayLoad, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchProductSuggestProps {\r\n searchProductSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetry: ITelemetry;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchProductViewProps {\r\n title: React.ReactNode;\r\n items: ISearchProductItemViewProps[];\r\n}\r\n\r\nexport interface ISearchProductItemViewProps {\r\n text: React.ReactNode;\r\n thumbnail: React.ReactNode;\r\n price: React.ReactNode;\r\n LiProduct: INodeProps;\r\n AProduct: INodeProps;\r\n id: string | undefined;\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\nlet telemetryContent: ITelemetryContent | undefined;\r\n\r\n/**\r\n *\r\n * ProductSuggestionsComponent\r\n */\r\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitSuffix,\r\n hitPrefix,\r\n autoSuggestProps: {\r\n context: { actionContext },\r\n resources: { productSuggestionHeading }\r\n },\r\n moduleType,\r\n moduleId\r\n } = props;\r\n const reactNodes: ISearchProductItemViewProps[] = [];\r\n telemetryContent = props.telemetryContent;\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\r\n });\r\n\r\n const titleNode = _renderTitle(productSuggestionHeading);\r\n\r\n return { title: titleNode, items: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (productSuggestionHeading: string) => {\r\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\r\n\r\n return
  • {productAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (\r\n item: SearchSuggestion,\r\n hitPrefix: string,\r\n hitSuffix: string,\r\n actionContext: IActionContext,\r\n props: ISearchProductSuggestProps,\r\n moduleType: string,\r\n moduleId: string\r\n): ISearchProductItemViewProps => {\r\n const altText =\r\n item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n return {\r\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\r\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\r\n price:\r\n item.Id &&\r\n item.Value3 &&\r\n item.Value3.Value &&\r\n item.Value3.Value.DecimalValue &&\r\n _renderPrice(item.Value3.Value.DecimalValue, item.Value3.Value.DecimalValue, moduleId, moduleType, props),\r\n LiProduct: _getLiWrapper(),\r\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext),\r\n id: item.Id\r\n };\r\n};\r\n\r\nconst _getLiWrapper = () => {\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'li' as NodeTag\r\n };\r\n};\r\n\r\nconst _getAWrapper = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n payLoad.contentAction.recid = item.Id;\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'a' as NodeTag,\r\n 'aria-label': ariaLabel,\r\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\r\n ...attribute\r\n };\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const formattedLink = (suggestion.Value as string).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n return suggestion.Value && suggestion.Id ?\r\n getProductPageUrlSync(formattedLink,suggestion.Id as unknown as number, actionContext, undefined) : '';\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\nconst _renderPrice = (adjustedPrice: number, basePrice: number, moduleId: string, moduleType: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: { context }\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: {\r\n context: {\r\n request: { gridSettings }\r\n },\r\n config: { imageSettings }\r\n }\r\n } = props;\r\n if(imageSettings) {\r\n imageSettings.cropFocalRegion = true;\r\n }\r\n\r\n if (!suggestion || !suggestion.ImageUrl) {\r\n props.telemetry.error('Search suggestion content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=40&h=40&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=40&h=40&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=40&h=40&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true,\r\n cropFocalRegion: true\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISmweSearchData } from '../smwe-search.data';\r\nimport { ISmweSearchProps } from '../smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchCategorySuggestProps {\r\n searchCategorySuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ISmweSearchProps;\r\n searchText: string;\r\n searchRefiners: ProductRefiner[] | undefined;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchCategoryViewProps {\r\n title: React.ReactNode;\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * CategorySuggestionsComponent\r\n */\r\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\r\n const {\r\n suggestions,\r\n searchText,\r\n autoSuggestProps: {\r\n resources: { categorySuggestionHeading }\r\n }\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, props));\r\n });\r\n\r\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\r\n\r\n return { title: titleNode, text: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\r\n const categoryAutoSuggestionHeading = categorySuggestionHeading\r\n ? format(categorySuggestionHeading, searchText)\r\n : `Search \"${searchText}\" in categories`;\r\n\r\n return
  • {categoryAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\r\n const { searchText, hitPrefix, hitSuffix } = props;\r\n\r\n const splitValue = item.Value && item.Value.split('|').pop();\r\n const ariaLabel = splitValue\r\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\r\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = item.Value;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, searchText, props) && _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\r\n};\r\n\r\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n const { searchPageURL, searchQsp, searchRefiners } = props;\r\n\r\n const route = searchPageURL || '';\r\n const urlPath = `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${searchText}`;\r\n const categoryRefiners =\r\n searchRefiners &&\r\n searchRefiners.find(refiners => {\r\n return refiners.KeyName === 'Category';\r\n });\r\n const refiner =\r\n categoryRefiners &&\r\n categoryRefiners.Values &&\r\n categoryRefiners.Values.find(item => {\r\n return item.RefinerRecordId === parseInt(id, 10);\r\n });\r\n\r\n const encodedRefiner = refiner && encodeURIComponent(JSON.stringify(compressRefiners([refiner])));\r\n\r\n return encodedRefiner ? `${urlPath}&refiners=${encodedRefiner}` : urlPath;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n let formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n formattedText = formattedText.split('|').pop() || '';\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\r\n// or move this code to a common place\r\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs\r\n * @param refiners The uncompressed refiners\r\n */\r\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach((refiner) => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach((refinerKey) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchFormProps {\r\n hideSearchLabel: boolean | undefined;\r\n isSearchFormExpanded: boolean | undefined;\r\n disableSubmitSearch: boolean | undefined;\r\n searchTextInput: React.RefObject;\r\n maxChars: number;\r\n searchQsp: string;\r\n searchPlaceholder: string;\r\n query: string;\r\n ariaLabelCancel: string;\r\n ariaLabelSearch: string;\r\n ariaLabelSubmit: string;\r\n handleCancelSearchChange(): void;\r\n handleInputChange(query: string): void;\r\n}\r\n\r\nexport interface ISearchFormViewProps {\r\n label: React.ReactNode;\r\n input: React.ReactNode;\r\n submitBtn: React.ReactNode;\r\n cancelBtn: React.ReactNode;\r\n\r\n}\r\n\r\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\r\n const {\r\n searchQsp,\r\n searchPlaceholder,\r\n hideSearchLabel,\r\n isSearchFormExpanded,\r\n searchTextInput,\r\n handleInputChange,\r\n maxChars,\r\n disableSubmitSearch,\r\n handleCancelSearchChange,\r\n query,\r\n ariaLabelCancel,\r\n ariaLabelSearch,\r\n ariaLabelSubmit\r\n } = props;\r\n\r\n const onInputChange = (e: React.ChangeEvent): void => {\r\n handleInputChange(e.target.value || '');\r\n };\r\n\r\n const labelNode = ;\r\n\r\n const inputNode = !hideSearchLabel ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const submitBtnNode = !disableSubmitSearch && (\r\n \r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport classnames from 'classnames';\r\nimport { debounce } from 'lodash';\r\nimport * as React from 'react';\r\n\r\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\r\nimport {\r\n CategorySuggestionsComponent,\r\n FormComponent,\r\n ISearchCategoryViewProps,\r\n ISearchKeywordViewProps,\r\n ISearchProductViewProps,\r\n KeywordSuggestionsComponent,\r\n LabelComponent,\r\n ProductSuggestionsComponent\r\n} from './components';\r\nimport { ISmweSearchData } from './smwe-search.data';\r\nimport { ISmweSearchProps, ISuggestionTypeCriterionData } from './smwe-search.props.autogenerated';\r\n\r\nexport interface ISearchState {\r\n isSearchFormExpanded: boolean;\r\n searchText: string;\r\n searchKeywordSuggestClass: string;\r\n searchProductSuggestClass: string;\r\n searchCategorySuggestClass: string;\r\n suggestions: Autosuggestions | undefined;\r\n searchRefiners?: ProductRefiner[] | undefined;\r\n autoSuggestAriaLabel: string;\r\n isInitialState: boolean;\r\n}\r\n\r\nexport interface ISearchViewProps extends ISmweSearchProps {\r\n Search: IModuleProps;\r\n AutoSuggestAriaLabel: INodeProps;\r\n AutoSuggestAriaLabelText: string;\r\n searchText: string;\r\n AutoSuggest: INodeProps;\r\n KeywordSuggest: INodeProps;\r\n ProductSuggest: INodeProps;\r\n CategorySuggest: INodeProps;\r\n SearchForm: INodeProps;\r\n FormWrapper: INodeProps;\r\n UlKeyword: INodeProps;\r\n UlProduct: INodeProps;\r\n UlCategory: INodeProps;\r\n label: React.ReactNode;\r\n form: React.ReactNode;\r\n autosuggestKeyword?: ISearchKeywordViewProps;\r\n autosuggestProduct?: ISearchProductViewProps;\r\n autosuggestCategory?: ISearchCategoryViewProps;\r\n callbacks: {\r\n handleCancelSearchChange(): void;\r\n };\r\n isSearchFormExpanded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Search module\r\n * @extends {React.Component, ISearchState>}\r\n */\r\nclass Search extends React.Component, ISearchState> {\r\n private searchTextInput: React.RefObject;\r\n private searchCollapsedLabel: React.RefObject;\r\n private formReference: React.RefObject;\r\n private maxChars: number;\r\n private inputSuggestionType?: ISuggestionTypeCriterionData[];\r\n private topResultsCount?: number;\r\n private hitPrefix: string = '{';\r\n private hitSuffix: string = '}';\r\n private waitTime: number = 500;\r\n private autoSuggestResultScreenReaderDiv: React.RefObject;\r\n private autoSuggestResultDiv: React.RefObject;\r\n private searchFormClass: string;\r\n private searchLabelClass: string;\r\n private telemetryContent: ITelemetryContent;\r\n // @ts-ignore\r\n private cancellabelDebounce: debounce;\r\n\r\n constructor(props: ISmweSearchProps) {\r\n super(props);\r\n this.searchTextInput = React.createRef();\r\n this.searchCollapsedLabel = React.createRef();\r\n this.autoSuggestResultScreenReaderDiv = React.createRef();\r\n this.autoSuggestResultDiv = React.createRef();\r\n this.formReference = React.createRef();\r\n this.state = {\r\n isSearchFormExpanded: false,\r\n searchText: '',\r\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\r\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\r\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\r\n suggestions: undefined,\r\n searchRefiners: undefined,\r\n autoSuggestAriaLabel: '',\r\n isInitialState: true\r\n };\r\n this.maxChars =\r\n (this.props.context &&\r\n this.props.context.app &&\r\n this.props.context.app.config &&\r\n this.props.context.app.config.searchInputMaxLength) ||\r\n 50;\r\n this.inputSuggestionType = this.props.config && this.props.config.suggestionTypeCriterion;\r\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\r\n this.searchFormClass = 'ms-search__form';\r\n this.searchLabelClass = 'ms-search__label';\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\r\n window && window.addEventListener('keyup', this._keyup);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\r\n window && window.removeEventListener('keyup', this._keyup, false);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n const {\r\n config: { hideSearchLabel }\r\n } = this.props;\r\n const { isSearchFormExpanded, isInitialState } = this.state;\r\n\r\n if (!this.props.context.request.params.isEditor) {\r\n if (!hideSearchLabel && isSearchFormExpanded) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else if (!isInitialState) {\r\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\r\n }\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity max-func-body-length\r\n public render(): JSX.Element {\r\n const {\r\n context,\r\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel},\r\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, className = '' }\r\n } = this.props;\r\n\r\n const {\r\n isSearchFormExpanded,\r\n searchText,\r\n searchKeywordSuggestClass,\r\n searchProductSuggestClass,\r\n searchCategorySuggestClass,\r\n suggestions,\r\n searchRefiners\r\n } = this.state;\r\n\r\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\r\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\r\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\r\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\r\n\r\n const keywordSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(\r\n i => i.SuggestionType === SuggestionType.Keyword || i.SuggestionType === SuggestionType.None\r\n );\r\n const productSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Product);\r\n const categorySuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Category);\r\n\r\n const viewProps: ISearchViewProps = {\r\n ...(this.props as ISmweSearchProps),\r\n\r\n Search: {\r\n moduleProps: this.props,\r\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`,\r\n },\r\n AutoSuggestAriaLabel: {\r\n tag: 'div',\r\n className: 'msc-autoSuggest__screen-reader',\r\n 'aria-live': 'assertive',\r\n ref: this.autoSuggestResultScreenReaderDiv\r\n },\r\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\r\n searchText: this.state.searchText,\r\n AutoSuggest: {\r\n ref: this.autoSuggestResultDiv,\r\n className: 'ms-search__autoSuggest'\r\n },\r\n KeywordSuggest: {\r\n className: searchKeywordSuggestClass\r\n },\r\n ProductSuggest: {\r\n className: searchProductSuggestClass\r\n },\r\n CategorySuggest: {\r\n className: searchCategorySuggestClass\r\n },\r\n SearchForm: {\r\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`,id:'SearchFormModal'\r\n },\r\n FormWrapper: {\r\n tag: 'form',\r\n ref: this.formReference,\r\n className: 'ms-search__searchForm',\r\n 'aria-label': 'Search',\r\n name: 'searchForm',\r\n role: 'search',\r\n action: searchURL,\r\n autoComplete: 'off',\r\n onSubmit: this._handleSubmit\r\n },\r\n UlKeyword: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__keywordResults-items', className)\r\n },\r\n UlProduct: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__productResults-items', className)\r\n },\r\n UlCategory: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__categoryResults-items', className)\r\n },\r\n label:LabelComponent({\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\r\n searchtext: searchtext,\r\n searchLabelArialLabel: searchLabelArialLabel,\r\n searchCollapsedLabel: this.searchCollapsedLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n telemetryContent: this.telemetryContent\r\n }),\r\n form: FormComponent({\r\n ariaLabelCancel: cancelBtnAriaLabel,\r\n ariaLabelSearch: searchBtnAriaLabel,\r\n ariaLabelSubmit: submitBtnAriaLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n searchTextInput: this.searchTextInput,\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n disableSubmitSearch: disableSubmitSearch,\r\n handleInputChange: this._handleInputChange,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n maxChars: this.maxChars,\r\n searchQsp: searchQsp,\r\n searchPlaceholder: searchPlaceholder,\r\n query: searchText\r\n }),\r\n autosuggestKeyword:\r\n searchText && searchText.length > 0 && keywordSuggestions && keywordSuggestions.length > 0\r\n ? KeywordSuggestionsComponent({\r\n searchKeywordSuggestClass: searchKeywordSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: keywordSuggestions,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestProduct:\r\n searchText && searchText.length > 0 && productSuggestions && productSuggestions.length > 0\r\n ? ProductSuggestionsComponent({\r\n searchProductSuggestClass: searchProductSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: productSuggestions,\r\n telemetry: this.props.telemetry,\r\n moduleType: this.props.typeName,\r\n moduleId: this.props.id,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestCategory:\r\n searchText && searchText.length > 0 && categorySuggestions && categorySuggestions.length > 0\r\n ? CategorySuggestionsComponent({\r\n searchCategorySuggestClass: searchCategorySuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: categorySuggestions,\r\n searchRefiners: searchRefiners,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n callbacks: {\r\n handleCancelSearchChange: this._handleCancelSearchChange\r\n },\r\n isSearchFormExpanded: this.state.isSearchFormExpanded\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _focusOutTarget = (e: any): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n e.target.closest('.ms-search') === null\r\n ) {\r\n this._clearAutoSuggestState();\r\n }\r\n };\r\n\r\n private _keyup = (e: KeyboardEvent): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\r\n this._clearAutoSuggestState();\r\n } else if(this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\r\n if(this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n }\r\n\r\n if (!((this.formReference.current && this.formReference.current.contains(e.target as unknown as Node)) ||\r\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains(e.target as unknown as Node)))) {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n if(this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n }\r\n };\r\n\r\n private _clearAutoSuggestState = (): void => {\r\n const {\r\n context: { actionContext },\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\r\n searchState.searchText = '';\r\n searchState.defaultBasicSearchUrl = '';\r\n searchState.searchQueryStringParameter = '';\r\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\r\n this.searchTextInput.current.value = '';\r\n }\r\n\r\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\r\n };\r\n\r\n private _handleInputChange = (query: string): void => {\r\n if (!query || query.length < this.maxChars) {\r\n this.setState({ searchText: query });\r\n }\r\n\r\n if (this.cancellabelDebounce) {\r\n this.cancellabelDebounce.cancel();\r\n }\r\n\r\n const {\r\n telemetry,\r\n context,\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (context) {\r\n if (query && query.length > 0) {\r\n if (query.length > this.maxChars) {\r\n return;\r\n }\r\n\r\n this.cancellabelDebounce = debounce(() => {\r\n getSearchSuggestionsAction(\r\n new AutoSuggestInput(\r\n query,\r\n this.topResultsCount,\r\n this._getSuggestionType(this.inputSuggestionType),\r\n this.hitPrefix,\r\n this.hitSuffix\r\n ),\r\n context.actionContext\r\n )\r\n .then(results => {\r\n this._getSearchRefiners(query)\r\n .then(refiners => {\r\n this.setState({ suggestions: results, searchRefiners: refiners,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results) });\r\n })\r\n .catch(error => {\r\n this.setState({ suggestions: results, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results) });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get refiners results');\r\n });\r\n })\r\n .catch(error => {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get auto suggest results');\r\n });\r\n }, this.waitTime);\r\n\r\n setTimeout(() => {\r\n this.cancellabelDebounce();\r\n }, 0);\r\n\r\n searchState.searchText = query;\r\n } else {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined });\r\n searchState.searchText = '';\r\n }\r\n context.actionContext.update(createSearchStateInput(searchState), searchState);\r\n }\r\n };\r\n\r\n private _getSuggestionType = (suggestionTypes?: ISuggestionTypeCriterionData[]): string => {\r\n if (suggestionTypes && suggestionTypes.length > 0) {\r\n const distinctSuggestionTypes: string[] = [];\r\n suggestionTypes && suggestionTypes.forEach((suggestionTypeItem, index) => {\r\n suggestionTypeItem.SuggestionType && distinctSuggestionTypes.push(suggestionTypeItem.SuggestionType.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType.slice(1));\r\n });\r\n return distinctSuggestionTypes.join(',');\r\n }\r\n return 'Keyword, Product, ScopedCategory';\r\n };\r\n\r\n private async _getSearchRefiners(searchText: string): Promise {\r\n const { actionContext: ctx } = this.props.context;\r\n return getProductSearchRefinersAsync(\r\n { callerContext: ctx },\r\n {\r\n SearchCondition: searchText,\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n }\r\n );\r\n }\r\n\r\n private _handleSubmit = (\r\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\r\n ): void => {\r\n const {\r\n config: { disableSubmitSearch },\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { searchQueryStringParameter }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\r\n e.preventDefault();\r\n\r\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else {\r\n const searchQsp = searchQueryStringParameter || 'q';\r\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n document.location.href = searchURL;\r\n }\r\n };\r\n\r\n private _handleCancelSearchChange = (): void => {\r\n const { isSearchFormExpanded, suggestions } = this.state;\r\n\r\n if (!isSearchFormExpanded) {\r\n this.setState({\r\n isSearchFormExpanded: true,\r\n searchText: '',\r\n isInitialState: false\r\n });\r\n } else {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n this.setState({ isSearchFormExpanded: false });\r\n }\r\n };\r\n\r\n private _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n if (route && route.length > 0) {\r\n return query && query.length > 0 ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${qsp}=${query}` : route;\r\n }\r\n return '';\r\n };\r\n\r\n private _setAutoSuggestResultCount = (result?: Autosuggestions) => {\r\n const itemCount = result?.AllSearchResults?.filter(i=>i.SuggestionType === SuggestionType.Product);\r\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\r\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\r\n const suggestResultString = `${this.props.resources.autoSuggestFoundMessage} with ${itemCount?.length} results`;\r\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\r\n ariaLiveRegion.innerText = result && (result.AllSearchResults && result.AllSearchResults.length > 0) ? suggestResultString : emptyResultString;\r\n ariaLiveRegion.setAttribute('aria-live','assertive');\r\n return ariaLiveRegion.innerText;\r\n } else {\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default Search;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\r\nimport { ISearchViewProps } from './smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n form,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n React.useEffect(() => {\r\n document.body.addEventListener('keydown', (e: any) => handleKeyDown(e));\r\n });\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper, props)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst handleKeyDown = (e: React.KeyboardEvent): void => {\r\n const showClass = document.getElementsByClassName('ms-search__form bx-show');\r\n if (showClass) {\r\n //Fetch node list from which required elements could be grabbed as needed.\r\n const focusable = document.getElementById('SearchFormModal');\r\n const elements = focusable?.querySelectorAll('input, a, select, textarea, li, [tabindex]:not([tabindex=\"-1\"]), button') as NodeListOf;\r\n const firstFocusable = elements[0];\r\n const lastFocusable = elements[elements.length - 1];\r\n\r\n if (e.ctrlKey || e.altKey) {\r\n return;\r\n }\r\n\r\n const keys = {\r\n 9: () => { //9 = TAB\r\n if (e.shiftKey && e.target === firstFocusable) {\r\n lastFocusable.focus();\r\n console.log('Last Focusable');\r\n e.preventDefault();\r\n }\r\n\r\n if (e.target === lastFocusable) {\r\n firstFocusable.focus();\r\n console.log('First Focusable');\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n if (keys[e.keyCode]) {\r\n keys[e.keyCode]();\r\n }\r\n }\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps, props: ISearchViewProps) => {\r\n const {\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n } = props;\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n /* eslint-disable react/no-unknown-property */\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n return (\r\n \r\n {label}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.submitBtn}\r\n {form.label}\r\n {form.input}\r\n {form.cancelBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price !== 0 && (
    {item.price}
    )}\r\n
    \r\n
    \r\n );\r\n })}\r\n
    \r\n
    \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from '../../../modules/smwe-search/./components';\r\nimport { ISearchViewProps } from '../../../modules/smwe-search/./smwe-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n form,\r\n SearchForm,\r\n FormWrapper,\r\n label\r\n } = props;\r\n\r\n React.useEffect(() => {\r\n document.body.addEventListener('keydown', (e: any) => handleKeyDown(e));\r\n });\r\n\r\n return (\r\n \r\n {label}\r\n \r\n {_renderForm(form as ISearchFormViewProps, FormWrapper, props)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst handleKeyDown = (e: React.KeyboardEvent): void => {\r\n const showClass = document.getElementsByClassName('ms-search__form bx-show');\r\n if (showClass) {\r\n //Fetch node list from which required elements could be grabbed as needed.\r\n const focusable = document.getElementById('SearchFormModal');\r\n const elements = focusable?.querySelectorAll('input, a, select, textarea, li, [tabindex]:not([tabindex=\"-1\"]), button') as NodeListOf;\r\n const firstFocusable = elements[0];\r\n const lastFocusable = elements[elements.length - 1];\r\n\r\n if (e.ctrlKey || e.altKey) {\r\n return;\r\n }\r\n\r\n const keys = {\r\n 9: () => { //9 = TAB\r\n if (e.shiftKey && e.target === firstFocusable) {\r\n lastFocusable.focus();\r\n console.log('Last Focusable');\r\n e.preventDefault();\r\n }\r\n\r\n if (e.target === lastFocusable) {\r\n firstFocusable.focus();\r\n console.log('First Focusable');\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n if (keys[e.keyCode]) {\r\n keys[e.keyCode]();\r\n }\r\n }\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, FormWrapper: INodeProps, props: ISearchViewProps) => {\r\n const {\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n } = props;\r\n return (\r\n \r\n {form.submitBtn}\r\n
    \r\n
    \r\n {form.label}\r\n {form.input}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n
    \r\n {form.cancelBtn}\r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n /* eslint-disable react/no-unknown-property */\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.thumbnail}\r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","/*!\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 { Carousel } from '@msdyn365-commerce/components';\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { ICarouselViewProps } from './carousel';\n\n/**\n * Returns item slots.\n * @returns Array of item slots.\n * @param props -Props.\n */\nconst retrieveItems = (props: ICarouselViewProps): React.ReactNode[] => {\n let items = [];\n items = props.slots && props.slots.content && props.slots.content.length > 0 ? props.slots.content : [];\n return items;\n};\nconst CarouselView: React.FC = props => (\n \n \n \n);\n\nexport default CarouselView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent, ICartlineResourceString } from '@msdyn365-commerce/components';\nimport MsDyn365, { ICoreContext, IGridSettings, IImageSettings, ITelemetry, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n OrgUnitLocation,\n ProductAvailableQuantity,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, IProductInventoryInformation } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\n\nexport interface IFlyoutCartLineItemsProps {\n cartlines: CartLine[];\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\n /**\n * GridSettings for the product image in cartline\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartline\n */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n removeButtonText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n maxCartlineQuantity: number;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isQuantityLimitsFeatureEnabled: boolean;\n\n outOfStockThreshold: number;\n isStockCheckEnabled: boolean;\n telemetryContent?: ITelemetryContent;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\nexport interface IFlyoutCartLineItemViewProps {\n cartline: React.ReactNode;\n remove: React.ReactNode;\n storeLocation: React.ReactNode;\n hasError: boolean;\n\n data: {\n product: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n outOfStockThreshold: number,\n productAvailability?: ProductAvailableQuantity\n): number => {\n if (isStockCheckEnabled) {\n if (\n !productAvailability ||\n !productAvailability.AvailableQuantity ||\n productAvailability.AvailableQuantity <= 0 ||\n productAvailability.AvailableQuantity <= outOfStockThreshold\n ) {\n return 0;\n }\n return productAvailability.AvailableQuantity - outOfStockThreshold;\n }\n\n return 0;\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 is 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\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};\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct,\n props: IFlyoutCartLineItemsProps,\n index: number,\n foundProductAvailability?: ProductAvailableQuantity,\n foundProductDeliveryOptions?: ProductDeliveryOptions\n): IFlyoutCartLineItemViewProps => {\n const { imageSettings, gridSettings, id, typeName, context, resources, removeButtonText, removeItemClickHandler } = props;\n\n const availableQuantityInStock = _getCartItemAvailableQuantity(\n props.isStockCheckEnabled,\n props.outOfStockThreshold,\n 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 // Check if the product is service or not by product type\n const isServiceItem = product.ItemTypeValue === ReleasedProductType.Service;\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.RemoveCartItem);\n const removeCartItemAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n\n let productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\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\n return {\n data: {\n product,\n cartline\n },\n hasError: !isServiceItem && props.isStockCheckEnabled ? cartline.Quantity! > maxQuantity : false,\n cartline: (\n \n ),\n remove: (\n \n {removeButtonText}\n \n ),\n storeLocation: _renderStoreLocation(cartline, props)\n };\n};\n\nconst _renderDeliveryLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): string | undefined => {\n let deliverylocation;\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartLine.ProductId;\n });\n }\n const delivery = foundProductDeliveryOption?.DeliveryOptions?.find(option => option.Code === cartLine.DeliveryMode);\n const location = delivery?.Description;\n\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n if (location) {\n deliverylocation = `${location}, ${orgUnitName}`;\n } else {\n deliverylocation = `${orgUnitName}`;\n }\n } else {\n deliverylocation = props.resources.shippingText;\n }\n return deliverylocation;\n};\n\nconst _renderStoreLocation = (cartLine: CartLine | null | undefined, props: IFlyoutCartLineItemsProps): JSX.Element | null => {\n if (cartLine && cartLine.FulfillmentStoreId) {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, props.orgUnitLocations);\n\n if (orgUnitName) {\n return (\n
    \n {orgUnitName}\n
    \n );\n }\n }\n\n return null;\n};\n\nconst _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\nconst _assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: IFlyoutCartLineItemsProps\n): IFlyoutCartLineItemViewProps[] | null => {\n const reactNodes: IFlyoutCartLineItemViewProps[] = [];\n\n if (!products || products.length === 0) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\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 if (props.productAvailabilites && props.productAvailabilites.length > 0) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n return productAvailability.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n }\n let foundProductDeliveryOption;\n if (props.productDeliveryOptions && props.productDeliveryOptions.length > 0) {\n foundProductDeliveryOption = props.productDeliveryOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n if (product) {\n reactNodes.push(\n _assembleNode(\n cartline,\n product,\n props,\n index,\n foundProductAvailability?.ProductAvailableQuantity,\n foundProductDeliveryOption\n )\n );\n }\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n */\n\nexport const FlyoutCartLineItems = (props: IFlyoutCartLineItemsProps) => {\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 { IActionContext } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ActiveCartProductsInput,\n getActiveCartProductsAction,\n getAvailabilitiesForCartLineItems,\n getDeliveryOptionsForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n ProductDeliveryOptionsForCartLineItems\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IMiniCartData entity interface.\n */\nexport interface IMiniCartData {\n products?: SimpleProduct[];\n productAvailabilites?: IProductInventoryInformation[];\n deliveryOptions?: ProductDeliveryOptions[];\n}\n\nexport const createInput = () => {\n return new ActiveCartProductsInput();\n};\n\n/**\n * Calls the Retail API and returns a mini cart data.\n * @param ctx\n * @param cartState\n */\nexport async function getMiniCartData(ctx: IActionContext, cartState: ICartState): Promise {\n const miniCartData: IMiniCartData = {};\n\n const cart = cartState.cart;\n\n // If there are cart lines, make call to get products\n // If there are invocie linese, then there is no products, so don't make call to get products\n if (cart && cart.CartLines && cart.CartLines.length > 0 && !cartState.hasInvoiceLine) {\n await getActiveCartProductsAction(new ActiveCartProductsInput(), ctx)\n .then(products => {\n if (products) {\n miniCartData.products = products;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getAvailabilitiesForCartLineItems(new ProductAvailabilitiesForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(availableQuantity => {\n if (availableQuantity) {\n miniCartData.productAvailabilites = availableQuantity;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n\n await getDeliveryOptionsForCartLineItems(new ProductDeliveryOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(deliveryOptions => {\n if (deliveryOptions) {\n miniCartData.deliveryOptions = deliveryOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n throw new Error('[getActiveCartWithProdcuts]Unable to hydrate cart with product information');\n });\n }\n\n return miniCartData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToCartBehavior, CartIconComponent } from '@msdyn365-commerce/components';\nimport { getUrlSync, IDictionary, IImageSettings, msdyn365Commerce, TelemetryEvent } from '@msdyn365-commerce/core';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n CartLineValidationResultsByLineId,\n OrgUnitLocation\n} from '@msdyn365-commerce/retail-proxy';\nimport { validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { ArrayExtensions, validateCartLinesInventory } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n UncontrolledTooltip,\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';\n\nimport { ICartIconData } from './cart-icon.data';\nimport { cartLinesSortOrder, ICartIconProps } from './cart-icon.props.autogenerated';\nimport { FlyoutCartLineItems, IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\nimport { getMiniCartData, IMiniCartData } from './utils/get-products-in-mini-cart';\n\nexport interface IMiniCartState {\n miniCartData: IMiniCartData;\n orgUnitLocations?: OrgUnitLocation[];\n isQuantityLimitsFeatureEnabled: boolean;\n isCartValid: boolean;\n}\n\nexport interface ICartIconViewProps extends ICartIconProps {\n className: string;\n cartIcon: React.ReactNode;\n FlyoutContainer?: INodeProps;\n CartlinesWrapper: INodeProps;\n miniCartWrapper: INodeProps;\n miniCartItemWrapper: INodeProps;\n cartlines?: IFlyoutCartLineItemViewProps[];\n flyoutTitle: React.ReactNode;\n totalPrice: React.ReactNode;\n checkoutAsGuestButton?: React.ReactNode;\n checkoutAsSignInUserButton?: React.ReactNode;\n goToCartButton?: React.ReactNode;\n waitingComponent?: React.ReactNode;\n isCartLoading: boolean;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n}\n\n/**\n *\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass CartIcon extends React.Component, IMiniCartState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly checkoutBySignInAttributes: IDictionary | undefined;\n\n private readonly checkoutByGuestAttributes: IDictionary | undefined;\n\n private readonly viewShoppingBagAttributes: IDictionary | undefined;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private lastValidatedCartVersion: number | undefined;\n\n constructor(props: ICartIconProps) {\n super(props);\n this.state = {\n miniCartData: {},\n isCartValid: true,\n isQuantityLimitsFeatureEnabled: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const payload = getPayloadObject(TelemetryEvent.CheckOut, this.telemetryContent, TelemetryConstant.Checkout);\n this.checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.GuestCheckout;\n this.checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n\n payload.contentAction.etext = TelemetryConstant.ViewShoppingBag;\n this.viewShoppingBagAttributes = getTelemetryAttributes(this.telemetryContent, payload);\n }\n\n public async componentDidMount(): Promise {\n const context = this.props.context.actionContext;\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n this.setState({\n miniCartData: await getMiniCartData(context, this.props.data.cart.result!)\n });\n }\n );\n await this._setQuantityLimitsFeatureFlag();\n\n this.setState({\n orgUnitLocations: this.props.data.orgUnitLocations?.result\n });\n\n this._validateCart();\n }\n\n public componentDidUpdate(prevProps: ICartIconProps): void {\n this._validateCart();\n }\n\n public shouldComponentUpdate(nextProps: ICartIconProps, nextState: IMiniCartState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- disabling the complexity for this method for now as its causing lot of other warnings\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n config: { enableHoverCart, isAnonymousCheckout },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n context,\n resources\n } = this.props;\n\n const cart = (this.props.data.cart && this.props.data.cart.result) || undefined;\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const cartUrl = getUrlSync('cart', 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 // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- check config.\n const shouldShowMiniCart =\n cart?.isProductAddedToCart && this.props.context.app.config.addToCartBehavior === AddToCartBehavior.showMiniCart;\n const hasInvoiceLine = cart?.hasInvoiceLine;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const cartLines = this._getCartLines();\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.state.miniCartData.productAvailabilites ?? [],\n this.props.context.actionContext,\n this.state.miniCartData.products ?? [],\n emailDeliveryModeCode\n );\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const includeFlyout = this.props.data.cart && this.props.data.cart.status === 'SUCCESS' && enableHoverCart;\n const totalItemsInCart = cart?.totalItemsInCart ? cart.totalItemsInCart : 0;\n const goToCartButtonText = resources.goToCartButtonTitle.replace('{count}', totalItemsInCart.toString());\n const flyoutTitle = resources.flyoutTitle;\n const flyoutTooltip = {\n tag: UncontrolledTooltip,\n shouldShowMiniCart,\n placement: 'bottom-end',\n hideArrow: true,\n className: 'ms-cart-icon__flyout-container',\n trigger: 'hover',\n displayMode: 'FLYOUT',\n target: id,\n shouldShowCloseButton: true,\n cartPageUrl: cartUrl,\n hideAriaHidden: true\n };\n\n // If there are invoice lines, don't update mini cart price\n const price = (cart && !cart.hasInvoiceLine && cart.cart.TotalAmount) || undefined;\n const priceString = price\n ? resources.totalPriceFormatString.replace('{price}', context.cultureFormatter.formatCurrency(price))\n : '';\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n const viewProps = {\n ...this.props,\n cartIcon: (\n \n ),\n cartlines: cartLines,\n FlyoutContainer: includeFlyout ? flyoutTooltip : undefined,\n CartlinesWrapper: {\n className: 'ms-cart-icon__cart-lines'\n },\n miniCartWrapper: {\n className: classnames('ms-cart-icon'),\n id: this.props.id\n },\n miniCartItemWrapper: {\n className: classnames('msc-cart-lines-item')\n },\n\n // If there are invoice lines, don't update mini cart checkout button\n // Checkout button will display by default to maintain backward compatibility. When Anonymous user checkout is enabled &&\n // user is authenticated then we will show the checkout button otherwise we will show the guest checkout button.\n checkoutAsSignInUserButton:\n !isCartEmpty && !hasInvoiceLine && (!isAnonymousCheckout || isAuthenticated) ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n isAnonymousCheckout && !isCartEmpty && !isAuthenticated ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n goToCartButton: (\n \n {goToCartButtonText}\n \n ),\n checkoutBlockedDueToUnavailableFunds: null,\n flyoutTitle: {flyoutTitle},\n totalPrice:
    {priceString}
    \n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _validateCart(): void {\n const {\n data: { cart }\n } = this.props;\n const cartVersion = cart.result?.cart?.Version ?? undefined;\n if (this.lastValidatedCartVersion === cartVersion) {\n return;\n }\n\n this.lastValidatedCartVersion = cartVersion; // This field is populated to block concurrent requests\n\n if (this.state.isQuantityLimitsFeatureEnabled) {\n validateCartAsync(cart, this.props.telemetry, this.props.context)\n .then((result: CartLineValidationResultsByLineId | undefined) => {\n this.setState({ isCartValid: !ArrayExtensions.hasElements(result?.ValidationResultsPairs) });\n })\n .catch(() => {\n this.setState({ isCartValid: false });\n });\n } else {\n this.setState({ isCartValid: true });\n }\n }\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 (msdyn365Commerce.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Sort cartline items.\n * @param cartlines - Cartlines to be sorted.\n * @param sortOrder - Ascending or descending.\n * @returns - Sorted cartlines.\n */\n private readonly getSortedCartLines = (cartlines: CartLine[], sortOrder?: cartLinesSortOrder): CartLine[] => {\n const lines: CartLine[] = [...cartlines];\n const zero: number = 0;\n\n if (sortOrder === cartLinesSortOrder.descending) {\n return lines.sort((item1, item2) => (item2.LineNumber ?? zero) - (item1.LineNumber ?? zero));\n }\n return lines.sort((item1, item2) => (item1.LineNumber ?? zero) - (item2.LineNumber ?? zero));\n };\n\n private _getCartLines(): IFlyoutCartLineItemViewProps[] | null {\n const {\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources\n } = this.props;\n\n const imageSettings = this._getImageSettings(config.imageSettings);\n const cart = this.props.data.cart && this.props.data.cart.result;\n\n // Cart-icon could be placed in each page\n // so we check cart content to reduce number of RS calls\n return this.state.miniCartData.products && cart && cart.cart.CartLines && cart.cart.CartLines.length > 0\n ? FlyoutCartLineItems({\n cartlines: this.getSortedCartLines(cart.cart.CartLines, config.cartLinesSortOrder),\n products: this.state.miniCartData.products,\n productAvailabilites: this.state.miniCartData.productAvailabilites,\n productDeliveryOptions: this.state.miniCartData.deliveryOptions,\n imageSettings,\n outOfStockThreshold: this.props.context.app.config.outOfStockThreshold || 0,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\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 quantityDisplayString: resources.quantityDisplayText,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n inputQuantityAriaLabel: '', // Not used\n discountStringText: '', // Not used\n originalPriceText: '',\n currentPriceText: '',\n shippingChargesText: '',\n shippingText: resources.shippingText\n },\n telemetry,\n removeButtonText: resources.removeCartButtonText,\n outOfStockText: '', // Not used\n outOfRangeOneText: '', // Not used\n outOfRangeFormatText: '', // Not used\n cartState: cart,\n orgUnitLocations: this.state.orgUnitLocations,\n removeItemClickHandler: this._removeItemFromCartHandler,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n telemetryContent: this.telemetryContent,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined,\n isQuantityLimitsFeatureEnabled: this.state.isQuantityLimitsFeatureEnabled,\n catalogs: this.props.data.catalogs?.result\n })\n : null;\n }\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 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.removeCartLines(input).catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n private async _setQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n if (isChannelQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n return;\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 || defaultOrderQuantityLimitsFeatureConfig === 'none') {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n\n try {\n const featureStatuses = await this.props.data.featureState;\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n this.setState({ isQuantityLimitsFeatureEnabled: false });\n return;\n }\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n this.setState({ isQuantityLimitsFeatureEnabled: true });\n } else {\n this.props.data.customerInformation\n .then(customerInfo => {\n const result =\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b));\n this.setState({ isQuantityLimitsFeatureEnabled: result });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n });\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n this.setState({ isQuantityLimitsFeatureEnabled: !(cartConfiguration?.IgnoreOrderSettings ?? false) });\n return;\n }\n }\n}\n\nexport default CartIcon;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartIconViewProps } from './cart-icon';\nimport { IFlyoutCartLineItemViewProps } from './components/flyout-cart-line-items';\n\nconst _renderCartlines = (cartLines: IFlyoutCartLineItemViewProps[] | undefined, props: ICartIconViewProps): JSX.Element[] | null => {\n if (!cartLines) {\n props.context.telemetry.error('Cartlines content is empty, module wont render');\n return null;\n }\n return cartLines.map((cartLine, index) => {\n return (\n \n {cartLine.cartline}\n {cartLine.storeLocation}\n {cartLine.remove}\n \n );\n });\n};\n\nconst CartIconView: React.FC = (props: ICartIconViewProps) => (\n \n {props.cartIcon}\n {props.FlyoutContainer ? (\n \n {props.flyoutTitle}\n {props.checkoutBlockedDueToUnavailableFunds}\n {_renderCartlines(props.cartlines, props)}\n {props.totalPrice}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.goToCartButton}\n \n ) : (\n false\n )}\n \n);\n\nexport default CartIconView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n className?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description, className }) => {\n if (!description) {\n return null;\n }\n\n const descClassName = StringExtensions.isNullOrEmpty(className) ? 'ms-checkout-delivery-options__description' : className;\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\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 interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

    {message}

    ;\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\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 interface ICheckoutDeliveryOptionsErrorTitleProps {\n title?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.title\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\n if (!title) {\n return null;\n }\n\n return

    {title}

    ;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\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 interface IAddressDetailItem {\n isNewLine: boolean;\n isShowLabel: boolean;\n labelText: string;\n name: string;\n value: string;\n}\n\n/**\n * Address details item.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressDetailItemFunctionComponent: React.FC = (props: IAddressDetailItem) => {\n const { labelText, value } = props;\n\n const className = `ms-checkout-delivery-options__cart-line-grp__item__header__address`;\n return (\n \n {labelText}\n {value}\n \n );\n};\n\nexport default AddressDetailItemFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOptionsCartLineAddress } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\nimport React, { useEffect, useState } from 'react';\n\nexport interface ICheckoutCartLineDeliveryDateProps {\n className?: string;\n isDisabled?: boolean;\n minRangeValue?: number;\n maxRangeValue?: number;\n validationErrorForRange?: string;\n fallbackPattern?: string;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n disclaimerText?: string;\n heading?: string;\n checkBoxLabel?: string;\n onChangeMinValue?: void;\n id?: string;\n cartLines?: CartLine[];\n groupDeliveryOption?: DeliveryOptionsCartLineAddress;\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n}\n\nconst CheckoutCartLineDeliveryDate: React.FC = ({\n className,\n isDisabled,\n fallbackPattern,\n ariaLabel,\n telemetryContent,\n onChangeMinValue,\n checkBoxLabel,\n disclaimerText,\n minRangeValue,\n maxRangeValue,\n heading,\n cartLines,\n groupDeliveryOption,\n onChange\n}) => {\n const [selectedDate, setSelectedDate] = useState('');\n const [isDateEnabled, setIsDateEnabled] = useState(false);\n const [minDate, setMinDate] = useState('');\n const [maxDate, setMaxDate] = useState('');\n\n useEffect(() => {\n const today = new Date();\n\n // Calculate minDate: default to today if minRangeValue is undefined\n const minDateObj = new Date(today);\n minDateObj.setDate(today.getDate() + (minRangeValue ?? 0)); // Defaults to today\n setMinDate(minDateObj.toISOString().split('T')[0]);\n\n // Calculate maxDate: only set if maxRangeValue is defined\n if (maxRangeValue !== undefined) {\n const maxDateObj = new Date(today);\n maxDateObj.setDate(today.getDate() + maxRangeValue);\n setMaxDate(maxDateObj.toISOString().split('T')[0]);\n }\n }, [minRangeValue, maxRangeValue]);\n\n // Function to handle date change\n const handleDateChange = (event: React.FocusEvent) => {\n const selectedValue = event.target.value;\n // Check if the selected date is allowed\n if (selectedValue >= minDate) {\n setSelectedDate(selectedValue);\n console.log('Selected date is allowed.', selectedValue);\n } else {\n console.log('Selected date is not allowed.');\n }\n\n if (groupDeliveryOption !== undefined && cartLines !== undefined) {\n const cartLinesDate: CartLine[] = [];\n groupDeliveryOption?.cartLineIds?.map(cartLineId => {\n const tempCartLine = cartLines?.find(cartLine => cartLineId === cartLine?.LineId?.toString());\n if (tempCartLine !== undefined) {\n cartLinesDate.push(tempCartLine);\n }\n });\n\n if (cartLinesDate !== undefined) {\n onChange(event, cartLinesDate);\n }\n }\n };\n\n const handleCheckboxChange = () => {\n setIsDateEnabled(!isDateEnabled);\n };\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n
    \n
    \n \n {checkBoxLabel}\n
    \n {disclaimerText}\n
    \n {heading}\n \n
    \n
    \n );\n};\n\nexport default CheckoutCartLineDeliveryDate;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsGrpRadioButtonProps {\n className: string;\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n groupName: string;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsGrpRadioButton: React.FC = ({\n className,\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n groupName,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionRef: React.RefObject = React.createRef();\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsGrpRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOptionsCartLineAddress } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport DescriptionComponent from './checkout-delivery-options.description';\nimport RadioButtonComponent from './checkout-cartLine-delivery-options-grp';\n\nexport interface ICheckoutCartLineDeliveryOptionsRadioButtonProps {\n className: string;\n moduleId: string;\n ariaSetSize: number;\n priceFree: string;\n ariaPosInSet: number;\n selectedItemId: string;\n cartLines: CartLine[];\n deliveryOptions: DeliveryOption[];\n typeName: string;\n context: ICoreContext>;\n groupName: string; // Add groupName prop\n groupDeliveryOption?: DeliveryOptionsCartLineAddress;\n ariaLabel?: string;\n value?: string;\n cartLineId?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[], cartLineId?: string): void;\n}\n\n/**\n * Represents a radio button component for checkout cart line delivery options.\n * @param {Object} props - The component props.\n * @param {boolean} props.isChecked - Indicates whether the radio button is checked.\n * @param {string} props.value - The value of the radio button.\n * @param {number} props.ariaSetSize - The total number of radio buttons in the set.\n * @param {number} props.ariaPosInSet - The position of the radio button in the set.\n * @param {string} props.ariaLabel - The ARIA label for the radio button.\n * @param {string} props.telemetryContent - The telemetry content for the radio button.\n * @param {Function} props.onChange - The event handler for when the radio button is changed.\n * @returns {JSX.Element} The rendered radio button component.\n */\nconst CheckoutCartLineDeliveryOptionsRadio: React.FC = ({\n className,\n moduleId,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n deliveryOptions,\n priceFree,\n selectedItemId,\n typeName,\n groupName, // Destructure groupName prop\n context,\n cartLines,\n cartLineId,\n groupDeliveryOption,\n onChange\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n console.log(attributes);\n const channelConfig = context.actionContext.requestContext.channel;\n const count = deliveryOptions.length;\n if (count === 0) {\n return null;\n }\n const cartLinesRadio: CartLine[] = [];\n if (groupDeliveryOption !== undefined && cartLines !== undefined) {\n groupDeliveryOption?.cartLineIds?.map(cartLineId => {\n const tempCartLine = cartLines?.find(cartLine => cartLineId === cartLine?.LineId?.toString());\n if (tempCartLine !== undefined) {\n cartLinesRadio.push(tempCartLine);\n }\n });\n }\n\n const changeCurrentDeliveryOption = React.useCallback(\n (event: React.ChangeEvent) => {\n if (cartLinesRadio !== undefined && cartLinesRadio.length > 0) {\n onChange(event, cartLinesRadio, undefined);\n } else {\n onChange(event, cartLines, cartLineId);\n }\n },\n [onChange, cartLinesRadio, cartLineId]\n );\n // const selectedDeliveryOptionItem = deliveryOptions.length > 0 ? deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n const deliveryClassName = `${className}__radio-btn-grp`;\n const optionClassName = `${deliveryClassName}-opt`;\n const response = deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => (\n
    \n \n \n \n
    \n ));\n\n return
    {response}
    ;\n};\n\nexport default CheckoutCartLineDeliveryOptionsRadio;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { CartLine, DeliveryOption, ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport React, { useState } from 'react';\nimport CheckoutCartLineDeliveryOptionsRadio from './checkout-cartLine-delivery-options-radio';\n\nexport interface ICheckoutDeliveryOptionsLineItemsProps {\n className?: string;\n moduleId: string;\n selectedItemId: string;\n context: Msdyn365.ICoreContext;\n typeName: string;\n cartLines: CartLine[];\n imageSettings: Msdyn365.IImageSettings;\n showShippingChargesForLineItems: boolean;\n resources: ICheckoutDeliveryOptionsLineItemsResources;\n deliveryOptions: DeliveryOption[];\n ariaSetSize: number;\n ariaPosInSet: number;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n currencyCode?: string;\n products?: SimpleProduct[];\n catalogs?: ProductCatalog[];\n gridSettings?: Msdyn365.IGridSettings;\n cartLineId?: string;\n key?: string;\n}\n\nexport interface ICheckoutDeliveryOptionsLineItemsResources {\n quantityDisplayStringLabel: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n productDimensionTypeAmount: string;\n configString: string;\n discountStringText: string;\n shippingChargesText: string;\n priceFree: string;\n ariaLabel: string;\n changeButtonText?: string;\n deliveryMethodLabel?: string;\n}\n\nconst _getLineItemComponent = (\n context: Msdyn365.ICoreContext,\n cartLine: CartLine,\n product: SimpleProduct,\n moduleId: string,\n typeName: string,\n showShippingChargesForLineItems: boolean,\n imageSettings: Msdyn365.IImageSettings,\n resources: ICheckoutDeliveryOptionsLineItemsResources,\n currencyCode: string,\n catalogs?: ProductCatalog[],\n gridSettings?: Msdyn365.IGridSettings,\n cartLineId?: string\n): JSX.Element | undefined => {\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(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\n return (\n \n );\n};\n\nconst _getProduct = (productId: number, products: SimpleProduct[]): SimpleProduct | undefined => {\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n};\n\nexport const GetLineItems: React.FC = (props: ICheckoutDeliveryOptionsLineItemsProps) => {\n const products = props.products;\n const lineClassName = props.className;\n const lineItemClassName = `${lineClassName}-item`;\n const currencyCode = props.currencyCode;\n const changeText = props.resources.changeButtonText;\n const [showDeliveryOption, setShowDeliveryOption] = useState(false);\n\n const handleClick = () => {\n setShowDeliveryOption(!showDeliveryOption);\n };\n if (!props.cartLines || props.cartLines.length === 0 || !products || products.length === 0 || currencyCode === undefined) {\n return null;\n }\n const deliveryCode = props.deliveryOptions.find(option => option.Code === props.selectedItemId);\n const payload = getPayloadObject(TelemetryEvent.UpdateInCart, props.telemetryContent!, changeText !== undefined ? changeText : '', '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n const response = props.cartLines.map(cartLine => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId, products);\n if (!product) {\n return null;\n }\n return (\n
    \n {_getLineItemComponent(\n props.context,\n cartLine,\n product,\n props.moduleId,\n props.typeName,\n props.showShippingChargesForLineItems,\n props.imageSettings,\n props.resources,\n currencyCode,\n props.catalogs,\n props.gridSettings\n )}\n
    {props.resources.deliveryMethodLabel}
    \n
    \n {deliveryCode?.Description}\n \n
    \n {showDeliveryOption ? (\n \n ) : null}\n
    \n );\n });\n\n return
    {response}
    ;\n};\nexport default GetLineItems;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageProps, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\n/**\n * The cartLine product interface.\n */\nexport interface ICartLineWithProduct {\n cartLine: CartLine;\n product?: SimpleProduct;\n}\n\n/**\n * The checkout shipping cartLine interface.\n */\nexport interface ICheckoutShippingCartLineInfo {\n lineId?: string;\n imageProps: IImageProps;\n deliveryMethodDesc?: string;\n requestDeliveryDate?: string;\n}\n\n/**\n * The checkout shipping cartLine props.\n */\nexport interface ICheckoutShippingCartLinesProps {\n moduleClassName: string;\n cartLines: ICheckoutShippingCartLineInfo[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Following as per module\nexport const CheckoutShippingCartLines: React.FC = ({ moduleClassName, cartLines }) => {\n if (!ArrayExtensions.hasElements(cartLines)) {\n return null;\n }\n\n return (\n
    \n
    \n {cartLines.map((cartLine: ICheckoutShippingCartLineInfo) => {\n const className = `${moduleClassName}__group-images-lines-product`;\n return (\n
    \n \n
    {cartLine.deliveryMethodDesc}
    \n
    \n
    {cartLine.requestDeliveryDate}
    \n
    \n );\n })}\n
    \n
    \n );\n};\n\n/**\n * The checkout shipping cartLine image settings.\n */\nexport const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\n },\n lazyload: true,\n quality: 80\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 { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n CartLine,\n DeliveryOption,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n GetDeliveryOptionsForCartLineAddressInput,\n getDeliveryOptionsForCartLineAddress,\n getFallbackImageUrl,\n QueryResultSettingsProxy,\n StringExtensions,\n DeliveryOptionsCartLineAddress,\n ArrayExtensions,\n ObjectExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport groupBy from 'lodash/groupBy';\n\nimport { IImageProps, IImageSettings } from '@msdyn365-commerce/core';\nimport { ErrorComponent } from '../../common/error';\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport {\n filterDeliveryModeOption,\n ICheckoutDeliveryOptionsProps,\n useDefaultDeliveryOption\n} from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\nimport { focusOnCheckoutError } from '../../checkout-errors';\nimport { AddressDetailItemFunctionComponent } from './components/address-detail-item';\nimport CheckoutCartLineDeliveryDate from './components/checkout-cartLine-delivery-date';\nimport CheckoutCartLineDeliveryOptionsRadio from './components/checkout-cartLine-delivery-options-radio';\nimport { GetLineItems } from './components/get-line-items';\nimport {\n CheckoutShippingCartLines,\n ICheckoutShippingCartLineInfo,\n ICheckoutShippingCartLinesProps,\n defaultImageSettings\n} from './components/checkout-shipping-cartlines-images';\n\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends ICheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICartLineSelectedDeliveryOption {\n cartLineId: string;\n selectedDeliveryOption: string;\n requestDeliveryDate?: string;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends ICheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n checkoutCartLineGroupDeliveryOptions?: React.ReactNode;\n enableCheckoutCartLineDeliveryOptions?: boolean;\n cartLineImages?: React.ReactNode;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutDeliveryOptions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n\n @observable private deliveryOptions: DeliveryOption[] = [];\n\n @observable private isLoading: boolean = false;\n\n @observable private errorMessage?: string;\n\n @observable private groupDeliveryOptions: DeliveryOptionsCartLineAddress[] = [];\n\n @observable private cartLineSelectedDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get currencyCode(): string | undefined {\n return get(this.props, 'context.request.channel.Currency');\n }\n\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) : null;\n }\n\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n\n private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly isSelectDefaultOptionEnabled?: boolean;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n private readonly isMultipleAddressShippingEnabled?: boolean;\n\n private readonly timeoutRetailCall: number;\n\n private cartLinesDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\n\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isSelectDefaultOptionEnabled =\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\n this.isMultipleAddressShippingEnabled = this.props.config.multipleAddressShippingEnabled;\n this.timeoutRetailCall = this.props.config.timeoutToCallRetail !== undefined ? this.props.config.timeoutToCallRetail : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n if (\n (this.props.data.checkout.result?.isExpressCheckoutApplied && this.canShip()) ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n await this.init();\n } else {\n // Wait for a specific time (e.g., 2000 milliseconds = 2 seconds)\n await new Promise(resolve => setTimeout(resolve, this.timeoutRetailCall));\n // Then call the init function\n await this.init();\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.cartLinesWithShippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n async isExpressCheckoutApplied => {\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): 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 multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (!this.canShip()) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\n const cartLinesDisplay = this.getMultipleDeliveryOptionSelected();\n const lineImageProps: ICheckoutShippingCartLinesProps = {\n moduleClassName: 'ms-checkout-shipping-address',\n cartLines: cartLinesDisplay.filter(x => !ObjectExtensions.isNullOrUndefined(x))\n };\n\n const cartLineImages: React.ReactNode = ;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n alert: this.errorMessage && ,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError,\n isShowList,\n isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list',\n role: 'list',\n 'aria-label': deliveryOptionAriaLabel\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n checkoutErrorRef: this.checkoutErrorRef,\n checkoutCartLineGroupDeliveryOptions: this.getCheckoutCartLineGroupDeliveryOptions(),\n enableCheckoutCartLineDeliveryOptions: this.isMultipleAddressShippingEnabled,\n cartLineImages,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\n status:\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\n this.canShip()\n ? 'updating'\n : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n if (this.isMultipleAddressShippingEnabled) {\n this.getCartLinesSavedDeliveryOption();\n }\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n const channelConfig = this.props.context.request.channel;\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: (\n \n )\n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n const channelConfig = this.props.context.request.channel;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n const getAriaLabelWithPrice = get(deliveryOption, 'ShippingChargeAmount', 0);\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onSave = async (): Promise => {\n await this.onSubmit();\n };\n\n private readonly onEdit = async (): Promise => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n\n this.clearError();\n this.onUpdating();\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n };\n\n private readonly onSubmit = async (): Promise => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n if (this.isMultipleAddressShippingEnabled) {\n this.updateCartLinesDeliverySpecification();\n } else {\n await this.updateCartDeliverySpecification(this.selectedItemId);\n }\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n };\n\n private readonly onCancel = async (): Promise => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n } else {\n this.onUpdating();\n }\n };\n\n private readonly getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n\n private readonly getCartLinesSavedDeliveryOption = (): void => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n cartLinesForShipping.forEach(cartLine => {\n const deliveryMode = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n if (!cartLine.LineId || StringExtensions.isNullOrEmpty(deliveryMode)) {\n return;\n }\n const cartLineId = cartLine?.LineId;\n const existingCartLineSelectedDeliveryOption = this.cartLinesDeliveryOptions.find(\n cartLineDeliveryOption => cartLineDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryMode;\n } else {\n if (cartLineId !== undefined) {\n this.cartLinesDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryMode });\n }\n }\n });\n };\n\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId,\n shippingAddress: checkoutState.shippingAddress,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\n }\n\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n\n @action\n private readonly updateCartLinesDeliverySpecification = async (): Promise => {\n if (!this.cartLineSelectedDeliveryOptions || !this.cartLineSelectedDeliveryOptions.length) {\n return;\n }\n const { resources } = this.props;\n let lineSpecs: LineDeliverySpecification[] = [];\n const checkoutCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n\n this.cartLineSelectedDeliveryOptions.forEach(group => {\n const address = checkoutCartLines?.find(cartLine => cartLine.LineId === group.cartLineId)?.ShippingAddress;\n const lineSpec = {\n LineId: group.cartLineId,\n DeliverySpecification: {\n DeliveryModeId: group.selectedDeliveryOption,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ShipToAddress,\n DeliveryAddress: address\n }\n };\n lineSpecs.push(lineSpec);\n });\n\n try {\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const response = await checkoutState.checkoutCart.updateCartLinesDeliverySpecification({\n lineDeliverySpecifications: lineSpecs\n });\n\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n const cartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n if (cartLines !== undefined && cartLines.length > 0) {\n cartLines?.forEach(cartLine => {\n const cartLineId = cartLine.LineId?.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n cartLine.RequestedDeliveryDate = existingCartLineSelectedDeliveryOption.requestDeliveryDate\n ? new Date(existingCartLineSelectedDeliveryOption.requestDeliveryDate)\n : undefined;\n }\n });\n await checkoutState.checkoutCart.updateCartLines({ updatedCartLinesObject: cartLines });\n }\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n };\n\n private readonly getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n return this.retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n\n if (response && response.length > 0) {\n this.deliveryOptions = response;\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly getStoredDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context } = this.props;\n const cartState = this.props.data.checkout.result.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n }\n\n if (this.cartDeliveryMode) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const { checkout } = this.props.data;\n const { result } = checkout || {};\n const { shippingAddress, cartLinesWithShippingAddress, isPaymentVerificationRedirection, isExpressCheckoutApplied } = result || {};\n const { features } = this.props.context.actionContext.requestContext || {};\n\n if (!this.canShip() || !(shippingAddress || cartLinesWithShippingAddress)) {\n return;\n }\n\n const shouldSubmit = this.isSelectDefaultOptionEnabled || isExpressCheckoutApplied || this.isExpressPaymentAppliedInCartPage;\n\n if (features?.enable_checkout_race_condition_hot_fix) {\n if (isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n } else {\n if (!isPaymentVerificationRedirection || shouldSubmit) {\n await this.loadDeliveryOptionsBasedOnAddress(shippingAddress);\n }\n }\n } else {\n if (!isPaymentVerificationRedirection || shouldSubmit) {\n await this.loadDeliveryOptionsBasedOnAddress(shippingAddress);\n }\n\n if (isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n }\n\n if (shouldSubmit) {\n await this.onSubmit();\n }\n };\n\n private readonly loadDeliveryOptionsBasedOnAddress = async (shippingAddress?: Address): Promise => {\n if (this.isMultipleAddressShippingEnabled) {\n if (shippingAddress) {\n await this.getGroupDeliveryOptions(shippingAddress);\n } else {\n await this.getGroupDeliveryOptions();\n }\n } else if (shippingAddress) {\n await this.getDeliveryOptions(shippingAddress);\n }\n };\n\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onCartLineDeliveryOptionChange = (\n event: React.ChangeEvent,\n cartLines: CartLine[],\n cartLineId?: string\n ) => {\n const deliveryModeId = event.currentTarget.value;\n if (cartLineId !== undefined) {\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n }\n return;\n }\n\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n }\n });\n };\n\n private readonly onCartLineRequestDeliveryDateChange = (event: React.ChangeEvent, cartLines: CartLine[]) => {\n const deliveryDate = event.currentTarget.value;\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.requestDeliveryDate = deliveryDate;\n } else {\n const deliveryModeId = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption: deliveryModeId,\n requestDeliveryDate: deliveryDate\n });\n }\n });\n };\n\n private readonly onReady = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onUpdating();\n }\n };\n\n private readonly onPending = () => {\n if (!this.isSelectDefaultOptionEnabled) {\n this.props.moduleState.onPending();\n }\n };\n\n private readonly getCheckoutCartLineGroupDeliveryOptions = (): React.ReactNode => {\n const { resources, config } = this.props;\n const cartConfiguration = this.props.data.cartConfiguration?.result;\n const shippingCartLines = this.getCartLinesForShipping();\n if (!ArrayExtensions.hasElements(shippingCartLines) || !ArrayExtensions.hasElements(this.groupDeliveryOptions)) {\n return null;\n }\n const imageSettings = this.getImageSettings(config.imageSettings);\n const requestDeliveryDateEnabled = config.enableRequestDeliveryDate === true && this.isMultipleAddressShippingEnabled === true;\n return (\n
    \n {this.groupDeliveryOptions.map((groupDeliveryOption: DeliveryOptionsCartLineAddress, index) => {\n const cartLineId = groupDeliveryOption.cartLineIds !== undefined ? groupDeliveryOption.cartLineIds[0] : '';\n const cartLine1 = shippingCartLines.find(cartLine => cartLineId === cartLine?.LineId?.toString() ?? '');\n const cartLine = shippingCartLines.filter(\n cartLine => groupDeliveryOption && (cartLineId === cartLine?.LineId?.toString() ?? '')\n );\n if (groupDeliveryOption !== undefined) {\n const selectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLine[0].LineId\n )?.selectedDeliveryOption;\n return (\n
    \n
    \n \n
    \n
    \n
    \n \n {resources.cartLineGroupDeliveryOptionsLabel}\n \n \n {resources.cartLineGroupDeliveryOptionsText}\n \n {requestDeliveryDateEnabled ? (\n \n ) : null}\n \n
    \n {groupDeliveryOption.cartLineIds?.map(cartLineId => {\n const cartLine1 = shippingCartLines.find(\n cartLine => cartLineId === cartLine?.LineId?.toString() ?? ''\n );\n const selectedDeliveryOption1 = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption =>\n cartLineSelectedDeliveryOption.cartLineId === cartLine1?.LineId\n )?.selectedDeliveryOption;\n return (\n \n );\n })}\n
    \n
    \n );\n } else {\n return null;\n }\n })}\n
    \n );\n };\n\n private readonly getGroupDeliveryOptions = async (shippingAddress?: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const cartLinesForShipping: CartLine[] = [];\n if (ArrayExtensions.hasElements(shippingCartLines)) {\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.ShippingAddress?.RecordId);\n cartLinesForShipping.push(getGroupByDelivery(shippingCartLines));\n console.log('running delivery option for all lines');\n }\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n const cart = cartState.cart;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n let response: DeliveryOptionsCartLineAddress[] = [];\n if (shippingAddress !== undefined && shippingAddress.RecordId !== undefined) {\n const checkoutState = this.props.data.checkout.result;\n const cartLineIds = shippingCartLines.map(cartLine => (cartLine.LineId !== undefined ? cartLine.LineId : ''));\n await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cart.Id,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n ).then(async result => {\n if (result && result.length > 0) {\n response.push({ deliveryOptions: result, hasError: false, error: undefined, cartLineIds: cartLineIds });\n shippingCartLines?.forEach(cartLine => {\n cartLine.ShippingAddress = shippingAddress;\n });\n await checkoutState.checkoutCart.updateCartLines({ updatedCartLinesObject: shippingCartLines });\n // console.log(updateLineDeliverySpecifications());\n } else {\n response.push({\n deliveryOptions: [],\n hasError: true,\n error: 'No delivery options available',\n cartLineIds: cartLineIds\n });\n }\n });\n } else {\n const inputData = new GetDeliveryOptionsForCartLineAddressInput(deliveryOptionFilter, shippingCartLines);\n response = await getDeliveryOptionsForCartLineAddress(inputData, context.actionContext);\n }\n if (response && response.length > 0) {\n this.groupDeliveryOptions = response;\n console.log('groupDeliveryOptions');\n }\n if (this.groupDeliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartLinesDeliveryOptions.length !== 0) {\n this.cartLineSelectedDeliveryOptions = this.cartLinesDeliveryOptions;\n this.cartLinesDeliveryOptions = [];\n this.onReady();\n } else {\n this.onUpdating();\n this.groupDeliveryOptions.forEach(group => {\n const selectedDeliveryOption =\n group.deliveryOptions.length > 0 && group.deliveryOptions[0].Code !== undefined\n ? group.deliveryOptions[0].Code\n : '';\n group.cartLineIds?.forEach(cartLineId => {\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineDeliveryOption => cartLineDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = selectedDeliveryOption;\n } else {\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption\n });\n }\n });\n });\n }\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n }\n this.isLoading = false;\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 private readonly getMultipleDeliveryOptionSelected = (): ICheckoutShippingCartLineInfo[] => {\n const products = this.props.data.products?.result;\n const cartLineImages: ICheckoutShippingCartLineInfo[] = [];\n\n this.cartLineSelectedDeliveryOptions.map(cartLineDeliveryOption => {\n const cartLine = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.find(\n (cartLine: CartLine) => cartLine.LineId === cartLineDeliveryOption.cartLineId\n );\n if (cartLine) {\n const product = products?.find((product: SimpleProduct) => product.RecordId === cartLine.ProductId);\n const imageProps: IImageProps = {\n requestContext: this.props.context.actionContext.requestContext,\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\n altText: product?.Name,\n src: product?.PrimaryImageUrl ?? '',\n fallBackSrc: getFallbackImageUrl(\n product?.ItemId,\n this.props.context.actionContext.requestContext.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n ),\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: this.props.config.imageSettings ?? defaultImageSettings,\n loadFailureBehavior: 'empty'\n };\n let deliveryModeDesc = this.deliveryOptions.find(\n deliveryOption => deliveryOption.Code === cartLineDeliveryOption.selectedDeliveryOption\n )?.Description;\n if (StringExtensions.isNullOrEmpty(deliveryModeDesc)) {\n const group = this.groupDeliveryOptions.find(group => group.cartLineIds?.includes(cartLineDeliveryOption.cartLineId));\n const deliveryOption = group?.deliveryOptions.find(\n option => option.Code === cartLineDeliveryOption.selectedDeliveryOption\n );\n deliveryModeDesc = deliveryOption?.Description;\n }\n const cartLineDisplay = {\n lineId: cartLine.LineId,\n imageProps: imageProps,\n deliveryMethodDesc: deliveryModeDesc,\n requestDeliveryDate: cartLineDeliveryOption.requestDeliveryDate\n };\n cartLineImages.push(cartLineDisplay);\n }\n });\n\n return cartLineImages;\n };\n}\n\nexport default CheckoutDeliveryOptions;\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 {\n ICheckoutDeliveryOption,\n ICheckoutDeliveryOptionEdit,\n ICheckoutDeliveryOptionsList,\n ICheckoutDeliveryOptionsViewProps\n} from './checkout-delivery-options';\n\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\n if (!list || list.length === 0) {\n return null;\n }\n\n return (\n \n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\n return (\n \n {deliveryOption.radioButton}\n {deliveryOption.description}\n {deliveryOption.price}\n \n );\n })}\n \n );\n};\n\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\n return (\n \n {description}\n {price}\n \n );\n};\n\nconst CheckoutDeliveryOptionsView: React.FC = props => {\n const {\n CheckoutDeliveryOptions,\n enableCheckoutCartLineDeliveryOptions,\n checkoutErrorRef,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n alert,\n waiting,\n saveButton,\n editButton,\n cancelButton,\n checkoutCartLineGroupDeliveryOptions,\n cartLineImages\n } = props;\n\n return (\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n \n {viewState.isLoading && waiting}\n {viewState.isError && alert}\n {viewState.isShowList && deliveryOptions && !enableCheckoutCartLineDeliveryOptions && (\n \n )}\n {viewState.isShowList && enableCheckoutCartLineDeliveryOptions && checkoutCartLineGroupDeliveryOptions}\n {viewState.isShowSelected && enableCheckoutCartLineDeliveryOptions && cartLineImages}\n {viewState.isShowSelected && deliveryOptionSelected && }\n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n \n );\n};\n\nexport default CheckoutDeliveryOptionsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../checkout-gift-card.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n disableAddGiftCard?: boolean;\n resources: {\n applyGiftCardButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On Apply Function.\n * @param onApplyGiftCard -On Apply Gift Card Function.\n * @returns Call of Apply Gift Card Function.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number Function.\n * @param onEnterGiftCardNumber -On enter gift card number Function.\n * @returns Call of on enter gift card number Function.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On Change pin event.\n * @param onEnterGiftCardPin -On enter gift card pin Function.\n * @returns Call of on enter gift card pin Function.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On Change Event.\n * @param onEnterGiftCardExp -On enter gift card function.\n * @returns Call of On enter gift card function.\n */\n// Need to filter out the month and year\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard,\n resources: {\n applyGiftCardButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-checkout-gift-card__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-checkout-gift-card__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-checkout-gift-card__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-checkout-gift-card__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {applyGiftCardButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: IGiftCardExtend;\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * On remove function.\n * @param onRemoveGiftCard -Gift card number function.\n * @param giftCard -Gift card values.\n * @returns Call of onRemoveGiftCard function.\n */\nconst onRemoveHandler = (onRemoveGiftCard: (giftCardNumber: string) => void, giftCard: IGiftCardExtend) => (): void => {\n onRemoveGiftCard(giftCard.Id ?? '');\n};\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.canRemove\n * @param root0.onRemoveGiftCard\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @param root0.resources.removeGiftCardButton\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n canRemove,\n onRemoveGiftCard,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel, removeGiftCardButton }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-checkout-gift-card__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {' ('}\n {giftCardAvailableBalanceLabel}\n {` `}\n {balance}\n {')'}\n \n );\n\n const removeButton = canRemove && (\n \n );\n\n return {\n itemProps,\n id: giftCard.Id,\n selectedGiftCard,\n removeButton\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\n\nimport { getItem, IItem } from './get-item';\n\ninterface IGetListInput {\n giftCards?: IGiftCardExtend[];\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IList {\n listProps: INodeProps;\n list: IItem[];\n}\n\nexport const getList = ({ giftCards, canRemove, resources, getFormattedPrice, onRemoveGiftCard }: IGetListInput): IList | undefined => {\n if (!giftCards || giftCards.length === 0) {\n return undefined;\n }\n\n const listProps = {\n className: 'ms-checkout-gift-card__list'\n };\n\n const list = giftCards.map(giftCard =>\n getItem({\n canRemove,\n getFormattedPrice,\n giftCard,\n onRemoveGiftCard,\n resources\n })\n );\n\n return {\n listProps,\n list\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 IGiftCardTitleProps {\n title: string;\n}\n\nconst GiftCardTitle: React.FC = ({ title }) => ;\n\nexport default GiftCardTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { ICheckoutGiftCardData } from './checkout-gift-card.data';\nimport { ICheckoutGiftCardProps } from './checkout-gift-card.props.autogenerated';\nimport { getForm, IForm } from './components/get-form';\nimport { getList, IList } from './components/get-list';\nimport TitleCompoent from './components/title';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport * from './components/get-form';\nexport * from './components/get-item';\nexport * from './components/get-list';\n\ninterface ICheckoutGiftCardState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface ICheckoutGiftCardModuleProps extends ICheckoutGiftCardProps, IModuleStateProps {}\n\nexport interface IShowResource {\n title: React.ReactNode;\n list?: IList;\n}\n\nexport interface IAddResource {\n form: IForm;\n list?: IList;\n}\n\nexport interface ICheckoutGiftCardViewProps extends ICheckoutGiftCardProps<{}>, ICheckoutGiftCardState {\n className?: string;\n\n showGiftCard?: IShowResource;\n addGiftCard?: IAddResource;\n\n checkoutGiftCardProps: IModuleProps;\n couldPaidByGiftCard?: boolean;\n isEnabled?: boolean;\n checkoutErrorRef?: React.RefObject;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardNumber: string): void;\n enterGiftCardExp?(giftCardNumber: string): void;\n removeGiftCard?(giftCardNumber: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * CheckoutGiftCard component.\n * @extends {React.Component, ICheckoutGiftCardState>}\n */\n@observer\nexport class CheckoutGiftCard extends React.Component {\n public state: ICheckoutGiftCardState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.loyaltyAmount) {\n return 0;\n }\n return checkoutState.loyaltyAmount;\n }\n\n @computed get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState && checkoutState.customerAccountAmount ? checkoutState.customerAccountAmount : 0;\n }\n\n @computed get getGiftCardTotalAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCardExtends) {\n return 0;\n }\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\n const balance: number = giftCard.Balance || 0;\n return count + balance;\n }, 0);\n }\n\n @computed get disableAddGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return true;\n }\n return (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getGiftCardTotalAmount <= 0;\n }\n\n @computed get shouldPayGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card card when loyalty points do not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n return amountDue > 0;\n }\n\n @computed get hasSelectedItem(): boolean {\n const {\n data: { checkout }\n } = this.props;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n return !!giftCards && giftCards.length > 0;\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n () => {\n this.init();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutGiftCard && checkoutError.errorMessage) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutGiftCard) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutGiftCardModuleProps, nextState: ICheckoutGiftCardState): 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 {\n moduleState: { isReady },\n data: { checkout },\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n const additionalFields = showAdditionalFields;\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this.isEnabled() || (!this.shouldPayGiftCard && !isReady)) {\n this.props.context.telemetry.error('Checkout giftcard content is empty, module wont render');\n return null;\n }\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.GiftCard === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout gift card module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-checkout-gift-card', className, isReady ? 'show' : 'add');\n\n const viewProps: ICheckoutGiftCardViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n checkoutErrorRef: this.checkoutErrorRef,\n\n checkoutGiftCardProps: { moduleProps: this.props, className: moduleClassName },\n couldPaidByGiftCard: this.couldPaidByGiftCard(),\n isEnabled: this.isEnabled(),\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n enterGiftCardNumber: this.enterGiftCardNumber,\n enterGiftCardPin: this.enterGiftCardPin,\n enterGiftCardExp: this.enterGiftCardExp,\n removeGiftCard: this.removeGiftCard,\n applyGiftCard: this.applyGiftCard,\n showGiftCard: isReady\n ? {\n title: ,\n list: getList({\n canRemove: false,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined,\n addGiftCard: !isReady\n ? {\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n onEnterGiftCardNumber: this.enterGiftCardNumber,\n onEnterGiftCardPin: this.enterGiftCardPin,\n onEnterGiftCardExp: this.enterGiftCardExp,\n onApplyGiftCard: this.applyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard: this.disableAddGiftCard\n }),\n list: getList({\n canRemove: true,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly init = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const giftCards = this.props.data.checkout.result?.giftCardExtends;\n if (giftCards && giftCards.length > 0) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly couldPaidByGiftCard = (): boolean => {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart?.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card when it is not free\n return (cart.TotalAmount || 0) > 0;\n };\n\n private readonly isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return this.couldPaidByGiftCard();\n };\n\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Payment section gift card onEdit is called.');\n\n // Show add gift card form\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = (): void => {\n this.props.telemetry.information('Payment section gift card onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = (): void => {\n this.props.telemetry.information('Payment section gift card onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n if (this.hasSelectedItem) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this.clearError();\n };\n\n private readonly enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this.clearError();\n };\n\n private readonly enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this.clearError();\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.props.moduleState.setHasError(true);\n this.setState({\n errorMessage\n });\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly removeGiftCard = async (giftCardNumber: string): Promise => {\n this.props.telemetry.information('Payment section gift card remove is called.');\n\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.removeGiftCard({ giftCardNumber });\n };\n\n private readonly applyGiftCard = async (): Promise => {\n this.props.telemetry.information('Payment section gift card apply is called.');\n\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const checkoutState = this.props.data.checkout.result;\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this.getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this.getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (checkoutState && giftCard) {\n await checkoutState.addGiftCard({\n giftCard,\n additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId }\n });\n this.clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false\n });\n this.props.telemetry.information('Payment section fetching gift card is failed.');\n };\n\n private readonly findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { noBalanceError, invalidCardInfoError, invalidCardTypeError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (isPinRequired && giftCardPin === '') {\n this.setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this.setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this.setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this.setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, duplicatedCodeError, invalidCodeError },\n data: { checkout }\n } = this.props;\n\n if (!giftCardNumber) {\n this.setError(emptyInputError);\n return undefined;\n }\n\n const isDuplicated = checkout.result && checkout.result.giftCardExtends.some((card: GiftCard) => card.Id === giftCardNumber);\n if (isDuplicated) {\n this.setError(duplicatedCodeError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this.setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this.setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default withModuleState(CheckoutGiftCard);\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 { IAddResource, ICheckoutGiftCardViewProps, IForm, IItem, IList, IShowResource } from './checkout-gift-card';\n\nexport const From: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const SelectedGiftCard: React.FC = ({ itemProps, selectedGiftCard, removeButton }) => (\n \n {selectedGiftCard}\n {removeButton}\n \n);\n\nexport const GiftCardList: React.FC = ({ listProps, list }) => (\n \n {list.map(({ id, ...item }) => (\n \n ))}\n \n);\n\nexport const AddResource: React.FC = ({ form, list }) => (\n <>\n {form && }\n {list && }\n \n);\n\nexport const ShowResource: React.FC = ({ title, list }) => (\n <>\n {title}\n {list && }\n \n);\n\nconst CheckoutGiftCardView: React.FC = props => {\n const { checkoutGiftCardProps, checkoutErrorRef, showGiftCard, addGiftCard } = props;\n return (\n \n {showGiftCard && }\n {addGiftCard && }\n \n );\n};\n\nexport default CheckoutGiftCardView;\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 interface ICheckoutLoyaltyInput {\n className: string;\n type: string;\n value: string | number;\n min: number;\n max: number;\n ariaValueMax: number;\n ariaValueMin: number;\n ariaValueNow: number;\n id: string;\n step: string;\n onChange(event: React.ChangeEvent): void;\n onBlur(event: React.FocusEvent): void;\n}\n\nconst AdressInput: React.FC = ({\n className,\n type,\n value,\n min,\n max,\n step,\n ariaValueMax,\n ariaValueMin,\n ariaValueNow,\n onChange,\n onBlur,\n id\n}) => (\n \n);\n\nexport default AdressInput;\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 interface ICheckoutLoyaltyLabelProps {\n className: string;\n text: string;\n htmlFor: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @param root0.htmlFor\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyLabel: React.FC = ({ className, text, htmlFor }) => {\n return (\n \n );\n};\n\nexport default CheckoutLoyaltyLabel;\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 interface ICheckoutLoyaltyTextProps {\n className: string;\n text?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyText: React.FC = ({ className, text }) => {\n if (!text) {\n return null;\n }\n\n return {text};\n};\n\nexport default CheckoutLoyaltyText;\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 { callActionOrExecute } from '@msdyn365-commerce/retail-proxy';\nimport { createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { LoyaltyPointRedemptionEstimate, LoyaltyRewardPoint } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { GetLoyaltyTransactionEstimationInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Drawer, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { CheckoutModule, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport { action, computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyData } from './checkout-loyalty.data';\nimport { ICheckoutLoyaltyProps } from './checkout-loyalty.props.autogenerated';\nimport InputComponent from './components/checkout-loyalty-input';\nimport LabelComponent from './components/checkout-loyalty-label';\nimport TextComponent from './components/checkout-loyalty-text';\nimport { ErrorComponent } from '../../common/error';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutLoyaltyState {\n dollarsApplied: number;\n isFetchingLoyaltyCard: boolean;\n errorMessage?: string;\n}\n\nexport interface ICheckoutLoyaltyModuleProps extends ICheckoutLoyaltyProps, IModuleStateProps {}\n\nexport interface ICheckoutLoyaltyViewState {\n isShowLoyalty: boolean;\n isShowAddLoyalty: boolean;\n}\n\nexport interface ICheckoutLoyaltyShow {\n heading: React.ReactNode;\n coveredAmountText: React.ReactNode;\n amount: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyRewardPoint {\n checkoutLoyaltyRewardPoint: INodeProps;\n key: string;\n title: React.ReactNode;\n availablePointsText: React.ReactNode;\n activePoints: React.ReactNode;\n expiringPointsText: React.ReactNode;\n expiringPoints: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyAdd {\n heading: React.ReactNode;\n cardNumber: React.ReactNode;\n drawer: INodeProps;\n rewardPoints: ICheckoutLoyaltyRewardPoint[];\n loyaltyAmountContainer: INodeProps;\n appliedLoyaltyAmountContainer: INodeProps;\n loyaltyAmountLabel: React.ReactNode;\n loyaltyAmountInput: React.ReactNode;\n loyaltyAmountApplyButton: React.ReactNode;\n showAppliedAmount: boolean;\n loyaltyAmountAppliedText: React.ReactNode;\n loyaltyAmountAppliedPrice: React.ReactNode;\n loyaltyAmountRemoveButton: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyViewProps extends ICheckoutLoyaltyModuleProps {\n checkoutLoyalty: IModuleProps;\n viewState: ICheckoutLoyaltyViewState;\n showLoyalty: ICheckoutLoyaltyShow;\n addLoyalty: ICheckoutLoyaltyAdd;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutLoyalty component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n\n@withModuleState\n@observer\nclass CheckoutLoyalty extends React.Component {\n private readonly _dialogToggleRef: React.RefObject | undefined;\n\n private readonly moduleClassName: string = 'ms-checkout-loyalty';\n\n private readonly _defaultLoyaltyPoints: number = 0;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n constructor(props: ICheckoutLoyaltyModuleProps) {\n super(props);\n this._dialogToggleRef = React.createRef();\n this._applyLoyaltyPoints = this._applyLoyaltyPoints.bind(this);\n this._removeLoyaltyPoints = this._removeLoyaltyPoints.bind(this);\n this._onInputChange = this._onInputChange.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this.state = { dollarsApplied: this.maxDollars, isFetchingLoyaltyCard: false };\n }\n\n @computed get shouldPayLoyalty(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use loyalty when cart is not full of free items\n const amountDue = cart.TotalAmount || 0;\n return amountDue > 0;\n }\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.loyaltyCard && this.props.data.loyaltyCard.status) !== 'LOADING' &&\n (this.props.data.loyaltyTransactionEstimation && this.props.data.loyaltyTransactionEstimation.status) !== 'LOADING'\n );\n }\n\n @computed get maxDollars(): number {\n return this.props.data.loyaltyTransactionEstimation.result &&\n this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n ? this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart,\n async () => {\n this._updateEstimate();\n }\n );\n\n reaction(\n () => this.props.data.loyaltyCard.result,\n async () => {\n this._updateLoyalty();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutLoyalty && checkoutError.errorMessage) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutLoyalty) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutLoyaltyModuleProps, nextState: ICheckoutLoyaltyState): 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 {\n config,\n resources,\n renderView,\n moduleState: { hasError, isReady }\n } = this.props;\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.Loyalty === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout loyalty module wont render');\n return null;\n }\n\n if (\n this.props.data.loyaltyCard &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n ) {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n const checkoutState = this.props.data.checkout.result;\n let isShowLoyalty = false;\n const errorMessage = this.state.errorMessage;\n\n if (isReady) {\n if (!checkoutState || checkoutState.loyaltyAmount === 0) {\n return null;\n }\n isShowLoyalty = true;\n }\n const channelConfig = this.props.context.request.channel;\n const viewProps = {\n ...this.props,\n checkoutErrorRef: this.checkoutErrorRef,\n viewState: {\n isShowLoyalty,\n isShowAddLoyalty: !isReady && !config.disableAddLoyaltyComponent\n },\n alert: hasError && errorMessage && ,\n checkoutLoyalty: {\n moduleProps: this.props,\n className: classnames(\n this.moduleClassName,\n { [`${this.moduleClassName}__applied`]: isShowLoyalty },\n this.props.config.className\n )\n },\n showLoyalty: {\n heading: ,\n coveredAmountText: (\n \n ),\n amount: (\n \n )\n },\n addLoyalty: {\n heading: ,\n drawer: {\n tag: Drawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: this._drawerHeader(),\n openGlyph: `${this.moduleClassName}__drawer-open`,\n closeGlyph: `${this.moduleClassName}__drawer-close`,\n glyphPlacement: 'end'\n },\n cardNumber: ,\n rewardPoints:\n loyaltyCard.RewardPoints &&\n loyaltyCard.RewardPoints.map((points, index) => {\n return this._renderPointSection(points, resources.availablePointsLabel, resources.expiringLoyaltyPointsLabel);\n }),\n loyaltyAmountContainer: {\n className: `${this.moduleClassName}__amount`\n },\n appliedLoyaltyAmountContainer: {\n className: `${this.moduleClassName}__applied-amount`\n },\n loyaltyAmountLabel: (\n \n ),\n loyaltyAmountInput: (\n \n ),\n loyaltyAmountApplyButton: (\n this.maxDollars ||\n this.state.dollarsApplied <= 0 ||\n isNaN(this.state.dollarsApplied) ||\n this.state.isFetchingLoyaltyCard\n }\n >\n {this.props.resources.applyCheckoutLoyaltyPaymentText}\n \n ),\n showAppliedAmount: checkoutState && checkoutState.loyaltyAmount > 0,\n loyaltyAmountAppliedText: (\n \n ),\n loyaltyAmountAppliedPrice: (\n \n ),\n loyaltyAmountRemoveButton: (\n \n {this.props.resources.removeCheckoutLoyaltyPaymentText}\n \n )\n }\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n this.props.context.telemetry.error('Checkout loyalty content is empty, module wont render');\n return null;\n }\n\n private _drawerHeader(): JSX.Element {\n const channelConfig = this.props.context.request.channel;\n return (\n <>\n

    {this.props.resources.loyaltyCoveredAmountText}

    \n \n \n );\n }\n\n private _renderPointSection(\n point: LoyaltyRewardPoint,\n loyaltyCoveredAmountText: string,\n expiringLoyaltyPointsLabel: string\n ): ICheckoutLoyaltyRewardPoint {\n return {\n key: point.RewardPointId || '',\n checkoutLoyaltyRewardPoint: {\n className: `${this.moduleClassName}__program`\n },\n title: ,\n availablePointsText: ,\n activePoints: (\n \n ),\n expiringPointsText: ,\n expiringPoints: (\n \n )\n };\n }\n\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const savedLoyaltyAmount = this.props.data.checkout.result?.loyaltyAmount;\n if (savedLoyaltyAmount) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n } else if (\n this.props.data.loyaltyCard.result &&\n this.props.data.checkout.result &&\n this.props.data.loyaltyCard.result.CardNumber !== this.props.data.checkout.result.checkoutCart.cart.LoyaltyCardId\n ) {\n this.props.data.checkout.result.checkoutCart\n .updateLoyaltyCardId({ loyaltyCardNumber: this.props.data.loyaltyCard.result.CardNumber })\n .catch(error => {\n if (this.context.telemetry) {\n this.context.telemetry.warning(error);\n this.context.telemetry.debug('Unable to update the loyalty card');\n }\n });\n }\n };\n\n private readonly onEdit = () => {\n this.props.telemetry.information('Payment section loyalty onEdit is called.');\n\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = () => {\n this.props.telemetry.information('Payment section loyalty onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = () => {\n this.props.telemetry.information('Payment section loyalty onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.loyaltyAmount > 0) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly isEnabled = () => {\n return (\n this.props.context.request.user.isAuthenticated &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n );\n };\n\n private async _applyLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty apply button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: Number.parseFloat(this.state.dollarsApplied.toString()) });\n this.setState({\n isFetchingLoyaltyCard: true\n });\n }\n\n private async _removeLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty remove button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: 0 });\n this.setState({\n dollarsApplied: 0\n });\n }\n\n private _onInputChange(event: React.ChangeEvent): void {\n const value = event.currentTarget.value;\n this.setState({ dollarsApplied: value.length > 0 ? Number(value) : Number.parseFloat(value), isFetchingLoyaltyCard: false });\n }\n\n private _onBlur(event: React.FocusEvent): void {\n const num = Number.parseFloat(event.currentTarget.value).toFixed(2);\n const element = document.getElementById(`${this.props.id}-label`) as HTMLInputElement;\n if (element && num) {\n element.value = num;\n this.setState({ dollarsApplied: Number.parseFloat(num) });\n }\n }\n\n private _updateLoyalty(): void {\n if (this.props.moduleState.isDisabled && this.isEnabled()) {\n this._updateEstimate();\n this.props.moduleState.onUpdating();\n }\n }\n\n private _updateEstimate(): void {\n const card = this.props.data.loyaltyCard.result;\n const checkout = this.props.data.checkout.result;\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n const channelConfig = this.props.context.request.channel;\n if (card && card.CardNumber && cart && channelConfig) {\n const currencyCode = channelConfig.Currency || '';\n const loyalPointsRequest = createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput(cart.Id, card.CardNumber, currencyCode);\n\n // @ts-expect-error\n // Due to bug 23214358, this is getting improperly cached. Need to turn on cache bypass for now to work around issue\n loyalPointsRequest._query.options.bypassCache = 'get';\n\n callActionOrExecute(loyalPointsRequest, this.props.context.actionContext)\n .then(async points => {\n this.props.context.actionContext.update(\n new GetLoyaltyTransactionEstimationInput(this.props.context.request.apiSettings),\n points\n );\n const newMaxPoints = points.MaxCurrencyValueOfLoyaltyPoints ?? this._defaultLoyaltyPoints;\n\n // If points are already applied, ensure you don't apply more points than max\n if (checkout && checkout.loyaltyAmount > newMaxPoints) {\n await checkout.updateLoyaltyAmount({ newAmount: newMaxPoints });\n }\n\n this.setState({ dollarsApplied: newMaxPoints, isFetchingLoyaltyCard: false });\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n this.props.context.actionContext.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n });\n }\n }\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n}\n\nexport default CheckoutLoyalty;\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 { ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow, ICheckoutLoyaltyViewProps } from './checkout-loyalty';\n\nconst AddCheckoutLoyalty: React.FC = ({\n heading,\n cardNumber,\n drawer,\n rewardPoints,\n loyaltyAmountContainer,\n appliedLoyaltyAmountContainer,\n loyaltyAmountLabel,\n loyaltyAmountInput,\n loyaltyAmountApplyButton,\n showAppliedAmount,\n loyaltyAmountAppliedText,\n loyaltyAmountAppliedPrice,\n loyaltyAmountRemoveButton\n}) => {\n return (\n <>\n {heading}\n {cardNumber}\n \n {rewardPoints.map((rewardPoint: ICheckoutLoyaltyRewardPoint) => {\n return (\n \n {rewardPoint.title}\n {rewardPoint.availablePointsText}\n {rewardPoint.activePoints}\n {rewardPoint.expiringPointsText}\n {rewardPoint.expiringPoints}\n \n );\n })}\n \n \n {loyaltyAmountLabel}\n {loyaltyAmountInput}\n {loyaltyAmountApplyButton}\n {showAppliedAmount && (\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n )}\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({ heading, coveredAmountText, amount }) => {\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty, checkoutErrorRef, alert, viewState, showLoyalty, addLoyalty } = props;\n\n return (\n \n {alert}\n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\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 { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { AsyncResultStatus, Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\nimport {\n updateLineDeliverySpecificationsAsync,\n validateForCheckoutAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getAvailabilitiesForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n validateCartLinesInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n Waiting\n} from '@msdyn365-commerce-modules/utilities';\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport { action, computed, get, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutData } from './checkout.data';\nimport { ICheckoutHeadingData, ICheckoutProps } from './checkout.props.autogenerated';\nimport AlertComponent from './components/alert';\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\nimport { getLineItems, ILineItems } from './components/get-line-items';\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\nimport GuidedFormComponent from './components/guided-form';\nimport PlaceOrderButtonComponent from './components/place-order-button';\nimport placeOrder from './methods/place-order';\nimport { focusOnCheckoutError, setCheckoutErrors } from '../../checkout-errors';\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from '../../common';\n\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\n/**\n * Device type.\n */\ntype DeviceType = 'Mobile';\n\n/**\n * The Checkout state.\n */\ninterface ICheckoutState {\n errorMessage: string;\n isValidationPassed: boolean;\n isPlaceOrderLoading?: boolean;\n isPlaceOrderClicked?: boolean;\n}\n\n/**\n * Known action error failure states\n */\nexport const enum ActionErrorStatus {\n Timeout = 'Timeout',\n HookTimeout = 'Hook Timeout',\n ServiceUnavailable = 'Service Unavailable'\n}\n\n/**\n * The Checkout view props.\n * @extends ICheckoutProps\n */\nexport interface ICheckoutViewProps extends ICheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: boolean;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n cartStatus?: string;\n isMobile?: boolean;\n isEditorialMode?: boolean;\n backToShoppingUrl?: string;\n editCartLink?: string;\n hasSalesOrder: boolean;\n hasInvoiceLine?: boolean;\n\n moduleState?: IModuleStateManager;\n telemetryContent?: ITelemetryContent;\n checkoutGuidedFormHasError?: boolean;\n\n checkoutProps: IModuleProps;\n headerProps: INodeProps;\n bodyProps: INodeProps;\n mainProps: INodeProps;\n mainControlProps: INodeProps;\n sideProps: INodeProps;\n sideControlFirstProps: INodeProps;\n sideControlSecondProps: INodeProps;\n termsAndConditionsProps: INodeProps;\n\n guidedForm?: React.ReactNode;\n title?: React.ReactNode;\n loading?: React.ReactNode;\n alert?: React.ReactNode;\n orderSummary?: IOrderSummary;\n invoicePaymentSummary?: IInvoicePaymentSummary;\n lineItems?: ILineItems;\n placeOrderButton?: React.ReactNode;\n termsAndConditions?: React.ReactNode;\n keepShoppingButton?: React.ReactNode;\n orderConfirmation?: React.ReactNode;\n\n checkoutExpressPaymentContainer?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n * The checkout module props interface.\n */\nexport interface ICheckoutModuleProps extends ICheckoutProps, IModuleStateProps {}\n\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\n\n/**\n *\n * CheckoutContainer component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass Checkout extends React.PureComponent {\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\n return this.props.data.checkout?.status;\n }\n\n @computed get isEmptyCart(): boolean {\n if (this.isEditorialMode) {\n // Editorial mode: Ignore empty cart\n return false;\n }\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\n }\n\n @computed get hasError(): boolean {\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\n }\n\n @computed get isEditorialMode(): boolean {\n return this.props.context.request.params.isEditor;\n }\n\n @computed get canPlaceOrder(): boolean {\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\n\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n const disableForOBO = Msdyn365.isOboRequest(this.props.context.request) && !this.isPaidOffByCustomerAccount;\n\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\n return (\n this.props.moduleState.isReady &&\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\n (this.state.errorMessage === '' ||\n shouldEnableSinglePaymentAuthorizationCheckout ||\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false)) &&\n !(shouldEnableSinglePaymentAuthorizationCheckout && disableForOBO)\n );\n }\n\n @computed get isPaidOffByCustomerAccount(): boolean {\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\n\n return customerAccountAmount === amountDue;\n }\n\n @computed get isCartReady(): boolean {\n return (\n !!this.props.data.checkout.result?.checkoutCart?.cart &&\n this.props.data.customerInformation.status !== 'LOADING' &&\n this.props.data.featureState.status !== 'LOADING'\n );\n }\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n const properties =\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails'\n )?.Value?.StringValue ?? '';\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n\n public state: ICheckoutState = {\n errorMessage: '',\n isValidationPassed: false,\n isPlaceOrderLoading: false,\n isPlaceOrderClicked: false\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\n\n when(\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\n async () => {\n if (this.expressPaymentDetailsFromCartPage) {\n const {\n email,\n tenderLine,\n tokenizedPaymentCard,\n paymentTenderType: paymentTenderTypeFromCartPage,\n isExpressCheckoutAppliedInCartPage,\n isExpressAddressAppliedInCartPage,\n cardPaymentAcceptResult,\n address\n } = this.expressPaymentDetailsFromCartPage;\n\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\n newEmailAddressFromExpressCheckout: email ?? '',\n newTenderLine: tenderLine,\n newTokenizedPaymentCard: tokenizedPaymentCard,\n newPaymentTenderType: paymentTenderTypeFromCartPage,\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\n newCardPaymentAcceptResult: cardPaymentAcceptResult\n });\n\n if (isExpressAddressAppliedInCartPage && address) {\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\n newBillingAddressFromExpressCheckout: address\n });\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\n newShippingAddressFromExpressCheckout: address\n });\n } else {\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\n }\n\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\n newExtensionProperties: [\n {\n Key: 'expressPaymentDetails',\n Value: { StringValue: '' }\n }\n ]\n });\n }\n }\n );\n\n when(\n () => this.hasError,\n () => {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Failed to get cart');\n }\n );\n\n when(\n () => {\n return this.isEmptyCart;\n },\n () => {\n this.redirectToCartPage('Cart is empty, but no editCartLink found');\n }\n );\n\n when(\n () => this.isCartReady,\n () => {\n this.validateForCheckout();\n }\n );\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n // Reaction to call place order when isPaymentSectionContainerReady is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerReady,\n async isReady => {\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n isReady &&\n !this.props.data.checkout.result?.redirectAdditionalContext &&\n (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\n ) {\n if (!this.state.isPlaceOrderLoading) {\n this.setState({ isPlaceOrderLoading: true });\n }\n\n this.props.telemetry.information(\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\n );\n\n await this.onPlaceOrder();\n\n // If 3D authentication redirection, don't update isPlaceOrderLoading\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\n this.setState({ isPlaceOrderLoading: false });\n }\n }\n }\n );\n\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isBillingAddressHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n // Reaction to enable place order button when redirection is true for new checkout flow.\n reaction(\n () => this.canPlaceOrder,\n async () => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\n newIsPlaceOrderEnabledInRedirection: true\n });\n\n this.props.telemetry.information(\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\n );\n this.props.telemetry.information(\n `isOBORequest is ${Msdyn365.isOboRequest(this.props.context.request)} and canPlaceOrder is ${\n this.canPlaceOrder\n }.`\n );\n }\n } else {\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\n }\n }\n );\n\n // Reaction to update the error message when there is a checkout error.\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\n const checkoutPaymentErrorLocation: boolean =\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\n : checkoutErrorLocation;\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n checkoutError &&\n checkoutError.errorMessage &&\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\n this.state.errorMessage\n ) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n\n // eslint-disable-next-line complexity -- ignore the complexity.\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources,\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const { errorMessage } = this.state;\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\n const checkoutClass = classnames('ms-checkout', className);\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\n\n // @ts-expect-error - check the key of slot\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\n\n // @ts-expect-error - check the key of slot\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n const isMobile =\n this.props.context.request &&\n this.props.context.request.device &&\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\n\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n\n const termsAndConditions =\n this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\n\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldEnableCheckoutErrorDisplayMessaging =\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\n\n let hasExpressPaymentContainer = false;\n\n if (\n typeof window !== 'undefined' &&\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\n ) {\n hasExpressPaymentContainer = true;\n }\n\n let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n checkoutErrorRef: this.checkoutErrorRef,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n hasSalesOrder:\n this.props.data.checkout &&\n this.props.data.checkout.result !== undefined &&\n this.props.data.checkout.result.salesOrder !== undefined,\n hasInvoiceLine,\n cartStatus: this.cartStatus,\n isMobile,\n backToShoppingUrl,\n editCartLink,\n isEditorialMode: this.isEditorialMode,\n orderConfirmation:\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\n ? this.props.slots.orderConfirmation[0]\n : undefined,\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\n headerProps: { className: 'ms-checkout__head' },\n bodyProps: { className: 'ms-checkout__body' },\n mainProps: { className: 'ms-checkout__main' },\n mainControlProps: { className: 'ms-checkout__main-control' },\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\n checkoutExpressPaymentContainer\n };\n\n if (!isConsentGiven && isAuthenticated) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else if (this.isLoading()) {\n viewProps = {\n ...viewProps,\n loading: \n };\n } else if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else {\n viewProps = {\n ...viewProps,\n alert: errorMessage && ,\n canShow: true,\n guidedForm: checkoutInformation ? (\n \n ) : (\n undefined\n ),\n orderSummary: getOrderSummary(this.props),\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\n lineItems: hasInvoiceLine ? undefined : getLineItems(this.props, this.telemetryContent),\n placeOrderButton: (\n \n ),\n termsAndConditions,\n keepShoppingButton: backToShoppingUrl && (\n \n {backToShopping}\n \n ),\n moduleState,\n telemetryContent: this.telemetryContent,\n checkoutGuidedFormHasError: !!errorMessage\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\n if (isLoading) {\n return AsyncResultStatusCode.LOADING;\n }\n\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\n if (isSuccess) {\n return AsyncResultStatusCode.SUCCESS;\n }\n\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\n if (isFailed) {\n return AsyncResultStatusCode.FAILED;\n }\n\n return undefined;\n }\n\n /**\n * Renders heading.\n * @param checkoutHeading - The checkout heading.\n * @returns React node.\n */\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\n return (\n \n );\n }\n\n /**\n * Event handler for heading change event.\n * @param event - The content change event in heading element.\n * @returns The new heading value.\n */\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.checkoutHeading!.text = event.target.value);\n\n /**\n * Checks if cart is loading.\n * @returns True if is loading, false otherwise.\n */\n private readonly isLoading = (): boolean => {\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\n };\n\n /**\n * Get slot items.\n * @param key - The slot key.\n * @returns React node or undefined.\n */\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\n const { slots } = this.props;\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\n };\n\n /**\n * Trigger the payment section container submit when placing order.\n */\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\n this.setState({ isPlaceOrderLoading: true });\n\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\n });\n };\n\n /**\n * On place order.\n * @returns Void promise.\n */\n private readonly onPlaceOrder = async (): Promise => {\n const {\n resources: { checkoutOutOfStockErrorMessage },\n context: {\n actionContext,\n app: {\n config: { enableStockCheck = false }\n }\n },\n slots: { orderConfirmation },\n data: { checkout, products }\n } = this.props;\n\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\n this.setState({ isPlaceOrderClicked: true });\n\n // If hasInvoiceLine is true, no inventory check\n if (\n !this.props.data.checkout.result?.checkoutCart.hasInvoiceLine &&\n enableStockCheck &&\n (await this.isOverMaxQuantity((await checkout).checkoutCart.cart, await products))\n ) {\n this.setState({\n errorMessage: checkoutOutOfStockErrorMessage\n });\n this.props.context.telemetry.error(checkoutOutOfStockErrorMessage);\n } else {\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\n\n const updatedCartVersion = await this.updateCartLineEmailAddress(this.props.data.checkout.result?.guestCheckoutEmail || '');\n\n await placeOrder(\n actionContext,\n this.props.data.checkout.result,\n this.props.data.products.result,\n !hasOrderConfirmation,\n updatedCartVersion,\n this.props.data.checkout.result?.isPaymentVerificationRedirection\n ).catch(error => {\n this.handleCheckoutError(error);\n });\n\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\n }\n };\n\n /**\n * Update receipt email address for electronic cart line.\n * @param newGuestCheckoutEmail - The guest checkout email.\n * @returns The updated cart version.\n */\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n let electronicDeliveryInvoiceAddress: Address;\n\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n if (hasShippingAddress && this.props.config.useShippingAddressAsElectronicDeliveryInvoiceAddress) {\n electronicDeliveryInvoiceAddress = this.props.data.checkout?.result?.shippingAddress as Address;\n }\n\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\n );\n\n let updatedCartVersion: number | undefined;\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\n return {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: emailDeliveryModeCode,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail,\n DeliveryAddress: hasShippingAddress ? electronicDeliveryInvoiceAddress : undefined\n }\n };\n });\n\n await updateLineDeliverySpecificationsAsync(\n { callerContext: this.props.context.actionContext },\n (await this.props.data.checkout).checkoutCart.cart.Id,\n lineDeliverySpecifications\n )\n .then(updatedCart => {\n updatedCartVersion = updatedCart.Version;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\n });\n }\n\n return updatedCartVersion;\n };\n\n /**\n * Return true if any product in the cart is over its max quantity.\n * @param cart -- The checkout cart.\n * @param products -- The checkout products.\n * @returns - Is any product in the cart is over max quantity.\n */\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\n let isOverMaxQuantity = false;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n await getAvailabilitiesForCartLineItems(\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\n this.props.context.actionContext\n )\n .then(productInventoryInformation => {\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\n\n cart.CartLines?.map(cartline => {\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\n\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\n const isEmailDelivery =\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n if (foundProductAvailability) {\n productsThatShouldValidateInventory.push(foundProductAvailability);\n }\n }\n });\n\n const cartLinesInventoryValidation = validateCartLinesInventory(\n cart.CartLines ?? [],\n productsThatShouldValidateInventory,\n this.props.context.actionContext,\n products,\n emailDeliveryModeCode\n );\n\n // If is invalid then exceeds the available quantity\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\n return isOverMaxQuantity;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\n });\n\n return isOverMaxQuantity;\n };\n\n /**\n * Gets active child in module state.\n * @returns - The module state manager collection.\n */\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\n const { childIds, getModule } = this.props.moduleState;\n return childIds\n .map(getModule)\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\n };\n\n /**\n * On container ready.\n */\n private readonly onContainerReady = (): void => {\n this.props.telemetry.information('Checkout onContainerReady is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n\n /**\n * Redirects to cart page.\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\n */\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n if (window && editCartLink) {\n window.location.assign(editCartLink);\n } else {\n this.setState({\n errorMessage: this.props.resources.genericErrorMessage\n });\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\n }\n };\n\n /**\n * Validates for checkout.\n * @param retry - Retry flag.\n */\n private readonly validateForCheckout = (retry: boolean = true): void => {\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\n const cart = this.props.data.checkout.result!.checkoutCart.cart;\n const { Id, Version } = cart;\n if (this._shouldValidateQuantityLimits()) {\n if (Version && Id) {\n validateForCheckoutAsync({ callerContext: this.props.context.actionContext, bypassCache: 'none' }, Id, Version)\n .then((result: CartLineValidationResults) => {\n if (result.ValidationFailuresByCartLines?.length !== 0) {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n } else {\n this.setState({ isValidationPassed: true });\n }\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n if (retry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n const cartState = this.props.data.checkout.result?.checkoutCart;\n cartState\n ?.refreshCart({})\n .then(() => {\n this.validateForCheckout(false);\n })\n .catch((refreshError: Error) => {\n this.props.telemetry.warning(refreshError.message);\n this.props.telemetry.debug('Unable to refresh Cart');\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n } else {\n this.setState({ isValidationPassed: true });\n }\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _shouldValidateQuantityLimits = (): boolean => {\n const featureStatuses = this.props.data.featureState.result;\n const isECommerceQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n\n if (isECommerceQuantityLimitsFeatureEnabledInHq) {\n return true;\n }\n\n const isOrderQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')\n ?.IsEnabled || false;\n\n if (!isOrderQuantityLimitsFeatureEnabledInHq) {\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 const customerInfo = this.props.data.customerInformation.result;\n const isB2BSite = isChannelTypeB2B(this.props.context.actionContext.requestContext);\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && isB2BSite) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !isB2BSite)));\n\n return isOrderQuantityLimitsFeatureEnabledInSiteSettings ?? false;\n } else {\n const cartConfiguration = this.props.data.cartConfiguration?.result;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n };\n\n /**\n * Save the address as Shipping and Billing address.\n * @param tokenizedPaymentCard - Tokenized payment card.\n */\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\n\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\n }\n };\n\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const address: Address = {\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone\n };\n\n return address;\n };\n\n /**\n * Handle checkout errors.\n * @param error -- The error on checkout api failure.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly handleCheckoutError = (error: any) => {\n // Here checkout failure message will be shown if there is any error in checkout api except data validation.\n const {\n resources: {\n genericErrorMessage,\n invalidCartVersionErrorMessage,\n missingRequiredCartTenderLinesErrorMessage,\n checkoutApiFailureErrorMessage,\n invoiceCheckoutApiFailureErrorMessage\n },\n context: { actionContext }\n } = this.props;\n const checkoutResult = this.props.data.checkout.result;\n const apiError = error && error.message;\n if (error?.statusCode === 500) {\n const errorMessage = checkoutApiFailureErrorMessage;\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n this.setState({ isPlaceOrderLoading: false });\n return;\n }\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\n const errorCode = error && error.name ? error.name : '';\n // apiError message will be used if errorcode resource/enums is unavailable\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\n } else {\n let errorMessage = genericErrorMessage;\n this.setState({ isPlaceOrderClicked: false });\n\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\n // If api error is not available show generic message\n errorMessage = apiError || genericErrorMessage;\n } else {\n if (error.status === ActionErrorStatus.Timeout || error.status === ActionErrorStatus.ServiceUnavailable) {\n errorMessage = checkoutResult?.checkoutCart.hasInvoiceLine\n ? invoiceCheckoutApiFailureErrorMessage\n : checkoutApiFailureErrorMessage;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n error.data?.AdditionalContext &&\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\n ) {\n return;\n }\n\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n }\n };\n}\n\nexport default Checkout;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutViewProps,\n ILineItem,\n ILineItemDeliveryGroup,\n ILineItems,\n IOrderSummary,\n IPickUpAtStore,\n IEmailDelivery,\n IInvoicePaymentSummary\n} from './index';\n\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\n\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {pickUpAtStore && }\n {emailDelivery && }\n \n);\n\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\n \n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\n LineItemDeliveryGroup,\n LineItemList,\n heading,\n lineItems,\n lineItemWraper,\n lineItemWraperIcon\n}) => (\n \n {lineItemWraperIcon}\n {lineItemWraper}\n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {emailDelivery && }\n \n);\n\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const LineItemsComponent: React.FC = ({\n LineItems,\n Header,\n heading,\n editLink,\n itemsForPickup,\n itemsForShip,\n itemsForEmail,\n itemsGroupWithMulitplePickupMode\n}) => (\n \n \n {heading}\n {editLink}\n \n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\n {itemsGroupWithMulitplePickupMode !== undefined\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\n return ;\n })\n : null}\n \n);\n\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\n
    \n {heading}\n
    \n {lines && (\n <>\n {lines.subtotal}\n {lines.shipping}\n {lines.otherCharge}\n {lines.tax}\n {lines.totalDiscounts}\n {lines.loyalty}\n {lines.customerAccount}\n {lines.giftCard}\n {lines.orderTotal}\n \n )}\n
    \n
    \n);\n\nconst PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\n
    \n {heading}\n
    \n {lines && (\n <>\n {lines.invoices}\n {lines.giftCard}\n {lines.loyalty}\n {lines.orderTotal}\n \n )}\n
    \n
    \n);\n\nconst CheckoutView: React.FC = props => {\n const {\n isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n canShow,\n checkoutProps,\n headerProps,\n hasSalesOrder,\n hasInvoiceLine,\n bodyProps,\n mainProps,\n mainControlProps,\n sideProps,\n sideControlFirstProps,\n sideControlSecondProps,\n termsAndConditionsProps,\n orderConfirmation,\n loading,\n alert,\n title,\n guidedForm,\n orderSummary,\n invoicePaymentSummary,\n lineItems,\n placeOrderButton,\n termsAndConditions,\n keepShoppingButton,\n checkoutExpressPaymentContainer,\n checkoutErrorRef\n } = props;\n\n return (\n \n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\n \n )}\n {!hasSalesOrder && (\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {checkoutExpressPaymentContainer}\n {checkoutExpressPaymentContainer && {title}}\n {guidedForm}\n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {!hasInvoiceLine\n ? orderSummary && \n : invoicePaymentSummary && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n \n )}\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\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 IAlertProps {\n message: string;\n}\n\nconst CheckoutAlert: React.FC = ({ message }) => (\n

    \n {message}\n

    \n);\n\nexport default CheckoutAlert;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IInvoicePaymentSummary {\n heading?: React.ReactNode;\n lines?: IInvoiceSummaryLines;\n}\nexport const getInvoicePaymentSummary = (input: ICheckoutProps): IInvoicePaymentSummary => {\n const {\n data: { checkout },\n resources: { totalAmountLabel, invoiceLabel, invoiceSummaryTitle },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutCart = get(checkout, 'result.checkoutCart');\n const cart = get(checkout, 'result.checkoutCart.cart');\n\n return {\n heading:

    {invoiceSummaryTitle}

    ,\n lines: checkoutCart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: totalAmountLabel,\n invoiceLabel,\n cart,\n context,\n typeName,\n telemetry,\n id,\n checkoutState: checkout.result\n })\n : 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 { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { CartLine, OrgUnitLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport get from 'lodash/get';\nimport groupBy from 'lodash/groupBy';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\ntype deliveryType = 'pickup' | 'ship' | 'email';\n\nexport interface IPickUpAtStore {\n PickUpAtStore: INodeProps;\n label: React.ReactNode;\n location: React.ReactNode;\n}\n\nexport interface IEmailDelivery {\n EmailDelivery: INodeProps;\n label: React.ReactNode;\n}\n\nexport interface ILineItem {\n LineId: string;\n LineItem: INodeProps;\n item?: React.ReactNode;\n pickUpAtStore?: IPickUpAtStore;\n emailDelivery?: IEmailDelivery;\n}\n\nexport interface ILineItemDeliveryGroup {\n LineItemDeliveryGroup: INodeProps;\n LineItemList: INodeProps;\n heading: React.ReactNode;\n lineItemWraper?: React.ReactNode;\n lineItemWraperIcon?: React.ReactNode;\n lineItems: ILineItem[];\n}\n\nexport interface ILineItems {\n LineItems: INodeProps;\n Header: INodeProps;\n heading: React.ReactNode;\n editLink: React.ReactNode;\n itemsForPickup?: ILineItemDeliveryGroup;\n itemsForShip?: ILineItemDeliveryGroup;\n itemsForEmail?: ILineItemDeliveryGroup;\n itemsGroupWithMulitplePickupMode?: ILineItemDeliveryGroup[];\n}\n\nexport const getLineItems = (input: ICheckoutProps, telemetryContent?: ITelemetryContent): ILineItems | undefined => {\n const pickupDeliveryModeCode = get(input, 'context.request.channel.PickupDeliveryModeCode');\n const emailDeliveryModeCode = get(input, 'context.request.channel.EmailDeliveryModeCode');\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n\n const _getDeliveryLocation = (cartLine: CartLine): string => {\n const orgUnitLocations = get(input, 'data.orgUnitLocations.result');\n if (!cartLine.FulfillmentStoreId || !orgUnitLocations) {\n return '';\n }\n\n const locationMatch = (orgUnitLocations || []).find((location: OrgUnitLocation): boolean => {\n return location.OrgUnitNumber === cartLine.FulfillmentStoreId;\n });\n\n return locationMatch && locationMatch.OrgUnitName;\n };\n\n const _getProduct = (productId: number): SimpleProduct | undefined => {\n const products = get(input, 'data.products.result') || [];\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n };\n\n const _getLineItemComponent = (cartLine: CartLine): JSX.Element | undefined => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId);\n const {\n id,\n typeName,\n context,\n config: { imageSettings, showShippingChargesForLineItems },\n resources: {\n quantityDisplayString,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount,\n configString,\n inputQuantityAriaLabel,\n discountStringText,\n shippingCharges\n },\n context: {\n request: { gridSettings }\n }\n } = input;\n const catalogs = input.data.catalogs?.result;\n if (!product) {\n return;\n }\n\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(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 const currencyCode = get(input, 'context.request.channel.Currency');\n return (\n \n );\n };\n\n const _getPickUpAtStoreComponents = (pickupDeliveryLocation: string): IPickUpAtStore => {\n const {\n resources: { pickUpAtStoreWithLocationText }\n } = input;\n\n return {\n PickUpAtStore: { className: 'ms-checkout__pick-up-at-store' },\n label: {pickUpAtStoreWithLocationText},\n location:
    {pickupDeliveryLocation}
    \n };\n };\n\n const _getEmailDeliveryComponents = (): IEmailDelivery => {\n const {\n resources: { emailDeliveryText }\n } = input;\n\n return {\n EmailDelivery: { className: 'ms-checkout__email-delivery' },\n label: {emailDeliveryText}\n };\n };\n\n const _getLineItemsComponents = (items: CartLine[]): ILineItem[] => {\n return items.map(cartLine => {\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const isPickUp = _getCartPickDeliveryMode(cartLine);\n const isEmailDelivery =\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? cartLine.DeliveryMode === emailDeliveryModeCode : false;\n return {\n LineId: cartLine.LineId || '',\n LineItem: { className: 'ms-checkout__line-item' },\n item: _getLineItemComponent(cartLine),\n pickUpAtStore: isPickUp ? _getPickUpAtStoreComponents(pickupDeliveryLocation) : undefined,\n emailDelivery: isEmailDelivery ? _getEmailDeliveryComponents() : undefined\n };\n });\n };\n\n const _getCartPickDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode ===\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode === pickupDeliveryModeCode\n : false;\n };\n\n const _getCartShipDeliveryMode = (cartLineItem: CartLine): boolean => {\n return !StringExtensions.isNullOrWhitespace(cartLineItem.DeliveryMode)\n ? retailMultiplePickUpOptionEnabled\n ? cartLineItem.DeliveryMode !==\n channelDeliveryOptionConfig?.result?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLineItem.DeliveryMode\n )\n : cartLineItem.DeliveryMode !== pickupDeliveryModeCode\n : false;\n };\n\n const _getGroupTitleComponent = (count: number, type: deliveryType): string => {\n const {\n resources: { itemLabel, itemsLabel, inStorePickUpLabel, shippingCountCheckoutLineItem }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? shippingCountCheckoutLineItem\n : type === 'pickup'\n ? inStorePickUpLabel\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _countItems = (items: CartLine[]): number => {\n return items.reduce((count, item) => {\n return count + (item.Quantity || 0);\n }, 0);\n };\n\n const _filterItemsByDiliveryType = (type: deliveryType): CartLine[] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n if (type === 'ship') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? _getCartShipDeliveryMode(cartLine) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n } else if (type === 'pickup') {\n return cart.CartLines.filter((cartLine: CartLine) =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== '' ? _getCartPickDeliveryMode(cartLine) : null\n );\n }\n return cart.CartLines.filter((cartLine: CartLine) => cartLine.DeliveryMode === emailDeliveryModeCode);\n };\n\n const _getLineItemsByDeliveryType = (type: deliveryType): ILineItemDeliveryGroup | undefined => {\n if ((pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) && (type === 'pickup' || type === 'email')) {\n return;\n }\n\n const items = _filterItemsByDiliveryType(type);\n\n if (items.length === 0) {\n return undefined;\n }\n\n const count = _countItems(items);\n const title = _getGroupTitleComponent(count, type);\n\n return {\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n heading:
    {title}
    ,\n lineItems: _getLineItemsComponents(items)\n };\n };\n\n const _getLineItems = (): ILineItems | undefined => {\n const {\n context,\n config: { lineItemsHeading },\n data: { products },\n resources: { editCartText }\n } = input;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.EditCart);\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const groupClass = retailMultiplePickUpOptionEnabled ? ' multiple-pickup-enabled' : '';\n if (!cart || !cart.CartLines || cart.CartLines.length === 0 || !products) {\n return undefined;\n }\n\n return {\n LineItems: { className: `ms-checkout__line-items${groupClass}` },\n Header: { className: 'ms-checkout__line-items-header' },\n heading: lineItemsHeading && lineItemsHeading.text && (\n \n ),\n editLink: (\n \n {editCartText}\n \n ),\n itemsForPickup: _getLineItemsByDeliveryType('pickup'),\n itemsForShip: _getLineItemsByDeliveryType('ship'),\n itemsForEmail: _getLineItemsByDeliveryType('email'),\n itemsGroupWithMulitplePickupMode: retailMultiplePickUpOptionEnabled\n ? _getLineItemsByDeliveryTypeWithMulitplePickupMode()\n : undefined\n };\n };\n\n const handleLineItemHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { lineItemsHeading }\n } = input;\n if (lineItemsHeading) {\n lineItemsHeading.text = event.target.value;\n }\n };\n\n const _getGroupTitleComponentWithMultiplePickUp = (\n count: number,\n type: deliveryType,\n deliveryMode?: string,\n fulFillmentStoreId?: string\n ): string => {\n const {\n resources: { itemLabel, itemsLabel }\n } = input;\n\n let emailDeliveryModeDesc: string = '';\n let pickupDeliveryModeDesc: string = '';\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n emailDeliveryModeDesc = emailDeliveryModeDesc\n ? emailDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === emailDeliveryModeCode)\n ?.Description!;\n });\n\n input.data.deliveryOptions.result?.find(productDeliveryOptions => {\n pickupDeliveryModeDesc = pickupDeliveryModeDesc\n ? pickupDeliveryModeDesc\n : productDeliveryOptions.DeliveryOptions?.find(deliveryOption => deliveryOption.Code === deliveryMode)?.Description!;\n });\n\n const pickupTitle: string = `${pickupDeliveryModeDesc}, ${fulFillmentStoreId}`;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n const title =\n type === 'ship'\n ? `(${count} ${suffix})`\n : type === 'pickup'\n ? `${pickupTitle} (${count} ${suffix})`\n : `${emailDeliveryModeDesc} (${count} ${suffix})`;\n return title.replace('{count}', count.toString()).replace('{suffix}', suffix);\n };\n\n const _filterItemsByMultiplePickupMode = (): CartLine[][] => {\n const cart = get(input, 'data.checkout.result.checkoutCart.cart');\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cart.CartLines);\n const cartLinesGroup: CartLine[] = [];\n const cartLinesGrp: CartLine[][] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryMode, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryMode] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n cartLinesGrp.push(cartLine);\n });\n });\n\n return cartLinesGrp;\n };\n\n const _getLineItemsByDeliveryTypeWithMulitplePickupMode = (): ILineItemDeliveryGroup[] | undefined => {\n if (pickupDeliveryModeCode === '' || pickupDeliveryModeCode === undefined) {\n return;\n }\n\n const {\n resources: { multiplePickUpLabel, shippingLable }\n } = input;\n\n const items = _filterItemsByMultiplePickupMode();\n\n if (items.length === 0) {\n return undefined;\n }\n\n const lineItemDeliveryGroup: ILineItemDeliveryGroup[] = [];\n items.map(item => {\n const count = _countItems(item);\n const cartLine = item[0];\n const pickupDeliveryLocation = _getDeliveryLocation(cartLine);\n const type: deliveryType =\n cartLine.FulfillmentStoreId && cartLine.DeliveryMode\n ? 'pickup'\n : cartLine.FulfillmentStoreId === '' &&\n cartLine.DeliveryMode === emailDeliveryModeCode &&\n !StringExtensions.isNullOrEmpty(emailDeliveryModeCode)\n ? 'email'\n : 'ship';\n const title = _getGroupTitleComponentWithMultiplePickUp(count, type, cartLine.DeliveryMode, pickupDeliveryLocation);\n const groupTitle = type === 'pickup' ? multiplePickUpLabel : type === 'ship' ? shippingLable : 'email';\n const iconClass = `ms-checkout__line-items-group-title-multiple-pickup-${type}icon`;\n lineItemDeliveryGroup.push({\n LineItemDeliveryGroup: { className: classnames('ms-checkout__line-items-delivery-group multiple-pickup', type) },\n LineItemList: { className: 'ms-checkout__line-items-list' },\n lineItemWraperIcon:
    ,\n lineItemWraper:
    {groupTitle}
    ,\n heading:
    {title}
    ,\n lineItems: _getLineItemsComponents(item)\n });\n });\n\n return lineItemDeliveryGroup;\n };\n\n return _getLineItems();\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport get from 'lodash/get';\nimport * as React from 'react';\n\nimport { ICheckoutData } from '../checkout.data';\nimport { ICheckoutProps } from '../checkout.props.autogenerated';\n\nexport interface IOrderSummary {\n orderSummaryProps: INodeProps;\n heading?: React.ReactNode;\n lines?: IOrderSummaryLines;\n}\nexport const getOrderSummary = (input: ICheckoutProps): IOrderSummary => {\n const {\n config: { orderSummaryHeading },\n data: { checkout },\n resources: {\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n otherCharges,\n customerAccountLabel\n },\n context,\n typeName,\n id,\n telemetry\n } = input;\n\n const checkoutState = get(checkout, 'result');\n const cart = get(checkout, 'result.checkoutCart.cart');\n const showLineItems = cart.CartLines && cart.CartLines.length > 0;\n const channelConfiguration = context.request.channel!;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const { channelDeliveryOptionConfig, featureState } = input.data;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(feature => feature.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = context.request.app.config.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n const handleOrderSummaryHeadingChange = (event: Msdyn365.ContentEditableEvent) => {\n const {\n config: { orderSummaryHeading }\n } = input;\n if (orderSummaryHeading) {\n orderSummaryHeading.text = event.target.value;\n }\n };\n\n return {\n orderSummaryProps: { className: 'ms-checkout-guest-profile__selected-item' },\n heading: orderSummaryHeading && orderSummaryHeading.text && (\n \n ),\n lines: showLineItems\n ? OrderSummary({\n checkoutState,\n cart,\n subTotalLabel,\n shippingLabel,\n taxLabel,\n orderTotalLabel,\n loyaltyLabel,\n giftcardLabel,\n totalDiscountsLabel,\n freeText,\n toBeCalculatedText,\n context,\n typeName,\n id,\n channelConfiguration,\n telemetry,\n otherChargeLabel: otherCharges,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- existing property.\n isTaxIncludedInPrice: cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled,\n customerAccountLabel\n })\n : 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 { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading as HeadingType } from '@msdyn365-commerce-modules/data-types';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport * as React from 'react';\nimport { focusOnCheckoutError, setCheckoutErrorFocus } from '../../../checkout-errors';\n\nexport interface ICheckoutGuidedCardProps {\n id?: string;\n step: number;\n title?: HeadingType;\n disabled?: boolean; // Module is not available\n isActive?: boolean; // Step === currentStep\n isVisted?: boolean; // Step < currentStep\n isExpanded?: boolean;\n isReady?: boolean;\n isPending?: boolean;\n isUpdating?: boolean;\n isSubmitting?: boolean;\n isCancelAllowed?: boolean;\n isMobile?: boolean;\n hasInitialized?: boolean;\n hasControlGroup?: boolean;\n shouldFocus?: boolean;\n children: React.ReactNode;\n moduleState?: IModuleStateManager;\n actionContext?: IActionContext;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n telemetryContent?: ITelemetryContent;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n onNext(): void;\n}\n\n/**\n *\n * CheckoutGuidedCard component.\n * @extends {React.Component}\n */\nclass CheckoutGuidedCard extends React.PureComponent {\n private readonly editButtonRef: React.RefObject = React.createRef();\n\n private readonly formCardRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: ICheckoutGuidedCardProps) {\n super(props);\n this.payLoad = getPayloadObject('click', props.telemetryContent!, '');\n }\n\n public componentDidUpdate(prevProps: ICheckoutGuidedCardProps): void {\n /**\n * Move to next step when current step is ready.\n */\n const { isActive, isReady, onNext, isVisted, onEdit, shouldFocus, children, moduleState, actionContext } = this.props;\n\n // Move to next step after completing the current step\n if (isActive && isReady) {\n onNext();\n }\n\n // Set the focus to Edit button once edit button appear\n // (It happens when current step switch to isReady status)\n const prevCanEdit = prevProps.isReady && prevProps.isVisted && !!prevProps.onEdit;\n const canEdit = isReady && isVisted && !!onEdit;\n if (!prevCanEdit && canEdit) {\n this.focusOnEditButton();\n this.scrollToTitle();\n }\n\n // Set the focus to the first focusable element\n // (It happens when current step switch to isUpdating status)\n if (prevProps.isReady && !isReady) {\n this.focusOnFirstFocusableElement();\n }\n\n // Set the focus for the checkout error\n if (shouldFocus && actionContext) {\n const childrenModules = this._getModules(children);\n\n // Set the focus for the module within the checkout section container\n if (childrenModules.length > 0) {\n for (const childModule of childrenModules) {\n const childId = this._getId(childModule);\n const childState = moduleState?.getModule(childId);\n\n if (childState?.hasError) {\n setCheckoutErrorFocus(childId, actionContext);\n return;\n }\n }\n } else {\n focusOnCheckoutError(this.formCardRef, actionContext);\n }\n }\n }\n\n public render(): JSX.Element | null {\n const {\n title,\n disabled,\n isExpanded,\n isActive,\n isVisted,\n children,\n isReady,\n isPending,\n isUpdating,\n hasInitialized,\n hasControlGroup,\n onEdit,\n resource\n } = this.props;\n const { changeBtnLabel } = resource;\n\n this.payLoad.contentAction.etext = TelemetryConstant.CheckoutChange;\n const changeBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const canEdit = hasControlGroup && isReady && isVisted && onEdit;\n\n return (\n \n
    \n {this.getTitle()}\n\n {canEdit && (\n \n {changeBtnLabel}\n \n )}\n
    \n\n \n
    {children}
    \n\n {this.renderFooder()}\n
    \n
    \n );\n }\n\n private readonly renderFooder = (): JSX.Element | null => {\n const { isVisted, isReady, isSubmitting, isCancelAllowed, hasControlGroup, onCancel, onSubmit, resource } = this.props;\n const { saveBtnLabel, cancelBtnLabel, saveAndContinueBtnLabel } = resource;\n\n const canSubmit = !isReady && onSubmit;\n const canCancel = !isReady && isVisted && isCancelAllowed && onCancel;\n\n if (!hasControlGroup || (!canSubmit && !canCancel)) {\n return null;\n }\n\n this.payLoad.contentAction.etext = isVisted ? TelemetryConstant.Save : TelemetryConstant.SaveContinue;\n const saveBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.Cancel;\n const cancelBtnAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
    \n {canSubmit && (\n \n {isVisted && isCancelAllowed ? saveBtnLabel : saveAndContinueBtnLabel}\n \n )}\n {canCancel && (\n \n {cancelBtnLabel}\n \n )}\n
    \n );\n };\n\n private readonly focusOnFirstFocusableElement = (): void => {\n const node = this.formCardRef.current as HTMLElement;\n const focussableElements = `\n a:not([disabled]),\n button:not([disabled]),\n input[type=submit]:not([disabled]),\n input[type=checkbox]:not([disabled]),\n input[type=text]:not([disabled]),\n input[type=radio]:not([disabled]),\n input[type=password]:not([disabled]),\n select:not([disabled]),\n textarea:not([disabled]),\n [tabindex]:not([disabled]):not([tabindex=\"-1\"])\n `;\n\n const child = node && node.querySelector && (node.querySelector(focussableElements) as HTMLElement);\n child && child.focus && child.focus();\n };\n\n private readonly focusOnEditButton = (): void => {\n // Focus on edit button\n const editButton =\n this.editButtonRef &&\n this.editButtonRef.current &&\n this.editButtonRef.current.focus &&\n (this.editButtonRef.current as HTMLElement);\n editButton && editButton.focus();\n };\n\n private readonly scrollToTitle = (): void => {\n // Scroll window to the title of the step that was just completed only in mobile viewport\n const formCard = this.props.isMobile && this.formCardRef && this.formCardRef.current && (this.formCardRef.current as HTMLElement);\n formCard && formCard.scrollIntoView();\n };\n\n private readonly getTitle = (): JSX.Element => {\n const { step, title } = this.props;\n const { headingTag: Tag = 'h2', text = '' } = title || {};\n return (\n \n \n {step + 1}. {` `}\n \n {text && {text}}\n \n );\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _getModules = (item: React.ReactNode): any[] => {\n return get(item, 'props.modules.primary') || [];\n };\n\n private readonly _getId = (item: React.ReactNode): string => {\n return get(item, 'id') || '';\n };\n}\n\nexport default CheckoutGuidedCard;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IModuleStateManager } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { Heading } from '@msdyn365-commerce-modules/data-types';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport get from 'lodash/get';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport GuidedCard from './guided-card';\n\nexport interface ICheckoutGuidedFormProps {\n items: React.ReactNode[];\n moduleState: IModuleStateManager;\n disableGuidedCheckoutFlow?: boolean;\n isMobile?: boolean;\n isEditor?: boolean;\n resource: {\n checkoutStepTitleFormat: string;\n saveBtnLabel: string;\n changeBtnLabel: string;\n cancelBtnLabel: string;\n saveAndContinueBtnLabel: string;\n };\n requestContext?: ICoreContext;\n telemetryContent?: ITelemetryContent;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n hasError?: boolean;\n hasShippingAddress?: boolean | undefined;\n hasCartDeliveryMode?: boolean | undefined;\n hasGuestCheckoutEmail?: boolean | undefined;\n isTermsAndConditionAccepted?: boolean | undefined;\n shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n shouldFocusOnCheckoutError?: boolean | undefined;\n}\n\ninterface ICheckoutGuidedFormState {\n currentStep: number;\n}\n\nconst paymentInstrumentModuleId = 'payment-instrument';\n\n/**\n *\n * CheckoutGuidedForm component.\n * @extends {React.Component}\n */\n@observer\nclass CheckoutGuidedForm extends React.PureComponent {\n @computed public get hasMissingInfo(): boolean {\n if (\n this.props.hasShippingAddress === false ||\n this.props.hasCartDeliveryMode === false ||\n this.props.hasGuestCheckoutEmail === false ||\n this.props.isTermsAndConditionAccepted === false\n ) {\n return true;\n }\n\n return false;\n }\n\n @computed public get hasOrderError(): boolean {\n for (const item of this.props.items) {\n const childId = this.getId(item);\n const state = this.props.moduleState.getModule(childId);\n\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n state.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (!isPaymentSectionContainer && !state.isDisabled && state.hasError) {\n return true;\n }\n }\n\n return false;\n }\n\n public state: ICheckoutGuidedFormState = {\n currentStep: 0\n };\n\n public componentDidMount(): void {\n /**\n * Append child modules.\n */\n const childIds = this.props.items.map((item: React.ReactNode) => get(item, 'props.id'));\n this.props.moduleState.init({ childIds });\n }\n\n public render(): JSX.Element | null {\n const { moduleState, items, resource } = this.props;\n if (!items || !moduleState) {\n return null;\n }\n\n const shouldCollapseAfterRedirect =\n this.props.isPaymentVerificationRedirection &&\n this.props.shouldEnableSinglePaymentAuthorizationCheckout &&\n !this.props.hasError &&\n !this.hasMissingInfo &&\n !this.hasOrderError;\n\n let previousModuleHasError = false;\n const childModule = this._enableAfterModule();\n return (\n
    \n {items.map((item: React.ReactNode) => {\n const childId = this.getId(item);\n const step = this.getStep(childId);\n const title = this.getHeading(item);\n const state = this.props.moduleState.getModule(childId);\n const {\n isReady,\n isPending,\n isUpdating,\n isDisabled,\n isCancelAllowed,\n onEdit,\n onCancel,\n onSubmit,\n hasModuleState,\n hasInitialized,\n hasError\n } = state || ({} as IModuleStateManager);\n\n let shouldFocus =\n !!this.props.shouldEnableCheckoutErrorDisplayMessaging &&\n !!this.props.shouldFocusOnCheckoutError &&\n !previousModuleHasError &&\n hasError;\n previousModuleHasError = previousModuleHasError || shouldFocus;\n\n return (\n \n {React.cloneElement(item as React.ReactElement, { enableControl: true })}\n \n );\n })}\n
    \n );\n }\n\n private readonly getEnabledModules = (): string[] => {\n const {\n moduleState: { childIds, getModule }\n } = this.props;\n return childIds.filter((childId: string) => {\n const state = getModule(childId);\n return !!state && !state.isDisabled;\n });\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _enableAfterModule = (): string => {\n const childIds: string[] = this.props.items.map((item: React.ReactNode) => get(item, 'props.id')).filter(Boolean);\n let id: string = '';\n for (let i = 0; i < childIds.length - 1; i++) {\n const childId = childIds[i];\n const nextChildId = childIds[i + 1];\n if (this._isPaymentSectionContainer(childId) && nextChildId) {\n id = nextChildId;\n }\n }\n return id;\n };\n\n /**\n * Check if it is a section container with payment module.\n * @param moduleId -- The id of the module.\n * @returns If it is a section container with payment module.\n */\n private readonly _isPaymentSectionContainer = (moduleId: string): boolean => {\n const sectionState = this.props.moduleState.getModule(moduleId);\n const isPaymentSectionContainer = ArrayExtensions.hasElements(\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n sectionState.childIds?.filter(currentId => currentId?.includes(paymentInstrumentModuleId))\n );\n\n if (isPaymentSectionContainer) {\n return true;\n }\n return false;\n };\n\n private readonly getStep = (id: string): number => {\n return this.getEnabledModules().indexOf(id);\n };\n\n private readonly getId = (item: React.ReactNode): string => {\n return get(item, 'props.id') || '';\n };\n\n private readonly getHeading = (item: React.ReactNode): Heading => {\n return get(item, 'props.config.heading') || '';\n };\n\n private readonly isExpanded = (step: number, moduleChildId: string, childId: string): boolean => {\n if (this.props.isEditor) {\n // Editorial mode: Expand all the drawers\n return true;\n }\n if (this.props.shouldEnableSinglePaymentAuthorizationCheckout && moduleChildId === childId) {\n return true;\n }\n return step > -1 && step <= this.state.currentStep;\n };\n\n private readonly isActive = (step: number): boolean => {\n return step === this.state.currentStep;\n };\n\n private readonly isVisted = (step: number): boolean => {\n return step > -1 && step < this.state.currentStep;\n };\n\n private readonly onNext = (): void => {\n this.setState({\n currentStep: this.state.currentStep + 1\n });\n };\n}\n\nexport default CheckoutGuidedForm;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { TelemetryEvent } from '@msdyn365-commerce/core';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React, { useState } from 'react';\n\ninterface ICheckoutPlaceOrderButtonProps {\n canPlaceOrder: boolean;\n checkoutBtnText: string;\n telemetryContent?: ITelemetryContent;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n isPlaceOrderLoading?: boolean;\n isExpressCheckoutApplied?: boolean;\n isPaymentVerificationRedirection?: boolean;\n placeOrder(): Promise;\n}\n\nconst buttonsStates: React.Dispatch>[] = [];\n\n/**\n * On place order function.\n * @param isBusy -Check is busy.\n * @param canPlaceOrder -Check can place order.\n * @param placeOrder -Place order function.\n * @returns Set state of button.\n */\nconst onPlaceOrderHandler = (isBusy: boolean, canPlaceOrder: boolean, placeOrder: () => Promise) => async () => {\n if (isBusy || !canPlaceOrder) {\n return;\n }\n buttonsStates.map(buttonSetState => {\n buttonSetState(true);\n return true;\n });\n await placeOrder();\n};\n\nconst CheckoutPlaceOrderButton: React.FC = ({\n checkoutBtnText,\n canPlaceOrder,\n placeOrder,\n telemetryContent,\n shouldEnableSinglePaymentAuthorizationCheckout,\n isPlaceOrderLoading,\n isExpressCheckoutApplied,\n isPaymentVerificationRedirection\n}) => {\n const [isBusy, setIsBusy] = useState(false);\n buttonsStates.push(setIsBusy);\n const payload = getPayloadObject(TelemetryEvent.Purchase, telemetryContent!, checkoutBtnText, '');\n const attributes = getTelemetryAttributes(telemetryContent!, payload);\n\n if (shouldEnableSinglePaymentAuthorizationCheckout && (!isExpressCheckoutApplied || isPaymentVerificationRedirection)) {\n return (\n \n {checkoutBtnText}\n \n );\n }\n\n return (\n \n {checkoutBtnText}\n \n );\n};\n\nexport default CheckoutPlaceOrderButton;\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 { SalesOrder } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { CartCheckout } from '../../../common/checkout';\n\nexport const OPERATIONS = {\n PayCard: 201,\n PayGiftCertificate: 214,\n PayLoyalty: 207,\n PayCustomerAccount: 202\n};\n\nexport default async (\n ctx: IActionContext,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n): Promise => {\n return CartCheckout(ctx, updatedCartVersion, isPaymentVerificationRedirection);\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 { ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { PlaceOrder } from '../../../common/place-order';\n\nexport default async (\n ctx: IActionContext,\n checkoutState: ICheckoutState | undefined,\n orderedProducts: SimpleProduct[] | undefined,\n redirect: boolean,\n updatedCartVersion?: number,\n isPaymentVerificationRedirection?: boolean\n) => {\n return PlaceOrder(ctx, checkoutState, orderedProducts, redirect, updatedCartVersion, isPaymentVerificationRedirection);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\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 getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): 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 {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\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 { IForm, IItem, IGiftCardBalanceCheckViewProps } from './index';\n\nexport const Form: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => {selectedGiftCard};\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
    }\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLinePriceEditor, ICartLinePriceEditorResources, PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ChannelDeliveryOptionConfiguration, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { CartLine, ProductCatalog, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { ArrayExtensions, getFallbackImageUrl, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, IncrementalQuantity, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classNames from 'classnames';\nimport * as React from 'react';\n\n/**\n * ICartlineResourceString: Interface for specifying the\n * resource strings that the component needs.\n */\nexport interface ICartlineResourceString {\n /**\n * Display string for discount label\n */\n discountStringText: string;\n\n /**\n * String for size key\n */\n sizeString: string;\n\n /**\n * String for color key\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension\n */\n configString: string;\n\n /**\n * String for style key\n */\n styleString: string;\n\n /**\n * String for amount key\n */\n amountString?: string;\n\n /**\n * Display string for quantity label\n */\n quantityDisplayString: string;\n\n /**\n * Display string for quantity label\n */\n inputQuantityAriaLabel: string;\n\n /**\n * Aria label for the decrement button in quantity component\n */\n decrementButtonAriaLabel: string;\n\n /**\n * Aria label for the increment button in quantity component\n */\n incrementButtonAriaLabel: string;\n\n /**\n * Original text screenreader\n */\n originalPriceText: string;\n\n /**\n * Current text screenreader\n */\n currentPriceText: string;\n\n /**\n * Shipping Charges Text\n */\n shippingChargesText: string;\n\n priceEditorResources?: ICartLinePriceEditorResources;\n salesAgreementPricePrompt?: string;\n}\n\ninterface ICartLineData {\n cartLine: CartLine | SalesLine;\n cartState?: ICartState;\n product?: SimpleProduct;\n catalogs?: ProductCatalog[];\n}\n\n/**\n * ICartLineProps: The props required to render cartLineitem.\n */\nexport interface ICartLineProps extends IComponentProps {\n /**\n * The flag to change the quantity component from intractable to static.\n */\n disableQuantityInteractivity?: boolean;\n\n /**\n * The primary image url.\n */\n primaryImageUrl?: string;\n\n /**\n * The product url.\n */\n productUrl?: string;\n\n /**\n * GridSettings for the product image in cartLine.\n */\n gridSettings: IGridSettings;\n\n /**\n * ImageSettings for the product image in cartLine.\n */\n imageSettings: IImageSettings;\n\n /**\n * Boolean flag to indicate if the item is out of stock.\n */\n isOutOfStock?: boolean;\n\n /**\n * Flag to make quantity section editable.\n */\n isQuantityEditable?: boolean;\n\n /**\n * Max quantity for line item.\n */\n maxQuantity?: number;\n\n /**\n * Current quantity for line item.\n */\n currentQuantity?: number;\n\n /**\n * Resource string for the component.\n */\n resources: ICartlineResourceString;\n\n /**\n * SalesLine flag.\n */\n isSalesLine?: boolean;\n\n /**\n * Error message to show in place of quantity.\n */\n errorMessage?: string;\n\n /**\n * Inventory information label.\n */\n inventoryInformationLabel?: string;\n\n /**\n * Inventory information class name.\n */\n inventoryLabelClassName?: string;\n\n /**\n * Flag to show/hide shipping charges for line items.\n */\n showShippingChargesForLineItems?: boolean;\n\n /**\n * Boolean flag to indicate if cart state status is ready.\n */\n isCartStateReady?: boolean;\n\n /**\n * Chanel Delivery Option configuration is from api.\n */\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n /**\n * The telemetry content.\n */\n telemetryContent?: ITelemetryContent;\n\n /**\n * The cart line index.\n */\n lineIndex?: number;\n\n /**\n * Quantity onChange callback.\n */\n quantityOnChange?(cartLine: CartLine, newQuantity: number, lineIndex?: number): boolean;\n priceCurrency?: string;\n}\n\ninterface IDimensionStrings {\n /**\n * String for size key.\n */\n sizeString: string;\n\n /**\n * String for color key.\n */\n colorString: string;\n\n /**\n * String associated with the configuration product dimension.\n */\n configString: string;\n\n /**\n * String for style key.\n */\n styleString: string;\n\n /**\n * String for amount key.\n */\n amountString?: string;\n}\n\n/**\n * Renders catalog label for the cart line.\n * @param props - Cart line props.\n * @returns Catalog label.\n */\nconst CatalogLabelComponent: React.FC = (props: ICartLineProps) => {\n const catalogId = props.data.cartLine.CatalogId;\n validateCatalogId(catalogId);\n\n if (!props.context.request.user.isB2b || !catalogId || !ArrayExtensions.hasElements(props.data.catalogs)) {\n return null;\n }\n\n const catalog = props.data.catalogs.find(item => item.RecordId === catalogId);\n\n if (!catalog || !catalog.Name) {\n return null;\n }\n\n return
    {catalog.Name}
    ;\n};\n\nconst CartLineItemFunctions = {\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings) => {\n if (!Product || !Product.Dimensions) {\n return [];\n }\n\n return Product.Dimensions.map(productDimension => {\n if (productDimension.DimensionTypeValue === 1) {\n return (\n
    \n \n {DimensionStrings.colorString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 2) {\n return (\n
    \n \n {DimensionStrings.configString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 3) {\n return (\n
    \n \n {DimensionStrings.sizeString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n\n if (productDimension.DimensionTypeValue === 4) {\n return (\n
    \n \n {Product.IsGiftCard ? DimensionStrings.amountString : DimensionStrings.styleString}:\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\n \n
    \n );\n }\n return null;\n });\n },\n\n renderDiscountLines: (props: ICartLineProps) => {\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\n return null;\n }\n\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\n return (\n
    \n \n {discountLine.OfferName ? discountLine.OfferName : ''}:{` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n \n {` (${discountLine.EffectivePercentage !== undefined ? discountLine.EffectivePercentage : ''}%)`}\n
    \n );\n });\n },\n renderInventoryLabel: (props: ICartLineProps) => {\n if (!props.inventoryInformationLabel) {\n return null;\n }\n const inventoryCssName = props.inventoryLabelClassName\n ? `msc-cart-line__product-inventory-label ${props.inventoryLabelClassName}`\n : 'msc-cart-line__product-inventory-label';\n return {props.inventoryInformationLabel};\n },\n\n /**\n * Gets the react node for product unit of measure display.\n * @param props - Icartline props.\n * @returns The node representing markup for unit of measure component.\n */\n renderUnitOfMeasure: (props: ICartLineProps) => {\n if (props.data.cartLine.IsInvoiceLine) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none') {\n return undefined;\n }\n\n const product = props.data.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n return undefined;\n }\n\n return (\n
    \n {product.DefaultUnitOfMeasure}\n
    \n );\n },\n renderShippingLabel: (props: ICartLineProps) => {\n const pickupDeliveryModeCode = props.context.request.channel?.PickupDeliveryModeCode;\n const channelDeliveryOptionConfig = props.channelDeliveryOptionConfig;\n const cartline = props.data.cartLine;\n let hasShippingMethod = false;\n if (channelDeliveryOptionConfig !== undefined) {\n hasShippingMethod = !!(\n cartline.DeliveryMode &&\n channelDeliveryOptionConfig.PickupDeliveryModeCodes?.some(deliveryMode => deliveryMode !== cartline.DeliveryMode)\n );\n } else {\n hasShippingMethod = !!(cartline.DeliveryMode && cartline.DeliveryMode !== pickupDeliveryModeCode);\n }\n if (!hasShippingMethod) {\n return undefined;\n }\n\n const shippingChargeLines = (cartline.ChargeLines || []).filter(chargeLine => chargeLine.IsShipping);\n\n if (shippingChargeLines.length === 0) {\n return undefined;\n }\n\n const freightFee = shippingChargeLines.reduce((chargeTotal, chargeLine) => {\n return chargeTotal + (chargeLine.CalculatedAmount || 0);\n }, 0);\n\n const priceComponent = (\n \n );\n return (\n <>\n \n {priceComponent}\n \n );\n },\n renderOtherCharges: (props: ICartLineProps) => {\n const cartline = props.data.cartLine;\n const otherCharges = cartline.ChargeLines?.filter(chargeline => !chargeline.IsShipping);\n\n return (\n (otherCharges &&\n otherCharges.map((otherCharge, key) => {\n return otherCharge && otherCharge.CalculatedAmount ? (\n
    \n \n \n \n \n
    \n ) : (\n ''\n );\n })) ||\n undefined\n );\n },\n\n /**\n * Render the sales agreement prompt.\n * @param props - The ICartLineProps.\n * @returns The JSX.Element.\n */\n renderSalesAgreementPrompt: (props: ICartLineProps): JSX.Element | null => {\n if (props.data.cartLine.SalesAgreementLineRecordId === 0) {\n return null;\n }\n return
    {props.resources.salesAgreementPricePrompt}
    ;\n }\n};\n\n// eslint-disable-next-line no-redeclare\nconst CartLine: React.FC = (props: ICartLineProps) => {\n const { isSalesLine, productUrl, resources } = props;\n const { product, cartLine } = props.data;\n\n const destructDimensionStrings = {\n sizeString: resources.sizeString,\n colorString: resources.colorString,\n styleString: resources.styleString,\n configString: resources.configString,\n amountString: resources.amountString\n };\n\n const fallbackImageUrl =\n product &&\n getFallbackImageUrl(\n product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n const productDimensions = product && CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings);\n const imageSettings = props.imageSettings;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\n const renderInventoryLabel = CartLineItemFunctions.renderInventoryLabel(props);\n const renderUnitOfMeasure = CartLineItemFunctions.renderUnitOfMeasure(props);\n const renderShippingLabel = CartLineItemFunctions.renderShippingLabel(props);\n const renderOtherCharges = CartLineItemFunctions.renderOtherCharges(props);\n const renderSalesAgreementPrompt = CartLineItemFunctions.renderSalesAgreementPrompt(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, '', product?.RecordId.toString());\n const productAttribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n const productName = product?.Name || cartLine.Description;\n const imgeClassName = props.data.cartLine.IsInvoiceLine ? 'msc-cart-line__invoice-image' : 'msc-cart-line__product-image';\n\n const onChange = (newValue: number): boolean => {\n if (props.quantityOnChange) {\n return props.quantityOnChange(props.data.cartLine, newValue, props.lineIndex);\n }\n return true;\n };\n\n const _generateErrorMessage = (): JSX.Element | null => {\n if (props.errorMessage) {\n return (\n
    \n \n {props.errorMessage}\n
    \n );\n }\n\n return null;\n };\n\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\n const nodes = [];\n if (props.isOutOfStock) {\n return null;\n }\n\n // No quantity selector for invoice line\n if (!props.data.cartLine.IsInvoiceLine) {\n if (props.data.product && props.isQuantityEditable) {\n nodes.push(\n
    \n
    {resources.quantityDisplayString}
    \n \n
    \n );\n } else {\n nodes.push(\n
    \n \n {props.data.cartLine.Quantity}\n
    \n );\n }\n }\n\n nodes.push(\n
    \n \n {(props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 && (\n <>\n \n {` ${props.resources.discountStringText || 'Discount'} `}\n \n \n \n )) ||\n null}\n
    \n );\n\n return nodes;\n };\n\n return (\n <>\n
    \n
    \n \n
    \n
    \n
    \n \n {MsDyn365.isBrowser ? (\n \n {productName}\n \n ) : null}\n {ArrayExtensions.hasElements(productDimensions) ? (\n
    {productDimensions}
    \n ) : (\n ''\n )}\n {renderUnitOfMeasure}\n
    \n \n
    \n {renderDisountLines}\n {renderInventoryLabel}\n {props.showShippingChargesForLineItems &&
    {renderShippingLabel}
    }\n {renderOtherCharges}\n {renderSalesAgreementPrompt}\n
    \n {_generateQuantityandPrice()}\n {props.data.cartLine.IsInvoiceLine && props.data.cartState && props.resources.priceEditorResources && (\n \n )}\n
    \n
    \n {_generateErrorMessage()}\n \n );\n};\n\nexport default CartLine;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

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

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

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

    \n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddOrderTemplateToCartComponent, ILinesAddedToCartDialogResources } from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { ProductList, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n getFallbackImageUrl,\n getProductUrlSync,\n OrderTemplate,\n OrderTemplateLine,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateActionMessageState } from '../order-template-list';\n\nexport interface ISingleOrderTemplateProps extends ProductList {\n orderTemplateState: IOrderTemplateActionMessageState;\n name?: string;\n orderTemplate: OrderTemplate;\n context: ICoreContext;\n imageSettings?: IImageSettings;\n enableImageProductLink?: boolean;\n removeFromOrderTemplateListText: string;\n addToBagText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n handlers: {\n onRemoveOrderTemplate(id: string): void | undefined;\n onDismiss(): void;\n };\n resources: {\n closeWindowButtonText: string;\n addToCartFailureMessage: string;\n addToCartSuccessMessage: string;\n addToCartProcessMessage: string;\n orderTemplateErrorMessage: string;\n linesAddedToCartDialogResources: ILinesAddedToCartDialogResources;\n };\n telemetryContent?: ITelemetryContent;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n}\n\nexport interface ISingleOrderTemplateViewProps {\n key: string;\n orderTemplateImage: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n orderTemplateStatusMessage?: React.ReactNode;\n orderTemplateName?: React.ReactNode;\n orderTemplateAriaLabel?: string;\n orderTemplateHeaderDivider?: React.ReactNode;\n}\n\nconst _removeItemFromOrderTemplateList = (props: ISingleOrderTemplateProps): void => {\n const { onRemoveOrderTemplate } = props.handlers;\n const { itemKey } = props;\n\n onRemoveOrderTemplate && itemKey && onRemoveOrderTemplate(itemKey);\n};\n\nconst OrderTemplateActions = {\n removeOrderTemplate: _removeItemFromOrderTemplateList\n};\n\n/**\n * Remove order template action.\n * @param input -Single order template props.\n * @returns Set remove order template.\n */\nconst removeOrderTemplateActionHandler = (input: ISingleOrderTemplateProps) => () => {\n OrderTemplateActions.removeOrderTemplate(input);\n};\n\nexport const OrderTemplateRender = (input: ISingleOrderTemplateProps): ISingleOrderTemplateViewProps | null => {\n const {\n Id,\n orderTemplate,\n removeFromOrderTemplateListText,\n orderTemplateState,\n handlers,\n name,\n imageSettings,\n context,\n telemetryContent,\n enableImageProductLink\n } = input;\n\n if (!Id) {\n return null;\n }\n\n const _getOrderTemplatePageUrl = (): string => {\n const url = getUrlSync('ordertemplate', context.actionContext) ?? '';\n const separator = url.includes('?') ? '&' : '?';\n if (Id) {\n return `${url}${separator}id=${Id}`;\n }\n return '';\n };\n\n const { onDismiss } = handlers;\n\n return {\n key: `${Id}-template`,\n orderTemplateImage: _renderOrderTemplateImages(context, orderTemplate.orderTemplateLines, imageSettings, enableImageProductLink),\n orderTemplateAriaLabel: _renderAriaLabel(input),\n orderTemplateName: (\n
    \n \n
    \n {orderTemplate.totalLines}\n {` `}\n line items\n
    \n
    \n
    \n ),\n addToCartButton: (\n
    \n \n
    \n ),\n removeButton: (\n \n ),\n orderTemplateStatusMessage: orderTemplateState && orderTemplateState.isOpen && orderTemplateState.userMessage && (\n
    \n \n {orderTemplateState.userMessage}\n \n
    \n )\n };\n};\n\n/**\n * On image click handler.\n * @param productUrl -Product url value.\n * @returns Assign window location.\n */\nconst onClickHandler = (productUrl: string) => () => {\n window.location.assign(productUrl);\n};\n\nconst _renderOrderTemplateImages = (\n context: ICoreContext,\n orderTemplateLines?: OrderTemplateLine[],\n imageSettings?: IImageSettings,\n enableImageProductLink?: boolean\n): JSX.Element | null => {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n lg: { q: 'w=140&h=140&m=6', w: 0, h: 0 },\n xl: { q: 'w=140&h=140&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n if (orderTemplateLines) {\n const count = orderTemplateLines.length < 4 ? orderTemplateLines.length : 4;\n\n return (\n
    \n {orderTemplateLines?.slice(0, count).map(line => {\n const productUrl = line.fullProduct\n ? _updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line?.productListLine?.CatalogId)\n : '';\n\n return (\n \n );\n })}\n
    \n );\n }\n return
    ;\n};\n\n// This method is used to update the product url with the catalogId\nconst _updateProductUrlCatalog = (productDetails: SimpleProduct, context: ICoreContext, catalogId: number | undefined): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return fullUrl.href;\n }\n return productUrl;\n};\n\nconst _renderAriaLabel = (props: ISingleOrderTemplateProps): string => {\n const { name } = props;\n return `${name}`;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { orderTemplateListStatus } from '../order-template-list';\n\nexport interface IOrderTemplateListStatusMessageProps {\n className?: string;\n errorType: orderTemplateListStatus;\n text?: string;\n}\n\nexport const OrderTemplateListStatusMessage: React.FC = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return

    {text}

    ;\n case 'FAILED':\n return

    {text}

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

    {text}

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

    {this._resultCountText()}

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

    \n {renderResultCountText()}\n

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

    {text}

    ;\n case 'FAILED':\n return

    {text}

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

    {text}

    ;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n\n if (cart.status === 'LOADING' || ObjectExtensions.isNullOrUndefined(orderTemplate) || orderTemplate.status === 'LOADING') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(this.className, className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || orderTemplate.status === 'FAILED') {\n const errorProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'FAILED',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources\n };\n\n return this.props.renderView(errorProps);\n }\n\n const orderTemplateResult = orderTemplate && orderTemplate.result;\n const orderTemplateLines = orderTemplateResult && orderTemplateResult.orderTemplateLines;\n\n if (!orderTemplateResult || !orderTemplateLines || orderTemplateLines.length === 0) {\n if (orderTemplateResult && !this._isFirstPage() && MsDyn365.isBrowser) {\n window.location.href = this._getOrderTemplatePageUrl();\n return null;\n }\n\n const emptyViewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'EMPTY',\n statusMessage: ,\n heading: heading && ,\n resources: this.props.resources,\n orderActions:\n orderTemplateResult &&\n this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n bulkOrderLineActions: orderTemplateResult && this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n }\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateViewProps = {\n ...(this.props as IOrderTemplateProps),\n OrderTemplateLines: {\n moduleProps: this.props,\n className: classnames(`${this.className}`, className)\n },\n status: 'SUCCESS',\n productsStatusMessage: this.state.isOpen && (\n
    \n \n {this.state.userMessage}\n \n
    \n ),\n heading: heading && ,\n OrderTemplateActions: {\n className: `${this.className}-action-bar`,\n tag: 'div'\n },\n ProductsTable: {\n className: `${this.className}__table`,\n tag: 'table',\n role: 'grid'\n },\n ProductsTableRow: {\n className: `${this.className}-table-line`,\n tag: 'tr'\n },\n ProductsTableHeading: this._renderProductListHeader(this.props.resources),\n ProductDetails: {\n className: `${this.className}-table-line__link`,\n tag: 'a'\n },\n orderLines: this._renderProductList(),\n callbacks: { updateQuantity: debounce(this._changeQuantity, 2000) },\n orderActions: this._renderOrderTemplateActions(orderTemplateResult, this._isChannelMultipleCatalogsFeatureEnabled()),\n pagination: this._renderPagination(),\n itemAddedToCartDialog: this._renderItemAddedToCartDialog(),\n bulkOrderLineActions: this._getOrderTemplateLineActions(orderTemplateResult.productList.Id),\n isDetailsDisplayed: this.state.isDetailsDisplayed,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n detailedProductView: this.state.detailedProductView,\n isMobile: this.isMobile\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public onSelect(line: IOrderTemplateLineViewModel, isChecked: boolean): void {\n line.isChecked = isChecked;\n\n const updated =\n this.state.productSelection.map(product => {\n if (product.fullProduct?.ProductDetails.ItemId === line.fullProduct?.ProductDetails.ItemId) {\n line.isChecked = isChecked;\n }\n return product;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n public onSelectAll(isChecked: boolean): void {\n const updated =\n this.state.productSelection.map(line => {\n line.isChecked = isChecked;\n return line;\n }) || [];\n\n this.setState({\n productSelection: updated\n });\n }\n\n private _renderProductListHeader(resources: IOrderTemplateResources): React.ReactNode {\n const {\n productImage,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productActionsText,\n selectAllRowsText,\n productLineCatalogName\n } = resources;\n const headers: IOrderTemplateTableHeadingProps = {\n productImage: productImage,\n productNumber: productNumberText,\n productName: productText,\n productUnitPrice: productUnitPriceText,\n productUOM: productUOMText,\n productQuantity: productQuantityText,\n productActions: productActionsText,\n selectAllRowsText,\n lines: this.state.productSelection,\n isMobile: this.isMobile,\n clickHandler: (isChecked: boolean) => {\n this.onSelectAll(isChecked);\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n productLineCatalogName: productLineCatalogName\n };\n\n return ;\n }\n\n private _getOrderTemplateLineActions(orderTemplateId: string): React.ReactNode {\n return (\n line.isChecked)}\n onAddSelectionToBag={this._onAddSelectionToBag}\n onRemoveSelection={this._onRemoveSelection}\n isMinifiedView={this.isMobile}\n isMultipleCatalogFeatureEnabledInHq={this._isChannelMultipleCatalogsFeatureEnabled()}\n telemetryContent={this.telemetryContent}\n />\n );\n }\n\n private _generateLinesAddedToCartDialogResources(): ILinesAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n };\n }\n\n private _generateItemAddedToCartDialogResources(): IItemAddedToCartDialogResources {\n return {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n itemAddedToCartHeaderItemOneText: this.props.resources.itemAddedToCartHeaderItemOneText,\n itemAddedToCartHeaderItemFormatText: this.props.resources.itemAddedToCartHeaderItemFormatText,\n itemAddedToCartHeaderMessageText: this.props.resources.itemAddedToCartHeaderMessageText,\n freePriceText: this.props.resources.freePriceText,\n originalPriceText: this.props.resources.originalPriceText,\n currentPriceText: this.props.resources.currentPriceText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private readonly _onRemoveSelection = (): void => {\n const { context, resources } = this.props;\n const { telemetry } = context;\n const { removeSelectedFailureMessage, removeSelectedSuccessMessage } = resources;\n const lines = this.state.productSelection;\n const productListLines = lines && lines.length && lines.filter(line => line.isChecked).map(line => line.productListLine);\n\n if (productListLines && productListLines.length > 0) {\n const productListId = productListLines[0].ProductListId;\n\n const maxWaitTimeInMilliSeconds: number = 1000;\n removeProductListLinesAsync({ callerContext: context.actionContext }, productListId!, productListLines)\n .then(async () => {\n this.setState({\n userMessage: removeSelectedSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n this.setState({\n userMessage: removeSelectedFailureMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n });\n }\n };\n\n private readonly _getOrderTemplatePageUrl = (): string => {\n let url = getUrlSync('ordertemplate', this.props.context.actionContext) || '';\n url = url.includes('?') ? url.substr(0, url.indexOf('?')) : url;\n if (this.props.data.orderTemplate?.result?.productList.Id) {\n return `${url}?id=${this.props.data.orderTemplate.result.productList.Id}`;\n }\n return '';\n };\n\n private readonly _onAddSelectionToBag = async (): Promise => {\n const lines = this.state.productSelection;\n const selectedLines = lines.filter(line => line.isChecked);\n if (selectedLines.length > 0) {\n for (const productLine of selectedLines) {\n const itemKey = productLine.fullProduct?.ProductDetails.ItemId ?? '';\n const product = productLine.fullProduct?.ProductDetails ?? {\n RecordId: 0,\n ProductTypeValue: 0,\n BasePrice: 0,\n Price: 0,\n AdjustedPrice: 0\n };\n const quantity = productLine.productListLine.Quantity ?? 0;\n if (this._isChannelMultipleCatalogsFeatureEnabled()) {\n const catalogId = productLine.productListLine.CatalogId;\n await this._addItemToBag(product, quantity, itemKey, catalogId);\n } else {\n await this._addItemToBag(product, quantity, itemKey);\n }\n }\n }\n return Promise.resolve(void 0);\n };\n\n private _renderOrderTemplateActions(\n orderTemplate: OrderTemplate,\n isMultipleCatalogFeatureEnabledInHq: boolean\n ): IOrderTemplateActionsViewProps {\n const { id, typeName, context, resources } = this.props;\n const {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n closeWindowButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n orderTemplateErrorMessage\n } = resources;\n\n const orderTemplateActions: IOrderTemplateActionsProps = {\n data: { orderTemplate },\n id,\n typeName,\n context,\n telemetryContent: this.telemetryContent,\n handlers: {\n onRenameTemplate: this._renameTemplate,\n onRemoveTemplate: this._removeTemplate\n },\n isMultipleCatalogFeatureEnabledInHq,\n renameOrderTemplateDialogStrings: this._generateOrderTemplateNameDialogResources(resources),\n resources: {\n addTemplateToBagButtonText,\n renameTemplateButtonText,\n deleteTemplateButtonText,\n addToCartFailureMessage,\n addToCartSuccessMessage,\n addToCartProcessMessage,\n closeWindowButtonText,\n orderTemplateErrorMessage,\n linesAddedToCartDialogResources: this._generateLinesAddedToCartDialogResources()\n }\n };\n\n return OrderTemplateActionsView(orderTemplateActions);\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.renameOrderTemplateTitleText,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateTitle,\n orderTemplateDescription: '',\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n orderTemplateButtonLabel: resources.renameOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelBtnLabel\n };\n }\n\n private readonly _getCurrentUrl = (reqContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n return new URL(reqContext.url.requestUrl.href);\n };\n\n /**\n * On close handler.\n */\n private readonly onCloseHandler = () => {\n this.setState({\n itemKey: this.state.itemKey,\n userMessage: this.state.userMessage,\n statusCssString: this.state.statusCssString,\n messageGlyph: this.state.messageGlyph,\n isOpen: this.state.isOpen,\n isItemAddedToOrderTemplateOpen: false\n });\n };\n\n private readonly _renderItemAddedToCartDialog = (): React.ReactNode | null => {\n if (!this.state.itemAddedToCartDialogData) {\n return null;\n }\n const isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState?.result?.find(feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature')\n ?.IsEnabled || false;\n\n return (\n \n );\n };\n\n private _isFirstPage(): boolean {\n return this._getCurrentPageNumber() === 0;\n }\n\n private _getCurrentPageNumber(): number {\n const itemsPerPage = this.props.config.itemsPerPage || 50;\n return (this.props.context.request.query && +this.props.context.request.query.skip / itemsPerPage) || 0;\n }\n\n private readonly _renderPagination = (): React.ReactNode | null => {\n const { config, context, data, resources } = this.props;\n const orderTemplate = data && data.orderTemplate && data.orderTemplate.result;\n if (!orderTemplate) {\n return null;\n }\n\n const fullUrl = this._getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 50;\n const currentPageNumber = this._getCurrentPageNumber();\n const skipCount = currentPageNumber * itemsPerPage;\n const totalItems = orderTemplate && orderTemplate.totalLines;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n\n return (\n \n );\n };\n\n private _renderProductList(): IOrderTemplateLineViewProps[] {\n const {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n priceFree,\n originalPriceText,\n currentPriceText,\n addOrderTemplateItemToBagButtonText,\n removeItemFromOrderTemplateButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n inputQuantityAriaLabel,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n } = this.props.resources;\n\n const { context, telemetry, data } = this.props;\n const { catalogs } = data;\n const { imageSettings } = this.props.config;\n\n return this.state.productSelection.map((line, index) => {\n const currentProductProps: IOrderTemplateLineProps = {\n orderTemplateLine: line,\n productListLine: line.productListLine,\n price: line.fullProduct?.ProductPrice,\n error: line.error,\n shouldDisable: line.shouldDisable,\n context,\n isQuantityDisabledForUpdate: this.state.isQuantityDisabledForUpdate,\n productUrl: line.fullProduct\n ? this._updateProductUrlCatalog(line.fullProduct.ProductDetails, context, line.productListLine.CatalogId)\n : '',\n imageSettings,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n quantity: line.productListLine.Quantity!,\n handlers: {\n onAddToBag: this._addItemToBag,\n onRemoveItem: this._removeItemFromOrderTemplateLines,\n onChangeQuantity: this._changeQuantity,\n onSelect: this.onSelect.bind(this)\n },\n resources: {\n selectOneRowText,\n moreButtonText,\n viewProductDetailsText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText,\n inputQuantityAriaLabel,\n removeFromOrderTemplateLinesText: removeItemFromOrderTemplateButtonText,\n addToBagButtonText: addOrderTemplateItemToBagButtonText,\n deleteButtonText,\n incrementButtonAriaLabel,\n decrementButtonAriaLabel,\n unavailableProductErrorMessage,\n outOfStockProductErrorMessage\n },\n index,\n isMobile: this.isMobile,\n toggleDetailsDisplayed: this._toggleDetailsDisplayed,\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogs: catalogs && catalogs.result\n };\n\n return OrderTemplateLineView(currentProductProps)!;\n });\n }\n\n private readonly _toggleDetailsDisplayed = (props: IOrderTemplateLineProps): void => {\n let state = {\n isDetailsDisplayed: !this.state.isDetailsDisplayed\n };\n if (props) {\n state = {\n ...state,\n ...{\n detailedProductView: OrderTemplateMobileLineView(props)\n }\n };\n }\n this.setState(state);\n };\n\n // This method is used to update the product url with the catalogId\n private readonly _updateProductUrlCatalog = (\n productDetails: SimpleProduct,\n context: ICoreContext,\n catalogId: number | undefined\n ): string => {\n const productUrl = getProductUrlSync(productDetails, context.actionContext, undefined);\n if (!StringExtensions.isNullOrWhitespace(productUrl) && catalogId !== undefined) {\n const absoluteUrl = new URL(productUrl, window.location.href);\n absoluteUrl.searchParams.set('catalogid', `${catalogId ?? 0}`);\n return absoluteUrl.href;\n }\n\n return productUrl;\n };\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _changeQuantity = async (itemKey: string, quantity: number, props?: IOrderTemplateLineProps) => {\n const { context, data, telemetry, config, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context) {\n if (orderTemplate?.result) {\n const orderTemplateLinesData = orderTemplate.result.orderTemplateLines;\n if (orderTemplateLinesData) {\n const orderLineIndex = orderTemplateLinesData.findIndex(\n (lines: OrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...orderTemplateLinesData[orderLineIndex] };\n if (orderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return;\n }\n const prevQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n // Update mobile modal\n if (props) {\n props.quantity = quantity;\n this.setState({\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n }\n\n this.setState({\n isQuantityDisabledForUpdate: true\n });\n\n updateProductListLinesAsync({ callerContext: context.actionContext }, orderTemplate.result.productList.Id, [\n line.productListLine\n ])\n .then(list => {\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isQuantityDisabledForUpdate: false,\n isOpen: false\n });\n if (list) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n orderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...orderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedOrderTemplate = { ...orderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveOrderTemplateLinesInput(context.actionContext.requestContext, config),\n updatedOrderTemplate\n );\n }\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable to update product quantity.');\n telemetry.error(error);\n const userMessage = resources.editOrderTemplateLineQuantityError;\n if (props) {\n props && (props.productListLine.Quantity = prevQuantity);\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true,\n detailedProductView: OrderTemplateMobileLineView(props)\n });\n } else {\n newProductListLine.productListLine.Quantity = prevQuantity;\n this.setState({\n itemKey,\n userMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isQuantityDisabledForUpdate: false,\n isOpen: true\n });\n }\n });\n }\n }\n }\n };\n\n private readonly _addItemToBag = async (\n product: SimpleProduct,\n quantity: number,\n itemKey: string,\n catalogId?: number | undefined\n ): Promise => {\n const { context, data, resources, telemetry } = this.props;\n const { cart } = data;\n const { maxQuantityLimitText, addedToCartFailureMessage } = resources;\n\n if (context) {\n if (cart.result) {\n const addProductToCartInput = {\n product,\n count: quantity,\n catalogId\n };\n\n await cart.result\n .addProductToCart(addProductToCartInput)\n .then((result: ICartActionResult) => {\n if (result.status === 'SUCCESS') {\n return getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(\n product.RecordId,\n this.props.context.actionContext.requestContext.apiSettings.channelId,\n product\n ),\n this.props.context.actionContext\n ).then(priceResult => {\n if (!priceResult) {\n return AsyncResult.reject('Failed to retrieve product price');\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n const isMiniCart = context.app.config.addToCartBehavior === 'showMiniCart';\n this.setState({\n itemKey,\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: !isMiniCart,\n itemAddedToCartDialogData: {\n product,\n productPrice: priceResult,\n quantity\n },\n isDetailsDisplayed: false\n });\n return AsyncResult.resolve();\n });\n } else {\n switch (result.substatus) {\n case 'MAXQUANTITY':\n if (context.app.config.maxQuantityForCartLineItem) {\n const cartLineQuantity: number | undefined =\n cart.result?.cart.CartLines &&\n cart.result?.cart.CartLines.find(result => result.ProductId === product.RecordId)?.Quantity;\n const defaultMessage = `You can only add ${context.app.config.maxQuantityForCartLineItem} of this item to your shopping bag`;\n this.setState({\n itemKey,\n userMessage:\n cartLineQuantity !== undefined\n ? maxQuantityLimitText\n .replace('{curQuantity}', cartLineQuantity.toString())\n .replace(\n '{maxQuantity}',\n context.app.config.maxQuantityForCartLineItem.toString()\n ) || defaultMessage\n : defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n } else {\n const defaultMessage = `Max quantity for cart line item is undefined. Please define in configuration settings.`;\n this.setState({\n itemKey,\n userMessage: defaultMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n case 'INVOICEINCART': {\n this.setState({\n itemKey,\n userMessage: result.errorDetails?.LocalizedMessage || addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n default:\n telemetry.debug('[order-template-lines] Unable to Update Cart Line from the order template lines');\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n return AsyncResult.resolve();\n }\n }\n })\n .catch((error: Error) => {\n telemetry.warning(error.message);\n telemetry.debug('[order-template-lines] Error trying to Update Cart Line from the order template lines');\n if (StringExtensions.isNullOrWhitespace(error.message)) {\n this.setState({\n itemKey,\n userMessage: error.message,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else {\n this.setState({\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n }\n });\n }\n }\n };\n\n private readonly _removeItemFromOrderTemplateLines = async (line: IOrderTemplateLineViewModel) => {\n const { context, data, telemetry } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const maxWaitTimeInMilliSeconds: number = 1000;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate?.result && line) {\n const featureStates = await getFeatureState(createGetFeatureStateInput(context.actionContext), context.actionContext);\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (ArrayExtensions.hasElements(featureStates)) {\n isMultipleCatalogFeatureEnabledInHq =\n featureStates.find(\n (featureState: FeatureState) => featureState.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n const catalogId = getCatalogId(context.actionContext.requestContext);\n if (isMultipleCatalogFeatureEnabledInHq) {\n line.productListLine.CatalogId = catalogId;\n }\n removeProductListLinesAsync({ callerContext: context.actionContext }, line.productListLine.ProductListId!, [\n line.productListLine\n ])\n .then(async () => {\n // eslint-disable-next-line no-promise-executor-return -- fix\n await new Promise(resolve => setTimeout(resolve, maxWaitTimeInMilliSeconds));\n window.location.reload();\n })\n .catch(error => {\n telemetry.warning('[order-template-lines] Unable remove items from the order template lines');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\n '[order-template-lines] Unable remove items from the order template lines user token or lineItemID was not found'\n );\n }\n }\n };\n\n private readonly _renameTemplate = async (_template: ProductList): Promise => {\n window.location.reload();\n return Promise.resolve();\n };\n\n private readonly _removeTemplate = () => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplate } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplate && orderTemplate.result) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.result.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: orderTemplate.result?.productList.Id || '',\n userMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n const newLink = getUrlSync('ordertemplatelist', this.props.context.actionContext);\n if (newLink) {\n window.location.assign(newLink);\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template] Failed to delete order template.');\n }\n };\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n }\n\n private readonly _getViewport = (): GridSize => {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n }\n }\n\n return 'xs';\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n
    \n
    \n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n
    \n {paginationNextText}\n
    \n );\n };\n}\n\nexport default OrderTemplateLines;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
      \n
    • {detailedProductView?.productImage}
    • \n
    • \n {productText}:\n {detailedProductView?.productInfo}\n
    • \n
    • \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n
    • \n
    • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
    • \n
    • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
    • \n
    • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
    • \n
    • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
    • \n {productsStatusMessage &&
    • {productsStatusMessage}
    • }\n
    \n
    \n \n \n \n \n
    \n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n
    {productNumber}
    \n
    \n {quantityLabel}:{` `}\n {productQuantity}\n
    \n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n
    \n );\n};\n\nexport default OrderTemplateLinesView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce, { getCatalogId, getUrlSync, IImageSettings, Image, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n convertProductDimensionTypeToDimensionTypes,\n getFallbackImageUrl,\n getProductUrlSync,\n ObjectExtensions,\n Random,\n StringExtensions,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IModuleProps, isMobile, VariantType, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { RemoveFromComparisonButtonComponent } from '../product-comparison';\nimport { ProductComparisonState } from '../product-comparison-state';\nimport {\n getProductsInPreviewProductComparisonAction,\n GetProductsInPreviewProductComparisonInput,\n IProductComparisonProductData\n} from './actions';\nimport { IProductComparisonPreviewData } from './product-comparison-preview.data';\nimport { IProductComparisonPreviewProps } from './product-comparison-preview.props.autogenerated';\n\n/**\n * Represents product comparison view props for main product info.\n */\nexport interface IProductComparisonPreviewProductMainInfo {\n productData: IProductComparisonProductData;\n productNameLink?: string;\n\n removeFromComparisonButton: React.ReactNode;\n productImage: React.ReactNode;\n productLink: React.ReactNode;\n}\n\n/**\n * Represents product comparison view props.\n */\nexport interface IProductComparisonPreviewViewProps extends IProductComparisonPreviewProps<{}> {\n moduleProps: IModuleProps;\n collapseButton: INodeProps;\n isMainContentReady: boolean;\n\n hasUserInteractedWithComparison?: boolean;\n isExpanded?: boolean;\n subheaderText?: string;\n productsMainInfo?: IProductComparisonPreviewProductMainInfo[];\n previewGreyPlaceHolders?: React.ReactNode;\n\n productComparisonLink?: string;\n goToComparisonButton?: React.ReactNode;\n clearAllButton?: React.ReactNode;\n\n handleCollapseClick?(): void;\n clearAllProductsFromTheComparison?(): void;\n removeProductFromList?(itemId: string): void;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonPreviewState {\n isExpanded?: boolean;\n productsData?: IProductComparisonProductData[];\n greyPlaceHoldersCount?: number;\n}\n\n/**\n * Extended props for the module including info about the product.\n */\nexport interface IProductComparisonPreviewFullProps extends IProductComparisonPreviewProps {}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductComparisonPreview extends React.PureComponent {\n public static readonly className = 'ms-product-comparison-preview';\n\n public static readonly containerClassName = `${ProductComparisonPreview.className}__container`;\n\n public static readonly mainContainerClassName = `${ProductComparisonPreview.containerClassName}__main-container`;\n\n public static readonly headerClassName = `${ProductComparisonPreview.mainContainerClassName}__header`;\n\n public static readonly headerLabelClassName = `${ProductComparisonPreview.headerClassName}__label`;\n\n public static readonly tableClassName = `${ProductComparisonPreview.mainContainerClassName}__table`;\n\n public static readonly tableRowClassName = `${ProductComparisonPreview.tableClassName}__product-row`;\n\n public static readonly footerClassName = `${ProductComparisonPreview.mainContainerClassName}__footer`;\n\n public static readonly collapseButtonClassName = `${ProductComparisonPreview.headerClassName}__collapse`;\n\n public static _displayedInstanceId?: string;\n\n private readonly _instanceId: string;\n\n private _hasUserInteractedWithComparison: boolean;\n\n public constructor(props: IProductComparisonPreviewFullProps) {\n super(props);\n\n this.state = {};\n\n this._instanceId = `${ProductComparisonPreview.className}-${this.props.id}-${Random.Guid.generateGuid()}`;\n ProductComparisonPreview._displayedInstanceId = this._instanceId;\n\n this._hasUserInteractedWithComparison = false;\n }\n\n public componentDidMount(): void {\n if (this._instanceId !== ProductComparisonPreview._displayedInstanceId) {\n return;\n }\n\n this._loadProducts();\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).listModifiedEvent.subscribe(\n {\n instanceId: this._instanceId,\n\n /**\n * Updates the state in case the state for the particular product was changed.\n */\n handler: () => {\n this._hasUserInteractedWithComparison = true;\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data downloading.\n this._loadProducts();\n }\n }\n );\n }\n\n public componentWillUnmount(): void {\n ProductComparisonState.instance(\n this.props.context.request,\n this.props.data.accountInformation?.result\n ).listModifiedEvent.unsubscribe(this._instanceId);\n }\n\n public render(): React.ReactNode {\n if (this._instanceId !== ProductComparisonPreview._displayedInstanceId) {\n return null;\n }\n\n const viewProps: IProductComparisonPreviewViewProps = {\n ...this.props,\n moduleProps: {\n moduleProps: this.props,\n className: ProductComparisonPreview.className,\n id: this._instanceId\n },\n collapseButton: this._renderCollapseButton(),\n isMainContentReady: false,\n hasUserInteractedWithComparison: this._hasUserInteractedWithComparison\n };\n\n const productData = this._getProdutComparisonDataByCatalogId(this.state.productsData ?? this.props.data.productsData?.result);\n\n if (!ArrayExtensions.hasElements(productData)) {\n return this.props.renderView(viewProps);\n }\n\n viewProps.isMainContentReady = true;\n\n const productsLimit = this._getProductsLimit();\n if (!ObjectExtensions.isNullOrUndefined(productsLimit)) {\n viewProps.subheaderText = this.props.resources.productComparisonPreviewHeaderTextWithLimit\n .replace('{0}', productData.length.toString())\n .replace('{1}', productsLimit.toString());\n }\n\n viewProps.isExpanded = this.state.isExpanded;\n viewProps.handleCollapseClick = this._handleCollapseClick;\n viewProps.productsMainInfo = this._getProductsMainInfo(productData);\n viewProps.previewGreyPlaceHolders = this._renderGreyPlaceHolders(productData);\n viewProps.productComparisonLink = getUrlSync('product-comparison', this.props.context.actionContext);\n viewProps.clearAllProductsFromTheComparison = this._clearAllProductsFromTheComparison;\n viewProps.removeProductFromList = this._removeProductFromList;\n viewProps.goToComparisonButton = this._renderGoToComparisonButton(viewProps.productComparisonLink);\n viewProps.clearAllButton = this._renderClearAllButton();\n\n return this.props.renderView(viewProps);\n }\n private _getProdutComparisonDataByCatalogId(productData: IProductComparisonProductData[] | undefined): IProductComparisonProductData[] {\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const productByCatalogId = productData?.filter(product => product.catalogId === catalogId) ?? [];\n return productByCatalogId;\n }\n private async _loadProducts(): Promise {\n const items = ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).items;\n const input = new GetProductsInPreviewProductComparisonInput(items);\n const productData = await getProductsInPreviewProductComparisonAction(input, this.props.context.actionContext);\n const productDataByCatalogId = this._getProdutComparisonDataByCatalogId(productData);\n this.setState({ productsData: productDataByCatalogId });\n this._getGreyPlaceHoldersCount(productDataByCatalogId);\n }\n\n private _getGreyPlaceHoldersCount(productData: IProductComparisonProductData[]): number | undefined {\n if (productData && ArrayExtensions.hasElements(productData)) {\n const limit = this._getProductsLimit();\n if (limit && this.props.context.app.config.displayGreyPlaceHolders) {\n const placeHolder = limit - productData.length;\n this.setState({ greyPlaceHoldersCount: placeHolder });\n return placeHolder;\n }\n }\n return;\n }\n\n private _getProductsMainInfo(products: IProductComparisonProductData[]): IProductComparisonPreviewProductMainInfo[] {\n const productImageContainerClassName = `${ProductComparisonPreview.tableRowClassName}__product-image-container`;\n const productImageClassName = `${productImageContainerClassName}__product-image`;\n const productNameClassName = `${ProductComparisonPreview.tableRowClassName}__product-name`;\n\n return products.map(productData => {\n const product = productData.product;\n\n let productNameLink: string | undefined;\n if (msdyn365Commerce.isBrowser) {\n const productUrl = getProductUrlSync(product, this.props.context.actionContext);\n const fullUrl = new URL(productUrl, window.location.href);\n if (isChannelTypeB2B(this.props.context.actionContext.requestContext)) {\n fullUrl.searchParams.set('catalogid', `${productData.catalogId}`);\n }\n product.Dimensions?.map(dimension => {\n const dimensionValue = dimension.DimensionValue?.Value;\n if (!StringExtensions.isNullOrWhitespace(dimensionValue)) {\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue);\n fullUrl.searchParams.set(dimensionName, dimensionValue!);\n }\n });\n productNameLink = fullUrl.href;\n }\n\n return {\n productNameLink,\n productData,\n removeFromComparisonButton: (\n \n ),\n productImage: (\n \n {this._renderProductImage(productImageClassName, productData.product)}\n \n ),\n productLink: (\n \n {productData.product.Name}\n \n )\n };\n });\n }\n\n /**\n * Represents product comparison preview view.\n * @returns Elements.\n */\n private _renderGreyPlaceHolders = (productData: IProductComparisonProductData[]): React.ReactNode[] | undefined => {\n const counts = this.state.greyPlaceHoldersCount;\n if (this.props.context.app.config.displayGreyPlaceHolders && counts! > 0) {\n const elements = [];\n for (let index = 0; index < counts!; index++) {\n elements.push(\n \n
    \n \n );\n }\n return elements;\n }\n return;\n };\n\n /**\n * Removes the product from a list.\n * @param itemId - The id of a product to remove.\n */\n private readonly _removeProductFromList = (itemId: string): void => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).removeItemById(itemId);\n this.setState(previousState => {\n return {\n productsData: previousState.productsData?.filter(item => item.itemId !== itemId)\n };\n });\n };\n\n /**\n * Toggle collapsing.\n */\n private readonly _handleCollapseClick: () => void = () => {\n this.setState(previousState => {\n return {\n isExpanded: !(previousState.isExpanded ?? this._hasUserInteractedWithComparison)\n };\n });\n };\n\n /**\n * Removes all products from the comparison.\n */\n private readonly _clearAllProductsFromTheComparison = () => {\n ProductComparisonState.instance(this.props.context.request, this.props.data.accountInformation?.result).clearAll();\n this.setState({ productsData: [] });\n };\n\n private _getProductsLimit(): number | undefined {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n if (viewport === 'xs' || viewport === 'sm') {\n return this.props.context.app.config.productComparisonMobileProductsLimit;\n }\n return this.props.context.app.config.productComparisonDesktopProductsLimit;\n }\n\n /**\n * Retrieves product image react node.\n * @param className - Class name to use.\n * @param product - Product info.\n * @returns React node.\n */\n private _renderProductImage(className: string, product?: SimpleProduct): React.ReactNode | undefined {\n if (ObjectExtensions.isNullOrUndefined(product)) {\n return undefined;\n }\n\n const defaultImageSettingQ = 'w=140&h=140&m=6';\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: defaultImageSettingQ, w: 0, h: 0 },\n lg: { q: defaultImageSettingQ, w: 0, h: 0 },\n xl: { q: defaultImageSettingQ, w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n\n private _renderCollapseButton(): INodeProps {\n const shouldBeExpanded = this.state.isExpanded ?? this._hasUserInteractedWithComparison;\n const headerContainerClassName = `${ProductComparisonPreview.mainContainerClassName}__header_button`;\n let collapseClassName = `${ProductComparisonPreview.collapseButtonClassName}__expanded`;\n if (!shouldBeExpanded) {\n collapseClassName = `${ProductComparisonPreview.collapseButtonClassName}__collapsed`;\n }\n\n return {\n className: classnames(headerContainerClassName, ProductComparisonPreview.collapseButtonClassName, collapseClassName),\n onClick: this._handleCollapseClick,\n role: 'button',\n tabIndex: 0\n };\n }\n\n private _renderGoToComparisonButton(productComparisonLink: string | undefined): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonCompareProductsButtonText}\n \n );\n }\n\n private _renderClearAllButton(): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonClearAllProductsButtonText}\n \n );\n }\n}\n\nexport default ProductComparisonPreview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport msdyn365Commerce from '@msdyn365-commerce/core';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductComparisonPreviewViewProps, ProductComparisonPreview } from './product-comparison-preview';\n\n/**\n * Represents product comparison preview view.\n * @param props - View props for product comparison preview.\n * @returns Functional component of product comparison preview.\n */\nexport const ProductComparisonPreviewViewFunctionalComponent: React.FC = props => {\n if (!props.isMainContentReady) {\n return null;\n }\n\n const shouldBeExpanded = props.isExpanded ?? props.hasUserInteractedWithComparison;\n\n const containerClassName = classnames(\n ProductComparisonPreview.mainContainerClassName,\n shouldBeExpanded ? '' : `${ProductComparisonPreview.mainContainerClassName}__collapsed`\n );\n\n return (\n \n \n \n \n \n \n \n \n \n {props.resources.productComparisonPreviewHeaderText}\n \n \n {props.subheaderText}\n \n \n \n \n \n \n \n {props.productsMainInfo?.map(info => {\n return (\n \n {info.removeFromComparisonButton}\n {info.productImage}\n \n );\n })}\n {props.previewGreyPlaceHolders}\n \n \n {props.productsMainInfo?.map(info => {\n return (\n \n {msdyn365Commerce.isBrowser ? info.productLink : undefined}\n \n );\n })}\n \n \n \n \n \n {props.clearAllButton}\n {props.goToComparisonButton}\n \n \n \n \n );\n};\n\nexport default ProductComparisonPreviewViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getRichTextHtml, ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * Represents resources for the component.\n */\nexport interface IProductSpecificationResources {\n productComparisonProductItemSpecificationTrue: string;\n productComparisonProductItemSpecificationFalse: string;\n}\n\n/**\n * Represent configuration of the component.\n */\nexport interface IProductSpecificationProps {\n telemetry: ITelemetry;\n specification?: AttributeValue;\n context: ICoreContext;\n\n resources: IProductSpecificationResources;\n}\n\n/**\n * Represents the product specification values that comes from the server.\n */\nexport enum SpecificationDataTypeValues {\n none = 0,\n currency = 1,\n dateTime = 2,\n decimal = 3,\n integer = 4,\n text = 5,\n boolean = 6,\n video = 40,\n image = 41\n}\n\n/**\n * Represents the component which renders product comparison table.\n */\nexport class ProductSpecification extends React.PureComponent {\n private static _renderCurrencyCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.CurrencyValue)) {\n return null;\n }\n\n return (\n \n {product.CurrencyCode}\n {product.CurrencyValue}\n \n );\n }\n\n private static _renderDateTimeCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isFunction(product.DateTimeOffsetValue?.toUTCString)) {\n return null;\n }\n\n return {product.DateTimeOffsetValue!.toUTCString()};\n }\n\n private static _renderIntegerCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.IntegerValue)) {\n return null;\n }\n\n return {product.IntegerValue};\n }\n\n private static _renderDecimalCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.FloatValue)) {\n return null;\n }\n\n return {product.FloatValue};\n }\n\n private static _renderTextCell(product: AttributeValue): React.ReactNode | null {\n if (ObjectExtensions.isNullOrUndefined(product.TextValue)) {\n return null;\n }\n\n // eslint-disable-next-line react/no-danger -- Implementation is a copy.\n return ;\n }\n\n public constructor(props: IProductSpecificationProps) {\n super(props);\n }\n\n public render(): React.ReactNode | null {\n const specification = this.props.specification;\n if (ObjectExtensions.isNullOrUndefined(specification)) {\n return null;\n }\n\n switch (specification.DataTypeValue) {\n case SpecificationDataTypeValues.none:\n // Return span here instead of null so the row still shows\n return ;\n case SpecificationDataTypeValues.currency:\n return ProductSpecification._renderCurrencyCell(specification);\n case SpecificationDataTypeValues.dateTime:\n return ProductSpecification._renderDateTimeCell(specification);\n case SpecificationDataTypeValues.decimal:\n return ProductSpecification._renderDecimalCell(specification);\n case SpecificationDataTypeValues.integer:\n return ProductSpecification._renderIntegerCell(specification);\n case SpecificationDataTypeValues.text:\n return ProductSpecification._renderTextCell(specification);\n case SpecificationDataTypeValues.boolean:\n return this._renderTrueFalseCell(specification);\n case SpecificationDataTypeValues.video:\n this.props.telemetry.warning('Got video specification type, not supported yet so skipping line');\n return null;\n case SpecificationDataTypeValues.image:\n this.props.telemetry.warning('Got image specification type, not supported yet so skipping line');\n return null;\n default:\n this.props.telemetry.warning(`Got unknown specification type ${specification.DataTypeValue ?? 'null'} so skipping line`);\n return null;\n }\n }\n\n private _renderTrueFalseCell(product: AttributeValue): React.ReactNode | null {\n if (product.BooleanValue) {\n return {this.props.resources.productComparisonProductItemSpecificationTrue};\n }\n return {this.props.resources.productComparisonProductItemSpecificationFalse};\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport React, { useCallback } from 'react';\n\n/**\n * Resources for the remove from comparison button component.\n */\nexport interface IRemoveFromComparisonButtonResources {\n productComparisonRemoveProductFromListAriaLabel: string;\n}\n\n/**\n * The configuration of the remove from comparison button component.\n */\nexport interface IRemoveFromComparisonButtonComponentProps extends IComponentProps {\n className: string;\n itemId: string;\n\n resources: IRemoveFromComparisonButtonResources;\n\n onClickHandler(itemId: string): void;\n}\n\n/**\n * Represents a button which handles adding to product comparison.\n * @param props - Configuration of the component.\n * @returns React functional component.\n */\nconst RemoveFromComparisonButtonFunctionalComponent: React.FC = (\n props: IRemoveFromComparisonButtonComponentProps\n) => {\n const onClick = useCallback(() => {\n props.onClickHandler(props.itemId);\n }, [props]);\n\n const { className } = props;\n\n return \n );\n }\n\n private readonly _goBack = (): void => {\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n if (document.referrer === '') {\n window.location.href = backToShoppingUrl;\n } else {\n window.history.back();\n }\n };\n\n /**\n * Retrieves localized text for dimension.\n * @param dimensionId - Dimension id.\n * @returns Localized text.\n */\n private _getDimensionName(dimensionId: number): string | undefined {\n if (dimensionId === ProductDimensionType.Color) {\n return this.props.resources.productComparisonProductItemColorDimension;\n }\n if (dimensionId === ProductDimensionType.Size) {\n return this.props.resources.productComparisonProductItemSizeDimension;\n }\n\n if (dimensionId === ProductDimensionType.Style) {\n return this.props.resources.productComparisonProductItemStyleDimension;\n }\n return undefined;\n }\n\n private getUpdatedDimensionsProps(dimensionId: number, products: IProductComparisonProductMainInfo[]) {\n const dimensionClassName = `${ProductComparison.dimensionsRowClassName}__dimension-${dimensionId}`;\n const dimensionDescription = this._getDimensionName(dimensionId);\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimensionId);\n let dimensionSelectionType = SelectionType.text;\n\n const dimensionsAsSwatchConfiguration: DimensionTypes[] | undefined = this.props.context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsAsSwatchConfiguration) &&\n !dimensionsAsSwatchConfiguration?.includes(DimensionTypes.none) &&\n dimensionsAsSwatchConfiguration?.includes(dimensionName)\n ) {\n dimensionSelectionType = SelectionType.swatch;\n }\n\n const productDimensionValues = products.map(productMainInfo => {\n let dimension: IDimensionResult[] = [];\n let textValue: string = '';\n let renderSwatch: JSX.Element | undefined;\n this.props.data.productsData?.result?.map(productsDimension => {\n if (productsDimension.productInfo.RecordId === productMainInfo.product.productInfo.RecordId) {\n dimension = productsDimension.dimensions?.dimensions ?? [];\n }\n return dimension;\n });\n\n if (dimensionSelectionType === SelectionType.swatch) {\n renderSwatch = (\n
    \n {dimension.map(dimensionItems => {\n return (\n \n {dimensionItems.result.map(dimensionItem => {\n let currentDimensionId: number | undefined;\n const swatches =\n dimensionItem.map(swatchItem => {\n let isDefaultDimension: boolean = false;\n const selectedDimensions = productMainInfo.product.productInfo.Dimensions?.filter(\n item => item.DimensionTypeValue === swatchItem.DimensionTypeValue\n );\n selectedDimensions?.map(selectedDimension => {\n if (\n selectedDimension.DimensionValue !== undefined &&\n selectedDimension.DimensionValue.DimensionId ===\n swatchItem.DimensionValue?.DimensionId\n ) {\n isDefaultDimension = true;\n }\n return isDefaultDimension;\n });\n\n if (swatchItem.DimensionTypeValue === dimensionId) {\n currentDimensionId = swatchItem.DimensionTypeValue;\n }\n const dimensionType = dimensionName;\n return {\n itemId: `${swatchItem.DimensionValue?.RecordId ?? ''}-${swatchItem.DimensionValue\n ?.Value ?? ''}`,\n value: swatchItem.DimensionValue?.Value ?? '',\n dimensionType,\n colorHexCode: swatchItem.DimensionValue?.ColorHexCode,\n imageUrl: swatchItem.DimensionValue?.ImageUrl,\n isDefault: isDefaultDimension\n };\n }) ?? [];\n if (currentDimensionId && currentDimensionId === dimensionId) {\n return (\n \n );\n }\n return null;\n })}\n
    \n );\n })}\n
    \n );\n }\n\n if (dimensionSelectionType === SelectionType.text) {\n dimension.map(item => {\n return item.result.map(items => {\n return items.map(dimensionItem => {\n if (dimensionItem.DimensionTypeValue === dimensionId) {\n const productDimensionSeperatorValue =\n textValue !== ''\n ? this.props.resources.productDimensionSeparator\n : this.props.resources.productDimensionSeparator.replace('/', '');\n textValue = textValue + format(productDimensionSeperatorValue, dimensionItem.DimensionValue?.Value ?? '');\n }\n return textValue;\n });\n });\n });\n }\n\n const dimensionProps = {\n RecordId: productMainInfo.product.productInfo.RecordId,\n Value: textValue,\n DimensionId: dimensionId,\n ImageUrl: productMainInfo.product.productInfo.PrimaryImageUrl\n };\n\n return {\n dimensionProps,\n productMainInfo,\n node: (\n
    \n {dimensionSelectionType === SelectionType.swatch ? renderSwatch : dimensionProps.Value}\n
    \n )\n };\n });\n return {\n dimensionId,\n dimensionName: dimensionDescription,\n dimensionClassName,\n productDimensionValues\n };\n }\n private _getSpecificationProps(specifications: AttributeValue[], products: IProductComparisonProductMainInfo[]) {\n return specifications.map(specification => {\n const specificationClassName = `${ProductComparison.specificationsRowClassName}__specification-${specification.Name!}`;\n\n const specificationValues = products.map(productMainInfo => {\n const productSpecification = productMainInfo.product.specifications?.specificationsList.find(\n productSpecifications => productSpecifications.Name === specification.Name\n );\n\n return {\n productSpecification,\n productMainInfo,\n node: (\n
    \n \n
    \n )\n };\n });\n\n return {\n specification,\n specificationClassName,\n specificationValues\n };\n });\n }\n\n private _renderHeading(): React.ReactNode {\n return ;\n }\n\n private _renderLoading(): React.ReactNode {\n return
    {this.props.resources.productComparisonLoadingText}
    ;\n }\n\n private _renderClearAllButton(): React.ReactNode {\n return (\n \n {this.props.resources.productComparisonClearAllButtonText}\n \n );\n }\n\n /**\n * Retrieves unique dimension ids of product.\n * @param products - Product.\n * @returns Unique dimension ids.\n */\n private getProductsDimensionsIds(products: IProductComparisonItemData[]): number[] {\n const dimensions = products.map(product => product.productInfo.Dimensions);\n const allDimensions: ProductDimension[] = ArrayExtensions.flatten(dimensions);\n\n const dimensionIds = ArrayExtensions.validValues(allDimensions.map(dimension => dimension.DimensionTypeValue));\n const uniqueDimensionIds = ArrayExtensions.unique(dimensionIds);\n\n return uniqueDimensionIds;\n }\n\n private _renderPreviousClicker(): React.ReactNode {\n return (\n \n
    \n );\n};\n\n/**\n * Renders quick order grid table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for desktop view.\n */\nexport const QuickOrderGridDesktopTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n if (product !== undefined) {\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
    \n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderGridProductDimensionsSeparator)}\n \n
    \n \n {renderProductPrice(props)}\n {renderUnitOfMeasure(props)}\n \n \n \n \n \n \n \n );\n }\n\n return null;\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for mobile view.\n */\nexport const QuickOrderGridMobileTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { min, max, quantity } = props;\n if (product !== undefined) {\n return (\n <>\n \n \n \n \n
    \n {product.RecordId}\n \n \n \n
    \n \n \n \n \n \n );\n }\n return null;\n};\n\n/**\n * Quick order table row component.\n * @param props - Configuration of the component.\n * @returns React node for the row.\n */\nexport const QuickOrderGridTableRowComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const rowClassName = `${props.className}__row`;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n let headerCells: JSX.Element;\n if (isMobileView) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\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 MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { QuickOrderGridProduct } from '../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../utilities';\nimport {\n IQuickOrderGridTableHeaderResources,\n IQuickOrderGridTableRowResources,\n QuickOrderGridTableHeaderComponent,\n QuickOrderGridTableRowComponent\n} from './components';\n\n/**\n * Quick order table data interface.\n */\ninterface IQuickOrderGridTableData {\n quickOrderGridProducts: QuickOrderGridProduct[];\n isOrderQuantityLimitsFeatureEnabled: boolean;\n}\n\n/**\n * Quick order table resources.\n */\nexport interface IQuickOrderGridTableResources extends IQuickOrderGridTableHeaderResources, IQuickOrderGridTableRowResources {}\n\n/**\n * Quick order table props.\n */\nexport interface IQuickOrderGridTableProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n moduleId: string;\n moduleTypeName: string;\n\n resources: IQuickOrderGridTableResources;\n isMobileView: boolean;\n imageSettings?: IImageSettings;\n callBacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * Quick order table component.\n */\nexport interface IQuickOrderGridTableComponent extends IComponent {}\n\n/**\n * The quick order table.\n * @param props -- The quick order table props.\n * @returns The quick order table element.\n */\nexport const QuickOrderGridTableComponent: React.FC = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\n const isOrderQuantityLimitsFeatureEnabled = props.data.isOrderQuantityLimitsFeatureEnabled;\n\n /**\n * Update the view port.\n */\n const updateViewport = () => {\n setIsMobile(props.isMobileView);\n };\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', updateViewport);\n }\n\n const headerClassName = `${props.className}__header`;\n const rowClassName = `${props.className}__row`;\n\n return (\n \n \n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n let quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n const product = quickOrderProduct.productLine.fullProduct;\n let min: number = 1;\n let max: number = 10;\n const behavior = product?.ProductDetails?.Behavior;\n if (isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(behavior)) {\n if (behavior.MinimumQuantity && behavior.MinimumQuantity > 0) {\n min = behavior.MinimumQuantity;\n }\n if (behavior.MaximumQuantity && behavior.MaximumQuantity > 0) {\n max = behavior.MaximumQuantity;\n }\n quantity = Math.max(quantity, min);\n }\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n return (\n \n );\n })}\n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getProductConfigure,\n IProductDimensionCallbacks,\n IProductDimensionConfigureResources,\n IProductDimensionConfigureViewProps\n} from '@msdyn365-commerce/components';\nimport {\n ProductDimension,\n ProductDimensionType,\n ProductDimensionValue,\n ProductListsDataActions,\n ProductListType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n addItemToProductListAction,\n AddItemToProductListInput,\n ArrayExtensions,\n createProductList,\n CreateProductListInput,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getScanResult,\n GetScanResultInput,\n getSelectedVariant,\n IDimensionForSelectedVariant,\n IPromiseQueue,\n ObjectExtensions,\n QuickOrderTemplate,\n QuickOrderTemplateLine,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCatalogId } from '@msdyn365-commerce/core';\nimport { ActiveProductListInput } from './actions';\nimport {\n EcommerceQuantityLimitConfigurationsFeatureName,\n IQuickOrderGridActionsProps,\n IQuickOrderGridActionsViewProps,\n IQuickOrderGridRowCallbacks,\n IQuickOrderGridState,\n QuickOrderGridActionsView,\n QuickOrderGridDrawer,\n QuickOrderGridFormComponent,\n QuickOrderGridProduct,\n QuickOrderGridTableComponent,\n RetailDefaultOrderQuantityLimitsFeatureName\n} from './components';\nimport { IQuickOrderGridData } from './quick-order-grid.data';\nimport { IQuickOrderGridProps, IQuickOrderGridResources } from './quick-order-grid.props.autogenerated';\n\n/**\n * QuickOrder Grid View props.\n */\nexport interface IQuickOrderGridViewProps extends IQuickOrderGridProps {\n header: JSX.Element;\n actions?: INodeProps;\n isB2bCustomer?: boolean;\n isQuickOrderGridFormExpanded: boolean;\n contentProps: INodeProps;\n drawer: INodeProps;\n loading?: React.ReactNode;\n quickOrderGridForm: INodeProps;\n quickOrderGridFormProductContent: INodeProps;\n quickOrderGridFormMsgContent: INodeProps;\n quickOrderGridProps: IModuleProps;\n form: React.ReactNode;\n configure?: IProductDimensionConfigureViewProps;\n isMobileView: boolean;\n container?: JSX.Element;\n orderActions?: IQuickOrderGridActionsViewProps | null;\n bulkPurchase?: React.ReactNode;\n}\n\n/**\n * QuickOrder Grid View port.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * QuickOrderGrid component.\n * @extends {React.PureComponent>}\n */\nclass QuickOrderGrid extends React.PureComponent, IQuickOrderGridState> {\n private readonly _productTextInput: React.RefObject;\n\n private readonly _quantityInput: React.RefObject;\n\n private readonly _waitTime: number = 500;\n\n private readonly _dimensionUpdateQueueMaxLength: number = 2;\n\n private readonly _errorCssClass: string = 'danger';\n\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n\n private readonly _quickOrderGridFormClass: string;\n\n private readonly _quickOrderGridFormProductContent: string;\n\n private readonly _quickOrderGridFormMsgContent: string;\n\n private readonly _telemetryContent: ITelemetryContent;\n\n private readonly _dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(this._dimensionUpdateQueueMaxLength);\n\n private _dimensions: { [id: number]: string } = {};\n\n private _initializedDimensions: Set = new Set();\n\n private readonly _cssClassNameConfigure: string = 'ms-quick-order_grid__content-form-main';\n\n private readonly _className: string = 'ms-quick-order-grid';\n\n // @ts-expect-error: Debouce needs to be used as type.\n private _cancellabelDebounce: debounce;\n\n private _isOrderQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isChannelLimitsFeatureEnabled: boolean = false;\n\n private _applyDefaultOrderSettingsForCartLine: boolean = false;\n\n private readonly _quickOrderGridCallbacks: IProductDimensionCallbacks = {\n initializeDimension: (initializedDimension: string): void => {\n if (initializedDimension) {\n this._initializedDimensions.add(initializedDimension);\n }\n },\n /**\n * Get Dropdown name.\n * @param selectedDimensionId - Dimension type.\n * @param selectedDimensionValueId - Resources.\n * @returns Dropdown name.\n */\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this._dimensions[selectedDimensionId] = selectedDimensionValueId;\n // Only trigger _updateDimensions when all dimensions are initialized\n if (this._initializedDimensions.size === this.state.productDimensions?.length) {\n return this._dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: string) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw new Error(error);\n }\n });\n }\n },\n\n /**\n * Get Dropdown name.\n * @param dimensionType - Dimension type.\n * @param resources - Resources.\n * @returns Dropdown name.\n */\n getDropdownName: (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n\n /**\n * Method to call on dimension change.\n * @param isUpdatingDimension - Flag to update dimension.\n */\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n }\n };\n\n private readonly _quickOrderGridRowCallbacks: IQuickOrderGridRowCallbacks = {\n /**\n * Method to call remove button.\n * @param line - Grid row product.\n */\n onRemoveItem: (line: QuickOrderGridProduct): void => {\n this._removeItemRowFromTable(line.productLine);\n },\n\n /**\n * Method to call on change quantity button.\n * @param productListLineId - Grid row product list line id.\n * @param quantity - Product quantity.\n * @returns - Falg to get confirmation for action.\n */\n onChangeQuantity: (productListLineId: string | undefined, quantity: number): boolean => {\n return this._changeRowQuantity(productListLineId, quantity);\n }\n };\n\n public constructor(props: IQuickOrderGridProps) {\n super(props);\n this._productTextInput = React.createRef();\n this._quantityInput = React.createRef();\n\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isQuickOrderGridFormExpanded: false,\n min: 0,\n max: 10,\n quantity: 1,\n productResponse: undefined,\n productDimensions: undefined,\n productDimensionErrorState: {\n configureErrors: {}\n },\n isMobile: this.isMobile,\n products: [],\n isUpdatingDimension: false,\n productListId: ''\n };\n\n this._quickOrderGridFormClass = 'ms-quick-order-grid__content-form';\n this._quickOrderGridFormProductContent = 'ms-quick-order-grid__content-form-main';\n this._quickOrderGridFormMsgContent = 'ms-quick-order-grid__content-form-msg';\n\n this._isOrderQuantityLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)\n ?.IsEnabled ?? false;\n\n this._isChannelLimitsFeatureEnabled =\n this.props.data.featureState.result?.find(featureState => featureState.Name === EcommerceQuantityLimitConfigurationsFeatureName)\n ?.IsEnabled ?? false;\n\n const cartConfiguration = this.props.data.cartConfiguration;\n this._applyDefaultOrderSettingsForCartLine = cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n }\n\n @computed public get isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public render(): JSX.Element | null {\n const { data } = this.props;\n if (!data.customerInformation.result) {\n return null;\n }\n const quickOrderTemplate = data.quickOrderTemplate;\n\n if (quickOrderTemplate?.result !== undefined) {\n this.setState({\n products: quickOrderTemplate.result.quickOrderTemplateLines,\n productListId: quickOrderTemplate.result.productList.Id\n });\n }\n const { className = '', maxQuantity } = this.props.config;\n const customerInfo = this.props.data.customerInformation.result;\n const {\n quickOrderGridModuleHeading,\n quickOrderGridModuleDescription,\n quickOrderGridAddtogrid,\n quickOrderGridProductQuantityInputLabel,\n quickOrderGridProductInputLabel,\n quickOrderGridProductDimensionTypeColor,\n quickOrderGridProductDimensionTypeConfiguration,\n quickOrderGridSelectDimensionFormatString,\n quickOrderGridProductDimensionTypeSize,\n quickOrderGridProductDimensionTypeStyle,\n quickOrderGridProductDimensionTypeAmount,\n quickOrderGridModulePageHeading\n } = this.props.resources;\n\n const productConfigureResources: IProductDimensionConfigureResources = {\n selectDimensionFormatString: quickOrderGridSelectDimensionFormatString,\n productDimensionTypeColor: quickOrderGridProductDimensionTypeColor,\n productDimensionTypeConfiguration: quickOrderGridProductDimensionTypeConfiguration,\n productDimensionTypeSize: quickOrderGridProductDimensionTypeSize,\n productDimensionTypeStyle: quickOrderGridProductDimensionTypeStyle,\n productDimensionTypeAmount: quickOrderGridProductDimensionTypeAmount\n };\n\n const { isQuickOrderGridFormExpanded, productDimensionErrorState, productResponse, productDimensions } = this.state;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
    \n \n
    \n );\n\n const viewProps: IQuickOrderGridViewProps = {\n ...(this.props as IQuickOrderGridProps),\n\n quickOrderGridProps: { className: classnames('ms-quick-order-grid', className), moduleProps: this.props },\n contentProps: { className: 'ms-quick-order-grid__content' },\n isB2bCustomer: customerInfo?.IsB2b,\n header,\n actions: {\n className: `${this._className}-action-bar`,\n tag: 'div'\n },\n drawer: {\n tag: QuickOrderGridDrawer,\n className: `${this._className}__drawer`,\n collapseProps: { isOpen: this.state.isQuickOrderGridFormExpanded },\n moduleHeadingText: quickOrderGridModuleHeading,\n moduleDescriptionText: quickOrderGridModuleDescription,\n requestContext: this.props.context.request,\n telemetryContent: this._telemetryContent\n },\n bulkPurchase: this._renderBulkPurchase(),\n quickOrderGridForm: {\n className: `${this._quickOrderGridFormClass} ${isQuickOrderGridFormExpanded ? 'qo-show' : 'qo-hide'}`\n },\n quickOrderGridFormProductContent: {\n className: this._quickOrderGridFormProductContent\n },\n quickOrderGridFormMsgContent: {\n className: this._quickOrderGridFormMsgContent\n },\n form: QuickOrderGridFormComponent({\n productTextInput: this._productTextInput,\n quantityTextInput: this._quantityInput,\n isAddtoListDisabled: !productResponse,\n ariaLabelAddtoCart: quickOrderGridAddtogrid,\n ariaLabelProduct: quickOrderGridProductInputLabel,\n ariaLabelQuantity: quickOrderGridProductQuantityInputLabel,\n maxChars: 50,\n minQuantity: this.state.min ?? 0,\n maxQuantity: this.state.max ?? maxQuantity,\n moduleClassName: this._className,\n quickOrderGridState: this.state,\n handleInputChange: this._handleInputChange,\n handleQuantityChange: this._handleQuantityChange,\n handleAddProductListClick: this._addItemToProductListLine\n }),\n configure:\n productResponse && productDimensions\n ? getProductConfigure(\n this._cssClassNameConfigure,\n this.props.context,\n this.props.friendlyName,\n this.props.telemetry,\n quickOrderGridSelectDimensionFormatString,\n productConfigureResources,\n this._quickOrderGridCallbacks,\n productResponse,\n productDimensions,\n productDimensionErrorState\n )\n : undefined,\n isQuickOrderGridFormExpanded: this.state.isQuickOrderGridFormExpanded,\n isMobileView: this.state.isMobile,\n container: ArrayExtensions.hasElements(this.state.products) ? this._renderListContainer() : undefined,\n orderActions: this._renderQuickOrderGridActions(quickOrderTemplate?.result)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderQuickOrderGridActions(quickOrderTemplate: QuickOrderTemplate | undefined): IQuickOrderGridActionsViewProps | null {\n const { typeName, context, resources } = this.props;\n const {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n } = resources;\n if (ArrayExtensions.hasElements(quickOrderTemplate?.quickOrderTemplateLines)) {\n const quickOrderGridActions: IQuickOrderGridActionsProps = {\n data: { quickOrderTemplate },\n moduleClassName: this._className,\n id: 'quick-order-grid',\n typeName,\n context,\n handlers: {\n removeProductList: this._removeProductList,\n onErrorMessage: (message: string) =>\n this.setState({\n topStateMessage: {\n messageText: message,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n })\n },\n quickOrderGridState: this.state,\n resources: {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }\n };\n\n return QuickOrderGridActionsView(quickOrderGridActions);\n }\n return null;\n }\n\n /**\n * Renders bulk purchase module.\n * @returns Bulk purchase module react node.\n */\n private _renderBulkPurchase(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!ArrayExtensions.hasElements(this.props.slots.bulkPurchaseSlots)) {\n return null;\n }\n\n const containerClass = `${this._className}__bulk-purchase`;\n return (\n
    \n {React.cloneElement(this.props.slots.bulkPurchaseSlots[0] as React.ReactElement, {\n productDimensions: this.state.productDimensions\n })}\n
    \n );\n }\n\n /**\n * Render list container.\n * @returns JSX element.\n */\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__table-content`;\n return
    {this._renderQuickOrderTable(this._className)}
    ;\n }\n\n /**\n * Initial the products on quick order.\n * @returns List of quick order products or undefined.\n */\n private _initQuickOrderGridProducts(): QuickOrderGridProduct[] {\n const products: QuickOrderTemplateLine[] = this.state.products;\n\n const quickOrderGridProduct: QuickOrderGridProduct[] = products.map((product: QuickOrderTemplateLine) => {\n return new QuickOrderGridProduct(product);\n });\n\n return ArrayExtensions.validValues(quickOrderGridProduct);\n }\n\n /**\n * Method to call on clear button.\n */\n private readonly _removeProductList = () => {\n const { context, data, telemetry, resources } = this.props;\n const { quickOrderTemplate } = data;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && quickOrderTemplate && quickOrderTemplate.result) {\n ProductListsDataActions.deleteAsync({ callerContext: context.actionContext }, quickOrderTemplate.result.productList)\n .then(() => {\n window.location.reload();\n })\n .catch((error: string) => {\n telemetry.warning('[quick-order-grid] Unable to delete product list.');\n telemetry.error(error);\n this._updateStatusState(\n resources.quickOrderGridDeleteProductListFailedText,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n });\n } else {\n telemetry.warning('[quick-order-grid] Failed to delete product list. Product List was not found');\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param className - Class name.\n * @returns JSX element.\n */\n private _renderQuickOrderTable(className: string): JSX.Element {\n const tableClassName = `${className}__table-list`;\n\n return (\n \n );\n }\n\n private _updateQuantitiesInState(product: SimpleProduct): void {\n const min: number = this._getMinQuantityForCartLineItem(this._isOrderQuantityLimitsFeatureEnabled, product);\n const max: number = this._getMaxQuantityForCartLineItem(\n this._isChannelLimitsFeatureEnabled || this._isOrderQuantityLimitsFeatureEnabled,\n product\n );\n let quantity: number = this._getQuantity(\n this._isOrderQuantityLimitsFeatureEnabled,\n this._applyDefaultOrderSettingsForCartLine,\n product\n );\n quantity = Math.max(quantity, min);\n\n this.setState({\n min,\n max,\n quantity\n });\n }\n\n private _getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isOrderQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MinimumQuantity &&\n product.Behavior.MinimumQuantity > 0\n ) {\n return product.Behavior.MinimumQuantity;\n }\n\n return 1;\n }\n\n private _getMaxQuantityForCartLineItem(isQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MaximumQuantity &&\n product.Behavior.MaximumQuantity > 0\n ) {\n return product.Behavior.MaximumQuantity;\n }\n\n return this.props.context.app.config.maxQuantityForCartLineItem;\n }\n\n /**\n * Retrieves the value of the IgnoreOrderSettings property from the cart configuration.\n * If the property is not present, it defaults to false.\n * @returns {boolean} The value of the IgnoreOrderSettings property.\n */\n private _getIgnoreOrderSettings(): boolean {\n const cartConfiguration = this.props.data.cartConfiguration;\n return !(cartConfiguration?.result?.IgnoreOrderSettings ?? false);\n }\n\n private _getQuantity(\n isOrderQuantityLimitsFeatureEnabled: boolean,\n applyDefaultOrderSettingsForCartLine: boolean,\n product: SimpleProduct\n ): number {\n let defaultQuantity = 1;\n\n if (!isOrderQuantityLimitsFeatureEnabled || !applyDefaultOrderSettingsForCartLine) {\n return defaultQuantity;\n }\n\n if (product?.Behavior?.DefaultQuantity && product.Behavior.DefaultQuantity > 0) {\n defaultQuantity = product.Behavior.DefaultQuantity;\n }\n\n return defaultQuantity;\n }\n\n /**\n * Method to called on product input change.\n * @param query - Product inventory info.\n */\n private readonly _handleInputChange = (query: string): void => {\n const queryMinLength = 4;\n if (!query || query.length > queryMinLength) {\n this.setState({ quantity: 0, productDimensions: [], productResponse: undefined });\n this._updateStatusState('', '', '', false);\n }\n if (this._cancellabelDebounce) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call -- existing code.\n this._cancellabelDebounce.cancel();\n }\n\n const { telemetry, context } = this.props;\n const zeroNumber = 0;\n if (!StringExtensions.isNullOrEmpty(query)) {\n this._cancellabelDebounce = debounce(() => {\n getScanResult(\n new GetScanResultInput(\n context.actionContext.requestContext.apiSettings,\n query,\n context.actionContext.requestContext.apiSettings.channelId\n ),\n this.props.context.actionContext\n )\n .then(results => {\n this.setState({\n productResponse: results?.Product,\n productDimensions: results?.ProductDimensionFull,\n isQuickOrderGridFormExpanded: true\n });\n if (results?.Product) {\n this._updateQuantitiesInState(results.Product);\n }\n })\n .catch((error: Error) => {\n telemetry.exception(error);\n telemetry.debug('Unable to get scan results');\n });\n }, this._waitTime);\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Existing code.\n this._cancellabelDebounce();\n }, zeroNumber);\n this.setState({ isQuickOrderGridFormExpanded: true });\n } else {\n this.setState({ productResponse: undefined, isQuickOrderGridFormExpanded: true });\n }\n };\n\n /**\n * Method to called on quantity change.\n * @param value - Quantity value.\n */\n private readonly _handleQuantityChange = (value: string): void => {\n let currentValue = Number.parseInt(value, 10);\n const inputElement = this._quantityInput.current instanceof HTMLInputElement && this._quantityInput.current;\n const quantityChangeDebounceTimeout = 200;\n let minimumQuantity = 0;\n let needToUpdateUIValue: boolean = false;\n if (this._isOrderQuantityLimitsFeatureEnabled && !ObjectExtensions.isNullOrUndefined(this.state.productResponse?.Behavior)) {\n const behavior = this.state.productResponse!.Behavior;\n minimumQuantity = behavior?.MinimumQuantity ?? 0;\n const newCurrentValue = Math.max(currentValue, minimumQuantity);\n if (newCurrentValue !== currentValue) {\n needToUpdateUIValue = true;\n }\n currentValue = newCurrentValue;\n }\n\n this.setState({ quantity: currentValue }, () => {\n debounce(() => {\n if (needToUpdateUIValue && !Number.isNaN(this.state.quantity) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.value = currentValue.toString();\n }\n }, quantityChangeDebounceTimeout)();\n });\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionType - Dimension Type.\n * @param resources - String resources.\n * @returns Dropdwon label.\n */\n private readonly _getDropdownName = (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n const isGiftCard = this.state.productResponse?.IsGiftCard;\n\n switch (dimensionType) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n /**\n * Method to update dimension and product in UI.\n */\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { productDimensions, productResponse } = this.state;\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n if (!productResponse || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this._dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // Step 1: Update state to indicate which dimensions are selected\n if (this.state.productDimensionErrorState.otherError) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const clearOtherErrorState = { ...this.state.productDimensionErrorState };\n clearOtherErrorState.otherError = undefined;\n this.setState({ productDimensionErrorState: clearOtherErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const dimensionKey of Object.keys(dimensionsToUpdate)) {\n if (this.state.productDimensionErrorState.configureErrors[dimensionKey]) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors[dimensionKey] = undefined;\n\n this.setState({ productDimensionErrorState: errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n // eslint-disable-next-line no-async-promise-executor -- existing code\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n productResponse.MasterProductId ? productResponse.MasterProductId : productResponse.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n const variantProduct = await selectedProduct;\n this.setState({ productResponse: variantProduct !== null ? variantProduct : undefined });\n };\n\n /**\n * Method to get updated dimension value.\n * @param productDimensionFull - Product dimension full.\n * @param newValueId - New Dimension value.\n * @returns Dimension Value.\n */\n private readonly _updateDimensionValue = (\n productDimensionFull: IDimensionForSelectedVariant,\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 /**\n * Method to get dropdwon name.\n * @param dimensionTypeValue - Dimension Type.\n * @param resources - String resources.\n * @param isGiftCard - Flag to check if its a giftcard product.\n * @returns Dropdwon error label.\n */\n private readonly _getDimensionErrorString = (\n dimensionTypeValue: number,\n resources: IQuickOrderGridResources,\n isGiftCard?: boolean\n ): string => {\n const amountErrorMessage = resources.quickOrderGridproductDimensionTypeAmountErrorMessage;\n\n switch (dimensionTypeValue) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.quickOrderGridproductDimensionTypeColorErrorMessage;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.quickOrderGridproductDimensionTypeConfigurationErrorMessage;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.quickOrderGridproductDimensionTypeSizeErrorMessage;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? amountErrorMessage : resources.quickOrderGridproductDimensionTypeStyleErrorMessage;\n default:\n return '';\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param productResponse - Simple Product.\n * @param quantity - Product Quantity.\n * @returns Flag to validate productlistline.\n */\n private readonly _validateCart = (productResponse: SimpleProduct, quantity: number): boolean => {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- existing code\n const missingDimensions = productResponse.Dimensions?.filter(\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\n );\n const minimumQuantity = 0;\n if (ArrayExtensions.hasElements(missingDimensions)) {\n const userMessage = this._getConfigureErrors(missingDimensions, false);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code\n if (this.state.productDimensionErrorState.configureErrors) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors = userMessage;\n\n this.setState({ productDimensionErrorState: errorState });\n return false;\n }\n }\n\n if (quantity <= minimumQuantity) {\n const resources = this.props.resources;\n this._updateStatusState(resources.quickOrderGridWrongQuantityErrorMsg, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n }\n return true;\n };\n\n /**\n * Initial the products on quick order.\n * @param result - Simple Product.\n * @param isGiftCard - Product Quantity.\n * @returns Flag to validate cart.\n */\n private _getConfigureErrors(\n result: ProductDimension[] | undefined,\n isGiftCard?: boolean\n ): { [configureId: string]: string | undefined } {\n if (!result) {\n return {};\n }\n const dimensions: { [configureId: string]: string | undefined } = {};\n const resources = this.props.resources;\n for (const dimension of result) {\n dimensions[dimension.DimensionTypeValue] = this._getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\n }\n return dimensions;\n }\n\n /**\n * Method to call on quantity change in row.\n * @param itemKey - Product Key.\n * @param quantity - Product quantity.\n * @returns Flag to update status.\n */\n private readonly _changeRowQuantity = (itemKey: string | undefined, quantity: number): boolean => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n if (quickOrderTemplate?.result) {\n const quickOrderTemplateLinesData = quickOrderTemplate.result.quickOrderTemplateLines;\n if (ArrayExtensions.hasElements(quickOrderTemplateLinesData)) {\n const orderLineIndex = quickOrderTemplateLinesData.findIndex(\n (lines: QuickOrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...quickOrderTemplateLinesData[orderLineIndex] };\n if (quickOrderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return true;\n }\n const previousQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n ProductListsDataActions.updateProductListLinesAsync(\n { callerContext: context.actionContext },\n quickOrderTemplate.result.productList.Id,\n [line.productListLine]\n )\n .then(list => {\n if (ArrayExtensions.hasElements(list)) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n quickOrderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...quickOrderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedProductList = { ...quickOrderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveProductListInput(context.actionContext.requestContext),\n updatedProductList\n );\n return true;\n }\n\n return false;\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable to update product quantity.');\n telemetry.error(error.message);\n const userMessage = 'Failed to update quantity value.';\n newProductListLine.productListLine.Quantity = previousQuantity;\n this._updateStatusState(userMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n });\n }\n return false;\n }\n\n return false;\n };\n\n /**\n * Method to call on remove item from table.\n * @param line - Order Template Line.\n */\n private readonly _removeItemRowFromTable = (line: QuickOrderTemplateLine): void => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n\n if (quickOrderTemplate?.result) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken) {\n ProductListsDataActions.removeProductListLinesAsync(\n { callerContext: context.actionContext },\n line.productListLine.ProductListId!,\n [line.productListLine]\n )\n .then(() => {\n window.location.reload(false);\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable remove item from product list grid');\n telemetry.error(error.message);\n });\n } else {\n telemetry.warning('[quick-order-grid] Unable remove items from product list grid user token was not found');\n }\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 /**\n * Method to call on add item from form.\n */\n private readonly _addItemToProductListLine = async (): Promise => {\n const {\n context: { actionContext },\n resources,\n telemetry\n } = this.props;\n const {\n quickOrderGridAddedToGridSuccessMessage,\n quickOrderGridAddedToGridFailureMessage,\n quickOrderGridAddedToGridDuplicateError\n } = resources;\n const { productResponse, quantity, productListId } = this.state;\n // get the current catalog id.\n const catalogId = getCatalogId(this.props.context.request);\n\n this._updateStatusState('', '', '', false);\n\n if (productResponse !== undefined && this._validateCart(productResponse, quantity)) {\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n await this._createProductList();\n }\n\n if (StringExtensions.isNullOrWhitespace(this.state.productListId)) {\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return;\n }\n const input = new AddItemToProductListInput(\n this.state.productListId,\n productResponse.RecordId,\n quantity,\n productResponse.DefaultUnitOfMeasure ?? 'ea',\n this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogId\n );\n\n await addItemToProductListAction(input, actionContext)\n .then(result => {\n if (result.ProductListId) {\n this._updateStatusState(quickOrderGridAddedToGridSuccessMessage, 'success', 'fas fa-check', true);\n window.location.reload();\n this.setState({});\n }\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error trying to Update Grid Line from the quick order grid');\n if (error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n this._updateStatusState(\n quickOrderGridAddedToGridDuplicateError,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n } else {\n this._updateStatusState(\n quickOrderGridAddedToGridFailureMessage,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n }\n });\n }\n };\n\n /**\n * Method to create product list.\n * @returns - ProductListId.\n */\n private _createProductList = async (): Promise => {\n const {\n context: { actionContext },\n telemetry,\n resources\n } = this.props;\n const { productListId } = this.state;\n const { quickOrderGridAddedToGridFailureMessage } = resources;\n\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n const input = new CreateProductListInput('', ProductListType.QuickOrder);\n\n await createProductList(input, actionContext)\n .then(result => {\n if (!StringExtensions.isNullOrWhitespace(result.Id)) {\n this.setState({ productListId: result.Id });\n return result.Id;\n }\n return '';\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error on creating productlist from quick order grid');\n telemetry.error(error.message);\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return '';\n });\n return '';\n }\n\n return productListId;\n };\n\n /**\n * Method to create product list.\n * @param messageText - Message Text.\n * @param statusCssString - Css class names.\n * @param messageGlyph - Glyph string.\n * @param isOpen - Flag to show.\n */\n private readonly _updateStatusState = (messageText: string, statusCssString: string, messageGlyph: string, isOpen: boolean): void => {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Showing user message in Form component.\n stateMessage: {\n messageText,\n statusCssString,\n messageGlyph,\n isOpen\n }\n });\n };\n}\nexport default QuickOrderGrid;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IErrorState } from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IDimensionForSelectedVariant, OrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { QuickOrderGridProduct } from './quick-order-grid-product';\n\n/**\n * QuickOrderGrid state message Interface.\n */\nexport interface IQuickOrderGridStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * QuickOrderGrid state Interface.\n */\nexport interface IQuickOrderGridState {\n isQuickOrderGridFormExpanded: boolean;\n isUpdatingDimension?: boolean;\n productResponse: SimpleProduct | undefined;\n productDimensions: IDimensionForSelectedVariant[] | undefined;\n min: number | undefined;\n max: number | undefined;\n quantity: number;\n stateMessage?: IQuickOrderGridStateMessage;\n topStateMessage?: IQuickOrderGridStateMessage;\n productDimensionErrorState: IErrorState;\n isMobile: boolean;\n products: OrderTemplateLine[];\n productListId: string;\n}\n\n/**\n * QuickOrder Grid Row view.\n */\nexport interface IQuickOrderGridRowViewModel extends OrderTemplateLine {\n isChecked: boolean;\n}\n\n/**\n * Interface for quick order callbacks.\n */\nexport interface IQuickOrderGridRowCallbacks {\n onRemoveItem(line: QuickOrderGridProduct): void;\n onChangeQuantity(orderTemplateLineId: string | undefined, quantity: number): boolean;\n}\n\n/**\n * Interface for quick order grid action view props.\n */\nexport interface IQuickOrderGridActionsViewProps {\n addProductListToBag: React.ReactNode;\n removeProductList?: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\n\nexport const EcommerceQuantityLimitConfigurationsFeatureName: string =\n 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature';\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridViewProps, IQuickOrderGridFormViewProps } from './index';\n\n/**\n * Render product dimension/configure dropdown.\n * @param dropdown -- Product dimension drop down.\n * @returns Dropdown.\n */\nconst renderConfigureDropdown = (dropdown: IProductDimensionConfigureDropdownViewProps): JSX.Element => {\n const { containerProps, labelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {errors}\n {select}\n \n );\n};\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n }\n return null;\n};\n\n/**\n * Render product dimension/configure container.\n * @param form -- Form props.\n * @param isMobileView -- Flag to check mobile view.\n * @param quickOrderForm - Form component container.\n * @param quickOrderProductContent - Form product component.\n * @param quickOrderMessageContent - Form user message component.\n * @param configure - Product Dimension component.\n * @returns Jsx element of quick order form component.\n */\nconst renderForm = (\n form: IQuickOrderGridFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMessageContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToListBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n \n \n );\n};\n\n/**\n * Retrieves current sort criteria.\n * @param props - QuickOrder Grid view props.\n * @returns - Render View.\n */\nconst quickOrderGridView: React.FC = props => {\n const {\n quickOrderGridProps,\n contentProps,\n form,\n quickOrderGridForm,\n drawer,\n configure,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n isMobileView,\n header,\n container,\n actions,\n orderActions\n } = props;\n\n return (\n \n {header}\n {actions && (\n \n {orderActions?.userMessage}\n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n \n )}\n \n \n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n \n \n {container}\n \n );\n};\n\nexport default quickOrderGridView;\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 );\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 \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 \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 \n
  • \n );\n } else {\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\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
    \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 && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\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 <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\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 <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\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 <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\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 <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > 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 <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\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 <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\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<SortColumn[]>('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 <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\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 <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\n );\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\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 { SocialMedia, SocialMediaComponent } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISocialShareItemConfig, ISocialShareItemProps, socialMedia } from './social-share-item.props.autogenerated';\n\nexport interface ISocialShareItemViewProps extends ISocialShareItemProps<ISocialShareItemConfig> {\n SocialShareItemElement: React.ReactNode | null;\n SocialShareItem: IModuleProps;\n}\n\n/**\n *\n * SocialShareItem component.\n * @extends {React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>>}\n */\nclass SocialShareItem extends React.PureComponent<ISocialShareItemProps<ISocialShareItemConfig>> {\n constructor(props: ISocialShareItemProps<ISocialShareItemConfig>) {\n super(props);\n\n this._getSocialShareItem = this._getSocialShareItem.bind(this);\n }\n\n public render(): JSX.Element | null {\n const viewprops = {\n ...this.props,\n SocialShareItem: {\n moduleProps: this.props,\n className: 'ms-social-share-item'\n },\n SocialShareItemElement: this._getSocialShareItem()\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n\n private _getSocialShareItem(): React.ReactNode | null {\n const src = this.props.config.icon;\n if (MsDyn365.isBrowser) {\n switch (this.props.config.socialMedia) {\n case socialMedia.facebook:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Facebook}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_facebook`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.twitter:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Twitter}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_twitter`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.pinterest:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Pinterest}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_pinterest`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.linkedin:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Linkedin}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_linkedin`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n case socialMedia.mail:\n return (\n <SocialMediaComponent\n socialMedia={SocialMedia.Mail}\n postUrl={document.URL}\n context={this.context}\n id={`${this.props.id}_mail`}\n typeName={this.props.typeName}\n data={{}}\n src={src}\n />\n );\n default:\n return null;\n }\n }\n return null;\n }\n}\n\nexport default SocialShareItem;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISocialShareItemViewProps } from './social-share-item';\n\nexport const SocialShareItemView: React.FC<ISocialShareItemViewProps> = props => {\n const { SocialShareItem, SocialShareItemElement } = props;\n\n if (!SocialShareItemElement) {\n props.context.telemetry.error('Social media is not valid, module wont render');\n return null;\n }\n return <Module {...SocialShareItem}>{SocialShareItemElement}</Module>;\n};\n\nexport default SocialShareItemView;\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 interface IWishlistItemDimension {\n key: string;\n className?: string;\n dimensionType: string;\n dimensionValue: string;\n}\n\nexport const WishlistItemDimension: React.FC<IWishlistItemDimension> = ({ key, className, dimensionType, dimensionValue }) => (\n <div key={key} className={className}>\n <span className='msc-wishlist-dimension__label'>{dimensionType}:</span>\n <span className='msc-wishlist-dimension__value'>{dimensionValue}</span>\n </div>\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 { IAny, ICoreContext, IGeneric, IImageSettings, Image, ITelemetry, msdyn365Commerce } from '@msdyn365-commerce/core';\nimport {\n CommerceListLine,\n ProductPrice,\n ReleasedProductType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n convertProductDimensionTypeToDimensionTypes,\n getFallbackImageUrl,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IWishlistItemActionMessageState } from '../wishlist-items';\nimport { WishlistItemDimension } from './wishlist-items-dimensions';\n\nexport interface IWishlistItemProps extends CommerceListLine {\n product: SimpleProduct;\n wishlistState: IWishlistItemActionMessageState;\n price?: ProductPrice;\n context: ICoreContext<IGeneric<IAny>>;\n productUrl: string;\n imageSettings?: IImageSettings;\n removeFromWishlistText: string;\n isInStock: boolean;\n addToCartText: string;\n outOfStockText: string;\n index: number;\n itemKey: string;\n telemetry: ITelemetry;\n moduleId: string;\n moduleTypeName: string;\n enableImageProductLink?: boolean;\n inventoryInformationLabel?: string;\n inventoryLabelClassName?: string;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onAddToCart(product: SimpleProduct, itemKey: string): void;\n onRemoveItem(productId: number): void | undefined;\n onDismiss(): void;\n };\n resources: {\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n };\n}\n\nexport interface IWishlistItemViewProps {\n key: string;\n productImage: React.ReactNode;\n productLink: React.ReactNode;\n productDimensions?: React.ReactNode[];\n productPrice?: React.ReactNode;\n addToCartButton?: React.ReactNode;\n removeButton?: React.ReactNode;\n productStatusMessage?: React.ReactNode;\n productName?: React.ReactNode;\n productAriaLabel?: string;\n entireProductLink?: string;\n inventoryInformation?: React.ReactNode;\n productUnitOfMeasure?: React.ReactNode;\n}\n\nconst _addItemToCart = (props: IWishlistItemProps): void => {\n const { product, itemKey, handlers } = props;\n const { onAddToCart } = handlers;\n\n onAddToCart && product && itemKey && onAddToCart(product, itemKey);\n};\n\nconst _removeItemFromWishlist = (props: IWishlistItemProps): void => {\n const { onRemoveItem } = props.handlers;\n const { RecordId } = props.product;\n\n onRemoveItem && RecordId && onRemoveItem(RecordId);\n};\n\nconst WishListItemActions = {\n addToCart: _addItemToCart,\n removeItem: _removeItemFromWishlist\n};\n\nconst _getFullProductLink = (props: IWishlistItemProps): string => {\n if (!msdyn365Commerce.isBrowser) {\n return '';\n }\n\n const fullUrl = new URL(props.productUrl, window.location.href);\n for (const dimension of props.product.Dimensions ?? []) {\n const dimensionValue = dimension.DimensionValue?.Value;\n if (!StringExtensions.isNullOrWhitespace(dimensionValue)) {\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue);\n fullUrl.searchParams.set(dimensionName, dimensionValue!);\n }\n }\n return fullUrl.href;\n // return updateProductUrl(productUrl, context, swatch);\n};\n\nconst _renderAriaLabel = (props: IWishlistItemProps): string => {\n const { product, price, context, resources } = props;\n\n const { Name, Dimensions } = product;\n const { productDimensionTypeColor, productDimensionTypeSize, productDimensionTypeStyle } = resources;\n\n let formattedPrice = 'Free';\n let dimensions = null;\n\n if (price) {\n formattedPrice =\n price.BasePrice === 0 ? resources.freePriceText : context.cultureFormatter.formatCurrency(price.BasePrice!, price.CurrencyCode);\n }\n\n if (Dimensions) {\n dimensions = Dimensions.map(productDimension => {\n switch (productDimension.DimensionTypeValue) {\n case 1:\n return `${productDimensionTypeColor}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`;\n case 3:\n return `${productDimensionTypeSize}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`;\n case 4:\n return `${productDimensionTypeStyle}${productDimension.DimensionValue && productDimension.DimensionValue.Value}`;\n default:\n return '';\n }\n });\n }\n\n return `${Name} ${formattedPrice} ${(dimensions && dimensions.join('')) || ''}`;\n};\n\n/**\n * Renders a link to a product based on the given props.\n * @param input - Wishlist item props with the info about the product.\n * @param productUrl - The url to the product.\n * @returns React component with a link to a product.\n */\nconst renderProductLink = (input: IWishlistItemProps, productUrl: string) => {\n const { telemetryContent } = input;\n const { RecordId: recordId, Name: productName } = input.product;\n const payLoad = getPayloadObject('click', telemetryContent!, '', recordId.toString());\n const productAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPageUrlWithSwatch = productUrl;\n return (\n !StringExtensions.isNullOrWhitespace(productPageUrlWithSwatch) && (\n <a\n href={productPageUrlWithSwatch}\n className='ms-wishlist-items__product-link'\n {...productAttributes}\n aria-label={_renderAriaLabel(input)}\n >\n {productName}\n </a>\n )\n );\n};\n\n/**\n * Renders a product name box.\n * @param productName - The text to display.\n * @returns React component with a name of a product.\n */\nconst renderProductName = (productName: string) => {\n return <div className='ms-wishlist-items__product-title'>{productName}</div>;\n};\n\n/**\n * Renders inventory information.\n * @param inventoryInformationLabel - The text to display.\n * @param inventoryLabelClassName - The component class name.\n * @returns React component.\n */\nconst renderInventoryInformationLabel = (inventoryInformationLabel: string | undefined, inventoryLabelClassName: string | undefined) => {\n const inventoryCssName = inventoryLabelClassName\n ? `ms-wishlist-items__inventory-label ${inventoryLabelClassName}`\n : 'ms-wishlist-items__inventory-label';\n return (\n !StringExtensions.isNullOrWhitespace(inventoryInformationLabel) && (\n <span className={inventoryCssName}>{inventoryInformationLabel}</span>\n )\n );\n};\n\n/**\n * Renders add to cart button.\n * @param input - Wishlist item props with the configuration.\n * @returns React component.\n */\nconst WishlistItemAddToCartButtonComponent = (input: IWishlistItemProps) => {\n const { isInStock, addToCartText, outOfStockText } = input;\n\n // Check if the product is service or not by product type.\n const isServiceItem = input.product.ItemTypeValue === ReleasedProductType.Service;\n\n const addItemAction = React.useCallback(() => {\n WishListItemActions.addToCart(input);\n }, [input]);\n\n return (\n <Button\n className='ms-wishlist-items__product-add-button'\n title={((isServiceItem || isInStock) && addToCartText) || outOfStockText}\n onClick={addItemAction}\n disabled={!(isServiceItem || isInStock)}\n >\n {((isServiceItem || isInStock) && addToCartText) || outOfStockText}\n </Button>\n );\n};\n\n/**\n * Renders remove from wishlist button.\n * @param input - Wishlist item props with the configuration.\n * @returns React component.\n */\nconst WishlistItemRemoveFromWishlistButtonComponent = (input: IWishlistItemProps) => {\n const { removeFromWishlistText } = input;\n\n const removeItemAction = React.useCallback(() => {\n WishListItemActions.removeItem(input);\n }, [input]);\n\n return <button className='ms-wishlist-items__product-remove-button' aria-label={removeFromWishlistText} onClick={removeItemAction} />;\n};\n\n/**\n * Gets the react node for product unit of measure display.\n * @param context - Module context.\n * @param unitOfMeasure - Product unit of measure.\n * @returns The node representing markup for unit of measure component.\n */\nconst renderUnitOfMeasure = (context: ICoreContext<IGeneric<IAny>>, unitOfMeasure?: string) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (context.app.config && (!context.app.config.unitOfMeasureDisplayType || context.app.config.unitOfMeasureDisplayType === 'none')) {\n return undefined;\n }\n\n if (!unitOfMeasure) {\n return undefined;\n }\n\n return (\n <div className='msc-wishlistitems__product-unit-of-measure'>\n <span>{unitOfMeasure}</span>\n </div>\n );\n};\n\nexport const WishlistItem = (input: IWishlistItemProps): IWishlistItemViewProps | null => {\n const {\n product,\n price,\n context,\n imageSettings,\n wishlistState,\n itemKey,\n handlers,\n inventoryInformationLabel,\n enableImageProductLink,\n inventoryLabelClassName\n } = input;\n\n if (!product) {\n return null;\n }\n\n const { RecordId, Name, PrimaryImageUrl, Dimensions } = product;\n if (product.RecordId) {\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const productUrl = _getFullProductLink(input);\n const productImage =\n Name &&\n _renderProductImage(\n context,\n product.Name!,\n PrimaryImageUrl === undefined ? fallbackImage : PrimaryImageUrl,\n fallbackImage,\n imageSettings\n );\n return {\n key: `${RecordId}-item`,\n productImage,\n productLink: renderProductLink(input, productUrl),\n productDimensions: Dimensions && _renderProductDimensions(input),\n productPrice: price && _renderPrice(input),\n productUnitOfMeasure: product.DefaultUnitOfMeasure && renderUnitOfMeasure(context, product.DefaultUnitOfMeasure),\n entireProductLink: enableImageProductLink ? productUrl : undefined,\n productAriaLabel: enableImageProductLink ? _renderAriaLabel(input) : undefined,\n productName: enableImageProductLink && Name && renderProductName(Name),\n\n addToCartButton: <WishlistItemAddToCartButtonComponent {...input} />,\n inventoryInformation: renderInventoryInformationLabel(inventoryInformationLabel, inventoryLabelClassName),\n removeButton: <WishlistItemRemoveFromWishlistButtonComponent {...input} />,\n productStatusMessage: wishlistState &&\n wishlistState.isOpen &&\n wishlistState.productId === RecordId &&\n wishlistState.itemKey === itemKey && (\n <div className='ms-wishlist-items__product-status'>\n <Alert color={wishlistState.statusCssString} isOpen={wishlistState.isOpen} toggle={handlers.onDismiss}>\n <span>{wishlistState.userMessage}</span>\n </Alert>\n </div>\n )\n };\n }\n return null;\n};\n\nconst _renderProductImage = (\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=315&h=315&m=6', w: 0, h: 0 },\n lg: { q: 'w=315&h=315&m=6', w: 0, h: 0 },\n xl: { q: 'w=315&h=315&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (image) {\n return (\n <Image\n requestContext={context.actionContext.requestContext}\n className='ms-wishlist-items__product-image'\n altText={heading}\n title={heading}\n src={image}\n fallBackSrc={fallbackImage}\n gridSettings={context.request.gridSettings!}\n imageSettings={imageSettings || defaultImageSettings}\n loadFailureBehavior='empty'\n />\n );\n }\n return null;\n};\n\nconst _renderPrice = (props: IWishlistItemProps): JSX.Element | null => {\n const { price, context, moduleId, moduleTypeName, resources } = props;\n\n if (price) {\n return (\n <PriceComponent\n id={moduleId}\n typeName={moduleTypeName}\n data={{ price }}\n className='ms-wishlist-items__product-price'\n freePriceText={resources.freePriceText}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n context={context}\n />\n );\n }\n return null;\n};\n\nconst _renderProductDimensions = (props: IWishlistItemProps): (React.ReactNode | undefined)[] => {\n const { product, resources } = props;\n\n if (!product || !product.Dimensions) {\n return [];\n }\n\n return product.Dimensions.map((dimension, index) => {\n if (!dimension.DimensionValue || !dimension.DimensionValue.Value) {\n return undefined;\n }\n\n let type = '';\n\n switch (dimension.DimensionTypeValue) {\n case 1: {\n type = resources.productDimensionTypeColor;\n break;\n }\n case 3: {\n type = resources.productDimensionTypeSize;\n break;\n }\n case 4: {\n type = resources.productDimensionTypeStyle;\n break;\n }\n default:\n return undefined;\n }\n\n return (\n <WishlistItemDimension\n key={`${product.RecordId}-dimensions-${index}`}\n className='msc-price ms-wishlist-items__product-dimension'\n dimensionType={type}\n dimensionValue={dimension.DimensionValue.Value}\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 classnames from 'classnames';\nimport * as React from 'react';\n\nimport { wishlistStatus } from '../wishlist-items';\n\nexport interface IWishlistItemsStatusMessageProps {\n className?: string;\n errorType: wishlistStatus;\n text?: string;\n}\n\nexport const WishlistItemsStatusMessage: React.FC<IWishlistItemsStatusMessageProps> = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return <p className={classnames('ms-wishlist-items__message-empty', className)}>{text}</p>;\n case 'FAILED':\n return <p className={classnames('ms-wishlist-items__message-failed', className)}>{text}</p>;\n case 'LOADING':\n default:\n return <p className={className ? 'ms-wishlist-items__message-exists-product' : 'ms-wishlist-items__message-waiting'}>{text}</p>;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { FullProduct } from '@msdyn365-commerce/commerce-entities';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { AsyncResult, CommerceList, CommerceListLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { createGetByCustomerInput, removeLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CommerceListsDataActions.g';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport {\n ArrayExtensions,\n getProductUrlSync,\n IProductInventoryInformation,\n QueryResultSettingsProxy\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n updateMaxQuantityForCartLineItem\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport getItemsInWishlists, { ActiveWishlistInput } from './actions/get-items-in-wishlists';\nimport { IWishlistItemViewProps, WishlistItem, WishlistItemsStatusMessage } from './components';\nimport { IWishlistItemsData } from './wishlist-items.data';\nimport { IHeadingData, IWishlistItemsProps } from './wishlist-items.props.autogenerated';\n\nexport interface IWishlistItemActionMessageState {\n productId: number;\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isError: boolean;\n}\n\nexport type wishlistStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IWishlistItemsViewProps extends IWishlistItemsProps<IWishlistItemsData> {\n WishlistItems: IModuleProps;\n status?: wishlistStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n Products?: INodeProps;\n Product?: INodeProps;\n ProductDetails?: INodeProps;\n ProductDimensions?: INodeProps;\n products?: IWishlistItemViewProps[];\n telemetryContent?: ITelemetryContent;\n statusNotExistsMessage?: React.ReactNode;\n}\n\n/**\n *\n * WishlistItems component.\n * @extends {React.PureComponent<IWishlistItemsProps<IWishlistItemsData>, IWishlistItemActionMessageState>}\n */\n@observer\nclass WishlistItems extends React.Component<IWishlistItemsProps<IWishlistItemsData>, IWishlistItemActionMessageState> {\n private readonly telemetryContent: ITelemetryContent;\n constructor(props: IWishlistItemsProps<IWishlistItemsData>) {\n super(props);\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<void> {\n this.setState({ isError: false });\n }\n\n public shouldComponentUpdate(nextProps: IWishlistItemsProps<IWishlistItemsData>, nextState: IWishlistItemActionMessageState): 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 { heading, className } = this.props.config;\n const { emptyWishlistText, wishlistErrorGettingWishlist, noLongerExitsWishlistItemText } = this.props.resources;\n const { cart, productAvailability, wishlists, products } = this.props.data;\n\n if (cart.status === 'LOADING' || productAvailability.status === 'LOADING' || wishlists.status === 'LOADING') {\n const errorProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps<IWishlistItemsData>),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'LOADING',\n\n statusMessage: <WishlistItemsStatusMessage errorType='LOADING' text='Loading...' />,\n heading: this._renderHeading(heading)\n };\n return this.props.renderView(errorProps);\n }\n\n if (cart.status === 'FAILED' || productAvailability.status === 'FAILED' || wishlists.status === 'FAILED') {\n const errorProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps<IWishlistItemsData>),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'FAILED',\n statusMessage: <WishlistItemsStatusMessage errorType='FAILED' text={wishlistErrorGettingWishlist} />,\n heading: this._renderHeading(heading)\n };\n\n return this.props.renderView(errorProps);\n }\n\n const productsList = products && (products as AsyncResult<FullProduct[]>).result;\n\n if (productsList && productsList.length === 0) {\n const emptyViewProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps<IWishlistItemsData>),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'EMPTY',\n statusMessage: <WishlistItemsStatusMessage errorType='EMPTY' text={emptyWishlistText} />,\n heading: this._renderHeading(heading)\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IWishlistItemsViewProps = {\n ...(this.props as IWishlistItemsProps<IWishlistItemsData>),\n WishlistItems: {\n moduleProps: this.props,\n className: classnames('ms-wishlist-items', className)\n },\n status: 'SUCCESS',\n heading: this._renderHeading(heading),\n Products: {\n className: 'ms-wishlist-items__products',\n tag: 'ul'\n },\n Product: {\n className: 'ms-wishlist-items__product',\n tag: 'li'\n },\n ProductDetails: {\n className: 'ms-wishlist-items__product-link',\n tag: 'a'\n },\n telemetryContent: this.telemetryContent,\n ProductDimensions: {\n className: 'ms-wishlist-items__product-dimensions'\n },\n products: productsList && this._renderProductList(productsList),\n statusNotExistsMessage:\n productsList && this._getProductNotExists(productsList, emptyWishlistText, noLongerExitsWishlistItemText)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: MsDyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n private _getProductNotExists(products: FullProduct[], emptytext: string, noLongerExisttext: string): JSX.Element | null {\n if (this.state && this.state.isError) {\n if (products.length === 0) {\n return <WishlistItemsStatusMessage errorType='SUCCESS' text={emptytext} />;\n }\n return (\n <WishlistItemsStatusMessage\n className={'ms-wishlist-items__message-exists-product'}\n errorType='SUCCESS'\n text={noLongerExisttext}\n />\n );\n }\n return null;\n }\n private _renderProductList(products: FullProduct[]): IWishlistItemViewProps[] {\n const {\n priceFree,\n originalPriceText,\n currentPriceText,\n addToCartButtonText,\n outOfStockText,\n removeButtonText,\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle,\n productDimensionTypeAmount\n } = this.props.resources;\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n\n return products.map((product: FullProduct, index) => {\n const currentProductProps = {\n product: product.ProductDetails,\n price: product.ProductPrice,\n context,\n wishlistState: this.state,\n productUrl: getProductUrlSync(product.ProductDetails, context.actionContext, undefined),\n imageSettings,\n removeFromWishlistText: removeButtonText,\n isInStock: this._isProductInStock(product),\n addToCartText: addToCartButtonText,\n outOfStockText,\n index,\n itemKey: `${product.ProductDetails.RecordId}-${product.ProductDetails.ItemId}-${index}`,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n enableImageProductLink,\n inventoryInformationLabel: this._inventoryLabel(product),\n inventoryLabelClassName: this._inventoryClassName(product),\n telemetryContent: this.telemetryContent,\n handlers: {\n onAddToCart: this._addItemToCart,\n onRemoveItem: this._removeItemFromWishlist,\n onDismiss: this._onDismiss\n },\n resources: {\n productDimensionTypeColor,\n productDimensionTypeSize,\n productDimensionTypeStyle: product.ProductDetails.IsGiftCard ? productDimensionTypeAmount : productDimensionTypeStyle,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText\n }\n };\n return WishlistItem(currentProductProps)!;\n });\n }\n\n // Dismiss alert when addingToCart/removeItem\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _renderHeading = (heading?: IHeadingData): JSX.Element | undefined => {\n if (!heading) {\n return undefined;\n }\n return (\n <MsDyn365.Text\n className='ms-wishlist-items__heading'\n tag={heading.tag || 'h2'}\n text={heading.text}\n editProps={{ onEdit: this.handleHeadingChange, requestContext: this.props.context.request }}\n />\n );\n };\n\n private readonly _addItemToCart = async (product: SimpleProduct, itemKey: string): Promise<void> => {\n const { context, data, resources, telemetry } = this.props;\n const { cart, productAvailability } = data;\n const { addedToCartSuccessMessage, addedToCartFailureMessage, invoiceInCartErrorMessage } = resources;\n\n const productInventoryInformation = this._getProductInventory({ ProductDetails: product }, productAvailability.result);\n\n if (context) {\n if (cart.result) {\n // Check if the product delivery mode is electronic\n const emailDeliveryModeCode = this.props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode;\n\n const deliveryOptions = await getDeliveryOptionsAsync(\n {\n callerContext: this.props.context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(this.props.context.actionContext)\n },\n [product.RecordId]\n );\n const validateQuantity = this.isQuantityValidationRequired();\n const quantity = this.respectQuantityLimits() ? product?.Behavior?.MinimumQuantity ?? 1 : 1;\n\n const addProductToCartInput = {\n product,\n count: quantity,\n enableStockCheck: context.app.config.enableStockCheck,\n availableQuantity: productInventoryInformation\n ? productInventoryInformation.ProductAvailableQuantity.AvailableQuantity\n : 0,\n additionalProperties: { validateQuantity: validateQuantity },\n isAddEmailDeliveryItemToCart:\n ArrayExtensions.hasElements(deliveryOptions) &&\n ArrayExtensions.hasElements(deliveryOptions[0].DeliveryOptions) &&\n deliveryOptions[0].DeliveryOptions[0].Code === emailDeliveryModeCode\n };\n\n cart.result\n .addProductToCart(addProductToCartInput)\n .then(async result => {\n if (result.status === 'SUCCESS') {\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: addedToCartSuccessMessage,\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: true\n });\n } else if (result.substatus === 'MAXQUANTITY') {\n const curQuantity =\n (await cart).cart?.CartLines?.find(item => item.ProductId === product.RecordId)?.Quantity || 0;\n const maxQtyLimitReachedMessage = this._getInventoryValueMessage(productInventoryInformation, curQuantity);\n\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: maxQtyLimitReachedMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else if (result.substatus === 'QUANTITYLIMITS' && validateQuantity) {\n const maxQtyLimitReachedMessage = result.errorDetails?.LocalizedMessage!;\n\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: maxQtyLimitReachedMessage || addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else if (result.substatus === 'INVOICEINCART') {\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: result.errorDetails?.LocalizedMessage || invoiceInCartErrorMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n } else {\n this.props.telemetry.debug('[wishlist-items] Unable to Update Cart Line from the wishlist');\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n }\n })\n .catch(error => {\n telemetry.warning(error);\n telemetry.debug('[wishlist-items] Error trying to Update Cart Line from the wishlist');\n this.setState({\n productId: product.RecordId,\n itemKey,\n userMessage: addedToCartFailureMessage,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n });\n }\n }\n };\n\n private isQuantityValidationRequired = (): boolean => {\n const isChannelQuantityLimitsFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n\n const isOrderQuantityLimitsFeatureEnabled = this.isOrderQuantityLimitsFeatureEnabled();\n return isOrderQuantityLimitsFeatureEnabled || isChannelQuantityLimitsFeatureEnabledInHq;\n };\n\n private respectQuantityLimits = (): boolean => {\n const isOrderQuantityLimitsFeatureEnabled = this.isOrderQuantityLimitsFeatureEnabled();\n const validateLimitsPerLine = this.props.data.cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n return isOrderQuantityLimitsFeatureEnabled && validateLimitsPerLine;\n };\n\n private isOrderQuantityLimitsFeatureEnabled = (): boolean => {\n const isOrderQuantityLimitsFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n\n if (!isOrderQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n\n const useSiteBuilderSettings = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n\n const customerInfo = this.props.data.customerInformation.result;\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n ((customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))) ??\n false);\n\n return isOrderQuantityLimitsFeatureEnabledInSiteSettings;\n } else {\n const cartConfiguration = this.props.data.cartConfiguration?.result;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n };\n\n private readonly _removeItemFromWishlist = (productId: number): void => {\n const { context, data, telemetry } = this.props;\n const { wishlists } = data;\n let noLongerLineExist: CommerceListLine[] | undefined = [];\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n const wishlistLineId = this._getWishlistLineIdFromProductId(productId);\n if (userToken && wishlists.result && wishlists.result[0] && wishlistLineId) {\n removeLinesAsync({ callerContext: context.actionContext }, wishlists.result[0].Id, [{ LineId: wishlistLineId }])\n .then(commerceList => {\n const castCommerceList: CommerceList | null = commerceList as CommerceList | null;\n\n if (castCommerceList && castCommerceList.Id && context.request.user.isAuthenticated) {\n noLongerLineExist = this._getProductsNoLongerExists(castCommerceList);\n if (noLongerLineExist && noLongerLineExist.length > 0) {\n this._removeNoLongerExistsLines(noLongerLineExist);\n } else {\n context.actionContext.update(createGetByCustomerInput({}, null), [castCommerceList]);\n getItemsInWishlists(new ActiveWishlistInput(), context.actionContext)\n .then(products => {\n const castSimpleProducts: FullProduct[] | null = products as FullProduct[] | null;\n if (castSimpleProducts && castSimpleProducts.length > 0) {\n this.setState({ isError: false });\n context.actionContext.update(new ActiveWishlistInput(), castSimpleProducts);\n }\n })\n .catch(error => {\n telemetry.warning('[wishlist-items] Unable to hyderate the wishlist with product information');\n telemetry.error(error);\n });\n }\n }\n })\n .catch(error => {\n telemetry.warning('[wishlist-items] Unable remove items from the wishlist');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\"[wishlist-items] Unable remove items from the wishlist user token or lineItemID wasn't found\");\n }\n }\n };\n\n private _getInventoryValueMessage(product: IProductInventoryInformation | undefined, curQuantity: number): string {\n const { context, resources } = this.props;\n const { maxQuantityLimitText } = resources;\n\n const maxQuantityForLineItem = updateMaxQuantityForCartLineItem(context.app.config.maxQuantityForCartLineItem);\n\n if (!product || !product.ProductAvailableQuantity.AvailableQuantity || !context.app.config.enableStockCheck) {\n return maxQuantityLimitText\n .replace('{maxQuantity}', maxQuantityForLineItem.toString())\n .replace('{curQuantity}', curQuantity.toString());\n }\n\n const minInventory = Math.min(maxQuantityForLineItem, product.ProductAvailableQuantity.AvailableQuantity);\n\n return maxQuantityLimitText.replace('{maxQuantity}', minInventory.toString()).replace('{curQuantity}', curQuantity.toString());\n }\n\n private _getProductInventory(\n product: FullProduct,\n productInventoryCollection: IProductInventoryInformation[] | undefined\n ): IProductInventoryInformation | undefined {\n if (productInventoryCollection && productInventoryCollection.length > 0) {\n for (const productResult of productInventoryCollection) {\n if (product.ProductDetails.RecordId === productResult.ProductAvailableQuantity.ProductId) {\n return productResult;\n }\n }\n }\n return undefined;\n }\n\n private readonly _inventoryLabel = (product: FullProduct): string | undefined => {\n const { productAvailability } = this.props.data;\n if (productAvailability && productAvailability.result) {\n const productInventoryInformation = this._getProductInventory(product, productAvailability.result);\n if (productInventoryInformation) {\n return productInventoryInformation.StockLevelLabel;\n }\n }\n\n return undefined;\n };\n\n private readonly _inventoryClassName = (product: FullProduct): string | undefined => {\n const { productAvailability } = this.props.data;\n if (productAvailability && productAvailability.result) {\n const productInventoryInformation = this._getProductInventory(product, productAvailability.result);\n if (productInventoryInformation && productInventoryInformation.StockLevelCode) {\n return `ms-wishlist-items__${productInventoryInformation.StockLevelCode.toLowerCase()}`;\n }\n }\n\n return undefined;\n };\n\n private readonly _isProductInStock = (product: FullProduct): boolean => {\n const { data, context } = this.props;\n const { productAvailability } = data;\n\n if (!context.app.config.enableStockCheck) {\n return true;\n }\n\n if (!productAvailability.result || !product.ProductDetails) {\n return false;\n }\n\n for (const productResult of productAvailability.result) {\n if (\n productResult.ProductAvailableQuantity &&\n productResult.ProductAvailableQuantity.ProductId &&\n productResult.ProductAvailableQuantity.ProductId === product.ProductDetails.RecordId\n ) {\n return productResult.IsProductAvailable;\n }\n }\n\n return false;\n };\n\n private readonly _getWishlistLineIdFromProductId = (productId: number): number | null => {\n const { wishlists } = this.props.data;\n\n if (\n !wishlists.result ||\n wishlists.result.length === 0 ||\n !wishlists.result[0].CommerceListLines ||\n wishlists.result[0].CommerceListLines.length === 0\n ) {\n this.props.telemetry.error('Wishlist content is empty, module wont render.');\n return null;\n }\n\n const foundWishlistItem = wishlists.result[0].CommerceListLines.filter(commerceListLine => {\n return commerceListLine.ProductId === productId;\n });\n\n if (foundWishlistItem && foundWishlistItem[0].LineId) {\n return foundWishlistItem[0].LineId;\n }\n return null;\n };\n\n private readonly _getProductsNoLongerExists = (castCommerceList: CommerceList): CommerceListLine[] | undefined => {\n const noLongerExist: CommerceListLine[] | undefined = [];\n castCommerceList.CommerceListLines?.map(line => {\n const { products } = this.props.data;\n const productsList = products && (products as AsyncResult<FullProduct[]>).result!;\n\n const skipRemove = productsList.filter(product => product.ProductDetails.RecordId === line.ProductId);\n if (skipRemove.length === 0) {\n noLongerExist?.push({ LineId: line.LineId });\n }\n });\n return noLongerExist;\n };\n\n private readonly _removeNoLongerExistsLines = (noLongerLineExist: CommerceListLine[]) => {\n const { context, data, telemetry } = this.props;\n const { wishlists } = data;\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && wishlists.result && wishlists.result[0]) {\n removeLinesAsync({ callerContext: context.actionContext }, wishlists.result[0].Id, noLongerLineExist)\n .then(commerceList => {\n const castCommerceList: CommerceList | null = commerceList as CommerceList | null;\n if (castCommerceList && castCommerceList.Id && context.request.user.isAuthenticated) {\n context.actionContext.update(createGetByCustomerInput({}, null), [castCommerceList]);\n getItemsInWishlists(new ActiveWishlistInput(), context.actionContext)\n .then(products => {\n const castSimpleProducts: FullProduct[] | null = products as FullProduct[] | null;\n if (castSimpleProducts && castSimpleProducts.length > 0) {\n this.setState({ isError: true });\n context.actionContext.update(new ActiveWishlistInput(), castSimpleProducts);\n }\n })\n .catch(error => {\n telemetry.warning('[wishlist-items] Unable to hyderate the wishlist with product information');\n telemetry.error(error);\n });\n }\n })\n .catch(error => {\n telemetry.warning('[wishlist-items] Unable remove items from the wishlist');\n telemetry.error(error);\n });\n } else {\n telemetry.warning(\"[wishlist-items] Unable remove items from the wishlist user token or lineItemID wasn't found\");\n }\n }\n };\n}\n\nexport default WishlistItems;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Module,\n Node\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IWishlistItemViewProps } from '../..';\nimport { IWishlistItemsViewProps } from './wishlist-items';\n\nconst WishlistItemsView: React.FC<IWishlistItemsViewProps> = props => {\n const {\n WishlistItems,\n status,\n statusMessage,\n heading,\n Products,\n products,\n Product,\n ProductDetails,\n ProductDimensions,\n telemetryContent,\n statusNotExistsMessage\n } = props;\n\n return (\n <Module {...WishlistItems}>\n {heading}\n {statusNotExistsMessage}\n {status !== 'SUCCESS' && statusMessage}\n {Products && products && products.length > 0 && (\n <Node {...Products}>\n {products &&\n products.map(product => {\n return product && _renderItem(product, Product, ProductDimensions, ProductDetails, telemetryContent);\n })}\n </Node>\n )}\n </Module>\n );\n};\n\nconst _renderItem = (\n product: IWishlistItemViewProps,\n Product?: INodeProps,\n ProductDimensions?: INodeProps,\n ProductDetails?: INodeProps,\n telemetryContent?: ITelemetryContent\n): JSX.Element | null => {\n const {\n key,\n productImage,\n productLink,\n productPrice,\n productDimensions,\n addToCartButton,\n removeButton,\n productStatusMessage,\n entireProductLink,\n productName,\n productAriaLabel,\n inventoryInformation,\n productUnitOfMeasure\n } = product;\n const payLoad = getPayloadObject('click', telemetryContent!, '', key);\n const productAttributes = getTelemetryAttributes(telemetryContent!, payLoad);\n if (entireProductLink) {\n return (\n <Node key={key} className={Product!.className} {...Product}>\n <Node\n href={entireProductLink}\n className={classnames('entire-product-link ', ProductDetails!.className)}\n {...productAttributes}\n aria-label={productAriaLabel}\n tag={ProductDetails!.tag}\n >\n {productImage}\n {productName}\n {productDimensions && ProductDimensions && (\n <Node {...ProductDimensions}>\n {productDimensions.map(dimension => {\n return dimension;\n })}\n </Node>\n )}\n {productPrice}\n {productUnitOfMeasure}\n </Node>\n {inventoryInformation}\n {addToCartButton}\n {removeButton}\n {productStatusMessage}\n </Node>\n );\n }\n return (\n <Node key={key} className={Product!.className} {...Product}>\n {productImage}\n {productLink}\n {productDimensions && ProductDimensions && (\n <Node {...ProductDimensions}>\n {productDimensions.map(dimension => {\n return dimension;\n })}\n </Node>\n )}\n {productPrice}\n {addToCartButton}\n {removeButton}\n {productStatusMessage}\n </Node>\n );\n};\n\nexport default WishlistItemsView;\n"],"names":["CartLineItemFunctions","renderProductDimensions","Product","DimensionStrings","Dimensions","map","productDimension","DimensionTypeValue","React","key","RecordId","className","colorString","DimensionValue","Value","configString","sizeString","IsGiftCard","amountString","styleString","renderDiscountLines","props","data","cartLine","DiscountLines","length","discountLine","index","OfferId","OfferName","resources","discountStringText","DiscountCost","PriceComponent","isSalesLine","price","CustomerContextualPrice","PeriodicDiscount","DiscountAmountWithoutTax","BasePrice","DiscountAmount","context","id","typeName","undefined","Percentage","renderInventoryLabel","inventoryInformationLabel","inventoryCssName","inventoryLabelClassName","renderShippingLabel","_props$context$reques","pickupDeliveryModeCode","request","channel","PickupDeliveryModeCode","channelDeliveryOptionConfig","cartline","hasShippingMethod","_channelDeliveryOptio","DeliveryMode","PickupDeliveryModeCodes","some","deliveryMode","shippingChargeLines","ChargeLines","filter","chargeLine","IsShipping","freightFee","reduce","chargeTotal","CalculatedAmount","priceComponent","freePriceText","shippingChargesText","renderOtherCharges","_cartline$ChargeLines","otherCharges","chargeline","otherCharge","Description","CartLineItemComponent","msdyn365Commerce","createComponent","_objectSpread","component","productUrl","product","destructDimensionStrings","fallbackImageUrl","getFallbackImageUrl","ItemId","actionContext","requestContext","apiSettings","imageSettings","cropFocalRegion","ObjectExtensions","isNullOrUndefined","inputQuantityAriaLabel","productDimensions","renderDisountLines","payLoad","getPayloadObject","telemetryContent","toString","prodAttribute","getTelemetryAttributes","productName","Name","_updateQuantity","event","quantityOnChange","parseInt","target","value","_generateSelectMenu","quantity","currentQuantity","onChange","nodes","i","push","_generateMenu","_generateQuantityAndPrice","_props$data$product","errorMessage","isOutOfStock","isQuantityEditable","classNames","Quantity","quantityDisplayString","maxQuantity","NetAmount","Price","NetAmountWithoutTax","NetPrice","originalPriceText","currentPriceText","displayMode","reducedDimensions","str","Image","src","primaryImageUrl","fallBackSrc","altText","gridSettings","loadFailureBehavior","Object","assign","href","jsxName","MasterProductId","MasterProdDisplay","masterProdId","variantName","ArrayExtensions","hasElements","showShippingChargesForLineItems","constructor","super","this","state","prodName","componentDidMount","masterProductInput","SelectedVariantInput","channelId","getSelectedVariant","then","masterProduct","setState","catch","e","console","error","render","name","SuggestionType","AutoSuggestInput","searchText","top","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","searchQuery","topResultsCount","async","_getAutoSuggest","input","autosuggest","ctx","searchCriteria","ProductSearchCriteria","SearchCondition","Context","ChannelId","CatalogId","catalogId","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","callerContext","queryResultSettings","Paging","Top","item","ImageUrl","generateImageUrl","AllSearchResults","telemetry","createObservableDataAction","action","Error","autoSuggestPromises","Promise","all","inputData","KeywordSuggestionsComponent","suggestions","reactNodes","_assembleNode","text","ariaLabel","replace","RegExp","contentAction","etext","attribute","Id","_generateLink","_getHighlightedText","suggestion","searchPageURL","searchQsp","formattedLink","route","indexOf","formattedText","dangerouslySetInnerHTML","getRichTextHtml","ProductSuggestionsComponent","autoSuggestProps","productSuggestionHeading","moduleType","moduleId","title","_renderTitle","items","productAutoSuggestionHeading","thumbnail","_renderThumbnail","Value3","DecimalValue","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","tag","recid","getProductPageUrlSync","adjustedPrice","basePrice","config","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","CategorySuggestionsComponent","categorySuggestionHeading","categoryAutoSuggestionHeading","format","splitValue","split","pop","_getCategoryLink","searchRefiners","urlPath","categoryRefiners","find","refiners","KeyName","refiner","Values","RefinerRecordId","encodedRefiner","encodeURIComponent","JSON","stringify","compressRefiners","compressedRefinerKeys","compressedRefiners","forEach","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","isSearchFormExpanded","searchTextInput","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","query","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","onInputChange","labelNode","htmlFor","inputNode","type","placeholder","ref","maxLength","submitBtnNode","Button","label","cancelBtn","onClick","submitBtn","LabelComponent","searchLabelClass","searchtext","searchCollapsedLabel","attributes","innerRef","Search","waitTime","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","keyCode","KeyCodes","Escape","formReference","current","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","update","createSearchStateInput","_handleInputChange","cancellabelDebounce","cancel","_debounce","getSearchSuggestionsAction","_getSuggestionType","inputSuggestionType","results","_getSearchRefiners","autoSuggestAriaLabel","_setAutoSuggestResultCount","exception","debug","setTimeout","suggestionTypes","distinctSuggestionTypes","suggestionTypeItem","charAt","toUpperCase","slice","join","_handleSubmit","app","preventDefault","focus","searchURL","_appendQueryParams","getUrlSync","document","location","_handleCancelSearchChange","isInitialState","qsp","result","_result$AllSearchResu","itemCount","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","setAttribute","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","searchInputMaxLength","suggestionTypeCriterion","searchFormClass","getTelemetryObject","telemetryPageName","friendlyName","body","addEventListener","window","componentWillUnmount","removeEventListener","componentDidUpdate","params","isEditor","searchLabelArialLabel","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","keywordSuggestions","Keyword","None","productSuggestions","categorySuggestions","Category","viewProps","moduleProps","classnames","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","role","autoComplete","onSubmit","UlKeyword","UlProduct","UlCategory","form","autosuggestKeyword","autosuggestProduct","autosuggestCategory","callbacks","renderView","getProductSearchRefinersAsync","_renderForm","Node","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","Module","handleKeyDown","getElementsByClassName","focusable","getElementById","elements","querySelectorAll","firstFocusable","lastFocusable","ctrlKey","altKey","keys","9","shiftKey","log","CarouselModule","_handleDismissCarousel","cookies","set","dismissCarousel","_next","slots","nextIndex","activeIndex","content","animating","closeNow","_previous","_onExiting","_onExited","_goToIndex","newIndex","get","carouselContainer","closeAnimation","next","previous","onIndicatorsClickHandler","handleDismissCarousel","handleOnExited","handleOnExiting","retrieveItems","renderModuleAttributes","Carousel","pause","pauseOnHover","ride","autoplay","interval","transitionType","hideFlipper","dismissEnabled","dismissCarouselAriaText","ariaLabelForDismissButton","indicatorAriaText","ariaLabelForSlide","directionTextPrev","flipperPrevious","directionTextNext","flipperNext","keyboard","validateCartAsync","cart","propsContext","cartResult","cartVersion","shouldRetry","arguments","Version","warning","AsyncResult","resolve","_validationResult$Val","validationResult","CartsDataActions","bypassCache","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","ProductId","Behavior","MaximumQuantity","cartLineId","LineId","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","_renderDeliveryLocation","deliverylocation","FulfillmentStoreId","_foundProductDelivery","orgUnitName","_getOrgUnitName","orgUnitLocations","foundProductDeliveryOption","productDeliveryOptions","deliveryOption","delivery","DeliveryOptions","option","Code","shippingText","_renderStoreLocation","fulfillmentStoreId","foundLocation","orgUnitLocation","OrgUnitNumber","OrgUnitName","_assembleCartlines","cartlines","foundProductAvailability","_foundProductAvailabi","productAvailabilites","productAvailability","_productAvailability$","ProductAvailableQuantity","foundProductDeliveryOptions","removeButtonText","removeItemClickHandler","availableQuantityInStock","isStockCheckEnabled","outOfStockThreshold","AvailableQuantity","_getCartItemAvailableQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","isServiceItem","ItemTypeValue","ReleasedProductType","Service","onRemoveClickHandler","onRemoveClickFunction","TelemetryConstant","RemoveCartItem","removeCartItemAttribute","getProductUrlSync","MsDyn365","isBrowser","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","searchParams","hasError","catalogs","PrimaryImageUrl","deliveryLocation","remove","storeLocation","getMiniCartData","miniCartData","CartLines","hasInvoiceLine","getActiveCartProductsAction","ActiveCartProductsInput","getAvailabilitiesForCartLineItems","ProductAvailabilitiesForCartLineItems","availableQuantity","getDeliveryOptionsForCartLineItems","ProductDeliveryOptionsForCartLineItems","deliveryOptions","CartIcon","retailMultiplePickUpOptionEnabled","getSortedCartLines","sortOrder","lines","sort","item1","item2","_item2$LineNumber","_item1$LineNumber","LineNumber","_item1$LineNumber2","_item2$LineNumber2","_getImageSettings","sm","_removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","isCartValid","payload","TelemetryEvent","CheckOut","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","ViewShoppingBag","viewShoppingBagAttributes","_this$props$data$orgU","reaction","_this$props$data$cart","_setQuantityLimitsFeatureFlag","_validateCart","prevProps","shouldComponentUpdate","nextProps","nextState","_this$props$context$r","_cart$cart$CartLines","_this$state$miniCartD","_this$state$miniCartD2","_this$props$data$chan","_this$props$data$feat","enableHoverCart","isAnonymousCheckout","user","isAuthenticated","signInUrl","guestCheckoutUrl","cartUrl","checkoutURL","_getCheckoutURL","isCartEmpty","shouldShowMiniCart","isProductAddedToCart","addToCartBehavior","AddToCartBehavior","showMiniCart","emailDeliveryModeCode","EmailDeliveryModeCode","cartLines","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","includeFlyout","status","totalItemsInCart","goToCartButtonText","goToCartButtonTitle","flyoutTitle","flyoutTooltip","UncontrolledTooltip","placement","hideArrow","trigger","shouldShowCloseButton","cartPageUrl","hideAriaHidden","TotalAmount","priceString","totalPriceFormatString","cultureFormatter","formatCurrency","featureState","feature","IsEnabled","cartIcon","CartIconComponent","cartLabel","cartQtyLabel","FlyoutContainer","CartlinesWrapper","miniCartWrapper","miniCartItemWrapper","checkoutAsSignInUserButton","disabled","checkoutButtonTitle","checkoutAsGuestButton","guestCheckoutButtonTitle","goToCartButton","checkoutBlockedDueToUnavailableFunds","totalPrice","_cart$result$cart$Ver","_cart$result","lastValidatedCartVersion","ValidationResultsPairs","isAbsoluteUrl","urlCheck","returnURL","origin","includes","_this$props$data$cata","FlyoutCartLineItems","cartLinesSortOrder","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","productDimensionTypeSize","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeStyle","quantityDisplayText","salesAgreementPricePrompt","removeCartButtonText","outOfStockText","outOfRangeOneText","outOfRangeFormatText","_featureStatuses$find","_featureStatuses$find2","featureStatuses","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","_featureStatuses$find3","customerInformation","customerInfo","IsB2b","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","__decorate","observer","_renderCartlines","_ref","description","descClassName","StringExtensions","isNullOrEmpty","isChecked","ariaSetSize","ariaPosInSet","checked","AddressDetailItemFunctionComponent","labelText","isDisabled","fallbackPattern","onChangeMinValue","checkBoxLabel","disclaimerText","minRangeValue","maxRangeValue","heading","groupDeliveryOption","selectedDate","setSelectedDate","useState","isDateEnabled","setIsDateEnabled","minDate","setMinDate","maxDate","setMaxDate","useEffect","today","Date","minDateObj","setDate","getDate","toISOString","maxDateObj","handleCheckboxChange","selectedValue","_groupDeliveryOption$","cartLinesDate","tempCartLine","_cartLine$LineId","min","max","pattern","groupName","deliveryOptionRef","priceFree","selectedItemId","channelConfig","count","cartLinesRadio","changeCurrentDeliveryOption","deliveryClassName","optionClassName","response","RadioButtonComponent","DescriptionComponent","currencyCode","Currency","GetLineItems","lineClassName","lineItemClassName","changeText","changeButtonText","showDeliveryOption","setShowDeliveryOption","handleClick","deliveryCode","UpdateInCart","_getProduct","_product","_getLineItemComponent","_cartLine$CatalogId","productDimensionTypeAmount","quantityDisplayStringLabel","priceCurrency","deliveryMethodLabel","CheckoutCartLineDeliveryOptionsRadio","CheckoutShippingCartLines","moduleClassName","lineId","imageProps","deliveryMethodDesc","requestDeliveryDate","quality","CheckoutDeliveryOptions","isLoading","groupDeliveryOptions","cartLineSelectedDeliveryOptions","checkoutErrorRef","cartLinesDeliveryOptions","init","moduleState","onEdit","isSelectDefaultOptionEnabled","onCancel","useDefaultDeliveryOption","canShip","cartDeliveryMode","getSavedDeliveryOption","isMultipleAddressShippingEnabled","getCartLinesSavedDeliveryOption","loadDeliveryOptions","_this$props$data$chec","checkout","checkoutCart","getCartLinesForShipping","isDeliveryModeExists","getDeliveryOptionSelected","selectedItem","DeliveryOption","getErrorMessage","errorMessageTitle","CheckoutDeliveryOptionsError","ErrorTitleComponent","ErrorMessageComponent","getDeliveryOptionList","getAriaLabelWithPrice","code","radioButton","onDeliveryOptionChange","getSaveButton","saveBtnLabel","color","onSave","getEditButton","editBtnLabel","getCancelButton","cancelBtnLabel","setError","setHasError","onUpdating","clearError","_this$props$data$chec2","information","updateShouldCollapsePaymentSection","newShouldCollapsePaymentSection","_this$props$data$chec3","updateCartLinesDeliverySpecification","updateCartDeliverySpecification","savedDeliveryOption","_this$props$data$chec4","onReady","cartLinesForShipping","existingCartLineSelectedDeliveryOption","cartLineDeliveryOption","selectedDeliveryOption","deliveryModeId","trim","checkoutState","updateCartDeliverySpecificationInput","shippingAddress","onPending","_response$errorDetail","errorDetails","LocalizedMessage","genericErrorMessage","setIsCancellable","_this$props$data$chec5","lineSpecs","checkoutCartLines","group","_checkoutCartLines$fi","address","ShippingAddress","lineSpec","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","DeliveryPreferenceType","ShipToAddress","DeliveryAddress","lineDeliverySpecifications","_this$props$data$chec6","cartLineSelectedDeliveryOption","RequestedDeliveryDate","updateCartLines","updatedCartLinesObject","_unused","_this$channelDelivery","getDeliveryOptions","_this$props$data$chec7","cartId","originalDeliveryMode","shippingCartLines","hasShippingDeliveryLines","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","deliveryOptionFilter","filterDeliveryModeOption","FilterDeliveryModeOption","FilterOutNonCarrierDeliveryMode","getDeliveryOptionsAsync","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","_unused2","deliveryOptionsNotFound","_this$props$data$chec8","_this$props$data$chec9","updateHasCartDeliveryMode","newHasCartDeliveryMode","isPaymentVerificationRedirection","_this$props$data$chec10","getStoredDeliveryOptions","_this$props$data$chec11","cartLinesWithShippingAddress","isExpressCheckoutApplied","features","shouldSubmit","isExpressPaymentAppliedInCartPage","enable_checkout_race_condition_hot_fix","loadDeliveryOptionsBasedOnAddress","getGroupDeliveryOptions","currentTarget","onCartLineDeliveryOptionChange","onCartLineRequestDeliveryDateChange","deliveryDate","getCheckoutCartLineGroupDeliveryOptions","getImageSettings","requestDeliveryDateEnabled","enableRequestDeliveryDate","cartLine1","_cartLine$LineId2","_ref2","_cartLine$LineId3","_this$cartLineSelecte","_cartLine1$ShippingAd","_cartLine1$ShippingAd2","isNewLine","isShowLabel","cartLineGroupShippingAddressLabel","FullAddress","cartLineGroupDeliveryOptionsLabel","cartLineGroupDeliveryOptionsText","CheckoutCartLineDeliveryDate","cartLineGroupDeliveryRequestDeliveryDateText","cartLineGroupDeliveryRequestDeliveryDateDisclaimerText","cartLineGroupDeliveryRequestDeliveryDate","AllowedMinimumDaysForRequestDelivery","AllowedMaximumDaysForRequestDelivery","_this$cartLineSelecte2","_this$props$data$prod","_ref3","_cartLine$LineId4","selectedDeliveryOption1","shippingChargesString","_this$props$data$chec12","getGroupByDelivery","groupBy","_item$ShippingAddress","GetDeliveryOptionsForCartLineAddressInput","getDeliveryOptionsForCartLineAddress","_group$cartLineIds","_unused3","getMultipleDeliveryOptionSelected","_this$props$data$prod2","cartLineImages","_this$props$data$chec13","_product$PrimaryImage","_this$props$config$im","_this$deliveryOptions","OmniChannelMedia","deliveryModeDesc","_group$cartLineIds2","cartLineDisplay","multipleAddressShippingEnabled","timeoutRetailCall","timeoutToCallRetail","_this$props$data$cart2","_this$props$data$cart3","properties","ExtensionProperties","property","Key","StringValue","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec21","when","isDataReady","_this$props$data$chec14","_this$props$data$chec15","_this$props$data$chec16","_this$props$data$chec17","_this$props$data$chec18","_this$props$data$chec19","_this$props$data$chec20","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec22","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec23","checkoutErrorFocus","CheckoutModule","focusOnCheckoutError","isReady","isUpdating","isError","isShowList","isShowSelected","deliveryOptionAriaLabel","lineImageProps","x","deliveryOptionsData","alert","ErrorComponent","errorMessageData","viewState","isShowSaveButton","hasExternalSubmitGroup","isShowEditButton","isShowCancelButton","classname","DeliveryOptionsList","list","deliveryOptionSelected","waiting","Waiting","checkoutCartLineGroupDeliveryOptions","enableCheckoutCartLineDeliveryOptions","saveButton","editButton","cancelButton","observable","computed","withModuleState","DeliveryOptionList","DeliveryOptionSelected","onApplyHandler","onApplyGiftCard","onChangeNumberHandler","onEnterGiftCardNumber","onChangePinHandler","onEnterGiftCardPin","onChangeExpHandler","onEnterGiftCardExp","getForm","options","inputRef","inputPinRef","inputExpRef","giftCardNumber","giftCardPin","giftCardExp","supportExternalGiftCard","additionalFields","disableAddGiftCard","applyGiftCardButton","giftCardFormLabel","giftCardNumberLabel","giftCardPinLabel","giftCardExpLabel","giftCardAlertLabel","giftCardPinPlaceholderText","giftCardExpPlaceholderText","formProps","inputPinLabel","inputExpLabel","alertFieldLabel","Alert","assertive","fade","includeAlertClass","isOpen","inputNumber","inputPin","inputExp","applyButton","showGiftCardPinInput","showGiftCardExpInput","inputProps","inputNumProps","inputPinProps","inputExpProps","onRemoveHandler","onRemoveGiftCard","giftCard","_giftCard$Id","getItem","getFormattedPrice","canRemove","enteredGiftCardLabel","giftCardAvailableBalanceLabel","removeGiftCardButton","balance","Balance","CardCurrencyCode","giftCardLast4Digit","substr","selectedGiftCard","removeButton","itemProps","getList","giftCards","listProps","SupportedGiftCardType","CheckoutGiftCard","_this","isFetchingGiftCard","isRequired","isEnabled","giftCardExtends","onSkip","couldPaidByGiftCard","giftCardSupported","External","shouldBeEnabledForGuest","handleCancelOrSubmit","hasSelectedItem","enterGiftCardNumber","enterGiftCardPin","enterGiftCardExp","removeGiftCard","applyGiftCard","giftCardTypes","getGiftCardTypes","giftCardType","isPinRequired","IsPinRequired","isExpRequired","IsExpirationDateRequired","tenderTypeId","PaymentMethodId","getGiftCard","addGiftCard","Pin","ExpirationDate","TenderTypeId","findGiftcardTenderTypes","tenderTypes","operationId","giftcardType","matchedTenderTypes","Internal","tenderType","OperationId","ConnectorId","noBalanceError","invalidCardInfoError","invalidCardTypeError","noCardPinError","noCardExpError","supportedGiftCardType","getTenderTypesAsync","internalGiftcardTenderTypes","OPERATIONS","PayGiftCertificate","externalGiftcardTenderTypes","Both","month","Number","year","getGiftCardAsync","activeGiftCard","emptyInputError","duplicatedCodeError","invalidCodeError","card","resolveCardTypesAsync","CardType","GiftCard","loyaltyAmount","customerAccountAmount","getLoyaltyAmount","getGiftCardTotalAmount","getCustomerAccountAmount","showAdditionalFields","shouldPayGiftCard","isOBORequest","EnabledPaymentsForOBO","checkoutGiftCardProps","showGiftCard","TitleCompoent","From","SelectedGiftCard","GiftCardList","_ref4","_objectWithoutProperties","_excluded","AddResource","_ref5","ShowResource","_ref6","step","ariaValueMax","ariaValueMin","ariaValueNow","onBlur","CheckoutLoyalty","_defaultLoyaltyPoints","loyaltyCard","CardNumber","LoyaltyCardId","updateLoyaltyCardId","loyaltyCardNumber","shouldPayLoyalty","_setErrorMessage","_clearError","_dialogToggleRef","_applyLoyaltyPoints","bind","_removeLoyaltyPoints","_onInputChange","_onBlur","dollarsApplied","maxDollars","isFetchingLoyaltyCard","loyaltyTransactionEstimation","MaxCurrencyValueOfLoyaltyPoints","_updateEstimate","_updateLoyalty","Loyalty","isShowLoyalty","isShowAddLoyalty","disableAddLoyaltyComponent","checkoutLoyalty","showLoyalty","Heading","headingTag","loyaltyHeadingText","coveredAmountText","TextComponent","loyaltyCoveredAmountText","amount","addLoyalty","drawer","Drawer","toggleButtonText","_drawerHeader","openGlyph","closeGlyph","glyphPlacement","cardNumber","rewardPoints","RewardPoints","points","_renderPointSection","availablePointsLabel","expiringLoyaltyPointsLabel","loyaltyAmountContainer","appliedLoyaltyAmountContainer","loyaltyAmountLabel","payWithLoyaltyAmountLabel","loyaltyAmountInput","InputComponent","loyaltyAmountApplyButton","applyCheckoutLoyaltyPaymentText","isNaN","showAppliedAmount","loyaltyAmountAppliedText","loyaltyAmountAppliedPrice","loyaltyAmountRemoveButton","removeCheckoutLoyaltyPaymentText","point","RewardPointId","checkoutLoyaltyRewardPoint","availablePointsText","activePoints","ActivePoints","expiringPointsText","expiringPoints","PointsExpiringSoon","updateLoyaltyAmount","newAmount","parseFloat","num","toFixed","element","loyalPointsRequest","createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput","_query","callActionOrExecute","_points$MaxCurrencyVa","GetLoyaltyTransactionEstimationInput","newMaxPoints","AddCheckoutLoyalty","rewardPoint","ShowCheckoutLoyalty","isValidationPassed","isPlaceOrderLoading","isPlaceOrderClicked","handleCheckoutHeadingChange","checkoutHeading","cartStatus","isEmptyCart","getSlotItems","triggerPaymentWithPlaceOrder","updateShouldTriggerPaymentWithPlaceOrder","newShouldTriggerPaymentWithPlaceOrder","shouldTriggerPaymentWithPlaceOrder","onPlaceOrder","checkoutOutOfStockErrorMessage","orderConfirmation","isOverMaxQuantity","_checkout$result","hasOrderConfirmation","updatedCartVersion","updateCartLineEmailAddress","guestCheckoutEmail","placeOrder","handleCheckoutError","updateIsPaymentSectionContainerReady","newIsPaymentSectionContainerReady","electronicDeliveryInvoiceAddress","hasShippingAddress","useShippingAddressAsElectronicDeliveryInvoiceAddress","emailDeliveryCartLines","line","ElectronicDelivery","ElectronicDeliveryEmailAddress","newGuestCheckoutEmail","updateLineDeliverySpecificationsAsync","updatedCart","_this$props$context$r2","productInventoryInformation","_cart$CartLines","_cart$CartLines2","productsThatShouldValidateInventory","_cartlineProduct$Beha","cartlineProduct","isStockedItem","IsStockedProduct","isEmailDelivery","productInventory","_productInventory$Pro","cartLinesInventoryValidation","getActiveChildModuleStates","childIds","getModule","hasModuleState","onContainerReady","redirectToCartPage","notFoundEditCartLinkMessage","editCartLink","Msdyn365","validateForCheckout","retry","_shouldValidateQuantityLimits","validateForCheckoutAsync","_result$ValidationFai","ValidationFailuresByCartLines","isB2BSite","isOrderQuantityLimitsFeatureEnabledInSiteSettings","_saveShippingAndBillingAddress","tokenizedPaymentCard","Zip","_getAddressFromTokenizedPaymentCard","updateBillingAddressFromExpressCheckout","newBillingAddressFromExpressCheckout","updateShippingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","TwoLetterISORegionName","Country","NameOnCard","Street","Address1","StreetNumber","Address2","City","State","ZipCode","Phone","invalidCartVersionErrorMessage","missingRequiredCartTenderLinesErrorMessage","checkoutApiFailureErrorMessage","invoiceCheckoutApiFailureErrorMessage","checkoutResult","apiError","statusCode","errorCode","setCheckoutErrors","_error$data","shouldEnableSinglePaymentAuthorizationCheckout","AdditionalContext","isEditorialMode","isEmpty","isTermsAndConditionAccepted","disableForOBO","isPaidOffByCustomerAccount","amountDue","_this$props$data$chec24","_this$props$data$chec25","asyncResultStatus","AsyncResultStatusCode","LOADING","_this$props$data$chec26","_this$props$data$chec29","email","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","_this$props$data$chec27","_this$props$data$chec28","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isCartReady","_this$props$data$chec30","isPaymentSectionContainerReady","_this$props$data$chec31","_this$props$data$chec32","_this$props$data$chec33","_this$props$data$chec34","redirectAdditionalContext","isPaymentVerificationRequired","_this$props$data$chec35","isPaymentSectionContainerHasError","_this$props$data$chec36","_this$props$data$chec37","isBillingAddressHasError","_this$props$data$chec38","_this$props$data$chec39","updateIsBillingAddressHasError","newIsBillingAddressHasError","canPlaceOrder","_this$props$data$chec40","_this$props$data$chec41","updateIsPlaceOrderEnabledInRedirection","newIsPlaceOrderEnabledInRedirection","_this$props$data$chec42","_this$props$data$chec43","checkoutErrorLocation","checkoutPaymentErrorLocation","ErrorCode","Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment","CheckoutPaymentInstrument","_this$props$data$chec44","_this$props$data$chec45","shouldFocusOnCheckoutError","_this$props$data$chec46","_this$props$data$chec47","_this$props$data$chec48","_this$props$data$chec49","_this$props$data$chec50","_this$props$data$chec51","_this$props$data$chec52","_this$props$data$chec53","_this$props$data$chec54","_this$props$data$chec55","_this$props$data$chec56","_this$props$data$chec57","_this$props$data$chec58","_this$props$data$chec59","_document","_this$props$data$chec60","disableGuidedCheckoutFlow","backToShopping","placeOrderText","confirmPaymentText","cookieConsentRequiredMessage","checkoutClass","allCheckoutInformation","checkoutInformation","info","checkoutExpressPaymentContainer","isConsentGiven","isMobile","device","Type","backToShoppingUrl","termsAndConditions","BackToShopping","backToShoppingAttributes","checkoutBtnText","hasCartDeliveryMode","hasGuestCheckoutEmail","hasExpressPaymentContainer","style","display","hasSalesOrder","salesOrder","checkoutProps","headerProps","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","renderMsdyn365Text","AlertComponent","loading","_this$props$data$chec61","_this$props$data$chec62","canShow","guidedForm","GuidedFormComponent","resource","orderSummary","getOrderSummary","invoicePaymentSummary","getInvoicePaymentSummary","lineItems","getLineItems","placeOrderButton","PlaceOrderButtonComponent","keepShoppingButton","checkoutGuidedFormHasError","values","every","SUCCESS","FAILED","editProps","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","EmailDelivery","LineItemComponent","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","LineItemDeliveryGroup","LineItemList","lineItem","LineItemGroupComponentWithMultiplePickUp","lineItemWraper","lineItemWraperIcon","LineItemComponentWithMultiplePickUp","PickUpAtStoreComponentWithMultiplePickUp","_ref7","LineItemsComponent","_ref8","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","itemsGroupWithMulitplePickupMode","OrderSummaryComponent","_ref9","subtotal","shipping","tax","totalDiscounts","loyalty","customerAccount","orderTotal","PaymentSummaryComponent","_ref10","invoices","totalAmountLabel","invoiceLabel","invoiceSummaryTitle","InvoiceSummary","orderTotalLabel","_featureState$result","_getDeliveryLocation","locationMatch","_input$data$catalogs","shippingCharges","_getPickUpAtStoreComponents","pickupDeliveryLocation","pickUpAtStoreWithLocationText","_getEmailDeliveryComponents","emailDeliveryText","_getLineItemsComponents","isPickUp","_getCartPickDeliveryMode","cartLineItem","isNullOrWhitespace","_countItems","_filterItemsByDiliveryType","_channelDeliveryOptio2","_getLineItemsByDeliveryType","_getGroupTitleComponent","_input$data$deliveryO","itemLabel","itemsLabel","inStorePickUpLabel","shippingCountCheckoutLineItem","emailDeliveryModeDesc","_productDeliveryOptio","suffix","handleLineItemHeadingChange","lineItemsHeading","_getLineItemsByDeliveryTypeWithMulitplePickupMode","multiplePickUpLabel","shippingLable","_filterItemsByMultiplePickupMode","getGroupByStorePickup","groupDelivery","cartLinesGroup","cartLinesGrp","entries","groupByDeliveryType","lineItemDeliveryGroup","_getGroupTitleComponentWithMultiplePickUp","fulFillmentStoreId","_input$data$deliveryO2","_input$data$deliveryO3","pickupDeliveryModeDesc","_productDeliveryOptio2","_productDeliveryOptio3","groupTitle","iconClass","_getLineItems","editCartText","EditCart","groupClass","orderSummaryHeading","subTotalLabel","shippingLabel","taxLabel","loyaltyLabel","giftcardLabel","totalDiscountsLabel","freeText","toBeCalculatedText","customerAccountLabel","showLineItems","channelConfiguration","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","orderSummaryProps","OrderSummary","otherChargeLabel","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","CheckoutGuidedCard","editButtonRef","formCardRef","renderFooder","isVisted","isSubmitting","isCancelAllowed","hasControlGroup","saveAndContinueBtnLabel","canSubmit","canCancel","Save","SaveContinue","saveBtnAttributes","Cancel","cancelBtnAttributes","focusOnFirstFocusableElement","node","child","querySelector","focusOnEditButton","scrollToTitle","formCard","scrollIntoView","getTitle","Tag","_getModules","_getId","isActive","onNext","shouldFocus","children","childrenModules","childModule","childId","childState","setCheckoutErrorFocus","isExpanded","isPending","hasInitialized","changeBtnLabel","CheckoutChange","changeBtnAttributes","canEdit","active","expanded","closed","visted","hidden","initialized","ready","pending","updating","paymentInstrumentModuleId","CheckoutGuidedForm","currentStep","getEnabledModules","_enableAfterModule","Boolean","nextChildId","_isPaymentSectionContainer","_sectionState$childId","sectionState","currentId","getStep","getId","getHeading","moduleChildId","_state$childIds","shouldCollapseAfterRedirect","hasMissingInfo","hasOrderError","previousModuleHasError","_this$props$requestCo","GuidedCard","enableControl","buttonsStates","onPlaceOrderHandler","isBusy","buttonSetState","setIsBusy","Purchase","PayCard","PayLoyalty","PayCustomerAccount","orderedProducts","redirect","PlaceOrder","balanceCheckButton","GiftCardBalanceCheck","_isEnabled","_getFormattedPrice","_enterGiftCardNumber","_enterGiftCardPin","_enterGiftCardExp","_setError","_applyGiftCard","_getGiftCardTypes","_getGiftCard","_findGiftcardTenderTypes","giftCardBalanceCheckProps","Form","Item","CatalogLabelComponent","validateCatalogId","isB2b","catalog","EffectiveAmount","EffectivePercentage","IsInvoiceLine","unitOfMeasureDisplayType","DefaultUnitOfMeasure","SalesAgreementLineRecordId","_props$context$reques2","_props$primaryImageUr","renderUnitOfMeasure","renderSalesAgreementPrompt","productAttribute","imgeClassName","newValue","lineIndex","NetAmountWithAllInclusiveTax","GrossAmount","ExtendedPrice","salesAgreementLineId","_generateQuantityandPrice","IncrementalQuantity","currentCount","decrementButtonAriaLabel","incrementButtonAriaLabel","isCartStateReady","isGiftCard","priceEditorResources","CartLinePriceEditor","InvoiceSummaryLine","cssLabel","_buildPaymentSummarySection","_computedLoyaltyAmount","invoiceLines","invoiceLine","InvoiceAmount","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardCounter","Math","totalAmountAfterGiftCard","OrderSummaryLine","_buildOrderSummarySection","getDeliveryMode","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","OtherChargeAmount","hasDeliveryMethod","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","OrderTemplateActions","onRemoveOrderTemplate","handlers","itemKey","removeOrderTemplateActionHandler","OrderTemplateRender","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","_getOrderTemplatePageUrl","_getUrlSync","url","separator","totalLines","addToCartButton","AddOrderTemplateToCartComponent","moduleTypeName","addToCartText","addToBagText","dialogStrings","isMultipleCatalogFeatureEnabledInHq","orderTemplateStatusMessage","userMessage","statusCssString","toggle","onClickHandler","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct","_line$fullProduct2","_line$fullProduct$Pro2","_line$fullProduct3","_getFallbackImageUrl","_line$fullProduct4","_context$request$app","fullProduct","_updateProductUrlCatalog","ProductDetails","productListLine","productDetails","OrderTemplateListStatusMessage","errorType","modalCloseButtonReference","onCancelHandler","isCreateOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","onCreateButtonClick","createOrderTemplateText","OrderTemplateNameDialog","modalOpen","isUpdateDialog","setModalOpen","createOrderTemplateDialogResources","onSuccess","onOrderTemplateCreated","parentElementRef","OrderTemplateList","_isChannelMultipleCatalogsFeatureEnabled","_onDismiss","_reloadPage","reload","_onRemoveFromOrderTemplateList","productListId","orderTemplates","token","p","productList","deleteAsync","headerStatusMessage","deleteOrderTemplateFailedText","messageGlyph","_heading$text","_heading$tag3","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","_heading$tag","errorProps","statusMessage","Spinner","msg","progressNotificationText","_heading$tag2","emptyViewProps","createOrderTemplateButton","CreateNewTemplateButtonComponent","_generateOrderTemplateNameDialogResources","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","currentTemplateProps","addToBagButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","linesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","OrderTemplateListView","_renderOrderTemplate","CONTENT","AddLineToTemplate","productCatalogs","selectedProduct","selectedCatalogId","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","_onSearchSubmit","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","_get","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","varianteInput","productVariant","dimensions","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","orderTemplateId","AddItemToOrderTemplateInput","addItemToOrderTemplate","reloadPage","_toggleModalHandler","onTelemetryClick","_getCatalogs","onComponentDidMount","_this$searchTextInput","onComponentDidUpdate","_this$searchTextInput2","addLineModalLinkText","backToResultsText","modalProps","Modal","ModalHeader","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","clickHandler","renderResultCountText","ModalBody","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","getCatalogId","productCatalog","isSelected","selected","searchCriteriaInput","IncludeAttributes","searchByCriteriaAsync","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","dropdownList","dropdownName","OrderTemplateQuantity","_validateMin","minValue","currentInput","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","currentValue","extraClass","getChangeHandler","_onIncrementalChange","tabIndex","updatedQuantity","inputElement","HTMLInputElement","defaultProps","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","showAddConfirmation","errors","add","missingDimensions","dimension","ProductListId","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","variantProduct","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","PriceForSelectedVariantInput","productPrice","getPriceForSelectedVariant","productAvailableQuantity","unitPrice","a","b","_getDropdownName","dimensionType","_product$Name","_product$Name2","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","ModalFooter","_getConfirmationMessage","selectedDimensionNames","_dimension$DimensionV","variant","addToTemplateConfirmation","_this$state$errors2","unshift","selectProductButtonText","_generateImageUrl","primaryImageSource","fallBackImg","ProductSelectButton","buttonText","setBusy","getClickHandler","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","onAddSelectionToBag","removeHandler","onRemoveSelection","selectedLines","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","isMinifiedView","removeOrderActionHandler","_removeOrderTemplate","onRemoveTemplate","_getOrderTemplateAddToCartDialog","addTemplateToBagButtonText","_getOrderTemplateRenameControl","renameOrderTemplateDialogStrings","RenameOrderTemplateComponent","onRenameTemplate","renameOrderTemplateButtonText","renameTemplateButtonText","buttonEventReference","ActionsSplitButton","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","existingOrderTemplate","onOrderTemplateNameCancel","_buttonEventReference","requestStatementDropdownString","Random","Guid","generateGuid","Popover","OrderTemplateLineActions","orderTemplateLine","onAddToBag","onRemoveItem","getAddToBag","getRemoveItem","PopUp","removeFromOrderTemplateLinesText","moreButtonText","viewProductDetailsText","showMobile","setShowMobile","toggleDetailsDisplayed","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","onSelect","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","OrderTemplateMobileLineView","_context$request$app2","UnitOfMeasure","fallbackImage","productLineCatalog","renderProductCatalog","productImage","_renderProductImage","productInfo","renderProductInfo","productNumber","productUnitOfMeasure","productQuantityView","_generateQuantity","onChangeHandler","onChangeQuantity","isQuantityDisabledForUpdate","image","_context$actionContex","_context$request","_renderProductError","OOS","outOfStockProductErrorMessage","UNASSORTED","unavailableProductErrorMessage","NONE","_orderTemplateLine$fu","_renderProductDimensions","dimensionsLine","OrderTemplateLinesStatusMessage","OrderTemplateTableHeading","componentClassName","getOnChange","checkedLines","scope","selectAllRowsText","productLineCatalogName","productUnitPrice","productUOM","productQuantity","productActions","OrderTemplateLines","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","maxWaitTimeInMilliSeconds","removeProductListLinesAsync","_this$props$data$orde","_onAddSelectionToBag","productLine","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","AdjustedPrice","_addItemToBag","_getCurrentUrl","reqContext","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","_this$props$data$feat2","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","onClose","_renderPagination","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","nextText","UncontrolledPagination","paginationAriaLabel","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","absoluteUrl","_changeQuantity","orderTemplateLinesData","orderLineIndex","findIndex","newProductListLine","prevQuantity","updateProductListLinesAsync","newLine","updatedLines","updatedOrderTemplate","ProductListLines","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","addProductToCart","priceResult","reject","isMiniCart","substatus","_cart$result2","cartLineQuantity","defaultMessage","_result$errorDetails","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","_renameTemplate","_removeTemplate","_orderTemplate$result","newLink","_getViewport","innerWidth","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","orderTemplateResult","_isFirstPage","orderActions","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","updateQuantity","debounce","pagination","itemAddedToCartDialog","updated","_product$fullProduct","onSelectAll","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","headers","_generateLinesAddedToCartDialogResources","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","deleteTemplateButtonText","addTemplateToBag","renameTemplate","removeTemplate","actionsSplitButton","OrderTemplateActionsView","renameOrderTemplateTitleText","skip","selectOneRowText","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","selectLine","addToBagButton","extraActionsPopup","popUp","shouldDisable","OrderTemplateLineView","ProductPrice","_renderItem","quantityLabel","disableElement","pointerEvents","opacity","toggleDetails","wrapClassName","applicationNode","ProductComparisonPreview","_renderGreyPlaceHolders","productData","counts","greyPlaceHoldersCount","displayGreyPlaceHolders","_removeProductFromList","itemId","_this$props$data$acco","ProductComparisonState","instance","accountInformation","removeItemById","previousState","_previousState$produc","productsData","_handleCollapseClick","_previousState$isExpa","_hasUserInteractedWithComparison","_clearAllProductsFromTheComparison","_this$props$data$acco2","clearAll","_instanceId","_displayedInstanceId","_this$props$data$acco3","_loadProducts","listModifiedEvent","subscribe","instanceId","handler","_this$props$data$acco4","unsubscribe","_this$state$productsD","collapseButton","_renderCollapseButton","isMainContentReady","hasUserInteractedWithComparison","_getProdutComparisonDataByCatalogId","productsLimit","_getProductsLimit","subheaderText","productComparisonPreviewHeaderTextWithLimit","handleCollapseClick","productsMainInfo","_getProductsMainInfo","previewGreyPlaceHolders","productComparisonLink","clearAllProductsFromTheComparison","removeProductFromList","goToComparisonButton","_renderGoToComparisonButton","clearAllButton","_renderClearAllButton","_productData$filter","_this$props$data$acco5","GetProductsInPreviewProductComparisonInput","getProductsInPreviewProductComparisonAction","productDataByCatalogId","_getGreyPlaceHoldersCount","limit","placeHolder","productImageContainerClassName","tableRowClassName","productImageClassName","productNameClassName","productNameLink","_product$Dimensions","dimensionValue","convertProductDimensionTypeToDimensionTypes","removeFromComparisonButton","RemoveFromComparisonButtonComponent","productLink","viewport","VariantType","Browser","productComparisonMobileProductsLimit","productComparisonDesktopProductsLimit","defaultImageSettingQ","_this$state$isExpande","shouldBeExpanded","headerContainerClassName","mainContainerClassName","collapseClassName","collapseButtonClassName","footerClassName","productComparisonCompareProductsButtonText","productComparisonClearAllProductsButtonText","containerClassName","headerClassName","headerLabelClassName","tableClassName","ProductComparisonPreviewViewFunctionalComponent","_props$isExpanded","_props$productsMainIn","_props$productsMainIn2","productComparisonPreviewHeaderText","SpecificationDataTypeValues","ProductSpecification","CurrencyValue","CurrencyCode","_product$DateTimeOffs","isFunction","DateTimeOffsetValue","toUTCString","IntegerValue","FloatValue","TextValue","_specification$DataTy","specification","DataTypeValue","none","currency","_renderCurrencyCell","dateTime","_renderDateTimeCell","decimal","_renderDecimalCell","integer","_renderIntegerCell","_renderTextCell","boolean","_renderTrueFalseCell","video","BooleanValue","productComparisonProductItemSpecificationTrue","productComparisonProductItemSpecificationFalse","RemoveFromComparisonButtonFunctionalComponent","useCallback","productComparisonRemoveProductFromListAriaLabel","SelectionType","ProductClickerDirections","ProductComparison","_clearAllProductsFromComparison","_configureBoxShadowOnScroll","_this$_tableReference","_tableReference","comparisonProductCardHeader","tableHeaderClassName","Array","from","documentElement","scrollTop","classList","tableHeaderLockedClassName","_handleScroll","_this$_tableHeaderRef","_tableHeaderReference","scrollTo","left","scrollLeft","_checkClickersState","_handleScrollClick","direction","_this$_tableBodyRefer","_this$_tableCellRefer","_document$body$parent","tableBody","_tableBodyReference","newLeftPosition","cellWidth","_tableCellReference","clientWidth","_getCellWidth","scrollPosition","ceil","minLeftPosition","maxScroll","scrollWidth","parentElement","getAttribute","currentClickerPosition","change","hoverStateLastUpdate","now","hoveringCellItemId","_handlePreviousClick","_document$body$parent2","right","_handleNextClick","_document$body$parent3","_this$_tableBodyRefer2","floor","_this$_tableBodyRefer3","_document$body$parent4","_shouldShowNextClicker","forceUpdate","_shouldShowPreviousClicker","newClickerPosition","_handleHoverIn","_hoveringCellItemId","_handleHoverOut","_goBack","referrer","history","back","specifications","_product$specificatio","specificationsList","allSpecifications","flatten","specificationNames","validValues","AttributeValueId","uniqueSpecificationNames","unique","allDimensions","dimensionIds","actionBarClassName","clearAllProductsFromComparison","isEmptyContent","_renderHeading","_renderLoading","actionBarContainerProps","_getActionBarContainerProps","previousClicker","_renderPreviousClicker","nextClicker","_renderNextClicker","_renderBackToShoppingButton","emptyComparison","emptyComparisonContentSlots","_getProductComparisonDataByCatalogId","productCountText","productComparisonCountText","productsMainInfoData","allUniqueDimensionIds","getProductsDimensionsIds","updatedDimensionProps","getUpdatedDimensionsProps","tableReference","tableHeaderReference","tableBodyReference","tableCellReference","shouldShowPreviousClicker","shouldShowNextClicker","handlePreviousClick","handleNextClick","handleScroll","handleHoverIn","handleHoverOut","uniqueDimensionIds","_getProductsDimensions","dimensionsProps","uniqueSpecifications","_getProductsSpecifications","specificationsProps","_getSpecificationProps","GetProductsInProductComparisonInput","getProductsInProductComparisonAction","_renderQuickView","_product$productInfo$","quickViewSlot","quickViews","selectedProductId","defaultImageSettingsQ","_getTableHeaderProps","isHoverModeEnabled","tableHeaderCellClassName","onMouseEnter","onMouseLeave","_getTableCellProps","cellClassName","tableCellClassName","_renderProductRating","rating","_ratingValue$reviewsC","averageRating","ratingValue","RatingComponent","avgRating","readOnly","productComparisonProductItemRatingAriaLabel","ratingCount","reviewsCount","shouldShowFullRatingDescription","backToShoppingLabel","_getDimensionName","dimensionId","ProductDimensionType","Color","productComparisonProductItemColorDimension","Size","productComparisonProductItemSizeDimension","Style","productComparisonProductItemStyleDimension","dimensionClassName","dimensionsRowClassName","dimensionDescription","dimensionSelectionType","dimensionsAsSwatchConfiguration","dimensionsAsSwatchType","DimensionTypes","swatch","productDimensionValues","productMainInfo","renderSwatch","textValue","productsDimension","_productsDimension$di","_productsDimension$di2","dimensionItems","dimensionItem","_dimensionItem$map","currentDimensionId","swatches","swatchItem","_productMainInfo$prod","_swatchItem$Dimension2","_swatchItem$Dimension3","_swatchItem$Dimension4","_swatchItem$Dimension5","_swatchItem$Dimension6","_swatchItem$Dimension7","_swatchItem$Dimension8","_swatchItem$Dimension9","isDefaultDimension","selectedDimension","_swatchItem$Dimension","DimensionId","colorHexCode","ColorHexCode","imageUrl","isDefault","SwatchComponent","isSelectionEnabled","_dimensionItem$Dimens","_dimensionItem$Dimens2","productDimensionSeperatorValue","productDimensionSeparator","dimensionProps","specificationClassName","specificationsRowClassName","specificationValues","_productMainInfo$prod2","productSpecification","productSpecifications","productComparisonTitle","productComparisonLoadingText","productComparisonClearAllButtonAriaLabel","productComparisonClearAllButtonText","tableClickerClassName","onKeyUp","productComparisonPreviousProduct","productComparisonNextProduct","_renderRemoveFromComparisonButton","productRowClassName","currentCatalogId","productUrlLink","_product$productInfo$2","_dimension$DimensionV2","isFromCurrentCatalog","productPriceClassName","cellNewWidth","width","minWidth","maxWidth","cellContainerProps","productComparisonProductItemFreePrice","productComparisonProductItemOriginalPrice","productComparisonProductItemCurrentPrice","quickView","goToProductDetailsButton","productComparisonGoToProductDetailsButtonText","tableCellProps","tableHeaderProps","productRating","productDescription","_renderProductDescription","tableBodyClassName","tableRowContentClassName","tableRowContentInformationClassName","renderDynamicHeaderCells","headerName","tabindex","renderDynamicCells","ProductComparisonViewFunctionalComponent","_props$productsMainIn5","_props$dimensionsProp","_props$specifications","_props$productsMainIn8","_props$productsMainIn9","actionsClassName","onScroll","_props$productsMainIn3","_props$productsMainIn4","productComparisonProductItemRating","_props$productsMainIn6","_props$productsMainIn7","productComparisonProductItemDescription","specificationProps","attributeBooleanStringValue","AttributeDataType","TrueFalse","productComparisonProductItemSku","PromoBannerCloseButton","closeButtonAriaLabel","PromoBannerClose","PromoBannerLinks","links","onTextChange","editableLinks","_mapEditableLinks","linkdata","link","linkText","editableLink","linkUrl","destinationUrl","openInNewTab","PromoBannerText","PromoBanner","isVisible","handleTextChange","bannerMessages","handleLinkTextChange","linkIndex","_isLastItem","_isFirstItem","closeButtonLabel","bannerText","bannerAriaLabel","handleLinks","handleText","promoBannerProps","promoBannerTextProps","promoBannerLinksProps","contentProps","promoBannerText","carouselProps","hideIndicator","closeButton","slides","AddToCartProductListComponent","_quickOrderTemplate$q","_quickOrderTemplate$q2","quickOrderTemplate","quickOrderTemplateLines","buttonLabel","quickOrderGridBuySelectedButtonText","buttonAriaLabel","quickOrderGridBuySelectedButtonAriaLabel","_props$resources$quic","_props$resources$quic2","_props$resources$quic3","_props$resources$quic4","_props$resources$quic5","_props$resources$quic6","_props$resources$quic7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$quic8","_props$resources$quic9","goToCartText","quickOrderGridGoToCartText","continueShoppingText","quickOrderGridDialogCloseText","closeNotificationLabel","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","headerItemOneText","quickOrderGridSingleItemText","headerItemFormatText","quickOrderGridMultiLineItemFormatText","headerLinesFormatText","quickOrderGridMultiLinesFormatText","headerMessageText","quickOrderGridHeaderMessageText","addedQuantityText","buyAgainNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","salesLine","OrderDetailsProduct","getOrderDetails","AddToCartComponent","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","onError","getQuickOrderGridAddToCartDialog","_result$cartActionRes","cartActionResult","onErrorMessage","removeActionHandler","removeProductList","removeQuickOrderList","QuickOrderGridDrawer","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","collapseProps","_drawerGlyphClass","toggleGlyphClassName","isAnimateGlyph","_drawerOpenGlyph","_drawerCloseGlyph","drawerClass","drawerButtonClassName","toggleButtonProps","block","_generateDrawerButtonInnerMarkup","Collapse","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","QuickOrderGridFormComponent","productTextInput","quantityTextInput","quickOrderGridState","minQuantity","isAddtoListDisabled","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","handleQuantityChange","handleAddProductListClick","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","addToListBtn","stateMessage","messageText","QuickOrderGridProduct","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$imageSettings","setShowPreviousActions","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","onClickViewDetails","shouldShowActionsNewValue","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_productListLine$Line","quickOrderGridProductDimensionsSeparator","renderProductPrice","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","Viewport","QuickOrderGridTableComponent","setIsMobile","isMobileView","quickOrderGridProducts","isOrderQuantityLimitsFeatureEnabled","updateViewport","quickOrderProduct","_product$ProductDetai","_quickOrderProduct$pr","_quickOrderProduct$pr2","behavior","MinimumQuantity","callBacks","QuickOrderGrid","_this$props$data$feat3","_this$props$data$feat4","_this$props$data$feat5","_cartConfiguration$re","_cartConfiguration$re2","_waitTime","_dimensionUpdateQueueMaxLength","_errorCssClass","_errorCssGlyphClass","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_initializedDimensions","Set","_cssClassNameConfigure","_className","_isOrderQuantityLimitsFeatureEnabled","_isChannelLimitsFeatureEnabled","_applyDefaultOrderSettingsForCartLine","_quickOrderGridCallbacks","initializeDimension","initializedDimension","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","_this$state$productDi","size","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","ProductListsDataActions","_updateStatusState","quickOrderGridDeleteProductListFailedText","productResponse","_cancellabelDebounce","isQuickOrderGridFormExpanded","getScanResult","GetScanResultInput","ProductDimensionFull","_updateQuantitiesInState","_handleQuantityChange","_this$state$productRe","_quantityInput","minimumQuantity","needToUpdateUIValue","_behavior$MinimumQuan","newCurrentValue","_this$state$productRe2","Configuration","hasProductDimensions","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","configureErrors","errorState","_this$_updateDimensio","newProduct","_getDimensionErrorString","dimensionTypeValue","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_productResponse$Dime","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","quickOrderTemplateLinesData","previousQuantity","updatedProductList","ActiveProductListInput","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","_productResponse$Defa","_createProductList","AddItemToProductListInput","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","_productTextInput","_telemetryContent","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","ValidateDefaultOrderSettingsPerLine","_this$state$min","_this$state$max","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","header","quickOrderGridProps","isB2bCustomer","actions","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","configure","getProductConfigure","container","_renderListContainer","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","userMessageNode","topStateMessage","addProductListToBag","QuickOrderGridActionsView","isBulkPurchaseEnabled","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","_getMinQuantityForCartLineItem","_getMaxQuantityForCartLineItem","_getQuantity","_getIgnoreOrderSettings","_product$Behavior2","_cartConfiguration$re3","_cartConfiguration$re4","applyDefaultOrderSettingsForCartLine","_product$Behavior3","defaultQuantity","DefaultQuantity","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","select","renderConfigure","dropdowns","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","Decimal","isRangeTypeForInteger","Integer","isCustomRangeTypeIntegerSelected","selectedRefinementCriterion","parentProductRefinerHierarchy","RowNumber","DisplayTemplateValue","DisplayTemplate","Range","isSingleSelectRangeTypeIntegerSelected","productRefinerValue","LeftValueBoundString","RightValueBoundString","findMatchingRefinementCriterion","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","parent","RefinerSourceValue","getIntegerRangeName","rangeValue","RightValueBoundLocalizedString","LeftValueBoundLocalizedString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","r","selectedCriterion","isSelecting","rangeStart","rangeEnd","Text","RefinerTypeValue","RefinerType","SingleSelect","matchingIndex","criterion","splice","ChoiceSummary","closeButtonGlyph","_onClick","stopPropagation","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","selectedChoices","channelInventoryConfigurationId","refinerHierarchy","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","choice","hierarchy","_rangeParentDisplay$","rangeParentDisplay","_getKeyForRefinerValue","rangeDisplayType","clearAllText","choiceAriaLabel","closeAriaLabel","selectedRefinersMap","clearAllAttributes","newIntRange","urlBuilder","_parent","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","UnitText","filterValue","trace","ErrorMessage","FeatureSearchResultItem","recommendation","productRecordId","featureSimilarDescriptionTitle","featureSimilarLooksTitle","img","renderProductPlacementImage","Link","ModalToggle","modalNode","returnFocusRef","returnRef","onModalToggle","zIndex","modalHeaderNode","modalTitle","modalFooterNode","modalCloseButtonText","getInventoryLabel","AttributeValues","inventoryAttribute","ProductSearchResultItems","allowBackNavigation","quickviewSlot","productComparisonButton","isPriceMinMaxEnabled","productsDimensionAvailabilities","priceResources","priceRangeSeparator","ProductComponent","ratingAriaLabel","allowBack","quickViewButton","inventoryLabel","swatchItemAriaLabel","dimensionAvailabilities","dimensionAvailability","masterProductId","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","initialMin","initialMax","String","maxValue","labels","sliderKeyString","sliderThumbs","validationErrorMin","validationErrorMax","touchedMin","touchedMax","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_this$props$selectedR5","_this$props$selectedR6","_this$props$selectedR7","_this$props$selectedR8","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","maxLabel","placeholderTextMax","ariaAttributes","Slider","inForm","orientation","showLabels","showTooltip","onChangeEnd","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","touched","validationError","validationErrorRange","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","attrs","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productCount","Count","refineMenuItemAriaLabel","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","hideCount","RangeRefineItemInput","_changeMinInputRange","_changeMaxInputRange","_applyCustom","invalidData","updateInputRangerProps","_isUndefined","RefineSubmenu","_onToggleItem","_onToggleSubmenu","isExpandedOnInitialLoad","productRefinerHierarchy","hideRating","timeout","_renderChildItems","_renderSingleMultiSelect","_renderRange","refinerValuesList","listItems","_getRangeType","SliderWithBars","onUpdateRefiners","prevState","Separator","Title","SearchResultContainer","SearchResultContainer_1","sortByDropdownOptions","sortOptions","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","urlTokens","pageType","expandrefinerCount","defaultPageNumber","isListPageStateUpdated","_isMounted","_updateVariantAvailability","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","includeAttributes","_getProductsDimensionsAvailabilities","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","_this$props$context$r3","querySorting","sorting","decodeURIComponent","currentPageNumber","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","featureProduct","_this$props$data$list","_this$props$data$list2","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","SearchResultModal","modalIsOpen","_modalToggleRef","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r4","category","getFriendlyName","locale","NameTranslations","productCountNumber","numberOfProducts","oneProduct","TitleContainer","toLowerCase","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","sortByDropdownLabel","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","_this$props$data$prod3","_this$props$data$prod4","channelInventoryConfiguration","isInventorySortableAttribute","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","isInventoryProductAttribute","InventoryProductAttributeRecordId","_getChoiceSummary","_this$props$data$refi","selectedRefiners","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$prod5","shouldAllowBackNavigation","breadCrumbType","breadcrumbType","shouldAllowBack","quickview","isPriceMinMaxFeatureState","notification","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","productPrices","validationErrorNotNumber","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","_this$props$context$a2","StoreOperationsDataActions","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r5","_this$props$context$r6","_this$props$context$r7","_this$props$context$a","newListPageState","GetFullProductsByCollectionInput","Skip","Sorting","recordId","Recommendation","productResults","getCollectionProducts","enableAffiliationBasedPricing","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r8","_this$props$context$r9","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","_listPageState$result","_listPageState$result2","_this$props$context$r10","_this$props$data$list7","_this$props$data$list8","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","FeatureSearchContainer","similarLookProduct","createSearchResultModal","isRecoSearchPage","createModalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","_props$context$action","SearchState","SocialShareItem","_getSocialShareItem","viewprops","SocialShareItemElement","icon","socialMedia","SocialMediaComponent","SocialMedia","Facebook","postUrl","Twitter","Pinterest","Linkedin","Mail","SocialShareItemView","WishlistItemDimension","WishListItemActions","onAddToCart","formattedPrice","renderProductLink","productAttributes","productPageUrlWithSwatch","renderInventoryInformationLabel","WishlistItemAddToCartButtonComponent","isInStock","addItemAction","WishlistItemRemoveFromWishlistButtonComponent","removeFromWishlistText","removeItemAction","unitOfMeasure","WishlistItem","wishlistState","_props$product$Dimens","_getFullProductLink","entireProductLink","productAriaLabel","inventoryInformation","productStatusMessage","WishlistItemsStatusMessage","WishlistItems","handleHeadingChange","_addItemToCart","addedToCartSuccessMessage","invoiceInCartErrorMessage","_getProductInventory","_product$Behavior$Min","validateQuantity","isQuantityValidationRequired","respectQuantityLimits","isAddEmailDeliveryItemToCart","_await$cart$cart","curQuantity","maxQtyLimitReachedMessage","_getInventoryValueMessage","_result$errorDetails2","isChannelQuantityLimitsFeatureEnabledInHq","validateLimitsPerLine","_removeItemFromWishlist","wishlists","noLongerLineExist","wishlistLineId","_getWishlistLineIdFromProductId","removeLinesAsync","commerceList","castCommerceList","_getProductsNoLongerExists","_removeNoLongerExistsLines","createGetByCustomerInput","getItemsInWishlists","ActiveWishlistInput","castSimpleProducts","_inventoryLabel","StockLevelLabel","_inventoryClassName","StockLevelCode","_isProductInStock","productResult","IsProductAvailable","CommerceListLines","foundWishlistItem","commerceListLine","_castCommerceList$Com","noLongerExist","emptyWishlistText","wishlistErrorGettingWishlist","noLongerExitsWishlistItemText","Products","ProductDimensions","statusNotExistsMessage","_getProductNotExists","emptytext","noLongerExisttext","addToCartButtonText","currentProductProps","maxQuantityForLineItem","minInventory","productInventoryCollection"],"sourceRoot":""}