{"version":3,"file":"static/js/12.f7e47b78e22a1ebd5d2c.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, { useState } from 'react';\n\nexport interface ICheckoutCartLineDeliveryDateProps {\n className?: string;\n isDisabled?: boolean;\n minRangeValue?: string;\n maxRangeValue?: string;\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 heading,\n cartLines,\n groupDeliveryOption,\n onChange\n}) => {\n const [selectedDate, setSelectedDate] = useState('');\n const [isDateEnabled, setIsDateEnabled] = useState(false);\n // State to store today's date\n const [minDate, setMinDate] = useState('');\n\n // Update minDate state with today's date on component mount\n useState(() => {\n const today = new Date().toISOString().split('T')[0];\n setMinDate(today);\n });\n\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 shippingAddress = this.props.data.checkout.result?.shippingAddress;\n const cartLinesForShipping = this.props.data.checkout.result?.cartLinesWithShippingAddress;\n const requestContext = this.props.context.actionContext.requestContext;\n if (requestContext.features && requestContext.features.enable_checkout_race_condition_hot_fix) {\n if (this.canShip() && (shippingAddress || cartLinesForShipping)) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n } else {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n this.isMultipleAddressShippingEnabled\n ? shippingAddress !== undefined\n ? await this.getGroupDeliveryOptions(shippingAddress)\n : await this.getGroupDeliveryOptions()\n : shippingAddress !== undefined\n ? await this.getDeliveryOptions(shippingAddress)\n : null;\n }\n\n if (\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n this.onSubmit();\n }\n }\n }\n } else {\n if (this.canShip() && (shippingAddress || cartLinesForShipping)) {\n if (\n !this.props.data.checkout.result?.isPaymentVerificationRedirection ||\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied\n ) {\n this.isMultipleAddressShippingEnabled\n ? await this.getGroupDeliveryOptions()\n : shippingAddress !== undefined\n ? await this.getDeliveryOptions(shippingAddress)\n : null;\n }\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n\n if (\n this.isSelectDefaultOptionEnabled ||\n this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n this.onSubmit();\n }\n }\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 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","heading","groupDeliveryOption","selectedDate","setSelectedDate","useState","isDateEnabled","setIsDateEnabled","minDate","setMinDate","today","Date","toISOString","handleCheckboxChange","selectedValue","_groupDeliveryOption$","cartLinesDate","tempCartLine","_cartLine$LineId","min","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","_this$props$data$chec12","_this$props$data$chec13","cartLinesWithShippingAddress","_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","_this$props$data$chec21","features","enable_checkout_race_condition_hot_fix","isExpressCheckoutApplied","getGroupDeliveryOptions","isExpressPaymentAppliedInCartPage","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","_this$cartLineSelecte2","_this$props$data$prod","_ref3","_cartLine$LineId4","selectedDeliveryOption1","shippingChargesString","_this$props$data$chec22","getGroupByDelivery","groupBy","_item$ShippingAddress","GetDeliveryOptionsForCartLineAddressInput","getDeliveryOptionsForCartLineAddress","_group$cartLineIds","_unused3","getMultipleDeliveryOptionSelected","_this$props$data$prod2","cartLineImages","_this$props$data$chec23","_product$PrimaryImage","_this$props$config$im","_this$deliveryOptions","OmniChannelMedia","deliveryModeDesc","_group$cartLineIds2","cartLineDisplay","multipleAddressShippingEnabled","timeoutRetailCall","timeoutToCallRetail","_this$props$data$cart2","properties","ExtensionProperties","property","Key","StringValue","parse","_this$expressPaymentD","_this$expressPaymentD2","expressPaymentDetailsFromCartPage","isExpressCheckoutAppliedInCartPage","_this$props$data$chec31","when","isDataReady","_this$props$data$chec24","_this$props$data$chec25","_this$props$data$chec26","_this$props$data$chec27","_this$props$data$chec28","_this$props$data$chec29","_this$props$data$chec30","shouldEnableCheckoutErrorDisplayMessaging","_this$props$data$chec32","checkoutError","errorLocation","ErrorLocation","_this$props$data$chec33","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","max","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","asyncResultStatus","AsyncResultStatusCode","LOADING","email","tenderLine","paymentTenderType","paymentTenderTypeFromCartPage","isExpressAddressAppliedInCartPage","cardPaymentAcceptResult","updateExpressCheckoutDetails","newEmailAddressFromExpressCheckout","newTenderLine","newTokenizedPaymentCard","newPaymentTenderType","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newCardPaymentAcceptResult","updateExtensionProperties","newExtensionProperties","isCartReady","isPaymentSectionContainerReady","_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","_this$props$data$cart3","_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":""}