{"version":3,"file":"static/js/17.688dddf22cf8c38bb767.chunk.js","mappings":"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","sources":["webpack:///./src/modules/quick-order/components/quick-order-drawer.tsx?f8b4","webpack:///./src/modules/quick-order/components/quick-order-form.tsx?eb54","webpack:///./src/modules/quick-order/components/quick-order-product.ts?7702","webpack:///./src/modules/quick-order/components/quick-order-table/components/quick-order-table-header-component.tsx?49e7","webpack:///./src/modules/quick-order/components/quick-order-table/components/quick-order-table-row-component.tsx?e487","webpack:///./src/modules/quick-order/components/quick-order-table/quick-order-table-component.tsx?46c1","webpack:///./src/modules/quick-order/quick-order.tsx?ef21","webpack:///./src/modules/quick-order-grid/quick-order-grid.tsx?fddf","webpack:///./src/modules/fabrikam/views/components/promocode.component.tsx?d9d6","webpack:///./src/modules/header/header.view.tsx?cf0f","webpack:///./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack:///./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack:///./src/themes/fabrikam/views/components/product.component.tsx?1e6f","webpack:///./src/modules/search-result-container/components/title.tsx?c269","webpack:///./src/modules/bulk-purchase/bulk-purchase.view.tsx?feac","webpack:///./src/modules/header/components/header-preferred-store.tsx?ee9c","webpack:///./src/modules/header/components/logo.tsx?f27e","webpack:///./src/modules/header/components/nav-icon.tsx?2475","webpack:///./src/modules/header/header.tsx?e91a","webpack:///./src/modules/order-template/order-template.tsx?4ecb","webpack:///./src/modules/search-result-container/components/utilities.ts?8569","webpack:///./src/modules/quick-order/quick-order.view.tsx?a96d","webpack:///./src/modules/search-result-container/search-result-container.tsx?7500","webpack:///./src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?8701","webpack:///./src/modules/search-result-container/components/error-message.tsx?6302","webpack:///./src/modules/product-collection/product-collection.view.tsx?5d36","webpack:///./src/modules/quick-order-grid/components/quick-order-grid-form.tsx?5cbb","webpack:///./src/modules/product-collection/product-collection.tsx?4008","webpack:///./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack:///./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack:///./src/modules/search-result-container/components/refine-item.tsx?a594","webpack:///./src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?ca97","webpack:///./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack:///./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack:///./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack:///./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack:///./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack:///./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack:///./src/modules/order-template/components/order-template-actions.tsx?8136","webpack:///./src/modules/order-template/components/order-template-lines.tsx?3703","webpack:///./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack:///./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack:///./src/modules/search-result-container/components/index.ts?c403","webpack:///./src/modules/search-result-container/components/product-search-result-items.tsx?5174","webpack:///./src/modules/quick-order-grid/components/quick-order-grid-product.ts?187e","webpack:///./src/modules/search-result-container/components/choice-summary.tsx?3f71","webpack:///./src/modules/search-result-container/components/refine-submenu.tsx?1292","webpack:///./src/modules/search-result-container/components/separator.tsx?4ea6","webpack:///./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?69b3","webpack:///./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?cd92","webpack:///./src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?7cbc","webpack:///./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack:///./src/modules/order-template-list/order-template-list.tsx?18d0","webpack:///./src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?de21","webpack:///./src/index.ts?ffb4","webpack:///./src/modules/quick-order-grid/components/index.ts?7dc8","webpack:///./src/modules/search-result-container/components/range-refine-item.tsx?6288","webpack:///./src/modules/order-template/order-template.view.tsx?a45e","webpack:///./src/modules/search-result-container/components/link.tsx?52c2","webpack:///./src/modules/bulk-purchase/bulk-purchase.tsx?9fd5","webpack:///./src/modules/quick-order-grid/quick-order-grid.view.tsx?f941","webpack:///./src/modules/search-result-container/components/modal.tsx?d78e","webpack:///./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack:///./src/modules/search-result-container/components/feature-search-result-item.tsx?71fa","webpack:///./src/modules/order-template-list/order-template-list.view.tsx?103b"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderDrawerProps } from './quick-order-drawer-props';\n\nexport interface IQuickOrderDrawerState {\n isOpen: boolean;\n}\n\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\n\nexport default class QuickOrderDrawer extends React.Component {\n public state: IQuickOrderDrawerState;\n\n private readonly drawerOpenGlyph: string;\n\n private readonly drawerCloseGlyph: string;\n\n private readonly drawerGlyphClass: string;\n\n private isManuallyToggled: boolean;\n\n constructor(props: IQuickOrderDrawerProps) {\n super(props);\n this._toggle = this._toggle.bind(this);\n this.isManuallyToggled = false;\n this.state = { isOpen: (props.collapseProps && props.collapseProps.isOpen) || false };\n this.drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n\n if (this.props.animateGlyph) {\n this.drawerOpenGlyph = classnames(\n this.drawerGlyphClass,\n this.props.openGlyph ? this.props.openGlyph : this.props.closeGlyph ? this.props.closeGlyph : ''\n );\n this.drawerCloseGlyph = this.drawerOpenGlyph;\n } else {\n this.drawerOpenGlyph = classnames(this.drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this.drawerCloseGlyph = classnames(this.drawerGlyphClass, this.props.closeGlyph ? this.props.closeGlyph : '');\n }\n }\n\n public shouldComponentUpdate(nextProps: IQuickOrderDrawerProps, nextState: IQuickOrderDrawerState): 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 collapseProps = { ...this.props.collapseProps } as ICollapseProps;\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this.isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n } else {\n // eslint-disable-next-line react/no-direct-mutation-state\n this.state.isOpen = collapseProps.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className ? this.props.className : '');\n this.isManuallyToggled = false;\n return (\n
\n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen)}\n \n \n
\n );\n }\n\n private _generateDrawerButtonInnerMarkup(collapseState: boolean): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n return (\n <>\n

{this.props.moduleHeadingText}

\n \n {this.props.moduleDescriptionText}\n \n {this._generateGlyphMarkup('drawer__glyph__end', collapseState)}\n \n );\n }\n\n private _generateGlyphMarkup(location: string, collapseState: boolean): JSX.Element {\n let glyphClass = collapseState ? this.drawerOpenGlyph : this.drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return ;\n }\n\n private _toggle(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n this.setState({ isOpen: !this.state.isOpen });\n this.isManuallyToggled = true;\n if (this.props.onToggle) {\n this.props.onToggle(this.state);\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 { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderState } from '../quick-order';\n\nexport interface IQuickOrderFormProps {\n disableAddtoCart: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\n maxChars: number;\n maxQuantity?: number;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n addQuantityPlaceholderText: string;\n quickOrderState: IQuickOrderState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddToCartClick(): Promise;\n}\n\nexport interface IQuickOrderFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToCartBtn: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Input change value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\n\n/**\n * On Quantity Change functionality.\n * @param handleQuantityChange -Quantity change function.\n * @returns Quantity change value.\n */\nconst onQuantityChangeFunction = (handleQuantityChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleQuantityChange(event.target.value || '');\n};\n\nexport const QuickOrderFormComponent = (props: IQuickOrderFormProps): IQuickOrderFormViewProps => {\n const {\n productTextInput,\n quantityTextInput,\n quickOrderState,\n maxChars,\n maxQuantity,\n disableAddtoCart,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n addQuantityPlaceholderText,\n handleQuantityChange,\n handleInputChange,\n handleAddToCartClick\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const onQuantityInputChange = onQuantityChangeFunction(handleQuantityChange);\n\n const productNode = (\n
\n

\n {ariaLabelProduct}\n

\n \n
\n );\n\n const quantityNode = (\n
\n

\n {ariaLabelQuantity}\n

\n \n
\n );\n\n const addtoCartNode = (\n
\n \n {ariaLabelAddtoCart}\n \n
\n );\n\n const userMessageNode =\n quickOrderState && quickOrderState.stateMessage ? (\n \n \n {quickOrderState.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToCartBtn: addtoCartNode,\n quantity: quantityNode,\n userMessage: userMessageNode\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order.\n */\nexport class QuickOrderProduct {\n @observable\n public isSelected: boolean;\n\n public readonly cartLine: CartLine;\n\n public readonly simpleProduct: SimpleProduct;\n\n public constructor(cartLine: CartLine, simpleProduct: SimpleProduct) {\n this.cartLine = cartLine;\n this.simpleProduct = simpleProduct;\n this.isSelected = false;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order table header resources.\n */\nexport interface IQuickOrderTableHeaderResources {\n quickOrderProductNumberText: string;\n quickOrderProductText: string;\n quickOrderUnitPriceText: string;\n quickOrderUnitOfMeasureText: string;\n quickOrderQuantityText: string;\n quickOrderTotalText: string;\n quickOrderActionsText: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderTableHeaderResources;\n}\n\n/**\n * Interface for quick order table header component.\n */\nexport interface IQuickOrderTableHeaderComponent extends IComponent {}\n\n/**\n * Get the quick order header cells for desktop.\n * @param props -- The quick order table header props.\n * @returns The list of cells for quick order header component in desktop version.\n */\nconst QuickOrderDesktopHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderProductNumberText}\n {resources.quickOrderProductText}\n {resources.quickOrderUnitPriceText}\n {resources.quickOrderUnitOfMeasureText}\n {resources.quickOrderQuantityText}\n {resources.quickOrderTotalText}\n {resources.quickOrderActionsText}\n \n );\n};\n\n/**\n * Get the quick order header cells for mobile.\n * @param props -- The quick order table header props.\n * @returns The quick order header component in desktop version.\n */\nconst QuickOrderMobileHeaderCellsComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderProductNumberText}\n \n \n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderTableHeaderComponent: React.FC = (props: IQuickOrderTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\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 { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { CartLine, format, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Data required to render each quick order row.\n */\nexport interface IQuickOrderTableRowData {\n cartLine: CartLine;\n product: SimpleProduct;\n}\n\n/**\n * Resources for quick order table rows.\n */\nexport interface IQuickOrderTableRowResources {\n quickOrderQuantityMobileText: string;\n quickOrderProductDimensionsSeparator: string;\n quickOrderViewDetailsButtonText: string;\n quickOrderViewDetailsButtonAriaLabel: string;\n quickOrderRemoveItemButtonAriaLabel: string;\n quickOrderInputQuantityAriaLabel: string;\n quickOrderDecrementButtonAriaLabel: string;\n quickOrderIncrementButtonAriaLabel: string;\n}\n\n/**\n * Interface for quick order table props.\n */\nexport interface IQuickOrderTableRowProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderTableRowResources;\n}\n\n/**\n * The default image settings for quick order table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderTableRowProductImageComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const fallbackImageUrl = getFallbackImageUrl(\n props.data.product.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n
\n \n
\n );\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderExtraActionsPopupComponent: React.FC = (props: IQuickOrderTableRowProps): JSX.Element | null => {\n const product: SimpleProduct = props.data.product;\n\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 if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n\n return (\n
\n
\n );\n};\n\n/**\n * Renders quick order table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order rows for desktop view.\n */\nexport const QuickOrderDesktopTableRowCellComponent: React.FC = (props: IQuickOrderTableRowProps) => {\n const product: SimpleProduct = props.data.product;\n const cartLine: CartLine = props.data.cartLine;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n\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.quickOrderProductDimensionsSeparator)}\n \n
\n \n {cartLine.Price}\n {cartLine.UnitOfMeasureSymbol}\n \n \n \n {cartLine.TotalAmount}\n \n \n \n \n );\n };\n\n private readonly _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\n if (!cartState) {\n return;\n }\n const code = event.currentTarget.getAttribute('data-value') || '';\n cartState\n .removePromoCodes({\n promoCodes: [code]\n })\n .then(result => {\n if (result.status === 'SUCCESS') {\n this.setState({ error: '' });\n }\n })\n .catch(() => {\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText });\n });\n };\n\n private readonly _calculateDiscount = (code: string, cartState: ICartState | undefined) => {\n if (!cartState || !cartState.cart || !cartState.cart.CartLines || cartState.cart.CartLines.length === 0 || !code) {\n return;\n }\n let discountAmount = 0;\n for (const line of cartState.cart.CartLines) {\n if (line.DiscountLines) {\n for (const discountLine of line.DiscountLines) {\n if (discountLine.DiscountCode === code) {\n discountAmount += discountLine.DiscountCost!;\n }\n }\n }\n }\n return discountAmount * -1;\n };\n\n private readonly _renderAppliedPromoCode = (props: IPromoCodeProps) => {\n if (!props.cart || !props.cart.cart || !props.cart.cart.Coupons || props.cart.cart.Coupons.length === 0) {\n return;\n }\n\n const removePromotionHandler = (event: React.MouseEvent) => {\n this._removePromotion(props.cart, event);\n };\n\n const promoCodTotalDiscount = props.cart.cart.Coupons.reduce((count: number, coupon: Coupon) => {\n return count + (this._calculateDiscount(coupon.Code || '', props.cart) || 0);\n }, 0);\n\n return (\n <>\n
\n
{this.props.appliedPromoCodeHeadingText}
\n \n
\n {props.cart.cart.Coupons.map((coupon: Coupon) => {\n const ariaLabel = props.removePromoAriaLabelFormat\n ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code)\n : '';\n\n return (\n
\n
\n {coupon.Code}{' '}\n \n
\n \n {props.removePromoText}\n \n
\n );\n })}\n \n );\n };\n}\n\nexport default PromoCode;\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 { IHeaderViewProps } from './header';\n\nconst headerView: React.FC = props => {\n const {\n HeaderTag,\n HeaderContainer,\n HeaderTopBarContainer,\n MobileMenuContainer,\n MobileMenuBodyContainer,\n MobileMenuLinksContainer,\n Divider\n } = props;\n return (\n \n \n \n {props.navIcon}\n {props.logo}\n {_renderReactFragment(props.search)}\n {props.preferredStore}\n {props.currentDistributor}\n {_renderDesktopAccountBlock(props)}\n {props.wishListIconDesktop}\n \n {props.cartIcon}\n {_renderReactFragment(props.siteOptions)}\n \n \n \n {props.MobileMenuHeader}\n {_renderReactFragment(props.menuBar)}\n \n {props.accountLinks ? props.accountLinks.map(link => link) : false}\n {props.siteOptions}\n {props.wishListIconMobile}\n {props.signInLink}\n {props.signOutLink}\n \n \n \n {_renderReactFragment(props.menuBar)}\n \n \n );\n};\n\nfunction _renderDesktopAccountBlock(props: IHeaderViewProps): JSX.Element | null {\n const {\n AccountInfoDropdownParentContainer,\n AccountInfoDropdownPopoverConentContainer,\n accountInfoDropdownButton,\n signOutLink,\n signInLink,\n accountLinks\n } = props;\n\n if (AccountInfoDropdownParentContainer) {\n if (AccountInfoDropdownPopoverConentContainer) {\n return (\n \n {accountInfoDropdownButton}\n \n {accountLinks ? accountLinks.map(link => link) : false}\n {signOutLink}\n \n \n );\n } else if (signInLink) {\n return {signInLink};\n }\n }\n props.context.telemetry.error('Header content is empty, module wont render.');\n return null;\n}\n\nfunction _renderReactFragment(items: React.ReactNode[]): JSX.Element | null {\n return (\n <>\n {items && items.length > 0\n ? items.map((slot: React.ReactNode, index: number) => {\n return {slot};\n })\n : null}\n \n );\n}\n\nexport default headerView;\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","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n getCatalogId,\r\n IComponent,\r\n IComponentProps,\r\n ICoreContext,\r\n IGridSettings,\r\n IImageData,\r\n IImageProps,\r\n IImageSettings,\r\n Image,\r\n IRequestContext,\r\n msdyn365Commerce\r\n} from '@msdyn365-commerce/core';\r\nimport { AttributeSwatch, ProductDimension, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n checkIfShouldDisplayAsSwatch,\r\n convertDimensionTypeToProductDimensionType,\r\n Dictionary,\r\n DimensionSwatchDisplayTypes,\r\n DimensionTypes,\r\n generateImageUrl,\r\n getProductPageUrlSync,\r\n IDimensionsApp,\r\n StringExtensions\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n format,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n ITelemetryContent,\r\n onTelemetryClick\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useState } from 'react';\r\n\r\nimport {\r\n IPriceComponentResources,\r\n PriceComponent,\r\n ISwatchItem,\r\n RatingComponent,\r\n ProductComponentSwatchComponent\r\n} from '@msdyn365-commerce/components';\r\n\r\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\r\n className?: string;\r\n imageSettings?: IImageSettings;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n ratingAriaLabel?: string;\r\n ratingCountAriaLabel?: string;\r\n allowBack?: boolean;\r\n telemetryContent?: ITelemetryContent;\r\n quickViewButton?: React.ReactNode;\r\n productComparisonButton?: React.ReactNode;\r\n inventoryLabel?: string;\r\n isPriceMinMaxEnabled?: boolean;\r\n priceResources?: IPriceComponentResources;\r\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\r\n swatchItemAriaLabel?: string;\r\n}\r\n\r\nexport interface IProductComponent extends IComponent {}\r\n\r\nconst PriceComponentActions = {};\r\n\r\n/**\r\n * Renders product comparison button similar to the quick view button.\r\n * @param productComparisonButton - React element of the button.\r\n * @param product - Current product info.\r\n * @param catalogId - Current catalog.\r\n * @returns React element for the specific product.\r\n */\r\nfunction renderProductComparisonButton(\r\n productComparisonButton: React.ReactNode,\r\n product: ProductSearchResult,\r\n catalogId: number\r\n): JSX.Element | undefined {\r\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\r\n}\r\n\r\nconst ProductCard: React.FC = ({\r\n data,\r\n context,\r\n imageSettings,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText,\r\n ratingAriaLabel,\r\n ratingCountAriaLabel,\r\n allowBack,\r\n typeName,\r\n id,\r\n telemetryContent,\r\n quickViewButton,\r\n productComparisonButton,\r\n inventoryLabel,\r\n isPriceMinMaxEnabled,\r\n priceResources,\r\n dimensionAvailabilities,\r\n swatchItemAriaLabel\r\n}) => {\r\n const product = data.product;\r\n\r\n /**\r\n * Updates the product url link to product details page.\r\n * @param productDetailsPageUrl - Product page url.\r\n * @param coreContext - Context of the module using the component.\r\n * @param queryString - Querystring to be added to the URL.\r\n * @returns The update product page url.\r\n */\r\n function updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\r\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\r\n if (sourceUrl.search) {\r\n sourceUrl.search += `&${queryString}`;\r\n } else {\r\n sourceUrl.search += queryString;\r\n }\r\n\r\n const updatedUrl = new URL(sourceUrl.href);\r\n return updatedUrl.pathname + sourceUrl.search;\r\n }\r\n\r\n /**\r\n * Gets the product page url from the default swatch selected.\r\n * @param productData - Product card to be rendered.\r\n * @returns The default color swatch selected if any.\r\n */\r\n function getDefaultColorSwatchSelected(productData?: ProductSearchResult): AttributeSwatch | null {\r\n if (!productData || !productData.AttributeValues) {\r\n return null;\r\n }\r\n\r\n const colorAttribute = productData.AttributeValues.find(\r\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === DimensionTypes.color\r\n );\r\n if (!ArrayExtensions.hasElements(colorAttribute?.Swatches)) {\r\n return null;\r\n }\r\n\r\n const defaultSwatch = colorAttribute!.Swatches.find(item => item.IsDefault === true) ?? colorAttribute!.Swatches[0];\r\n return defaultSwatch;\r\n }\r\n\r\n /**\r\n * Gets the product image from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\n function getProductImageUrlFromDefaultColorSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n return productData?.PrimaryImageUrl;\r\n }\r\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n return defaultSwatch && ArrayExtensions.hasElements(defaultSwatch.ProductImageUrls)\r\n ? generateImageUrl(defaultSwatch.ProductImageUrls[0], coreContext.request.apiSettings)\r\n : productData?.PrimaryImageUrl;\r\n }\r\n\r\n /**\r\n * Gets the product page url from the default swatch selected.\r\n * @param coreContext - Context of the module using the component.\r\n * @param productUrl - Product page url for the product card.\r\n * @param productData - Product card to be rendered.\r\n * @returns The product card image url.\r\n */\r\n function getProductPageUrlFromDefaultSwatch(\r\n coreContext: ICoreContext,\r\n productUrl: string,\r\n productData?: ProductSearchResult\r\n ): string | undefined {\r\n const siteContext = coreContext as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n if (dimensionToPreSelectInProductCard === DimensionTypes.none) {\r\n return productUrl;\r\n }\r\n const defaultSwatch = getDefaultColorSwatchSelected(productData);\r\n if (!defaultSwatch || !defaultSwatch.SwatchValue) {\r\n return productUrl;\r\n }\r\n\r\n const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\r\n const queryString = `color=${queryStringEncoded}`;\r\n return updateProductUrl(productUrl, coreContext, queryString);\r\n }\r\n\r\n let productUrl = product ? getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined) : '';\r\n if (allowBack && productUrl) {\r\n productUrl = updateProductUrl(productUrl, context, 'back=true');\r\n }\r\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultColorSwatch(context, product) ?? product?.PrimaryImageUrl;\r\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\r\n const [productPageUrl, setProductPageUrl] = useState(productPageUrlFromSwatch);\r\n const [productImageUrl, setProductImageUrl] = useState(productImageUrlFromSwatch);\r\n const [selectedSwatchItems] = useState(new Dictionary());\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\r\n const enableStockCheck = context.app.config.enableStockCheck;\r\n\r\n /**\r\n * Updates the product page and Image url based on swatch selected.\r\n * @param coreContext - Context of the caller.\r\n * @param swatchItem - Dimension swatch selected.\r\n */\r\n const updatePageAndImageUrl = React.useCallback(\r\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\r\n const dimensionType = swatchItem.dimensionType;\r\n selectedSwatchItems.setValue(dimensionType, swatchItem);\r\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\r\n return;\r\n }\r\n const queryString = `${dimensionType}=${swatchItem.value}`;\r\n let productPageUrlWithSwatch = '';\r\n if (productPageUrl.includes(dimensionType)) {\r\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\r\n newUrl.searchParams.delete(dimensionType);\r\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\r\n } else {\r\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\r\n }\r\n setProductPageUrl(productPageUrlWithSwatch);\r\n if (dimensionType === DimensionTypes.color) {\r\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\r\n ? swatchItem.productImageUrls[0]\r\n : undefined;\r\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\r\n setProductImageUrl(newImageUrl);\r\n }\r\n },\r\n [selectedSwatchItems, context, productPageUrl]\r\n );\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n const swatchItems = ArrayExtensions.validValues(\r\n product.AttributeValues?.map(item => {\r\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\r\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(\r\n dimensionTypeValue as DimensionTypes,\r\n context as ICoreContext,\r\n DimensionSwatchDisplayTypes.productCard\r\n );\r\n if (!shouldDisplayAsSwatch) {\r\n return null;\r\n }\r\n\r\n const siteContext = context as ICoreContext;\r\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\r\n const dimensionType = dimensionTypeValue as DimensionTypes;\r\n const swatches =\r\n item.Swatches?.map(swatchItem => {\r\n return {\r\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\r\n value: swatchItem.SwatchValue ?? '',\r\n dimensionType,\r\n colorHexCode: swatchItem.SwatchColorHexCode,\r\n imageUrl: swatchItem.SwatchImageUrl,\r\n productImageUrls: swatchItem.ProductImageUrls,\r\n isDefault: swatchItem.IsDefault,\r\n swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\r\n isDisabled:\r\n enableStockCheck &&\r\n dimensionAvailabilities?.find(\r\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\r\n )?.isDisabled\r\n };\r\n }) ?? [];\r\n if (\r\n dimensionToPreSelectInProductCard !== DimensionTypes.none &&\r\n ArrayExtensions.hasElements(swatches) &&\r\n !swatches.some(swatch => swatch.isDefault) &&\r\n dimensionType === DimensionTypes.color\r\n ) {\r\n swatches[0].isDefault = true;\r\n }\r\n return { recordId: item.RecordId, swatches };\r\n })\r\n );\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\r\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\r\n\r\n /**\r\n * Gets the react node for product unit of measure display.\r\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\r\n if (!unitOfMeasure) {\r\n return null;\r\n }\r\n return (\r\n
\r\n {unitOfMeasure}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product availability.\r\n * @param inventoryAvailabilityLabel - The product information.\r\n * @returns The node representing markup for product availability.\r\n */\r\n function renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\r\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {inventoryAvailabilityLabel}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product dimension as swatch.\r\n * @returns The node representing markup for unit of measure component.\r\n */\r\n function renderProductDimensions(): JSX.Element | null {\r\n if (!ArrayExtensions.hasElements(swatchItems)) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n {swatchItems.map(item => {\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param quickview - Quick view node.\r\n * @param item - Product id to de displayed in quickview.\r\n * @returns The product quickview component.\r\n */\r\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\r\n if (quickview === null) {\r\n return undefined;\r\n }\r\n const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map(swatches => {\r\n return {\r\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\r\n DimensionValue: {\r\n RecordId: 0,\r\n Value: swatches.value\r\n }\r\n };\r\n });\r\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\r\n }\r\n\r\n /**\r\n * Gets the aria label for rating.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Aria label format for rating.\r\n * @returns The product rating aria label string.\r\n */\r\n function getRatingAriaLabel(rating?: number, ratingAriaLabelText?: string): string {\r\n if (rating && ratingAriaLabelText) {\r\n const roundedRating = rating.toFixed(2);\r\n return format(ratingAriaLabelText || '', roundedRating, '5');\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label for review count.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Aria label format for review.\r\n * @returns The product review count aria label string.\r\n */\r\n function getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\r\n if (reviewCount && ratingCountAriaLabelText) {\r\n return format(ratingCountAriaLabelText || '', reviewCount);\r\n }\r\n return '';\r\n }\r\n\r\n /**\r\n * Gets the aria label string for product that includes product name with its price and rating.\r\n * @param name - Product name.\r\n * @param price - Product price.\r\n * @param rating - Product rating.\r\n * @param ratingAriaLabelText - Rating aria label text.\r\n * @param reviewCount - Product review count.\r\n * @param ratingCountAriaLabelText - Number of ratings.\r\n * @returns The aria label string for the product card.\r\n */\r\n function renderLabel(\r\n name?: string,\r\n price?: string,\r\n rating?: number,\r\n ratingAriaLabelText?: string,\r\n reviewCount?: number,\r\n ratingCountAriaLabelText?: string\r\n ): string {\r\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\r\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\r\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\r\n }`;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param productCardimageSettings - Module image settings for product card.\r\n * @param gridSettings - Grid settings defined in theme.\r\n * @param imageUrl - Image url.\r\n * @param fallbackImageUrl - Fallback url for imge.\r\n * @param altText - Image Alt text.\r\n * @param requestContext - Request context using the component.\r\n * @returns React component for product image.\r\n */\r\n function renderProductPlacementImage(\r\n productCardimageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n fallbackImageUrl?: string,\r\n altText?: string,\r\n requestContext?: IRequestContext\r\n ): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !productCardimageSettings) {\r\n return null;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Site level config can be of any type.\r\n const emptyPlaceHolderImage = context.app.config.placeholderImageName as string;\r\n let fallbackImageSource = fallbackImageUrl;\r\n if (emptyPlaceHolderImage && fallbackImageUrl) {\r\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\r\n }\r\n const image: IImageData = {\r\n src: imageUrl,\r\n altText: altText ? altText : '',\r\n fallBackSrc: fallbackImageSource\r\n };\r\n const imageProps: IImageProps = { gridSettings };\r\n\r\n imageProps.gridSettings = gridSettings;\r\n imageProps.imageSettings = productCardimageSettings;\r\n imageProps.imageSettings.cropFocalRegion = true;\r\n return ;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param basePrice - Product base price.\r\n * @param adjustedPrice - Product adjusted price.\r\n * @param maxVariantPrice - Product variant max price.\r\n * @param minVariantPrice - Product variant min price.\r\n * @param savingsPriceResourceText - Product price saving text.\r\n * @param freePriceResourceText - Product price free text.\r\n * @param originalPriceResourceText - Product price original text.\r\n * @param currentPriceResourceText - Product price current text.\r\n * @returns React component for Product price.\r\n */\r\n function renderPrice(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n maxVariantPrice?: number,\r\n minVariantPrice?: number,\r\n savingsPriceResourceText?: string,\r\n freePriceResourceText?: string,\r\n originalPriceResourceText?: string,\r\n currentPriceResourceText?: string\r\n ): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice,\r\n MaxVariantPrice: maxVariantPrice ? maxVariantPrice : adjustedPrice,\r\n MinVariantPrice: minVariantPrice ? minVariantPrice : adjustedPrice\r\n };\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n /**\r\n * Gets the react node for product description.\r\n * @param description - Product description.\r\n * @returns The product description component.\r\n */\r\n function renderDescription(description?: string): JSX.Element | null {\r\n return

{description}

;\r\n }\r\n\r\n /**\r\n * Gets the react component for product rating.\r\n * @param coreContext - Context of the module using the component.\r\n * @param moduleTypeName - Module type name.\r\n * @param moduleId - Module id using the component.\r\n * @param avgRating - Average rating.\r\n * @param totalRatings - Total rating.\r\n * @param ariaLabel - Aria label for rating.\r\n * @returns React component for Product rating.\r\n */\r\n function renderRating(\r\n coreContext: ICoreContext,\r\n moduleTypeName: string,\r\n moduleId: string,\r\n avgRating?: number,\r\n totalRatings?: number,\r\n ariaLabel?: string\r\n ): JSX.Element | null {\r\n if (!avgRating) {\r\n return null;\r\n }\r\n\r\n const numberRatings = totalRatings?.toString() || undefined;\r\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\r\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n productImageUrl,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n context.actionContext.requestContext\r\n )}\r\n
\r\n \r\n {product.Name}\r\n {renderProductDimensions()}\r\n
\r\n
\r\n {renderPrice(\r\n context,\r\n typeName,\r\n id,\r\n product.BasePrice,\r\n product.Price,\r\n product.MaxVariantPrice,\r\n product.MinVariantPrice,\r\n savingsText,\r\n freePriceText,\r\n originalPriceText,\r\n currentPriceText\r\n )}\r\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\r\n {renderDescription(product.Description)}\r\n {!context.app.config.hideRating &&\r\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\r\n {renderProductAvailability(inventoryLabel)}\r\n
\r\n
\r\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\r\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\r\n \r\n );\r\n};\r\n\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride<\r\n IProductComponent\r\n>('Product', { component: ProductCard, ...PriceComponentActions });\r\n\r\nexport default ProductComponent;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * 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 { Module } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IBulkPurchaseViewProps } from './bulk-purchase';\n\n/**\n * Bulk purchase view.\n * @param props - Bulk purchase view props.\n * @returns React node with a module.\n */\nexport const BulkPurchaseViewComponent: React.FC = props => {\n return {props.content};\n};\n\nexport default BulkPurchaseViewComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderData } from '../header.data';\nimport { IHeaderProps } from '../header.props.autogenerated';\n\n/**\n * The header preferred store component.\n */\n@observer\nexport class HeaderPreferredStore extends React.PureComponent> {\n private readonly modalCloseButtonRef: React.RefObject = React.createRef();\n\n /**\n * Handle click on the store selector.\n * @returns : Promise void.\n */\n public handleClick = () => {\n return this._findPreferredStoreOnClick(this.props);\n };\n\n public render(): JSX.Element | undefined {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n slots,\n resources\n } = this.props;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- slots can be undefined.\n if (ArrayExtensions.hasElements(slots?.storeSelector)) {\n const storeName =\n storeSelectorStateManager?.preferredStore && storeSelectorStateManager.preferredStore.StoreName\n ? storeSelectorStateManager.preferredStore.StoreName\n : resources.headerPreferredStoreText;\n\n return (\n
\n \n {storeName}\n \n {slots.storeSelector}\n
\n );\n }\n\n return undefined;\n }\n\n private async _findPreferredStoreOnClick(props: IHeaderProps): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager }\n },\n modules\n } = props;\n if (!storeSelectorStateManager) {\n return;\n }\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && ArrayExtensions.hasElements(modules.storeSelector)) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n await storeSelectorStateManager\n .openDialog({\n id: storeSelectorId,\n showMapViewLink: true,\n parentElementRef: this.modalCloseButtonRef,\n onLocationSelected: orgUnitLocation => {\n return Promise.resolve();\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to set preferred store');\n }\n });\n }\n}\n\nexport default HeaderPreferredStore;\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ILogoProps {\n image: Msdyn365.IImageData;\n gridSettings?: Msdyn365.IGridSettings;\n link?: ILinkData;\n className?: string;\n telemetryContent?: ITelemetryContent;\n requestContext: Msdyn365.IRequestContext;\n typeName?: string;\n}\n\nexport interface ILinkData {\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n openInNewTab?: boolean;\n linkText?: string;\n}\n\n/**\n *\n * Logo component.\n * @extends {React.PureComponent}\n */\nexport class Logo extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: ILogoProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.Logo);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return
{this._renderLogo(this.props)}
;\n }\n\n private _renderLogo(config: ILogoProps): JSX.Element {\n if (config.link && config.link.linkUrl.destinationUrl) {\n return (\n \n {this._renderImage(config)}\n \n );\n }\n return this._renderImage(config);\n }\n\n private _renderImage(config: ILogoProps): JSX.Element {\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=132&h=28&m=6', w: 0, h: 0 },\n lg: { q: 'w=160&h=48&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n return (\n \n );\n }\n}\n\nexport default Logo;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IHeaderResources } from '../header.props.autogenerated';\n\nexport interface INavIconProps {\n resources: IHeaderResources;\n isExpanded: boolean;\n targetId: string;\n telemetryContent?: ITelemetryContent;\n toggleNavBar(): void;\n}\n\n/**\n *\n * NavIcon component.\n * @extends {React.PureComponent}\n */\n\n@observer\nexport class NavIcon extends React.PureComponent {\n private readonly attributes?: Msdyn365.IDictionary;\n\n constructor(props: INavIconProps) {\n super(props);\n const payLoad = getPayloadObject('click', props.telemetryContent!, TelemetryConstant.NavIcon);\n this.attributes = getTelemetryAttributes(props.telemetryContent!, payLoad);\n }\n\n public render(): JSX.Element {\n return (\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 { CartIconComponent, WishListIconComponent } from '@msdyn365-commerce/components';\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { Customer } from '@msdyn365-commerce/retail-proxy';\nimport { ErrorNotification, NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalHeader,\n onTelemetryClick,\n Popover,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { HeaderPreferredStore, Logo, NavIcon } from './components';\nimport { IHeaderData } from './header.data';\nimport { IHeaderProps, IHeaderResources, IMyAccountLinksData } from './header.props.autogenerated';\n\nexport interface IHeaderState {\n mobileMenuCollapsed: boolean;\n signinPopoverOpen: boolean;\n hasSigninerror?: boolean;\n}\n\nexport interface IHeaderViewProps extends IHeaderProps, IHeaderState {\n logo: React.ReactNode;\n wishListIconDesktop: React.ReactNode;\n wishListIconMobile: React.ReactNode;\n cartIcon: React.ReactNode;\n navIcon: React.ReactNode;\n className: string;\n menuBar: React.ReactNode[];\n search: React.ReactNode[];\n siteOptions: React.ReactNode[];\n HeaderTag: IModuleProps;\n HeaderContainer: INodeProps;\n MobileMenuContainer: INodeProps;\n MobileMenuHeader: React.ReactNode;\n MobileMenuBodyContainer: INodeProps;\n MobileMenuLinksContainer: INodeProps;\n HeaderTopBarContainer: INodeProps;\n Divider: INodeProps;\n\n AccountInfoDropdownParentContainer?: INodeProps;\n AccountInfoDropdownPopoverConentContainer?: INodeProps;\n accountInfoDropdownButton?: React.ReactNode;\n\n signOutLink?: React.ReactNode;\n signInLink?: React.ReactNode;\n switchCustomerLink?: React.ReactNode;\n isOBORequest?: boolean;\n accountLinks?: React.ReactNode[];\n preferredStore?: React.ReactNode;\n currentDistributor?: React.ReactNode;\n}\n\n/**\n *\n * Header component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Header extends React.PureComponent, IHeaderState> {\n private readonly popOverRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private cart: ICartState | undefined;\n\n private isB2BSite: boolean = false;\n\n /**\n * The signed-in user name displayed in the header bar\n */\n @computed public get displayName(): Readonly {\n return (\n (MsDyn365.isOboRequest(this.props.context.request) ? this.workerName : this.customerName) ||\n this.props.context.request?.user?.name\n );\n }\n\n /**\n * OBO scenario. The name of worker who shops on behalf of customer.\n */\n @computed public get workerName(): Readonly {\n const worker = this.props.data.employee?.result;\n return worker?.Name;\n }\n\n @computed public get customerName(): Readonly {\n const customer = this.props.data.accountInformation?.result;\n if (MsDyn365.isOboRequest(this.props.context.request)) {\n // For OBO scenario, display full customer name because multiple customers may have the same first name.\n return customer ? customer.Name : undefined;\n } else {\n return customer ? customer.FirstName || customer.Name : undefined;\n }\n }\n\n public constructor(props: IHeaderProps) {\n super(props);\n this.popOverRef = React.createRef();\n this._toggleNavbar = this._toggleNavbar.bind(this);\n this._togglePopover = this._togglePopover.bind(this);\n this._keydown = this._keydown.bind(this);\n this.state = {\n mobileMenuCollapsed: true,\n signinPopoverOpen: false,\n hasSigninerror: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isB2BSite = isChannelTypeB2B(this.props.context.request);\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('keydown', this._keydown);\n }\n reaction(\n () => {\n this.props.data.cart.result;\n },\n () => {\n this.cart = this.props.data.cart.result;\n }\n );\n\n const {\n context: {\n request: { user }\n },\n resources: {\n signUpCustomerNotFoundTitle,\n signUpMultipleCustomerFoundTitle,\n signInCustomerNotAuthorizedTitle,\n closeNotificationLabel\n }\n } = this.props;\n\n const signinNotificationError = this._getSigninNotification(\n user,\n signUpMultipleCustomerFoundTitle,\n signUpCustomerNotFoundTitle,\n signInCustomerNotAuthorizedTitle\n );\n if (signinNotificationError !== undefined && this.state.hasSigninerror === false) {\n // For signup show simple error notification.\n NotificationsManager.instance().addNotification(new ErrorNotification(signinNotificationError, closeNotificationLabel));\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('keydown', this._keydown, false);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n id,\n typeName,\n data: { accountInformation, wishlists },\n context: {\n request: { user }\n },\n context,\n resources: { cartLabel, cartQtyLabel }\n } = this.props;\n const { logoLink, logoImage, shouldShowWishlistCount } = this.props.config;\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- app config is generic\n const disableTooltip = this.props.context.app.config.disableTooltip || false;\n const headerToggleClass = this.state.mobileMenuCollapsed ? '' : 'ms-header-open';\n const headerClassName = classnames('ms-header', this.props.config.className, headerToggleClass);\n const navbarKey = 'header-nav-mobile';\n const customer = accountInformation && accountInformation.result;\n const cartIconSlot = this._getSlot('cartIcon');\n const menuBarSlot = this._getSlot('menuBar');\n const searchSlot = this._getSlot('search');\n let wishlistCount = 0;\n const siteOptionsSlot = this._getSlot('siteOptions');\n const preferredStoreSlot = this._getSlot('storeSelector');\n const currentDistributorSlot = this._getSlot('distributorSelector');\n if (wishlists !== undefined) {\n if (\n !wishlists.result ||\n !ArrayExtensions.hasElements(wishlists.result) ||\n !wishlists.result[0].CommerceListLines ||\n !ArrayExtensions.hasElements(wishlists.result[0].CommerceListLines)\n ) {\n wishlistCount = 0;\n } else {\n wishlistCount = wishlists.result[0].CommerceListLines.length;\n }\n }\n const viewProps: IHeaderViewProps = {\n ...(this.props as IHeaderProps),\n ...this.state,\n logo: (\n \n ),\n wishListIconDesktop: (\n \n ),\n wishListIconMobile: (\n \n ),\n cartIcon: ArrayExtensions.hasElements(cartIconSlot) ? (\n cartIconSlot[0]\n ) : (\n \n ),\n navIcon: (\n \n ),\n menuBar: ArrayExtensions.hasElements(menuBarSlot) ? menuBarSlot : [],\n search: ArrayExtensions.hasElements(searchSlot) ? searchSlot : [],\n siteOptions: ArrayExtensions.hasElements(siteOptionsSlot) ? siteOptionsSlot : [],\n className: headerClassName,\n HeaderTag: {\n moduleProps: this.props,\n className: classnames(headerClassName),\n 'aria-label': this.props.resources.headerAriaLabel,\n tag: 'header'\n },\n HeaderContainer: {\n className: classnames('ms-header__container')\n },\n HeaderTopBarContainer: {\n className: classnames('ms-header__topbar')\n },\n Divider: {\n className: classnames('ms-header__divider')\n },\n MobileMenuContainer: {\n tag: Modal,\n id: navbarKey,\n className: 'ms-header__mobile-hamburger',\n isOpen: !this.state.mobileMenuCollapsed,\n wrapClassName: 'ms-header__modal',\n toggle: this._toggleNavbar\n },\n MobileMenuHeader: ,\n MobileMenuBodyContainer: {\n tag: ModalBody,\n className: 'ms-header__mobile-hamburger-menu-body'\n },\n MobileMenuLinksContainer: {\n className: 'ms-header__mobile-hamburger-menu-links'\n },\n AccountInfoDropdownParentContainer: {\n className: 'ms-header__account-info'\n },\n AccountInfoDropdownPopoverConentContainer: this.displayName\n ? {\n tag: Popover,\n id: 'myprofilePopover',\n className: 'ms-header__account-info-content',\n placement: 'bottom',\n isOpen: this.state.signinPopoverOpen,\n target: this.popOverRef,\n toggle: this._togglePopover\n }\n : undefined,\n signInLink: this._getSigninButton(user, this.props.resources),\n signOutLink: this._getSignOutButton(user, this.props.resources),\n isOBORequest: MsDyn365.isOboRequest(this.props.context.request),\n switchCustomerLink: this._getSwitchCustomerButton(user, this.props.resources),\n accountInfoDropdownButton: this._getAccountInfoDropdownButton(user, this.props.resources),\n accountLinks: this._getAccountLinks(customer),\n preferredStore: ArrayExtensions.hasElements(preferredStoreSlot) && ,\n currentDistributor: this.isB2BSite && ArrayExtensions.hasElements(currentDistributorSlot) ? currentDistributorSlot : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handle link text change.\n * @param linkIndex - Link Index.\n * @returns : Void.\n */\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\n if (this.props.config.myAccountLinks?.[linkIndex]) {\n this.props.config.myAccountLinks[linkIndex].linkText = event.target.value;\n }\n };\n\n /**\n * Get the slot.\n * @param slotName - Name of the slot.\n * @returns The slot.\n */\n private _getSlot(slotName: string): React.ReactNode[] | null {\n const { slots } = this.props;\n return (slots && slots[slotName] && slots[slotName].length && slots[slotName]) || null;\n }\n\n /**\n * Renders the sign in button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSigninButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignIn);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n !this.displayName && (\n \n \n {resources.signInLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSignOutButton(user: MsDyn365.IRequestContextUser | undefined, resources: IHeaderResources): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SignOut);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n \n {resources.signOutLinkText}\n \n \n )\n );\n }\n\n /**\n * Renders the sign out button.\n * @param user - Request context user.\n * @param resources - Resources.\n * @returns React Node.\n */\n private _getSwitchCustomerButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.SwitchCustomer);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const isOBOAccountSelected =\n MsDyn365.isOboRequest(this.props.context.request) && this.props.context.request.cookies.getAccountSelectionCookie();\n return (\n this.displayName &&\n isOBOAccountSelected && (\n this.props.context.request.cookies.removeAccountSelectionCookie()}\n {...attributes}\n >\n
\n
{format(resources.shoppingAsText, this.customerName)}
\n
{resources.switchCustomerLinkText}
\n
\n \n )\n );\n }\n\n private getBusinessPartnerSelectionUrl(): string | undefined {\n const route = MsDyn365.getUrlSync('businessPartnerSelection', this.props.context.actionContext);\n if (!route || !MsDyn365.msdyn365Commerce.isBrowser) {\n return undefined;\n }\n\n // MsDyn365.getUrlSync persists some params in the route and remove other params.\n // Among the persisted params, we need to remove catalogid.\n const persistedParamToRemove = ['catalogid'];\n const url = new URL(route, window.location.href);\n persistedParamToRemove.forEach(param => url.searchParams.delete(param));\n return url.href;\n }\n\n private _getSigninNotification(\n user: MsDyn365.IRequestContextUser | undefined,\n signUpMultipleCustomerFoundTitle: string,\n signUpCustomerNotFoundTitle: string,\n signInCustomerNotAuthorizedTitle: string\n ): string | undefined {\n if (!user?.retailServerErrorCode) {\n return undefined;\n }\n\n const { signUpCustomerNotFound, signUpMultipleCustomerFound, signInCustomerNotAuthorized } = this.props.config;\n const notFoundError = 'Microsoft_Dynamics_Commerce_Runtime_CustomerNotFound_WhenAutoLinking';\n const multipleAccountError = 'Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountsFoundWithSameEmailAddress';\n const accountAuthorizationError = 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed';\n\n if (user?.retailServerErrorCode === notFoundError) {\n return signUpCustomerNotFound !== undefined ? signUpCustomerNotFound : signUpCustomerNotFoundTitle;\n } else if (user?.retailServerErrorCode === multipleAccountError) {\n return signUpMultipleCustomerFound !== undefined ? signUpMultipleCustomerFound : signUpMultipleCustomerFoundTitle;\n } else if (user?.retailServerErrorCode === accountAuthorizationError) {\n return signInCustomerNotAuthorized !== undefined ? signInCustomerNotAuthorized : signInCustomerNotAuthorizedTitle;\n }\n return user?.retailServerErrorMessage;\n }\n\n private _getAccountInfoDropdownButton(\n user: MsDyn365.IRequestContextUser | undefined,\n resources: IHeaderResources\n ): React.ReactNode | undefined {\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.MyProfile);\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n return (\n this.displayName && (\n \n
\n
{this.displayName}
\n {MsDyn365.isOboRequest(this.props.context.request) && this.customerName && (\n
{format(resources.shoppingAsText, this.customerName)}
\n )}\n
\n \n )\n );\n }\n\n private _getAccountLinks(customer: Customer | undefined): React.ReactNode[] | undefined {\n const { myAccountLinks } = this.props.config;\n const payLoad = getPayloadObject('click', this.telemetryContent, '');\n if (!this.displayName || !myAccountLinks || !ArrayExtensions.hasElements(myAccountLinks)) {\n return undefined;\n }\n return myAccountLinks.map((cta: IMyAccountLinksData, index: number) => {\n payLoad.contentAction.etext = cta.linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: cta.ariaLabel,\n className: 'ms-signin-info__account-link-button',\n linkText: cta.linkText,\n linkUrl: cta.linkUrl.destinationUrl,\n openInNewTab: cta.openInNewTab,\n role: 'link',\n additionalProperties: attributes\n };\n\n return (\n \n );\n });\n }\n\n private _toggleNavbar(): void {\n this.setState({\n mobileMenuCollapsed: !this.state.mobileMenuCollapsed\n });\n }\n\n private _togglePopover(): void {\n this.setState({\n signinPopoverOpen: !this.state.signinPopoverOpen\n });\n }\n\n private _keydown(event: KeyboardEvent): void {\n if (event.keyCode === KeyCodes.Escape) {\n this.setState({ mobileMenuCollapsed: true });\n }\n }\n}\n\nexport default Header;\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 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 // 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 if (result.substatus === '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('{maxQuantity}', 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 }\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 .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 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 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 { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\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\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 (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\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(productRefinerValue: ProductRefinerValue, refinementCriterion: ProductRefinerValue): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n (isRangeType(refinementCriterion.DataTypeValue) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\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)\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 { IProductDimensionConfigureDropdownViewProps, IProductDimensionConfigureViewProps } from '@msdyn365-commerce/components';\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderFormViewProps } from './components';\nimport { IQuickOrderViewProps } from './quick-order';\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 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\nconst renderForm = (\n form: IQuickOrderFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMsgContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToCartBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToCartBtn}\n \n \n );\n};\n\nconst quickOrderView: React.FC = props => {\n const {\n quickOrderProps,\n contentProps,\n form,\n quickOrderForm,\n drawer,\n configure,\n quickOrderFormProductContent,\n quickOrderFormMsgContent,\n quickOrderList,\n isMobileView\n } = props;\n\n return (\n \n \n \n {renderForm(\n form as IQuickOrderFormViewProps,\n isMobileView,\n quickOrderForm,\n quickOrderFormProductContent,\n quickOrderFormMsgContent,\n configure\n )}\n \n \n\n {quickOrderList}\n \n );\n};\nexport default quickOrderView;\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} 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 { 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 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 &&\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 = 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 { Button, Collapse, ICollapseProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IQuickOrderGridDrawerProps } from './quick-order-grid-drawer-props';\n\n/**\n * Interface for drawer state.\n */\nexport interface IQuickOrderGridDrawerState {\n isOpen: boolean;\n}\n\n/**\n * Placement of glyph.\n */\nexport type GlyphPlacement = 'start' | 'end';\n\n/**\n * Quick Order Grid Drawer - This is a full width uncontrolled collapse where the button glyph changes\n * when the drawer is open and closed.\n */\nexport class QuickOrderGridDrawer extends React.Component<IQuickOrderGridDrawerProps, IQuickOrderGridDrawerState> {\n private readonly _drawerOpenGlyph: string;\n\n private readonly _drawerCloseGlyph: string;\n\n private readonly _drawerGlyphClass: string;\n\n private _isManuallyToggled: boolean;\n\n public constructor(props: IQuickOrderGridDrawerProps) {\n super(props);\n this._isManuallyToggled = false;\n this.state = { isOpen: props.collapseProps?.isOpen ?? false };\n this._drawerGlyphClass = classnames('drawer__glyph', this.props.toggleGlyphClassName ? this.props.toggleGlyphClassName : '');\n const closeGlyph = this.props.closeGlyph ? this.props.closeGlyph : '';\n if (this.props.isAnimateGlyph) {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : closeGlyph);\n this._drawerCloseGlyph = this._drawerOpenGlyph;\n } else {\n this._drawerOpenGlyph = classnames(this._drawerGlyphClass, this.props.openGlyph ? this.props.openGlyph : '');\n this._drawerCloseGlyph = classnames(this._drawerGlyphClass, closeGlyph);\n }\n }\n\n /**\n * Method to call on click of drawer button.\n * @param event - Product DeliveryOption List.\n */\n public toggle = (event: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>): void => {\n event.preventDefault();\n this._isManuallyToggled = true;\n if (this.props.onToggle) {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n this.props.onToggle(this.state);\n } else {\n this.setState(previousState => ({ isOpen: !previousState.isOpen }));\n }\n };\n\n public shouldComponentUpdate(nextProps: IQuickOrderGridDrawerProps, nextState: IQuickOrderGridDrawerState): 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 collapseProps: ICollapseProps = { ...this.props.collapseProps };\n\n // If the drawer is manually toggled by pressing the button, then we use the internal state\n if (collapseProps.isOpen === undefined || this._isManuallyToggled) {\n collapseProps.isOpen = this.state.isOpen;\n }\n collapseProps.children = this.props.children;\n const drawerClass = classnames('drawer', this.props.className);\n const drawerButtonClassName = `${this.props.className ? this.props.className : ''}__button`;\n this._isManuallyToggled = false;\n return (\n <div className={drawerClass}>\n <Button\n {...this.props.toggleButtonProps}\n onClick={this.toggle}\n aria-expanded={collapseProps.isOpen}\n block\n disabled={this.props.isDisabled}\n className={drawerButtonClassName}\n color='secondary'\n >\n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen, drawerClass)}\n </Button>\n <Collapse {...collapseProps} />\n </div>\n );\n }\n\n private _generateDrawerButtonInnerMarkup(isCollapseState: boolean, drawerClass: string): JSX.Element {\n const drawerButtonTextClass = classnames(\n 'drawer__buttontext',\n this.props.toggleButtonClassName ? this.props.toggleButtonClassName : ''\n );\n const headingDrawerClass = `${drawerClass}-heading`;\n const descriptionDrawerClass = `${drawerClass}-description`;\n return (\n <>\n <h2 className={classnames(drawerButtonTextClass, headingDrawerClass)}>{this.props.moduleHeadingText}</h2>\n <span className={classnames(drawerButtonTextClass, descriptionDrawerClass)}>{this.props.moduleDescriptionText}</span>\n {this._generateGlyphMarkup('drawer__glyph__end', isCollapseState)}\n </>\n );\n }\n\n private _generateGlyphMarkup(location: string, isCollapseState: boolean): JSX.Element {\n let glyphClass = isCollapseState ? this._drawerOpenGlyph : this._drawerCloseGlyph;\n glyphClass = `${glyphClass} ${location}`;\n return <span className={glyphClass} />;\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<IErrorMessage> = ({ text }) => {\n return (\n <span className='ms-search-result-container__no-results-message'>\n <h5 className='error-text'>\n {` `}\n {text}\n {` `}\n </h5>\n </span>\n );\n};\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 { IProductCollectionViewProps, IProductComponentViewProps } from './product-collection';\n\nconst ProductCollectionView: React.FC<IProductCollectionViewProps> = props => {\n const {\n heading,\n ProductCollectionContainer,\n products,\n SingleSlideCarouselComponentProps,\n GridComponentProps,\n isCarousel,\n seeAllButton\n } = props;\n\n if (products) {\n return (\n <Module {...ProductCollectionContainer}>\n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n </Module>\n );\n }\n props.context.telemetry.error('Product collection content is empty, module wont render.');\n return null;\n};\n\nconst _renderCarousel = (carouselContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return <Node {...carouselContainer}>{items && items.map(_renderProduct)}</Node>;\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return <Node {...gridContainer}>{items && items.map(_renderProduct)}</Node>;\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return <Node {...ProductContainer}>{productComponent}</Node>;\n};\n\nexport default ProductCollectionView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickOrderGridState } from './utilities';\n\n/**\n * Interface quick order grid form props.\n */\nexport interface IQuickOrderGridFormProps {\n isAddtoListDisabled: boolean | undefined;\n productTextInput: React.RefObject<HTMLInputElement>;\n quantityTextInput: React.RefObject<HTMLInputElement>;\n maxChars: number;\n maxQuantity?: number;\n moduleClassName: string;\n ariaLabelQuantity: string;\n ariaLabelProduct: string;\n ariaLabelAddtoCart: string;\n quickOrderGridState: IQuickOrderGridState;\n handleInputChange(query: string): void;\n handleQuantityChange(query: string): void;\n handleAddProductListClick(): Promise<void>;\n}\n\n/**\n * Interface quick order grid form view props.\n */\nexport interface IQuickOrderGridFormViewProps {\n product: React.ReactNode;\n quantity: React.ReactNode;\n addToListBtn: React.ReactNode;\n userMessage?: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Input change value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent<HTMLInputElement>) => {\n handleInputChange(event.target.value || '');\n};\n\n/**\n * On Quantity Change functionality.\n * @param handleQuantityChange -Quantity change function.\n * @returns Quantity change value.\n */\nconst onQuantityChangeFunction = (handleQuantityChange: (query: string) => void) => (event: React.ChangeEvent<HTMLInputElement>) => {\n handleQuantityChange(event.target.value || '');\n};\n\n/**\n * Quick order grid form component.\n * @param props -Component form props.\n * @returns Quick order gridp view props..\n */\nexport const QuickOrderGridFormComponent = (props: IQuickOrderGridFormProps): IQuickOrderGridFormViewProps => {\n const {\n moduleClassName,\n productTextInput,\n quantityTextInput,\n quickOrderGridState,\n maxChars,\n maxQuantity,\n isAddtoListDisabled,\n ariaLabelQuantity,\n ariaLabelProduct,\n ariaLabelAddtoCart,\n handleQuantityChange,\n handleInputChange,\n handleAddProductListClick\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const onQuantityInputChange = onQuantityChangeFunction(handleQuantityChange);\n\n const productNode = (\n <div className={`${moduleClassName}__content-form-main-product`}>\n <h2 className={`${moduleClassName}__content-form-main-product-lable`} aria-label={ariaLabelProduct}>\n {ariaLabelProduct}\n </h2>\n <input\n className={`${moduleClassName}__content-form-main-product-input`}\n type='text'\n aria-label={ariaLabelProduct}\n ref={productTextInput}\n onChange={onInputChange}\n />\n </div>\n );\n\n const quantityNode = (\n <div className={`${moduleClassName}__content-form-main-quantity`}>\n <h2 className={`${moduleClassName}__content-form-main-quantity-lable`} aria-label={ariaLabelQuantity}>\n {ariaLabelQuantity}\n </h2>\n <input\n className={`${moduleClassName}__content-form-main-quantity-input`}\n pattern='[0-9]*'\n ref={quantityTextInput}\n onChange={onQuantityInputChange}\n maxLength={maxChars}\n type='number'\n aria-live='polite'\n aria-label={ariaLabelQuantity}\n aria-valuemin={0}\n aria-valuemax={maxQuantity}\n aria-valuenow={quickOrderGridState.quantity}\n />\n </div>\n );\n\n const addToListNode = (\n <div className={`${moduleClassName}__content-form-main-add-to-product-list`}>\n <Button\n className={`${moduleClassName}__content-form-main-add-to-product-list-button`}\n disabled={isAddtoListDisabled}\n aria-label={ariaLabelAddtoCart}\n onClick={handleAddProductListClick}\n >\n {ariaLabelAddtoCart}\n </Button>\n </div>\n );\n\n const userMessageNode = quickOrderGridState.stateMessage ? (\n <Alert color={quickOrderGridState.stateMessage.statusCssString} isOpen={quickOrderGridState.stateMessage.isOpen}>\n <span className={quickOrderGridState.stateMessage.messageGlyph} />\n <span>{quickOrderGridState.stateMessage.messageText}</span>\n </Alert>\n ) : (\n undefined\n );\n\n return {\n product: productNode,\n addToListBtn: addToListNode,\n quantity: quantityNode,\n userMessage: userMessageNode\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 * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getCatalogId, getUrlSync, ICoreContext } from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n ObjectExtensions,\n PriceForProductSearchResultInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n INodeProps,\n ISingleSlideCarouselProps,\n ITelemetryContent,\n NodeTag,\n SingleSlideCarousel\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IProductCollectionData } from './product-collection.data';\nimport { IProductCollectionProps, layout } from './product-collection.props.autogenerated';\n\nexport interface IProductCollectionViewProps extends IProductCollectionProps<IProductCollectionData> {\n heading?: React.ReactNode;\n ProductCollectionContainer: IModuleProps;\n SingleSlideCarouselComponentProps: INodeProps;\n GridComponentProps: INodeProps;\n products: IProductComponentViewProps[];\n isCarousel: boolean;\n productPrices?: ProductPrice[];\n seeAllButton?: React.ReactNode;\n}\n\nexport interface IProductComponentViewProps {\n ProductContainer: INodeProps;\n productComponent: React.ReactNode;\n}\nexport interface IProductComponentState {\n products: ProductSearchResult[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * ProductCollection component.\n */\nclass ProductCollection extends React.PureComponent<IProductCollectionProps<IProductCollectionData>, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps<IProductCollectionData>) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise<void> {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n\n // Initialize state in case if the products were not found during initial module render\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Initialize data if not there.\n this.initProductState(this.props.config.productCollection);\n\n const products = this.state.products;\n const isCarousel = this.props.config.layout === layout.carousel;\n const headingLabel = heading ? heading.text : '';\n const headingComponent = heading && (\n <Msdyn365.Text\n className='ms-product-collection__heading'\n tag={heading.tag || 'h1'}\n text={headingLabel}\n editProps={{ onEdit: this.handleHeadingChange, requestContext: this.props.context.request }}\n />\n );\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- product check for safety.\n const updatedProducts = products?.map((item: ProductSearchResult, index: number) => {\n const getProductData = this._getProduct(item, index);\n return !ObjectExtensions.isNullOrUndefined(getProductData) ? getProductData : undefined;\n });\n\n const productCollectionViewProps = {\n ...this.props,\n heading: headingComponent,\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: '',\n flipperPrevLabel: `${headingLabel} ${resources.flipperPrevious}`,\n flipperNextLabel: `${headingLabel} ${resources.flipperNext}`,\n parentId: this.props.id,\n telemetryContent: this.telemetryContent\n } as IComponentNodeProps<ISingleSlideCarouselProps>,\n ProductCollectionContainer: {\n moduleProps: this.props,\n className: classnames('ms-product-collection', className)\n },\n GridComponentProps: {\n tag: 'ul' as NodeTag,\n className: 'ms-product-collection__items'\n },\n isCarousel,\n\n products:\n ArrayExtensions.hasElements(updatedProducts) &&\n updatedProducts.filter(item => {\n return item !== undefined;\n }),\n productPrices: this.productPrices,\n seeAllButton:\n recommendation && shouldDisplaySeeAllButton && ArrayExtensions.hasElements(updatedProducts)\n ? this._getSeeAllButton(recommendation, headingLabel)\n : undefined\n };\n return this.props.renderView(productCollectionViewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n /**\n * Get products dimension availabilities.\n * @param products - Products.\n * @returns Promise.\n */\n private readonly _getProductsDimensionsAvailabilities = async (products: ProductSearchResult[]): Promise<void> => {\n const context = this.props.context as ICoreContext<IDimensionsApp>;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext<IDimensionsApp>,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n const productCollectionProducts = productCollection.products;\n if (!ArrayExtensions.hasElements(products) && ArrayExtensions.hasElements(productCollectionProducts)) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (\n ArrayExtensions.hasElements(products) &&\n ArrayExtensions.hasElements(productCollectionProducts) &&\n !ArrayExtensions.equals(products, productCollectionProducts)\n ) {\n products = productCollectionProducts;\n this.setState({ products });\n } else if (productCollectionProducts === undefined && ArrayExtensions.hasElements(this.state.products)) {\n products = [];\n this.setState({ products: products });\n }\n\n if (Msdyn365.msdyn365Commerce.isBrowser && !ArrayExtensions.hasElements(this.state.productsDimensionAvailabilities)) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n };\n\n private readonly _getProduct = (product: ProductSearchResult, index: number): IProductComponentViewProps | null => {\n if (!product || !product.Name) {\n this.props.telemetry.trace('[product-collection] Product or product name is null');\n return null;\n }\n const telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const { imageSettings, allowBackNavigation } = this.props.config;\n const resources = this.props.resources;\n const breaCrumbType = this.props.context.app.config.breadcrumbType;\n const allowBack = allowBackNavigation && (breaCrumbType === 'back' || breaCrumbType === 'categoryAndBack');\n const quickviewSlot =\n this.props.slots && this.props.slots.quickview && this.props.slots.quickview.length > 0 ? this.props.slots.quickview[0] : null;\n const productComparisonButtonSlot = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const reviewCount = 1;\n const reviewTotalRatings = Number(product.TotalRatings);\n const reviewCountAriaLabelValue =\n reviewTotalRatings > reviewCount ? resources.ratingCountAriaLabel : resources.ratingCountAriaLabelSingleUser;\n const isPriceMinMaxEnabled = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return {\n ProductContainer: {\n tag: 'li' as NodeTag,\n className: 'ms-product-collection__item',\n role: 'listitem',\n key: index\n },\n productComponent: (\n <ProductComponent\n context={this.props.context}\n telemetryContent={telemetryContent}\n imageSettings={imageSettings}\n freePriceText={resources.priceFree}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n ratingAriaLabel={resources.ratingAriaLabel}\n ratingCountAriaLabel={reviewCountAriaLabelValue}\n allowBack={allowBack}\n id={this.props.id}\n typeName={this.props.typeName}\n data={{ product }}\n quickViewButton={quickviewSlot}\n productComparisonButton={productComparisonButtonSlot}\n isPriceMinMaxEnabled={isPriceMinMaxEnabled?.IsEnabled}\n priceResources={priceResources}\n dimensionAvailabilities={this.state.productsDimensionAvailabilities?.find(\n dimensionAvailability =>\n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise<void> => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param recommendation - Recommendation.\n * @param headingLabel - Heading label.\n * @returns IProductComponentSeeAllViewProps - Product component see all view props.\n */\n private readonly _getSeeAllButton = (recommendation: string, headingLabel: string): React.ReactNode => {\n if (!Msdyn365.msdyn365Commerce.isBrowser) {\n return null;\n }\n\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n const searchPageLink = getUrlSync('search', this.props.context.actionContext);\n if (!searchPageLink) {\n return null;\n }\n\n const url = new URL(searchPageLink, window.location.href);\n url.searchParams.set('recommendation', recommendation);\n url.searchParams.set('title', headingLabel);\n url.searchParams.set('catalogid', `${catalogId}`);\n\n return (\n <Button\n className='ms-product-collection__see-all-btn msc-cta__primary'\n title={this.props.resources.seeAllButtonText}\n href={url.href}\n >\n {this.props.resources.seeAllButtonText}\n </Button>\n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport default (props: { className: string; msg?: string }) => (\n <>\n <div className={`${props.className}__loading__icon`} />\n {props?.msg && <div className={`${props.className}__loading__msg`}>{props?.msg}</div>}\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 { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } 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';\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<IGeneric<IAny>>;\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<IRefineItemToggleNotification>): 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<IRefineItemProps, IRefineItemState> {\n private readonly anchorType: React.RefObject<HTMLAnchorElement>;\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\n return (\n <li className={className} id={`${parentProductRefinerHierarchy.KeyName!}_${index}`}>\n <a\n key={selectedRefinementCriterion ? 'true' : 'false'}\n ref={this.anchorType}\n href={this._getRefinerUrl()}\n tabIndex={hasColor ? -1 : 0}\n onClick={this._onClick}\n className={itemTypeClassName}\n role={inputType}\n aria-label={refineMenuItemAriaLabel}\n aria-checked={!!selectedRefinementCriterion}\n {...attribute}\n {...attrs}\n >\n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n <span className='ms-refine-submenu-item__label' aria-hidden='true'>\n {/* eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string. */}\n {productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}\n {productRefinerValue.Count !== undefined && ` (${productRefinerValue.Count})`}\n </span>\n </a>\n </li>\n );\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext<IDimensionsApp>);\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 <SwatchComponent\n className='ms-refine-submenu-item__swatch'\n apiSettings={this.props.context.request.apiSettings}\n list={swatchItems}\n isSelectionEnabled={false}\n isRefineItem\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<HTMLAnchorElement | HTMLInputElement>): 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 <li\n className='ms-refine-submenu-item ms-refine-submenu-item__rating'\n role={!this.props.isMobileView ? 'presentation' : undefined}\n id={`${parentProductRefinerHierarchy.KeyName!}_${index!}`}\n >\n <a\n href={this._getRefinerUrl()}\n role='option'\n aria-selected={isChecked}\n aria-label={`${parentProductRefinerHierarchy.KeyName!}_${productRefinerValue.LeftValueBoundLocalizedString!}\n ${productCountAriaLabelValue!}`}\n onClick={this._onClick}\n {...attribute}\n >\n <RatingComponent\n className={ratingComponentClass}\n avgRating={refinerRating}\n ratingCount={productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString}\n hideCount={false}\n readOnly\n ariaLabel=''\n context={context}\n id={this.props.moduleId}\n typeName={this.props.moduleTypeName}\n data={{}}\n />\n <span className='refine-submenu-item__rating' aria-hidden={this.props.isMobileView ? 'true' : undefined}>\n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n </span>\n </a>\n </li>\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 { IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { AddToCartProductListComponent } from './add-to-list';\nimport { IQuickOrderGridActionsViewProps } from './utilities';\n\n/**\n * Interface for quick order grid action data.\n */\nexport interface IQuickOrderGridActionsData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * Interface for quick order grid action props.\n */\nexport interface IQuickOrderGridActionsProps extends IComponentProps<IQuickOrderGridActionsData> {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n moduleClassName: string;\n typeName: string;\n handlers: {\n removeProductList(productListId: string): void;\n };\n resources: {\n quickOrderGridDeleteButtonText: string;\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n };\n}\n\n/**\n * Remove ProductList Action.\n * @param props -Quick order grid action props.\n */\nconst removeQuickOrderList = (props: IQuickOrderGridActionsProps): void => {\n const {\n data: { quickOrderTemplate },\n handlers\n } = props;\n const { removeProductList } = handlers;\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- Need to check data.\n if (quickOrderTemplate && quickOrderTemplate.productList.Id) {\n removeProductList(quickOrderTemplate.productList.Id);\n }\n};\n\n/**\n * Get Addtobag Button.\n * @param props -Order template action props.\n * @returns QuickOrderGrid actions view props.\n */\nconst getQuickOrderGridAddToCartDialog = (props: IQuickOrderGridActionsProps): React.ReactNode => {\n const {\n data: { quickOrderTemplate },\n context,\n moduleClassName,\n resources,\n typeName\n } = props;\n const buttonId = 'quick-order-grid';\n return (\n <AddToCartProductListComponent\n className={`${moduleClassName}-action-bar__buy-selected msc-btn`}\n id={buttonId}\n typeName={typeName}\n data={{ quickOrderTemplate }}\n context={context}\n resources={resources}\n />\n );\n};\n\n/**\n * Remove Quick order grid action.\n * @param props -Quick order grid action props.\n * @returns Remove order template.\n */\nconst removeActionHandler = (props: IQuickOrderGridActionsProps) => () => {\n removeQuickOrderList(props);\n};\n\n/**\n * Quick order grid action view.\n * @param props -Quick Order Grid template action props.\n * @returns QuickOrderGrid actions view props.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name needs to be this.\nexport const QuickOrderGridActionsView = (props: IQuickOrderGridActionsProps): IQuickOrderGridActionsViewProps => {\n const { moduleClassName, resources } = props;\n const { quickOrderGridDeleteButtonText } = resources;\n\n return {\n addProductListToBag: getQuickOrderGridAddToCartDialog(props),\n removeProductList: (\n <Button className={`${moduleClassName}-action-bar__delete-list-button`} onClick={removeActionHandler(props)}>\n {quickOrderGridDeleteButtonText}\n </Button>\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component<IAddLineToTemplateProps, IAddLineToTemplateState> {\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<HTMLInputElement> = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject<HTMLButtonElement> = React.createRef<HTMLButtonElement>();\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 <Modal {...modalProps}>\n <ModalHeader toggle={this._toggleModalHandler}>\n {this.showBackArrow && (\n <button\n type='button'\n className='msc-modal__back-button'\n aria-label={backToResultsText}\n onClick={this._onBackButtonClickHandler}\n />\n )}\n {addLineModalLinkText}\n </ModalHeader>\n {this._renderContent()}\n </Modal>\n <button\n type='button'\n className='msc-add-line-to-template__button msc-btn'\n aria-label={addLineModalLinkText}\n onClick={this._toggleModalHandler}\n ref={this.addLineButtonRef}\n >\n <span />\n {addLineModalLinkText}\n </button>\n </>\n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n <form\n className='msc-add-line-to-template__search-form'\n aria-label={searchButtonAriaLabel}\n name='add-line-to-template-search-form'\n role='form'\n autoComplete='off'\n onSubmit={this._onSearchSubmit}\n >\n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n <label className={`msc-add-line-to-template__catalogs_title`} htmlFor={`msc-add-line-to-template__catalogs_select`}>\n {selectCatalogTitleText}\n </label>\n <select\n id=' msc-add-line-to-template__catalogs_select'\n className='msc-form-control msc-dropdown__select msc-add-line-to-template__catalogs_select'\n onChange={this._onCatalogSelectionChange}\n >\n {this._getCatalogNodes()}\n </select>\n </>\n )}\n <div className='msc-form-control msc-add-line-to-template__search-input-container'>\n <input\n type='text'\n autoFocus\n aria-label={searchModalPlaceholderText}\n className='msc-form-control msc-add-line-to-template__search-input'\n placeholder={searchModalPlaceholderText}\n value={this.state.query}\n onChange={this._onInputChange}\n ref={this.searchTextInput}\n maxLength={200}\n />\n <button className='msc-add-line-to-template__search-button' aria-label={searchButtonAriaLabel} color='primary' />\n </div>\n </form>\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<HTMLInputElement>) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise<ProductDimensionFull[]> => {\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<HTMLInputElement>): 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'), '<span>$&</span>'));\n\n return (\n <div\n className='msc-add-line-to-template__product__name'\n /* eslint-disable-next-line react/no-danger -- Implementation is a copy.*/\n dangerouslySetInnerHTML={{ __html: parsedName || '' }}\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 <ProductConfiguration {...viewProps} />;\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 <ModalBody>\n <ProductList {...productProps} />\n </ModalBody>\n );\n\n case CONTENT.Loading:\n return (\n <ModalBody>\n {this._renderSearchForm()}\n <Spinner className='msc-add-line-to-template' msg={this.props.resources.progressNotificationText} />\n </ModalBody>\n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n <ModalBody>\n <p className='msc-add-line-to-template__search-result-count'>{this._resultCountText()}</p>\n {this._renderSearchForm()}\n <NotFoundComponent error={notFoundSearchErrorNotice} msg={notFoundSearchErrorRedediation} />\n </ModalBody>\n );\n\n case CONTENT.Error:\n return (\n <ModalBody>\n {this._renderSearchForm()}\n <div className='msc-alert-danger' aria-live='assertive'>\n {this.props.resources.searchErrorMessage}\n </div>\n </ModalBody>\n );\n\n default:\n return <ModalBody>{this._renderSearchForm()}</ModalBody>;\n }\n }\n\n private readonly _addItemToTemplateHandler = async (config: IProductConfigurationState): Promise<ProductListLine> => {\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 <option value={productCatalog.RecordId} key={productCatalog.RecordId} selected={isSelected} aria-selected={isSelected}>\n {productCatalog.Name}\n </option>\n );\n });\n }\n return [];\n }\n\n private readonly _onCatalogSelectionChange = (event: React.ChangeEvent<HTMLSelectElement>) => {\n this.setState({\n selectedCatalogId: Number.parseInt(event.target.value, 10)\n });\n };\n\n private _getSearchResults(searchText: string): Promise<ProductSearchResult[]> {\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 searchCriteriaInput.IncludeAttributes = true;\n searchCriteriaInput.SearchCondition = searchText;\n\n return searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n }\n\n private async _getProductDimensions(product: SimpleProduct): Promise<ProductDimensionFull[]> {\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<IDropdownProps, IDropdownState>}\n */\nexport class Dropdown extends React.PureComponent<IDropdownProps, IDropdownState> {\n private readonly selectMenu: React.RefObject<HTMLSelectElement> = React.createRef<HTMLSelectElement>();\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 <select\n id={`msc-dropdown__entry-${dropdownId}`}\n ref={this.selectMenu}\n aria-label={dropdownName}\n className='msc-dropdown__select'\n onChange={this._onChanged}\n >\n {dropdownList.map(\n (item: IDropdownItemProps) =>\n item && (\n <option\n value={item.id}\n key={item.id}\n selected={+this.state.selectedIndex === +item.id}\n aria-selected={+this.state.selectedIndex === +item.id}\n >\n {item.value}\n </option>\n )\n )}\n </select>\n );\n }\n\n private readonly _onChanged = (event: React.ChangeEvent<HTMLSelectElement>): 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 <div className='msc-add-line-to-template__not-found__icon' />\n <div className='msc-add-line-to-template__not-found__msg'>{props.error}</div>\n <div className='msc-add-line-to-template__not-found__remediation-instructions'>{props.msg}</div>\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<IQuantityProps, IQuantityState> {\n public static defaultProps: Partial<IQuantityProps> = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n\n private readonly inputRef: React.RefObject<HTMLInputElement> = React.createRef<HTMLInputElement>();\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 <div className='quantity' /* Id={this.props.id}*/>\n <button\n disabled={this.props.disabled || disabled}\n title={disabled ? '' : this.props.decrementButtonAriaLabel}\n className={`decrement quantity__controls ${extraClass}`}\n onClick={getChangeHandler(-1)}\n aria-hidden\n aria-label={`${this.props.decrementButtonAriaLabel}`}\n tabIndex={-1}\n color='secondary'\n >\n <span className={glyphMinusClassName} />\n </button>\n <input\n type='number'\n className='quantity-input'\n pattern='[0-9]*'\n value={currentValue}\n onChange={this._handleChange}\n onBlur={this._validateMin}\n aria-live='polite'\n aria-label={`${this.props.inputQuantityAriaLabel}`}\n role='spinbutton'\n aria-valuemin={1}\n aria-valuemax={this.props.max}\n aria-valuenow={currentValue}\n ref={this.inputRef}\n disabled={this.props.disabled}\n />\n <button\n disabled={this.props.disabled || incDisabled}\n title={incDisabled ? '' : this.props.incrementButtonAriaLabel}\n className={`increment quantity__controls ${incDisabled ? 'disabled' : ''}`}\n onClick={getChangeHandler(1)}\n aria-hidden\n aria-label={`${this.props.incrementButtonAriaLabel}`}\n tabIndex={-1}\n color='secondary'\n >\n <span className={glyphPlusClassName} />\n </button>\n </div>\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<HTMLInputElement>): 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<ProductListLine>;\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<IProductCnnfigurationProps, IProductConfigurationState> {\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 <ModalBody>\n {this.props.searchForm}\n <div className='msc-add-line-to-template__product-config'>\n <div className='msc-add-line-to-template__product__positioning-container-2'>\n <div className='msc-add-line-to-template__product__positioning-container-1'>\n <Image\n altText={product.Name ?? 'image'}\n requestContext={this.props.context.actionContext.requestContext}\n src={product?.PrimaryImageUrl ?? ''}\n fallBackSrc={\n getFallbackImageUrl(\n product?.ItemId,\n apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n ) ?? ''\n }\n className='thumbnail'\n imageSettings={imageSettings}\n gridSettings={gridSettings!}\n loadFailureBehavior='empty'\n />\n <div className='msc-add-line-to-template__product__attributes'>\n <div className='msc-add-line-to-template__product__id'>{product?.ItemId}</div>\n {highlightSearchTerm(product?.Name ?? '')}\n <div className='msc-add-line-to-template__product__unit-price'>\n {addLineProductUnitPricePrefix}\n {` `}\n {this._formatPrice(unitPrice)}\n </div>\n <div className='msc-add-line-to-template__product__uom'>\n {addLineProductUnitOfMeasurePrefix}\n {` `}\n {product?.DefaultUnitOfMeasure}\n </div>\n </div>\n </div>\n <div className='msc-add-line-to-template__product-config__dimensions'>{this._getDimensionsNodes()}</div>\n </div>\n <div className='quantity-container'>\n <div>{quantitySelectLabel}</div>\n <OrderTemplateQuantity\n id='msc-add-line-to-template__product-config__quantity'\n currentCount={quantity}\n onChange={this._onQuantityChange}\n inputQuantityAriaLabel='Press to increment quantity by 1'\n max={10_000_000}\n decrementButtonAriaLabel={decrementButtonAriaLabel}\n incrementButtonAriaLabel={incrementButtonAriaLabel}\n />\n </div>\n </div>\n <div className={`msc-add-line-to-template__product__total-price ${isMultipleCatalogSelect}`}>\n {totalPriceLabel}\n {` `}\n {this._formatPrice(totalPrice)}\n </div>\n </ModalBody>\n <ModalFooter>\n {showAddConfirmation && (\n <div\n className='msc-add-line-to-template__add-success msc-alert-success msc-alert'\n aria-live='assertive'\n role='alert'\n >\n <span aria-hidden='true' />\n {this._getConfirmationMessage()}\n </div>\n )}\n {errors?.add && (\n <div className='msc-add-line-to-template__add-error msc-alert-danger msc-alert'>\n <span className='msi-exclamation-triangle' aria-hidden='true' />\n {errors.add}\n </div>\n )}\n <Button\n className={classnames('msc-add-line-to-template__add-configured-product-button', { 'is-busy': this.state.isBusy })}\n aria-label={addItemToTemplateText}\n onClick={this._addToTemplateHandler}\n disabled={buttonDisabled}\n >\n {addItemToTemplateText}\n </Button>\n </ModalFooter>\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<IDropdownItemProps>(mapDimensions) : [];\n dropdownList.unshift({ id: 0, value: `Choose a ${dimensionName}` });\n\n return (\n <div key={DimensionTypeValue}>\n <div>{dimensionName}</div>\n {this.state.errors?.dimension?.includes(DimensionTypeValue.toString()) && (\n <Alert color='danger' assertive aria-label={this._getDimensionsError(dimensionName)}>\n <div className='msc-alert__header' aria-hidden='true'>\n <span className='msi-exclamation-triangle' />\n <span>{this._getDimensionsError(dimensionName)}</span>\n </div>\n </Alert>\n )}\n <Dropdown\n dropdownId={DimensionTypeValue}\n dropdownName={this._getDropdownName(DimensionTypeValue, resources)}\n dropdownList={dropdownList}\n onChange={this._onDimensionChanged}\n />\n </div>\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<HTMLButtonElement, 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<void> => {\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<ProductDimensionFull[]>;\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 <p className='msc-add-line-to-template__search-result-count' aria-live='assertive'>\n {renderResultCountText()}\n </p>\n {props.searchForm}\n <div className='msc-add-line-to-template__product-list'>\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 <div key={`product-${index}`} className='msc-add-line-to-template__product'>\n <div className='msc-add-line-to-template__product__positioning-container-1'>\n <Image\n altText={Name ?? 'image'}\n requestContext={props.context.actionContext.requestContext}\n src={primaryImageSource}\n fallBackSrc={fallBackImg}\n className='thumbnail'\n gridSettings={gridSettings!}\n imageSettings={imageSettings}\n loadFailureBehavior='empty'\n />\n <div className='msc-add-line-to-template__product__attributes' aria-live='polite'>\n <div className='msc-add-line-to-template__product__id'>{ItemId}</div>\n {highlightSearchTerm(Name ?? '')}\n </div>\n </div>\n <div className='msc-add-line-to-template__product__price-container'>\n <span>{price}</span>\n <ProductSelectButton product={product} buttonText={selectProductButtonText} clickHandler={clickHandler} />\n </div>\n </div>\n );\n })}\n </div>\n </>\n );\n};\n\ninterface IProductSelectButton {\n product: ProductSearchResult;\n buttonText: string;\n clickHandler(product: ProductSearchResult): Promise<ProductDimensionFull[]>;\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 <Button\n className={classnames('msc-add-line-to-template__product__select-button', { 'is-busy': isBusy })}\n aria-label={`${product.Name!} ${buttonText}`} // Announce as: 'Nooks surfboard' select product button\n onClick={getClickHandler}\n >\n {buttonText}\n </Button>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\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<IOrderTemplateActionsData> {\n context: ICoreContext;\n telemetryContent?: ITelemetryContent;\n handlers: {\n onRemoveTemplate(orderTemplateId: string): void;\n onRenameTemplate(orderTemplate: ProductList): Promise<void>;\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 <Button className='ms-order-template-action-bar__delete-template-button' onClick={removeOrderActionHandler(props)}>\n {deleteTemplateButtonText}\n </Button>\n ),\n actionsSplitButton: isMultipleCatalogFeatureEnabledInHq && <ActionsSplitButton {...props} />\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 <AddOrderTemplateToCartComponent\n context={context}\n id={id}\n typeName={typeName}\n data={{ orderTemplate }}\n className=''\n addToCartText={addTemplateToBagButtonText}\n dialogStrings={dialogStrings}\n telemetryContent={telemetryContent}\n isMultipleCatalogFeatureEnabledInHq={isMultipleCatalogFeatureEnabledInHq}\n />\n );\n};\n\nconst _getOrderTemplateRenameControl = (props: IOrderTemplateActionsProps): React.ReactNode => {\n const { renameOrderTemplateDialogStrings, resources, context, handlers } = props;\n return (\n <RenameOrderTemplateComponent\n onRenameTemplate={handlers.onRenameTemplate}\n className='msc-order-template-name-dialog'\n context={context}\n id={props.id}\n data={{ orderTemplate: props.data.orderTemplate.productList }}\n typeName={props.typeName}\n renameOrderTemplateDialogStrings={renameOrderTemplateDialogStrings}\n renameOrderTemplateButtonText={resources.renameTemplateButtonText}\n isMultipleCatalogFeatureEnabledInHq\n />\n );\n};\n\nlet buttonEventReference: HTMLButtonElement | undefined;\nexport const ActionsSplitButton: React.FC<IOrderTemplateActionsProps> = (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<HTMLButtonElement>) => {\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<HTMLButtonElement>();\n const renderModalPopup = (\n <OrderTemplateNameDialog\n existingOrderTemplate={orderTemplate.productList}\n isUpdateDialog\n className='msc-order-template-name-dialog'\n modalOpen={renameOrderTemplateDialogOpen}\n setModalOpen={setOrderTemplateNameDialogOpen}\n context={context}\n id={props.id}\n data={props.data}\n orderTemplateName={props.data.orderTemplate.productList.Name}\n typeName={props.typeName}\n dialogStrings={renameOrderTemplateDialogStrings}\n onCancel={onOrderTemplateNameCancel}\n onSuccess={props.handlers.onRenameTemplate}\n />\n );\n const requestStatementDropdownString = `request-statement-dropdown-id-${Random.Guid.generateGuid()}`;\n\n return (\n <div className={`${className}__dropdown`}>\n {renderModalPopup}\n <Button\n className={\n isStatementRequestAdminDropdownOpen\n ? `${className}__action__requestStatement__toggleUp`\n : `${className}__action__requestStatement__toggleDown`\n }\n onClick={onToggleDropdown1}\n innerRef={popoverReference}\n aria-haspopup='true'\n aria-expanded={isStatementRequestAdminDropdownOpen}\n id={requestStatementDropdownString}\n >\n <span className={`${className}__action__requestStatement__buttonLabel`}>{'Options'}</span>\n </Button>\n <Popover\n aria-labelledby={requestStatementDropdownString}\n className={`${className}__action__requestStatement__dropdownVisible`}\n isOpen={isStatementRequestAdminDropdownOpen}\n placement='bottom'\n target={popoverReference}\n toggle={onToggleDropdown1}\n role='listbox'\n aria-hidden={!isStatementRequestAdminDropdownOpen}\n >\n <Button className={`${className}__action__requestStatement__dropdownOption rename`} onClick={onRenameButtonClick}>\n {resources.renameTemplateButtonText}\n </Button>\n\n <Button\n onClick={removeOrderActionHandler(props)}\n className={`${className}__action__requestStatement__dropdownOption delete`}\n role='option'\n >\n {'Delete'}\n </Button>\n </Popover>\n </div>\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<HTMLElement>) => void;\n getRemoveItem(): (event: React.MouseEvent<HTMLElement>) => 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<HTMLElement>) => {\n LineId &&\n orderTemplateLine.fullProduct &&\n onAddToBag(orderTemplateLine.fullProduct.ProductDetails, quantity, LineId, CatalogId);\n },\n getRemoveItem: () => (event: React.MouseEvent<HTMLElement>) => 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<HTMLElement>) => {\n props.toggleDetailsDisplayed(props);\n };\n\n const toggle = React.useCallback(() => {\n setShowMobile(!showMobile);\n }, [showMobile]);\n\n return (\n <div className={`${componentClassName}__row-links-minified`}>\n <Button\n className={`${componentClassName}__row-links-toggle`}\n aria-label={moreButtonText}\n data-type={props.index}\n onClick={toggle}\n />\n {showMobile && (\n <div className={`${componentClassName}__row-links`}>\n <Button\n className='ms-table__row-links-view'\n onClick={getViewHandler()}\n title={viewProductDetailsText}\n aria-label={viewProductDetailsText}\n >\n View\n </Button>\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 </div>\n )}\n </div>\n );\n};\n\nconst getActionButton = (\n isMobile: boolean,\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent<HTMLElement>) => void\n): React.ReactNode => (\n <Button aria-label={buttonText} className={className} onClick={clickHandler} title={buttonText}>\n {isMobile ? buttonText : ''}\n </Button>\n);\n\nconst getDesktopActionButton = (\n className: string,\n buttonText: string,\n clickHandler: (event: React.MouseEvent<HTMLElement>) => void\n): React.ReactNode => (\n <Button aria-label={buttonText} className={className} onClick={clickHandler} title={buttonText}>\n {buttonText}\n </Button>\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<HTMLInputElement>\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 <label className='checkbox-container'>\n <input\n aria-label={selectOneRowText}\n className='checkbox-input'\n type='checkbox'\n checked={orderTemplateLine.isChecked}\n aria-checked={orderTemplateLine.isChecked}\n onChange={onSelectLineHandler(orderTemplateLine, input)}\n />\n <span className='checkmark' />\n </label>\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 <div className='ms-order-template-table-line__product-number'>{ItemId}</div>\n {input.error !== 'NONE' ? (\n <div className='ms-order-template-table-line__product-availability'>{_renderProductError(input)}</div>\n ) : (\n undefined\n )}\n </>\n ),\n productUnitOfMeasure: price ? (\n <div className='ms-order-template-table-line__product-unit-of-measure'>{UnitOfMeasure || price.UnitOfMeasure}</div>\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: <div>{_generateQuantity(input, LineId!)}</div>,\n productQuantity: quantity,\n addToBagButton:\n !isMultipleCatalogFeatureEnabledInHq &&\n getActionButton(input.isMobile, addButtonClassName, addToBagButtonText, OrderTemplateLineActions(input).getAddToBag()),\n extraActionsPopup:\n !isMobile && isMultipleCatalogFeatureEnabledInHq ? (\n <ExtraActionsPopup {...input} addButtonClassName={addButtonClassName} removeButtonClassName={removeButtonClassName} />\n ) : (\n undefined\n ),\n popUp: <PopUp {...input} addButtonClassName={addButtonClassName} removeButtonClassName={removeButtonClassName} />,\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 <div className={className}>\n <Button className={`${className}__toggle`} aria-label={''} onClick={toggle} />\n {showActions && (\n <div className={actionsContainerClassName}>\n {getDesktopActionButton(\n 'ms-order-template-table-lines__products-add-button',\n 'Add to bag',\n OrderTemplateLineActions(props).getAddToBag()\n )}\n {getDesktopActionButton(\n 'ms-order-template-table-lines__products-remove-button',\n 'Remove item',\n OrderTemplateLineActions(props).getRemoveItem()\n )}\n </div>\n )}\n </div>\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 <OrderTemplateQuantity\n currentCount={quantity}\n onChange={onChangeHandler(onChangeQuantity, itemKey, props)}\n max={999_999_999}\n inputQuantityAriaLabel={resources.inputQuantityAriaLabel}\n incrementButtonAriaLabel={resources.incrementButtonAriaLabel}\n decrementButtonAriaLabel={resources.decrementButtonAriaLabel}\n disabled={props.isQuantityDisabledForUpdate}\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 <Image\n requestContext={context?.actionContext?.requestContext}\n className={className}\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 tabIndex={0}\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 <div className='msc-cart-line__catalog-label'>{catalog.Name}</div>;\n};\n\nconst _renderPrice = (props: IOrderTemplateLineProps): 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-order-template-table-line__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: 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 <a className='ms-order-template-table-line__product-info-name' href={productUrl}>\n {name}\n </a>\n ) : (\n <div className='ms-order-template-table-line__product-info-name'>{name}</div>\n );\n\n const dimensionsLine: string = dimensions.join(', ');\n\n return (\n <div className='ms-order-template-table-line__product-info'>\n <div className='ms-order-template-table-line__product-info-name'>{productName}</div>\n <div className='ms-order-template-table-line__product-info-dimension'>{dimensionsLine}</div>\n </div>\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<IOrderTemplateLinesStatusMessageProps> = ({ className, errorType, text }) => {\n switch (errorType) {\n case 'EMPTY':\n return <p className={classnames('ms-order-template-lines__message-empty', className)}>{text}</p>;\n case 'FAILED':\n return <p className={classnames('ms-order-template-lines__message-failed', className)}>{text}</p>;\n case 'LOADING':\n default:\n return <p className='ms-order-template-lines__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 * 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<IOrderTemplateTableHeadingProps> {\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<HTMLInputElement>) => {\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 <thead>\n <tr className={`${this.componentClassName}__heading-row`}>\n <th scope='col' aria-label={this.props.selectAllRowsText}>\n <label className='checkbox-container'>\n <input\n aria-label={this.props.selectAllRowsText}\n className='checkbox-input'\n type='checkbox'\n aria-checked={this.state.isChecked}\n checked={this.state.isChecked}\n onChange={this.getOnChange()}\n />\n <span className='checkmark' />\n </label>\n </th>\n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n <th scope='col'>{this.props.productLineCatalogName}</th>\n ) : null}\n {!this.props.isMobile ? <th scope='col'>{this.props.productImage}</th> : null}\n <th scope='col'>{this.props.productNumber}</th>\n {!this.props.isMobile ? <th scope='col'>{this.props.productName}</th> : null}\n {!this.props.isMobile ? <th scope='col'>{this.props.productUnitPrice}</th> : null}\n {!this.props.isMobile ? <th scope='col'>{this.props.productUOM}</th> : null}\n {!this.props.isMobile ? <th scope='col'>{this.props.productQuantity}</th> : null}\n {!this.props.isMobile ? <th scope='col'>{this.props.productActions}</th> : <td />}\n </tr>\n </thead>\n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './choice-summary';\nexport * from './choice-summary.props';\nexport * from './error-message';\nexport * from './feature-search-result-item';\nexport * from './link';\nexport * from './modal';\nexport * from './product-search-result-items';\nexport * from './range-refine-item';\nexport * from './refine-item';\nexport * from './refine-item.props.common';\nexport * from './refine-item-toggle-notification';\nexport * from './refine-submenu';\nexport * from './separator';\nexport * from './title';\nexport * from './utilities';\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<IProductSearchResultItems> = ({\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 <ul className='list-unstyled'>\n {products.map((product: ProductSearchResult, index: number) => (\n <li className='ms-product-search-result__item' key={index}>\n <ProductComponent\n context={context}\n telemetryContent={telemetryContent}\n imageSettings={imageSettings}\n freePriceText={resources.priceFree}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n ratingAriaLabel={resources.ratingAriaLabel}\n allowBack={allowBackNavigation}\n id={moduleId}\n key={product.RecordId}\n typeName={moduleType}\n data={{ product }}\n quickViewButton={quickviewSlot}\n productComparisonButton={productComparisonButton}\n inventoryLabel={getInventoryLabel(channelInventoryConfigurationId, product)}\n isPriceMinMaxEnabled={isPriceMinMaxEnabled}\n priceResources={priceResources}\n swatchItemAriaLabel={resources.swatchItemAriaLabel}\n dimensionAvailabilities={productsDimensionAvailabilities?.find(\n dimensionAvailability =>\n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n </li>\n ))}\n </ul>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { QuickOrderTemplateLine } from '@msdyn365-commerce-modules/retail-actions';\nimport { observable } from 'mobx';\n\n/**\n * Represents a product for quick order grid.\n */\nexport class QuickOrderGridProduct {\n @observable\n public isSelected: boolean;\n\n public readonly productLine: QuickOrderTemplateLine;\n\n public constructor(productLine: QuickOrderTemplateLine) {\n this.productLine = productLine;\n this.isSelected = false;\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 { 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 { isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent<IChoiceSummaryProps> {\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 return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly<IChoiceSummaryProps>) {\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 <div className='msc-choice-summary'>\n {items.length > 0 && label && <span className='msc-choice-summary__label'>{label}</span>}\n <ul className={classnames(classNames, 'msc-choice-summary__list', 'list-unstyled')}>\n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n <li className='msc-choice-summary__list-item' key={item.key}>\n <a\n className='msc-choice-summary__item'\n href={this.props.urlBuilder(item.value, false)}\n aria-label={`${item.value.LeftValueBoundString} ${choiceAriaLabel}`}\n onClick={this._onClick}\n role='button'\n id={item.key}\n {...attribute}\n >\n {item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString ||\n item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString}\n <span\n className={`${this.closeButtonGlyph} msc-choice-summary__glyph`}\n role='button'\n aria-label={closeAriaLabel}\n />\n </a>\n </li>\n );\n })}\n </ul>\n {items.length > 0 && clearAllText && (\n <a\n href={this.props.urlBuilder({}, true)}\n className='msc-choice-summary__clear-all'\n {...clearAllAttributes}\n onClick={this._onClick}\n >\n {clearAllText}\n </a>\n )}\n </div>\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 if (refinerHierarchy && refinerHierarchy.find) {\n const 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 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<HTMLAnchorElement>): 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 { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } 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, isRangeType } from './utilities';\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<IGeneric<IAny>>;\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<IRefineItemToggleNotification>): 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<IRefineSubmenuProps>}\n */\nclass RefineSubmenu extends React.Component<IRefineSubmenuProps, IRefineSubmenuState> {\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 // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\n // isExpanded = true;\n // }\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 <div className={className}>\n <Button\n className={this.state.expanded ? 'ms-refine-submenu__toggle_expanded' : 'ms-refine-submenu__toggle_collapsed'}\n aria-label={productRefinerHierarchy.KeyName}\n onClick={this._onToggleSubmenu}\n aria-expanded={this.state.expanded}\n >\n {productRefinerHierarchy.KeyName}\n </Button>\n <Collapse isOpen={this.state.expanded} timeout={350}>\n {this._renderChildItems(productRefinerHierarchy)}\n </Collapse>\n </div>\n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (isRangeType(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 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 const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n return (\n <RefineItem\n parentProductRefinerHierarchy={productRefinerHierarchy}\n productRefinerValue={child}\n selectedRefinementCriterion={selectedRefinementCriterion}\n selectedRefinerValues={selectedRefinerValues.filter(selectedValue =>\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 <ul\n className={`ms-refine-submenu__list ${productRefinerHierarchy.KeyName}`}\n {...role}\n aria-label={productRefinerHierarchy.KeyName}\n >\n {listItems}\n </ul>\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 <li className={`${submenuClassNamePrefix}--range`} key={index}>\n <RangeRefineItem\n parentProductRefinerHierarchy={productRefinerHierarchy}\n productRefinerValue={child}\n selectedRefinementCriterion={selectedRefinementCriterion}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n rangeType={rangeType}\n key={key}\n sliderKey={key}\n context={context}\n minValueSliderThumbAriaLabel={minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={maxValueSliderThumbAriaLabel}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n />\n </li>\n );\n });\n return <ul className={`ms-refine-submenu__list list-unstyled ${productRefinerHierarchy.KeyName}`}>{listItems}</ul>;\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<ISeparator> = ({ separator }) => (\n <span>\n {` `}\n {separator}\n {` `}\n </span>\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IComponent, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport classnames from 'classnames';\nimport React from 'react';\n\n/**\n * Interface for quick order grid table header resources.\n */\nexport interface IQuickOrderGridTableHeaderResources {\n quickOrderGridProductNumberText: string;\n quickOrderGridProductText: string;\n quickOrderGridUnitPriceText: string;\n quickOrderGridUnitOfMeasureText: string;\n quickOrderGridQuantityText: string;\n quickOrderGridActionsText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableHeaderProps extends IComponentProps {\n context: ICoreContext;\n className: string;\n\n isMobile: boolean;\n resources: IQuickOrderGridTableHeaderResources;\n}\n\n/**\n * Interface for quick order grid table header component.\n */\nexport interface IQuickOrderGridTableHeaderComponent extends IComponent<IQuickOrderGridTableHeaderProps> {}\n\n/**\n * Get the quick order grid header cells for desktop.\n * @param props -- The quick order grid table header props.\n * @returns The list of cells for quick order grid header component in desktop version.\n */\nconst QuickOrderGridDesktopHeaderCellsComponent: React.FC<IQuickOrderGridTableHeaderProps> = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n <th>\n <span className={classnames(`${props.className}__emptyColumn`)} />\n </th>\n <th>{resources.quickOrderGridProductNumberText}</th>\n <th>{resources.quickOrderGridProductText}</th>\n <th className={columnWithNumberClassName}>{resources.quickOrderGridUnitPriceText}</th>\n <th>{resources.quickOrderGridUnitOfMeasureText}</th>\n <th className={columnWithNumberClassName}>{resources.quickOrderGridQuantityText}</th>\n <th>{resources.quickOrderGridActionsText}</th>\n </>\n );\n};\n\n/**\n * Get the quick order grid header cells for mobile.\n * @param props -- The quick order grid table header props.\n * @returns The quick order grid header component in desktop version.\n */\nconst QuickOrderGridMobileHeaderCellsComponent: React.FC<IQuickOrderGridTableHeaderProps> = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n <th className={classnames(`${props.className}__emptyColumn`)} />\n <th>{resources.quickOrderGridProductNumberText}</th>\n <th />\n </>\n );\n};\n\n/**\n * Quick order table header component.\n * @param props - Configuration of the component.\n * @returns React node with the header.\n */\nexport const QuickOrderGridTableHeaderComponent: React.FC<IQuickOrderGridTableHeaderProps> = (props: IQuickOrderGridTableHeaderProps) => {\n const rowClassName = `${props.className}__row`;\n\n let headerCells: JSX.Element;\n if (props.isMobile) {\n headerCells = <QuickOrderGridMobileHeaderCellsComponent {...props} />;\n } else {\n headerCells = <QuickOrderGridDesktopHeaderCellsComponent {...props} />;\n }\n\n return (\n <thead className={props.className}>\n <tr className={rowClassName}>{headerCells}</tr>\n </thead>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport MsDyn365, { IComponentProps, ICoreContext, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductPrice } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync, ObjectExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, IncrementalQuantity, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nimport { QuickOrderGridProduct } from '../../quick-order-grid-product';\nimport { IQuickOrderGridRowCallbacks } from '../../utilities';\n\n/**\n * Data required to render each quick order grid row.\n */\nexport interface IQuickOrderGridTableRowData {\n product: QuickOrderGridProduct;\n}\n\n/**\n * Resources for quick order grid table rows.\n */\nexport interface IQuickOrderGridTableRowResources {\n quickOrderGridQuantityMobileText: string;\n quickOrderGridProductDimensionsSeparator: string;\n quickOrderGridViewDetailsButtonText: string;\n quickOrderGridViewDetailsButtonAriaLabel: string;\n quickOrderGridRemoveItemButtonAriaLabel: string;\n quickOrderGridInputQuantityAriaLabel: string;\n quickOrderGridDecrementButtonAriaLabel: string;\n quickOrderGridIncrementButtonAriaLabel: string;\n originalPriceText: string;\n currentPriceText: string;\n freePriceText: string;\n}\n\n/**\n * Interface for quick order grid table props.\n */\nexport interface IQuickOrderGridTableRowProps extends IComponentProps<IQuickOrderGridTableRowData> {\n context: ICoreContext;\n className: string;\n productListLine: ProductListLine;\n price?: ProductPrice;\n moduleId: string;\n moduleTypeName: string;\n quantity: number;\n imageSettings?: IImageSettings;\n isMobile: boolean;\n resources: IQuickOrderGridTableRowResources;\n index: number;\n callbacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * The default image settings for quick order grid table row.\n */\nconst defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=80&h=80&m=6', w: 0, h: 0 },\n lg: { q: 'w=147&h=147&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n};\n\n/**\n * Renders product image for quick order grid row.\n * @param props - Quick order table row props.\n * @returns React element.\n */\nconst QuickOrderGridTableRowProductImageComponent: React.FC<IQuickOrderGridTableRowProps> = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const fallbackImageUrl = getFallbackImageUrl(\n product?.ItemId,\n props.context.actionContext.requestContext.apiSettings,\n props.context.request.app?.config?.OmniChannelMedia\n );\n\n const containerClassName = `${props.className}__product-image-container`;\n\n return (\n <div className={containerClassName}>\n <Image\n requestContext={props.context.actionContext.requestContext}\n className={`${containerClassName}__product-image`}\n altText={product?.Name}\n src={product?.PrimaryImageUrl ?? ''}\n fallBackSrc={fallbackImageUrl}\n gridSettings={props.context.request.gridSettings!}\n imageSettings={props.imageSettings ?? defaultImageSettings}\n loadFailureBehavior='empty'\n />\n </div>\n );\n};\n\nlet setShowPreviousActions: React.Dispatch<React.SetStateAction<boolean>> | undefined;\n\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderProductPrice = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const { context, moduleId, moduleTypeName, resources } = props;\n const price = props.price;\n\n if (price) {\n return (\n <PriceComponent\n id={moduleId}\n typeName={moduleTypeName}\n data={{ price }}\n className='ms-quick-order-grid-row__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\n/**\n * Renders product price.\n * @param props - Props for price component.\n * @returns React element.\n */\nconst renderUnitOfMeasure = (props: IQuickOrderGridTableRowProps): JSX.Element | null => {\n const price = props.price;\n\n if (price) {\n return (\n <div className='ms-quick-order-grid-row__product-unit-of-measure'>\n {StringExtensions.isNullOrEmpty(props.productListLine.UnitOfMeasure) || price.UnitOfMeasure}\n </div>\n );\n }\n return null;\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: (\n orderTemplateLineId: string | undefined,\n quantity: number,\n props?: IQuickOrderGridTableRowProps | undefined\n ) => boolean,\n itemKey: string | undefined,\n props: IQuickOrderGridTableRowProps\n) => (newValue: number) => {\n onChangeQuantity(itemKey, newValue, props);\n return true;\n};\n\n/**\n * On Change function.\n * @param onRemoveItem -On change quantity function.\n * @param quickOrderGridProductKey -QuickOrderGridp Product.\n * @param props -Order template line props.\n * @returns Set change quantity.\n */\nconst onRemoveHandler = (\n onRemoveItem: (quickOrderGridProduct: QuickOrderGridProduct, props?: IQuickOrderGridTableRowProps | undefined) => void,\n quickOrderGridProductKey: QuickOrderGridProduct,\n props: IQuickOrderGridTableRowProps\n) => () => {\n onRemoveItem(quickOrderGridProductKey, props);\n};\n\n/**\n * Renders actions popup for the mobile view.\n * @param props - Configuration for popup.\n * @returns A react node with actions..\n */\nconst QuickOrderGridExtraActionsPopupComponent: React.FC<IQuickOrderGridTableRowProps> = (\n props: IQuickOrderGridTableRowProps\n): JSX.Element | null => {\n const {\n resources: { quickOrderGridViewDetailsButtonAriaLabel, quickOrderGridViewDetailsButtonText }\n } = props;\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const [shouldShowActions, setShowActions] = useState(false);\n let productUrl = '';\n if (product === undefined) {\n return null;\n }\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n const onClickViewDetails = React.useCallback(() => {\n if (MsDyn365.isBrowser) {\n window.location.href = productUrl;\n }\n }, [productUrl]);\n\n const toggle = React.useCallback(() => {\n const shouldShowActionsNewValue = !shouldShowActions;\n if (shouldShowActionsNewValue) {\n if (setShowPreviousActions) {\n setShowPreviousActions(false);\n }\n setShowActions(shouldShowActionsNewValue);\n setShowPreviousActions = setShowActions;\n } else {\n setShowPreviousActions = undefined;\n setShowActions(shouldShowActionsNewValue);\n }\n }, [shouldShowActions, setShowActions]);\n\n if (StringExtensions.isNullOrWhitespace(productUrl)) {\n return null;\n }\n\n const className = `${props.className}__extra-actions-cell`;\n const actionsContainerClassName = `${className}__actions-container`;\n\n return (\n <div className={className}>\n <Button className={`${className}__toggle`} onClick={toggle} />\n {shouldShowActions && (\n <div className={actionsContainerClassName}>\n <Button\n className={`${actionsContainerClassName}__view-details`}\n onClick={onClickViewDetails}\n aria-label={quickOrderGridViewDetailsButtonAriaLabel}\n >\n {quickOrderGridViewDetailsButtonText}\n </Button>\n <Button\n className={`${props.className}__product-remove`}\n aria-label={props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n >\n {props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n </Button>\n </div>\n )}\n </div>\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<IQuickOrderGridTableRowProps> = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { 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 <td>\n <QuickOrderGridTableRowProductImageComponent {...props} />\n </td>\n <td>{product.ItemId}</td>\n <td>\n <div className={`${props.className}__product-info`}>\n <a className={`${props.className}__product-name`} href={productUrl}>\n {product.Name}\n </a>\n <span className={`${props.className}__product-dimensions`}>\n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderGridProductDimensionsSeparator)}\n </span>\n </div>\n </td>\n <td className={columnWithNumberClassName}>{renderProductPrice(props)}</td>\n <td>{renderUnitOfMeasure(props)}</td>\n <td className={`${props.className}__product-quantity`}>\n <IncrementalQuantity\n id={`msc-quick-order-grid-row__quantity_${product.RecordId}-${productListLine.LineId ?? ''}`}\n max={10}\n currentCount={quantity}\n inputQuantityAriaLabel={props.resources.quickOrderGridInputQuantityAriaLabel}\n decrementButtonAriaLabel={props.resources.quickOrderGridDecrementButtonAriaLabel}\n incrementButtonAriaLabel={props.resources.quickOrderGridIncrementButtonAriaLabel}\n key={productListLine.LineId}\n isGiftCard={product.IsGiftCard}\n onChange={onChangeHandler(props.callbacks.onChangeQuantity, productListLine.LineId, props)}\n />\n </td>\n <td>\n <Button\n className={`${props.className}__product-remove`}\n aria-label={props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n onClick={onRemoveHandler(props.callbacks.onRemoveItem, props.data.product, props)}\n />\n </td>\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<IQuickOrderGridTableRowProps> = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { quantity } = props;\n if (product !== undefined) {\n return (\n <>\n <td>\n <QuickOrderGridTableRowProductImageComponent {...props} />\n </td>\n <td>\n <div className={`${props.className}__product-info`}>\n <span className={`${props.className}__product-name`}>{product.RecordId}</span>\n <span className={`${props.className}__product-quantity`}>\n <IncrementalQuantity\n id={`msc-quick-order-grid-row__quantity_${product.RecordId}-${productListLine.LineId ?? ''}`}\n max={10}\n currentCount={quantity}\n inputQuantityAriaLabel={props.resources.quickOrderGridInputQuantityAriaLabel}\n decrementButtonAriaLabel={props.resources.quickOrderGridDecrementButtonAriaLabel}\n incrementButtonAriaLabel={props.resources.quickOrderGridIncrementButtonAriaLabel}\n key={productListLine.LineId}\n isGiftCard={product.IsGiftCard}\n onChange={onChangeHandler(props.callbacks.onChangeQuantity, productListLine.LineId, props)}\n />\n </span>\n </div>\n </td>\n <td>\n <QuickOrderGridExtraActionsPopupComponent {...props} />\n </td>\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<IQuickOrderGridTableRowProps> = (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 = <QuickOrderGridMobileTableRowCellComponent {...props} />;\n } else {\n headerCells = <QuickOrderGridDesktopTableRowCellComponent {...props} />;\n }\n\n return (\n <thead className={props.className}>\n <tr className={rowClassName}>{headerCells}</tr>\n </thead>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\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}\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<IQuickOrderGridTableData> {\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<IQuickOrderGridTableProps> {}\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<IQuickOrderGridTableProps> = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\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 <table className={props.className}>\n <QuickOrderGridTableHeaderComponent\n context={props.context}\n typeName={props.typeName}\n id={headerClassName}\n className={headerClassName}\n isMobile={isMobile}\n resources={props.resources}\n data={{}}\n />\n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n const quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n return (\n <QuickOrderGridTableRowComponent\n context={props.context}\n typeName={props.typeName}\n id={`${rowClassName}-${index}`}\n key={quickOrderProduct.productLine.fullProduct?.ProductDetails.RecordId}\n className={rowClassName}\n resources={props.resources}\n isMobile={isMobile}\n price={price}\n moduleId={props.moduleId}\n moduleTypeName={props.moduleTypeName}\n quantity={quantity}\n index={index}\n imageSettings={props.imageSettings}\n productListLine={quickOrderProduct.productLine.productListLine}\n callbacks={props.callBacks}\n data={{\n product: quickOrderProduct\n }}\n />\n );\n })}\n </table>\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject<HTMLButtonElement> = 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<void>;\n}\n\nconst CreateOrderTemplateButton: React.FC<ICreateOrderTemplateButtonProps> = 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 <button\n className='ms-order-template__add-template-button msc-btn btn-primary'\n color='primary'\n onClick={onCreateButtonClick}\n ref={modalCloseButtonReference}\n aria-label={props.createOrderTemplateText}\n >\n {props.createOrderTemplateText}\n </button>\n <OrderTemplateNameDialog\n className='msc-order-template-name-dialog'\n modalOpen={isCreateOrderTemplateDialogOpen}\n isUpdateDialog={false}\n setModalOpen={setOrderTemplateNameDialogOpen}\n context={props.context}\n id={props.id}\n data={{}}\n typeName={props.typeName}\n dialogStrings={props.createOrderTemplateDialogResources}\n onCancel={onCancelHandler}\n onSuccess={props.onOrderTemplateCreated}\n parentElementRef={modalCloseButtonReference}\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<IOrderTemplateListData> {\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<IOrderTemplateListProps<IOrderTemplateListData>, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component<IOrderTemplateListProps<IOrderTemplateListData>, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps<IOrderTemplateListData>) {\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<void> {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps<IOrderTemplateListData>,\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<IOrderTemplateListData>),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: <Spinner className='ms-order-template' msg={this.props.resources.progressNotificationText} />,\n heading: (\n <Heading className='ms-order-template__heading' tag={heading?.tag ?? HeadingTag.h2} text={orderTemplateListHeading} />\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<IOrderTemplateListData>),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: <OrderTemplateListStatusMessage errorType='EMPTY' text={emptyOrderTemplateText} />,\n createOrderTemplateButton: (\n <CreateNewTemplateButtonComponent\n context={this.props.context}\n id={this.props.id}\n typeName={this.props.typeName}\n data={{}}\n createOrderTemplateText={createNewTemplateButtonText}\n onOrderTemplateCreated={this._reloadPage}\n createOrderTemplateDialogResources={this._generateOrderTemplateNameDialogResources(this.props.resources)}\n />\n ),\n heading: (\n <Heading className='ms-order-template__heading' tag={heading?.tag ?? HeadingTag.h2} text={orderTemplateListHeading} />\n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps<IOrderTemplateListData>),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: <Heading className='ms-order-template__heading' tag={heading?.tag ?? HeadingTag.h2} text={orderTemplateListHeading} />,\n createOrderTemplateButton: (\n <CreateNewTemplateButtonComponent\n context={this.props.context}\n id={this.props.id}\n typeName={this.props.typeName}\n data={{}}\n createOrderTemplateText={createNewTemplateButtonText}\n onOrderTemplateCreated={this._reloadPage}\n createOrderTemplateDialogResources={this._generateOrderTemplateNameDialogResources(this.props.resources)}\n />\n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n <div className='ms-order-template__products-status'>\n <Alert color={this.state.statusCssString} isOpen={this.state.isOpen} toggle={this._onDismiss}>\n <span>{this.state.headerStatusMessage}</span>\n </Alert>\n </div>\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 { AddToCartComponent, IAddToCartResources, OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { getUrlSync, IComponentProps, ICoreContext } from '@msdyn365-commerce/core';\nimport { SalesLine } from '@msdyn365-commerce/retail-proxy';\nimport { QuickOrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport React from 'react';\n\n/**\n * The data on which the component should operate.\n */\nexport interface IAddToCartSelectedData {\n quickOrderTemplate: QuickOrderTemplate | undefined;\n}\n\n/**\n * The resources needed to render a buy selected component.\n */\nexport interface IAddToCartSelectedResources {\n quickOrderGridBuySelectedButtonText?: string;\n quickOrderGridBuySelectedButtonAriaLabel?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle?: string;\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel?: string;\n quickOrderGridGoToCartText?: string;\n quickOrderGridDialogCloseText?: string;\n quickOrderGridSingleItemText?: string;\n quickOrderGridMultiLineItemFormatText?: string;\n quickOrderGridMultiLinesFormatText?: string;\n quickOrderGridHeaderMessageText?: string;\n addedQuantityText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n freePriceText?: string;\n}\n\n/**\n * Configuration of a buy selected component.\n */\nexport interface IAddToCartSelectedProps extends IComponentProps<IAddToCartSelectedData> {\n className: string;\n context: ICoreContext;\n\n resources: IAddToCartSelectedResources;\n\n isIcon?: boolean;\n}\n\n/**\n * Get the dialog strings.\n * @param props - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getDialogStrings = (props: IAddToCartSelectedProps): IAddToCartResources => {\n return {\n goToCartText: props.resources.quickOrderGridGoToCartText ?? '',\n continueShoppingText: props.resources.quickOrderGridDialogCloseText ?? '',\n closeNotificationLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? '',\n headerItemOneText: props.resources.quickOrderGridSingleItemText ?? '',\n headerItemFormatText: props.resources.quickOrderGridMultiLineItemFormatText ?? '',\n headerLinesFormatText: props.resources.quickOrderGridMultiLinesFormatText ?? '',\n headerMessageText: props.resources.quickOrderGridHeaderMessageText ?? '',\n freePriceText: props.resources.freePriceText ?? '',\n originalPriceText: props.resources.originalPriceText ?? '',\n currentPriceText: props.resources.currentPriceText ?? '',\n addedQuantityText: props.resources.addedQuantityText ?? '',\n buyAgainNotificationTitle: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationTitle ?? '',\n buyAgainNotificationCloseAriaLabel: props.resources.quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel ?? ''\n };\n};\n\n/**\n * Get the dialog strings.\n * @param quickOrder - The buy selected props.\n * @returns The add to cart resources.\n */\nexport const getOrderDetails = (quickOrder: QuickOrderTemplate): OrderDetailsProduct[] => {\n const orderDetails: OrderDetailsProduct[] = [];\n for (const quickLine of quickOrder.quickOrderTemplateLines) {\n const quantity = quickLine.productListLine.Quantity;\n const salesLine: SalesLine = {\n Quantity: quantity\n };\n const products = new OrderDetailsProduct(salesLine, quickLine.fullProduct?.ProductDetails);\n orderDetails.push(products);\n }\n return orderDetails;\n};\n\n/**\n * Renders a button which adds given products to the cart.\n * @param props - Configuration of the component.\n * @returns A react element or null if no products were given.\n */\nexport const AddToCartProductListComponent: React.FC<IAddToCartSelectedProps> = (props: IAddToCartSelectedProps): JSX.Element | null => {\n const {\n data: { quickOrderTemplate }\n } = props;\n\n if (quickOrderTemplate?.quickOrderTemplateLines[0].fullProduct?.ProductDetails === undefined) {\n return null;\n }\n const quantity = quickOrderTemplate.quickOrderTemplateLines[0].productListLine.Quantity;\n const buttonLabel = props.resources.quickOrderGridBuySelectedButtonText;\n const buttonAriaLabel = props.resources.quickOrderGridBuySelectedButtonAriaLabel;\n const dialogStrings: IAddToCartResources = getDialogStrings(props);\n const shouldSkipSiteSettings: boolean = true;\n const orderDetailProducts = getOrderDetails(quickOrderTemplate);\n return (\n <AddToCartComponent\n addToCartText={buttonLabel ?? ''}\n outOfStockText=''\n addToCartArialLabel={buttonAriaLabel}\n quantity={quantity}\n id={props.id}\n typeName={props.typeName}\n className={props.className}\n navigationUrl={getUrlSync('cart', props.context.actionContext)}\n data={{ product: quickOrderTemplate.quickOrderTemplateLines[0].fullProduct?.ProductDetails }}\n context={props.context}\n dialogStrings={dialogStrings}\n shouldSkipSiteSettings={shouldSkipSiteSettings}\n orderDetailsProducts={orderDetailProducts}\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 OrderTemplateLines from './modules/order-template/order-template';\nimport OrderTemplateLinesView from './modules/order-template/order-template.view';\n\nexport * from './modules/order-template/components';\nexport * from './modules/order-template/order-template';\nexport * from './modules/order-template/order-template.data';\nexport * from './modules/order-template/order-template.view';\n\n// Export * from './modules/order-template/actions';\nexport * from './modules/order-template/order-template.props.autogenerated';\nexport * from './modules/order-template-list/components';\nexport * from './modules/order-template-list/order-template-list';\nexport * from './modules/order-template-list/order-template-list.data';\nexport * from './modules/order-template-list/order-template-list.view';\n\nexport { OrderTemplateLines, OrderTemplateLinesView };\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport * from './add-to-list';\nexport * from './quick-order-grid-actions';\nexport * from './quick-order-grid-drawer';\nexport * from './quick-order-grid-form';\nexport * from './quick-order-grid-product';\nexport * from './quick-order-grid-product-selected-product';\nexport * from './quick-order-grid-table';\nexport * from './utilities';\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<IRangeRefineItemProps, IRangeRefineItemState> {\n private readonly _formattedPriceReverseLookup: Map<string, string> = new Map();\n\n private readonly minInput: React.RefObject<HTMLInputElement>;\n\n private readonly maxInput: React.RefObject<HTMLInputElement>;\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<HTMLInputElement>();\n this.maxInput = React.createRef<HTMLInputElement>();\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 <form className='ms-refine-submenu__input-range-refiner' {...formAttrs}>\n <label className={minLabelClassName}>\n {refineItemCommonProps.minLabel}\n <input\n className={minInputClassName}\n onChange={this._changeMin}\n onFocus={this._changeMin}\n onBlur={this._finishChangeMin}\n value={formattedSelectedMin}\n ref={this.minInput}\n />\n </label>\n <label className={maxLabelClassName}>\n {refineItemCommonProps.maxLabel}\n <input\n className={maxInputClassName}\n placeholder={formattedSelectedMax ? undefined : refineItemCommonProps.placeholderTextMax}\n onChange={this._changeMax}\n onFocus={this._changeMax}\n onBlur={this._finishChangeMax}\n value={formattedSelectedMax}\n ref={this.maxInput}\n />\n </label>\n {validationErrorMin && (\n <span className='ms-refine-submenu__input-range-error-text refine-submenu__input-range-min-error-text'>\n {validationErrorMin}\n </span>\n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n <span className='ms-refine-submenu__input-range-error-text refine-submenu__input-range-max-error-text'>\n {validationErrorMax}\n </span>\n )}\n </form>\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 <Slider\n className='ms-refine-submenu__range-refiner'\n key={this.state.sliderId}\n sliderKey={sliderKey}\n id={this.state.sliderId}\n inForm={false}\n min={(this.state.minValue && Number(this.state.minValue)) || undefined}\n max={(this.state.maxValue && Number(this.state.maxValue)) || undefined}\n step={1}\n orientation='horizontal'\n labels={this.state.labels}\n showLabels\n showTooltip\n sliderThumbs={this.state.sliderThumbs}\n onChangeEnd={this._onRangeUpdateEnd}\n onChange={debounce(this._onRangeUpdate, 500)}\n handleTooltipText={this._handleRangeTooltipText}\n {...ariaAttributes}\n />\n );\n }\n\n private _changeMin(event: React.FocusEvent<HTMLInputElement>): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent<HTMLInputElement>): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent<HTMLInputElement>, 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<HTMLInputElement>): 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<HTMLInputElement>): 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 { 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<IOrderTemplateViewProps> = (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 <Module {...OrderTemplateLines}>\n {heading}\n {OrderTemplateActions && (\n <Node {...OrderTemplateActions}>\n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n </Node>\n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n <Node className='ms-order-template__content'>\n <Node {...ProductsTable}>\n {ProductsTableHeading}\n <tbody>\n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n </tbody>\n </Node>\n {pagination}\n </Node>\n )}\n {itemAddedToCartDialog}\n <Modal\n wrapClassName='ms-order-template-mobile-view-modal'\n autoFocus\n fade={false}\n applicationNode='renderPage'\n isOpen={isDetailsDisplayed}\n toggle={toggleDetails}\n >\n <ModalHeader toggle={toggleDetails}>Product Details</ModalHeader>\n <ModalBody>\n <ul>\n <li>{detailedProductView?.productImage}</li>\n <li className='product-info'>\n <span>{productText}:</span>\n {detailedProductView?.productInfo}\n </li>\n <li>\n <span>{productLineCatalogName}:</span>\n {detailedProductView?.productLineCatalog}\n </li>\n <li>\n <span>{productNumberText}:</span>\n {detailedProductView?.productNumber}\n </li>\n <li>\n <span>{productUnitPriceText}:</span>\n {` `}\n {detailedProductView?.productPrice}\n </li>\n <li>\n <span>{productUOMText}:</span>\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n </li>\n <li>\n <span>{productQuantityText}:</span>\n {detailedProductView?.productQuantityView}\n </li>\n {productsStatusMessage && <li>{productsStatusMessage}</li>}\n </ul>\n </ModalBody>\n <ModalFooter>\n <Button onClick={toggleDetails}>{cancelBtnLabel}</Button>\n </ModalFooter>\n </Modal>\n </Module>\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 <Node key={key} className={`${ProductsTableRow!.className}`} {...ProductsTableRow}>\n <td>{selectLine}</td>\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && <td style={disableElement}>{productLineCatalog}</td>}\n <td style={disableElement}>{productImage}</td>\n {isMobile ? (\n <td>\n <div>{productNumber}</div>\n <div style={disableElement}>\n {quantityLabel}:{` `}\n {productQuantity}\n </div>\n </td>\n ) : (\n <td>{productNumber}</td>\n )}\n {!isMobile && <td style={disableElement}>{productInfo}</td>}\n {!isMobile && <td style={disableElement}>{productPrice}</td>}\n {!isMobile && <td style={disableElement}>{productUnitOfMeasure}</td>}\n {!isMobile && <td style={disableElement}>{productQuantityView}</td>}\n {isMobile && <td style={disableElement}>{popUp}</td>}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n <td style={disableElement}>\n {addToBagButton}\n {removeButton}\n </td>\n )}\n <td style={disableElement}>{extraActionsPopup}</td>\n </Node>\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 * 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<ILink> = ({ text, className, href, ariaLabel }) => (\n <a className={className} href={href} aria-label={ariaLabel}>\n {' '}\n {text}{' '}\n </a>\n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { ProductDimensionsMatrix } from '@msdyn365-commerce/components';\nimport { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ICoreContext, getCatalogId } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Collapse, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { IBulkPurchaseData } from './bulk-purchase.data';\nimport { IBulkPurchaseProps } from './bulk-purchase.props.autogenerated';\n\n/**\n * Additional optional props for the bulk purchase.\n */\nexport interface IBulkPurchaseExtendedProps extends IBulkPurchaseProps<IBulkPurchaseData> {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps<IBulkPurchaseData> {\n container: IModuleProps;\n content: React.ReactElement;\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseState {\n isExpanded: boolean;\n}\n\n/**\n * Bulk-purchase module.\n */\nexport class BulkPurchase extends React.PureComponent<IBulkPurchaseExtendedProps, IBulkPurchaseState> {\n public static readonly className = 'ms-bulk-purchase';\n private readonly collapseRef: React.RefObject<Collapse> = React.createRef<Collapse>();\n\n public constructor(props: IBulkPurchaseExtendedProps) {\n super(props);\n\n this.state = {\n isExpanded: false\n };\n }\n\n public render(): React.ReactElement | null {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const hasDimensionsInData = ArrayExtensions.hasElements(this.props.data.productDimensions?.result);\n if (!hasDimensionsInProps && !hasDimensionsInData) {\n return null;\n }\n\n const viewProps: IBulkPurchaseViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className: classnames(BulkPurchase.className, this.props.config.className)\n },\n content: this._renderCollapseContent(`${BulkPurchase.className}__content`)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderCollapseContent(className: string): React.ReactElement {\n return (\n <div className={className}>\n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n </div>\n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n <Button\n className={className}\n onClick={this._toggleCollapse}\n aria-expanded={this.state.isExpanded}\n title={this.props.resources.bulkPurchaseHeaderTitle}\n >\n {this.props.resources.bulkPurchaseHeaderTitle}\n </Button>\n );\n }\n\n /**\n *This function is being used to handel variant change dropdown.\n */\n private _dimensionDropDownChange = () => {\n this.collapseRef.current?.reEvaluateHeight();\n };\n\n private _renderCollapse(className: string): React.ReactElement {\n return (\n <Collapse className={className} isOpen={this.state.isExpanded} ref={this.collapseRef}>\n {this._renderMainContent(`${className}__main-content`)}\n </Collapse>\n );\n }\n\n private _renderMainContent(className: string): React.ReactElement {\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n\n return (\n <div className={className}>\n {!isMobileDevice && (\n <div className={`${className}__description`}>\n <RichTextComponent text={this.props.resources.bulkPurchaseDescriptionText} />\n </div>\n )}\n {this._renderMatrix(`${className}__matrix-container`)}\n </div>\n );\n }\n\n private _renderMatrix(className: string): React.ReactElement {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState?.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n return (\n <ProductDimensionsMatrix\n className={className}\n context={this.props.context as ICoreContext<IDimensionsApp>}\n data={{\n dimensions: hasDimensionsInProps ? this.props.productDimensions! : this.props.data.productDimensions!.result!,\n orderTemplates: this.props.data.orderTemplates?.result,\n customerInformation: this.props.data.customerInformation?.result\n }}\n resources={this.props.resources}\n dimensionOnChange={this._dimensionDropDownChange}\n isMultipleCatalogFeatureEnabledInHq={isMultipleCatalogsFeatureEnabled}\n catalogId={catalogId}\n />\n );\n }\n\n /**\n * Callback which toggles collapse mode.\n */\n private readonly _toggleCollapse = () => {\n this.setState(state => ({\n isExpanded: !state.isExpanded\n }));\n };\n}\n\nexport default BulkPurchase;\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 { IQuickOrderGridFormViewProps } from './components';\nimport { IQuickOrderGridViewProps } from './quick-order-grid';\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 <Node {...containerProps}>\n <Node {...labelContainerProps}>{heading}</Node>\n {errors}\n {select}\n </Node>\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 <Node {...containerProps}>{dropdowns.map(renderConfigureDropdown)}</Node>;\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 <Node {...quickOrderForm}>\n <Node {...quickOrderProductContent}>\n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n <Node {...quickOrderMessageContent}>{form.userMessage}</Node>\n {form.addToListBtn}\n </Node>\n </Node>\n ) : (\n <Node {...quickOrderForm}>\n <Node {...quickOrderMessageContent}>{form.userMessage}</Node>\n <Node {...quickOrderProductContent}>\n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n </Node>\n </Node>\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<IQuickOrderGridViewProps> = 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 <Module {...quickOrderGridProps}>\n {header}\n {actions && (\n <Node {...actions}>\n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n </Node>\n )}\n <Node {...drawer}>\n <Node {...contentProps}>\n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n </Node>\n </Node>\n {container}\n </Module>\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 { 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<HTMLButtonElement> | 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<HTMLButtonElement> | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC<IModalToggleProps> = (props: IModalToggleProps) => {\n const { text, onClick, ariaLabel, innerRef, id } = props;\n return (\n <button id={id} className='msc-button' aria-label={ariaLabel} onClick={onClick} ref={innerRef}>\n {text}\n </button>\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: <ModalBody className='msc-review-modal-body' />\n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n <Modal\n autoFocus\n applicationNode='renderPage'\n returnFocusRef={props.returnRef}\n isOpen={props.isOpen}\n toggle={props.onModalToggle}\n className='msc-search-result-modal'\n zIndex={1050}\n />\n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return <ModalHeader toggle={props.onModalToggle}>{props.resources.modalTitle}</ModalHeader>;\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n <ModalFooter>\n <Button onClick={props.onModalToggle} className='ms-sort-and-filter-modal-close'>\n {props.resources.modalCloseButtonText}\n </Button>\n </ModalFooter>\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<IOrderTemplateData> {\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<IOrderTemplateBulkActionsProps, IOrderTemplateBulkActionsState> {\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 <AddLineToTemplate {...addLineProps} />\n <Button\n onClick={this.addHandler}\n disabled={this.state.isAddDisabled}\n className='add-selected-to-bag'\n aria-label={addSelectedToBagButtonText}\n >\n <span />\n {!this.props.isMinifiedView && addSelectedToBagButtonText}\n </Button>\n <Button\n onClick={this.removeHandler}\n disabled={this.state.isRemoveDisabled}\n className='remove-selected'\n aria-label={removeSelectedToBagButtonText}\n >\n <span />\n {!this.props.isMinifiedView && removeSelectedToBagButtonText}\n </Button>\n </>\n );\n }\n\n private readonly addHandler = (event: React.MouseEvent<HTMLElement>) => {\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<HTMLElement>) => {\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 { 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<IFeatureSearchResultItem> = ({\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 <div className='ms-feature-search-result__item'>\n <a\n href={productUrl}\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.Name!)}\n {...attribute}\n aria-label={product.Name}\n >\n <div className='msc-feature-search-result__item__image'>\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n </div>\n </a>\n <div className='msc-feature-search-result__item__detail'>\n <p className='msc-feature-search-result__item__heading'>{heading}</p>\n {renderProductTitle(product?.Name)}\n </div>\n </div>\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 <Image {...img} {...imageProps} loadFailureBehavior='empty' requestContext={context} />;\n}\n\nfunction renderProductTitle(title?: string): JSX.Element | null {\n return <h1 className='msc-feature-search-result__item__product-title'>{title}</h1>;\n}\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<IOrderTemplateListViewProps> = 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 <Module {...OrderTemplateList}>\n {heading}\n {status !== 'SUCCESS' && statusMessage}\n <Node className=''>\n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n </Node>\n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n <Node {...OrderTemplates}>\n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n </Node>\n )}\n </Module>\n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n <Node key={key} className={OrderTemplate!.className} {...OrderTemplate}>\n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n </Node>\n );\n};\n\nexport default OrderTemplateListView;\n"],"names":["QuickOrderDrawer","React","constructor","props","super","this","_toggle","bind","isManuallyToggled","state","isOpen","collapseProps","drawerGlyphClass","classnames","toggleGlyphClassName","animateGlyph","drawerOpenGlyph","openGlyph","closeGlyph","drawerCloseGlyph","shouldComponentUpdate","nextProps","nextState","render","_objectSpread","undefined","children","drawerClass","className","Button","Object","assign","toggleButtonProps","onClick","block","disabled","color","_generateDrawerButtonInnerMarkup","Collapse","collapseState","drawerButtonTextClass","toggleButtonClassName","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","location","glyphClass","e","preventDefault","setState","onToggle","QuickOrderFormComponent","productTextInput","quantityTextInput","quickOrderState","maxChars","maxQuantity","disableAddtoCart","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","addQuantityPlaceholderText","handleQuantityChange","handleInputChange","handleAddToCartClick","onInputChange","event","target","value","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","type","ref","onChange","quantityNode","pattern","maxLength","quantity","placeholder","product","addToCartBtn","userMessage","stateMessage","Alert","statusCssString","messageGlyph","messageText","QuickOrderProduct","cartLine","simpleProduct","isSelected","__decorate","observable","QuickOrderDesktopHeaderCellsComponent","resources","columnWithNumberClassName","createElement","Fragment","quickOrderProductNumberText","quickOrderProductText","quickOrderUnitPriceText","quickOrderUnitOfMeasureText","quickOrderQuantityText","quickOrderTotalText","quickOrderActionsText","QuickOrderMobileHeaderCellsComponent","QuickOrderTableHeaderComponent","rowClassName","headerCells","isMobile","defaultImageSettings","viewports","xs","q","w","h","lg","lazyload","cropFocalRegion","QuickOrderTableRowProductImageComponent","_props$context$reques","_props$data$product$P","_props$imageSettings","fallbackImageUrl","getFallbackImageUrl","data","ItemId","context","actionContext","requestContext","apiSettings","request","app","config","OmniChannelMedia","containerClassName","Image","altText","Name","src","PrimaryImageUrl","fallBackSrc","gridSettings","imageSettings","loadFailureBehavior","QuickOrderExtraActionsPopupComponent","productUrl","StringExtensions","isNullOrWhitespace","ObjectExtensions","isNullOrUndefined","RecordId","getProductPageUrlSync","QuickOrderDesktopTableRowCellComponent","_product$Dimensions","_cartLine$LineId","href","Dimensions","map","dimension","_dimension$DimensionV","DimensionValue","Value","filter","dimensionValue","join","quickOrderProductDimensionsSeparator","Price","UnitOfMeasureSymbol","IncrementalQuantity","id","LineId","max","currentCount","Quantity","inputQuantityAriaLabel","quickOrderInputQuantityAriaLabel","decrementButtonAriaLabel","quickOrderDecrementButtonAriaLabel","incrementButtonAriaLabel","quickOrderIncrementButtonAriaLabel","key","isGiftCard","IsGiftCard","TotalAmount","quickOrderRemoveItemButtonAriaLabel","QuickOrderMobileTableRowCellComponent","format","quickOrderQuantityMobileText","QuickOrderTableRowComponent","QuickOrderTableComponent","setIsMobile","useState","isMobileView","quickOrderProducts","updateViewport","MsDyn365","isBrowser","window","addEventListener","headerClassName","typeName","quickOrderProduct","index","QuickOrder","waitTime","dimensionUpdateQueue","FinitePromiseQueue","dimensions","cssClassNameConfigure","quickOrderCallbacks","dimensionSelectedAsync","async","selectedDimensionId","selectedDimensionValueId","enqueue","_updateDimensions","catch","error","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","dimensionType","_getDropdownName","changeUpdatingDimension","isUpdatingDimension","_handleInputChange","query","length","productText","productResponse","productDimensions","inputQuantityText","quantityInput","current","HTMLInputElement","cancellableDebounce","cancel","telemetry","isQuickOrderFormExpanded","_debounce","getScanResult","GetScanResultInput","channelId","then","results","Product","ProductDimensionFull","exception","debug","setTimeout","_addItemToCart","cart","quickOrderAddedToCartSuccessMessage","quickOrderAddedToCartFailureMessage","_validateCart","result","_this$props$data$feat","_this$props$data$feat2","_this$props$context$r","_this$props$context$a","isOrderQuantityLimitsFeatureEnabledInHq","featureState","find","IsEnabled","isChannelQuantityLimitsFeatureEnabledInHq","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","customerInformation","isOrderQuantityLimitsFeatureEnabledInSiteSettings","IsB2b","deliveryOptions","getDeliveryOptionsAsync","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","emailDeliveryModeCode","channel","EmailDeliveryModeCode","defaultDeliveryOption","ArrayExtensions","hasElements","DeliveryOptions","Code","isQuantityLimitsFeatureEnabled","productAvailableQuantity","_updateAvailability","addProductToCartInput","count","enableStockCheck","availableQuantity","ProductAvailableQuantity","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isAddEmailDeliveryItemToCart","deliveryMode","addProductToCart","status","inputProductText","substatus","maxQtyLimitReachedMessage","_getMaxQtyMessage","_result$errorDetails","errorDetails","LocalizedMessage","warning","_getConcatenatedMaxQtyMessage","currentQuantity","quickOrderMaxQuantityLimitText","quickOrderAlreadyItemQuantityText","replace","_handleQuantityChange","currentValue","Number","parseInt","inputElement","isNaN","setAttribute","toString","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_this$state$productRe","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeSize","productDimensionTypeAmount","productDimensionTypeStyle","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","keys","configureErrors","errorState","mappedDimensions","DimensionTypeValue","ExtensionProperties","selectedProduct","Promise","resolve","reject","newProduct","getSelectedVariant","SelectedVariantInput","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","variantProduct","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","ProductAvailabilitiesForSelectedVariantInput","productAvailable","ProductId","_getDimensionErrorString","dimensionTypeValue","quickOrderproductDimensionTypeColorErrorMessage","quickOrderproductDimensionTypeConfigurationErrorMessage","quickOrderproductDimensionTypeSizeErrorMessage","quickOrderproductDimensionTypeAmountErrorMessage","quickOrderproductDimensionTypeStyleErrorMessage","_updateProductAvailability","_productResponse$Dime","missingDimensions","_getConfigureErrors","quickOrderWrongQuantityErrorMsg","quickOrderOutofStockErrorMsg","viewport","device","Type","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","products","quickOrderFormClass","quickOrderFormProductContent","quickOrderFormMsgContent","quickOrderModuleHeading","quickOrderModuleDescription","quickOrderAddtobag","quickOrderProductQuantityInputLabel","quickOrderProductInputLabel","quickOrderProductDimensionTypeColor","quickOrderProductDimensionTypeConfiguration","quickOrderSelectDimensionFormatString","quickOrderProductDimensionTypeSize","quickOrderProductDimensionTypeStyle","quickOrderProductDimensionTypeAmount","quickAddQuantityPlaceholderText","productConfigureResources","selectDimensionFormatString","viewProps","quickOrderProps","moduleProps","contentProps","isB2B","drawer","tag","quickOrderForm","quickOrderList","_renderQuickOrderTable","form","configure","getProductConfigure","renderView","_initQuickOrderProducts","_cart$cart$CartLines","CartLines","validValues","tableClassName","productInventoryInfo","_cart$result","maxQuantityForLineItem","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","addedQuantity","item","_item$ItemId","_this$state$productRe2","minInventory","Math","min","computed","QuickOrderGrid","_waitTime","_dimensionUpdateQueueMaxLength","_errorCssClass","_errorCssGlyphClass","_dimensionUpdateQueue","_dimensions","_cssClassNameConfigure","_className","_quickOrderGridCallbacks","Error","_quickOrderGridRowCallbacks","onRemoveItem","line","_removeItemRowFromTable","productLine","onChangeQuantity","productListLineId","_changeRowQuantity","_removeProductList","quickOrderTemplate","user","isAuthenticated","token","ProductListsDataActions","deleteAsync","productList","reload","_updateStatusState","quickOrderGridDeleteProductListFailedText","_cancellabelDebounce","isNullOrEmpty","isQuickOrderGridFormExpanded","_quantityInput","ProductDimensionType","Color","Configuration","Size","Style","hasProductDimensions","console","log","dimensionKey","_this$_updateDimensio","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","quickOrderGridWrongQuantityErrorMsg","itemKey","quickOrderTemplateLinesData","quickOrderTemplateLines","orderLineIndex","findIndex","lines","productListLine","newProductListLine","previousQuantity","fullProduct","_objectWithoutProperties","_excluded","updateProductListLinesAsync","Id","list","newLine","updatedLines","updatedProductList","ProductListLines","update","ActiveProductListInput","message","removeProductListLinesAsync","ProductListId","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","productListId","_productResponse$Defa","_createProductList","input","AddItemToProductListInput","DefaultUnitOfMeasure","addItemToProductListAction","name","CreateProductListInput","ProductListType","createProductList","_productTextInput","_telemetryContent","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","variant","VariantType","Viewport","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","header","Heading","text","quickOrderGridProps","isB2bCustomer","actions","QuickOrderGridDrawer","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","QuickOrderGridFormComponent","isAddtoListDisabled","moduleClassName","quickOrderGridState","handleAddProductListClick","container","_renderListContainer","orderActions","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","quickOrderGridBuySelectedButtonText","quickOrderGridBuySelectedButtonAriaLabel","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","quickOrderGridGoToCartText","quickOrderGridDialogCloseText","quickOrderGridSingleItemText","quickOrderGridMultiLineItemFormatText","quickOrderGridMultiLinesFormatText","quickOrderGridHeaderMessageText","addedQuantityText","originalPriceText","currentPriceText","freePriceText","quickOrderGridActions","handlers","removeProductList","QuickOrderGridActionsView","isBulkPurchaseEnabled","slots","bulkPurchaseSlots","containerClass","_initQuickOrderGridProducts","quickOrderGridProduct","QuickOrderGridProduct","QuickOrderGridTableComponent","moduleId","moduleTypeName","quickOrderGridProducts","callBacks","PromoCode","_onInputChangeHandler","promoCodeInputValue","trim","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","_onSubmitHandler","_applyPromotionHandler","_renderForm","promoPlaceholderText","promoCodeApplyButtonText","attributes","getTelemetryAttributes","payLoad","onSubmit","title","_removePromotion","code","currentTarget","getAttribute","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_calculateDiscount","discountAmount","DiscountLines","discountLine","DiscountCode","DiscountCost","_renderAppliedPromoCode","Coupons","removePromotionHandler","promoCodTotalDiscount","reduce","coupon","appliedPromoCodeHeadingText","PriceComponent","price","CustomerContextualPrice","ariaLabel","removePromoAriaLabelFormat","removePromoText","getPayloadObject","TelemetryConstant","ApplyPromoCode","isCollapseOpen","promoCodeHeadingText","_renderReactFragment","items","slot","headerView","HeaderTag","HeaderContainer","HeaderTopBarContainer","MobileMenuContainer","MobileMenuBodyContainer","MobileMenuLinksContainer","Divider","Module","Node","navIcon","logo","search","preferredStore","currentDistributor","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","accountInfoDropdownButton","signOutLink","signInLink","accountLinks","link","_renderDesktopAccountBlock","wishListIconDesktop","cartIcon","siteOptions","MobileMenuHeader","menuBar","wishListIconMobile","OrderTemplateActions","onRemoveOrderTemplate","removeOrderTemplateActionHandler","OrderTemplateRender","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","onDismiss","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","_getOrderTemplatePageUrl","_getUrlSync","url","getUrlSync","separator","includes","totalLines","addToCartButton","AddOrderTemplateToCartComponent","addToCartText","addToBagText","dialogStrings","isMultipleCatalogFeatureEnabledInHq","removeButton","orderTemplateStatusMessage","toggle","onClickHandler","xl","slice","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct","_line$fullProduct2","_line$fullProduct$Pro2","_line$fullProduct3","_getFallbackImageUrl","_line$fullProduct4","_context$request$app","_updateProductUrlCatalog","ProductDetails","CatalogId","productDetails","catalogId","getProductUrlSync","fullUrl","URL","searchParams","set","OrderTemplateListStatusMessage","_ref","errorType","ProductComponent","msdyn365Commerce","createComponentOverride","component","_product$Name","_getProductImageUrlFr","_getProductPageUrlFro","_product$AttributeVal","savingsText","ratingAriaLabel","ratingCountAriaLabel","allowBack","quickViewButton","productComparisonButton","inventoryLabel","isPriceMinMaxEnabled","priceResources","dimensionAvailabilities","swatchItemAriaLabel","updateProductUrl","productDetailsPageUrl","coreContext","queryString","sourceUrl","baseUrl","pathname","getDefaultColorSwatchSelected","productData","_colorAttribute$Swatc","AttributeValues","colorAttribute","attributeValue","_attributeValue$KeyNa","KeyName","toLocaleLowerCase","DimensionTypes","Swatches","IsDefault","productImageUrlFromSwatch","dimensionToPreSelectInProductCard","none","defaultSwatch","ProductImageUrls","generateImageUrl","getProductImageUrlFromDefaultColorSwatch","productPageUrlFromSwatch","SwatchValue","encodeURIComponent","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","updatePageAndImageUrl","useCallback","swatchItem","setValue","productPageUrlWithSwatch","newUrl","delete","swatchProductImageUrl","productImageUrls","newImageUrl","swatchItems","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","checkIfShouldDisplayAsSwatch","DimensionSwatchDisplayTypes","productCard","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","itemId","colorHexCode","SwatchColorHexCode","imageUrl","SwatchImageUrl","isDefault","isDisabled","dimensionAvailability","_swatchItem$SwatchVal3","some","swatch","recordId","attribute","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","getRatingAriaLabel","rating","ratingAriaLabelText","roundedRating","toFixed","getReviewAriaLabel","reviewCount","ratingCountAriaLabelText","onTelemetryClick","reviewCountArialableText","renderLabel","cultureFormatter","formatCurrency","AverageRating","TotalRatings","style","display","flexDirection","justifyContent","height","productCardimageSettings","emptyPlaceHolderImage","placeholderImageName","fallbackImageSource","image","imageProps","bypassHideOnFailure","renderProductPlacementImage","ProductComponentSwatchComponent","onSelectDimension","basePrice","adjustedPrice","maxVariantPrice","minVariantPrice","savingsPriceResourceText","freePriceResourceText","originalPriceResourceText","currentPriceResourceText","BasePrice","AdjustedPrice","MaxVariantPrice","MinVariantPrice","renderPrice","unitOfMeasure","description","Description","hideRating","avgRating","totalRatings","numberRatings","RatingComponent","ratingCount","readOnly","renderRating","inventoryAvailabilityLabel","quickview","selectedDimensions","getValues","convertDimensionTypeToProductDimensionType","cloneElement","selectedProductId","renderQuickView","renderProductComparisonButton","getCatalogId","Title","BulkPurchaseViewComponent","content","HeaderPreferredStore","modalCloseButtonRef","handleClick","_findPreferredStoreOnClick","storeSelectorStateManager","storeSelector","storeName","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","modules","storeSelectorId","openDialog","showMapViewLink","parentElementRef","onLocationSelected","orgUnitLocation","observer","Logo","_renderLogo","linkUrl","destinationUrl","openInNewTab","rel","_renderImage","Msdyn365","editProps","moduleType","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","isExpanded","targetId","Header","isB2BSite","handleLinkTextChange","linkIndex","_this$props$config$my","myAccountLinks","linkText","popOverRef","_toggleNavbar","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","isChannelTypeB2B","workerName","customerName","_this$props$data$empl","worker","employee","_this$props$data$acco","customer","accountInformation","FirstName","componentDidMount","reaction","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","componentWillUnmount","removeEventListener","wishlists","cartLabel","cartQtyLabel","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","headerToggleClass","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","CartIconComponent","headerAriaLabel","Modal","wrapClassName","ModalHeader","ModalBody","displayName","Popover","placement","_getSigninButton","_getSignOutButton","isOBORequest","switchCustomerLink","_getSwitchCustomerButton","_getAccountInfoDropdownButton","_getAccountLinks","slotName","SignIn","signInLinkText","signInUrl","signInLinkAriaText","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","cookies","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","role","removeAccountSelectionCookie","shoppingAsText","route","forEach","param","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","innerRef","cta","contentAction","etext","editableLink","onTextChange","keyCode","KeyCodes","Escape","OrderTemplateLines","_isChannelMultipleCatalogsFeatureEnabled","feature","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","isChecked","maxWaitTimeInMilliSeconds","_this$props$data$orde","substr","indexOf","_onAddSelectionToBag","selectedLines","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","_addItemToBag","_getCurrentUrl","reqContext","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","modalOpen","onClose","_renderPagination","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","OrderTemplateMobileLineView","absoluteUrl","_onDismiss","_changeQuantity","orderTemplateLinesData","prevQuantity","isQuantityDisabledForUpdate","updatedOrderTemplate","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","getPriceForSelectedVariant","PriceForSelectedVariantInput","priceResult","AsyncResult","isMiniCart","addToCartBehavior","productPrice","_cart$result2","cartLineQuantity","defaultMessage","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","_renameTemplate","_removeTemplate","_orderTemplate$result","deleteOrderTemplateFailedText","newLink","_getViewport","innerWidth","sm","md","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","params","isEditor","heading","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","errorProps","statusMessage","Spinner","msg","progressNotificationText","OrderTemplateLinesStatusMessage","orderTemplateResult","_isFirstPage","emptyViewProps","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","callbacks","updateQuantity","debounce","pagination","itemAddedToCartDialog","toggleDetailsDisplayed","onSelect","updated","_product$fullProduct","onSelectAll","productImage","productNumberText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","selectAllRowsText","productLineCatalogName","headers","productNumber","productName","productUnitPrice","productUOM","productQuantity","productActions","clickHandler","OrderTemplateTableHeading","orderTemplateId","OrderTemplateBulkActions","onAddSelectionToBag","onRemoveSelection","isMinifiedView","_generateLinesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","addTemplateToBagButtonText","renameTemplateButtonText","deleteTemplateButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","orderTemplateActions","onRenameTemplate","onRemoveTemplate","renameOrderTemplateDialogStrings","_generateOrderTemplateNameDialogResources","linesAddedToCartDialogResources","OrderTemplateActionsView","orderTemplateHeaderLabel","renameOrderTemplateTitleText","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","renameOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelBtnLabel","skip","selectOneRowText","moreButtonText","viewProductDetailsText","priceFree","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","unavailableProductErrorMessage","outOfStockProductErrorMessage","catalogs","currentProductProps","orderTemplateLine","ProductPrice","shouldDisable","onAddToBag","removeFromOrderTemplateLinesText","addToBagButtonText","OrderTemplateLineView","action","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Currency","Decimal","Integer","findMatchingRefinementCriterion","productRefinerValue","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","RefinerRecordId","RefinerSourceValue","DataTypeValue","LeftValueBoundString","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","isSelecting","next","rangeStart","RightValueBoundString","rangeEnd","push","Text","TrueFalse","parentProductRefinerHierarchy","RefinerTypeValue","RefinerType","SingleSelect","Values","child","matchingIndex","criterion","splice","renderConfigure","containerProps","dropdowns","renderConfigureDropdown","dropdown","labelContainerProps","errors","select","quickOrderView","renderForm","quickOrderProductContent","quickOrderMsgContent","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","dimensionsAsSwatchType","includeAttributes","_getProductsDimensionsAvailabilities","_updateListPageState","listPageState","_this$props$config$it","_this$props$config$it2","_this$props$context$r2","querySorting","sorting","JSON","parse","decodeURIComponent","currentPageNumber","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","activeFilters","hydrateRefinersFromUrl","productId","featureProduct","_this$props$data$list","_this$props$data$list2","productsList","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","SearchResultModal","modalCloseButtonText","modalTitle","modalIsOpen","returnRef","_modalToggleRef","onModalToggle","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r3","category","getFriendlyName","locale","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","toLowerCase","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","categoryHierarchyList","Link","categoryLinkAriaLabel","Url","categoryHierarchySeparator","Separator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","getCurrentUrl","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","updateRefinerPanel","refiners","refiner","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandRefinersCount","expandedRefiners","RefineMenuContainer","RefinerSectionContainer","productRefinerHierarchy","RefineSubmenu","selectedRefinerValues","refineItemCommonProps","_refineItemCommonProps","minValueSliderThumbAriaLabel","maxValueSliderThumbAriaLabel","onUpdateRefiners","_onUpdateRefiners","urlBuilder","_buildRefinerUrl","isExpandedOnInitialLoad","productCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","singleProductCountAriaLabel","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","channelInventoryConfiguration","isInventorySortableAttribute","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","isInventoryProductAttribute","channelInventoryConfigurationId","InventoryProductAttributeRecordId","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","_getChoiceSummary","_this$props$data$refi","selectedRefiners","refinerValueName","ChoiceSummary","classNames","clearAllText","label","choiceSummaryLabel","closeAriaLabel","selectedChoices","refinerHierarchy","choiceFormat","choiceRangeValueFormat","onChoiceClicked","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","choiceAriaLabel","refinerValues","_getProducts","_this$props$slots","_this$props$data$prod5","allowBackNavigation","shouldAllowBackNavigation","breadCrumbType","breadcrumbType","shouldAllowBack","quickviewSlot","isPriceMinMaxFeatureState","ProductSearchResultItems","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","transaction","option","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","_this$props$data$list6","newRefinementCriteria","clearAll","dropdownElementId","dropdownElement","document","getElementById","focus","selectedChoice","choiceClicked","selectedRefiner","isClearAll","refinerCount","productPrices","pending","placeholderTextMax","minLabel","maxLabel","rangeNameFormat","validationErrorNaN","validationErrorNotNumber","validationErrorRange","validationErrorNotRange","nameTranslations","_nameTranslation","nameTranslation","Language","_this$props$context$a2","StoreOperationsDataActions","getInventoryConfigurationAsync","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r4","_this$props$context$r5","_this$props$context$r6","_this$props","newListPageState","GetFullProductsByCollectionInput","Paging","Top","Skip","Sorting","stringify","Recommendation","recommendation","productResults","getCollectionProducts","enableAffiliationBasedPricing","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r7","_this$props$context$r8","refinerInput","RefinersByCollectionInput","getCollectionRefinersAction","_listPageState$result","_listPageState$result2","_this$props$context$r9","_this$props$data$list7","_this$props$data$list8","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","FeatureSearchResultItem","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","sortByOptions","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","ModalToggle","searchResultModal","errorMessage","ErrorMessage","FeatureSearchContainer","similarLookProduct","Browser","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","previousState","_drawerGlyphClass","isAnimateGlyph","_drawerOpenGlyph","_drawerCloseGlyph","drawerButtonClassName","isCollapseState","headingDrawerClass","descriptionDrawerClass","_renderCarousel","carouselContainer","_renderProduct","_renderGrid","gridContainer","ProductContainer","productComponent","ProductCollectionView","ProductCollectionContainer","SingleSlideCarouselComponentProps","GridComponentProps","isCarousel","seeAllButton","addToListBtn","ProductCollection","handleHeadingChange","validProducts","initProductState","productCollectionProducts","equals","_getProduct","_this$state$productsD","trace","breaCrumbType","productComparisonButtonSlot","reviewCountAriaLabelValue","ratingCountAriaLabelSingleUser","priceRangeSeparator","_product$MasterProduc","masterProductId","_getSeeAllButton","headingLabel","validateCatalogId","searchPageLink","seeAllButtonText","shouldDisplaySeeAllButton","recommendationListId","layout","headingComponent","onEdit","updatedProducts","getProductData","productCollectionViewProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","parentId","createSearchResultModal","modalProps","isRecoSearchPage","modal","modalHeader","createModalBody","modalFooter","modalBody","renderSort","renderRefiner","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","SearchResultContainerView","_props$context$action","RefineItem","_onClick","selectedRefinementCriterion","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","attrs","isSingleSelect","itemTypeClassName","inputType","SourceValue","Rating","_renderRating","LeftValueBoundLocalizedString","productCount","Count","refineMenuItemAriaLabel","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","hasImage","hasContentSwatch","_getRefinerUrl","tabIndex","_renderSwatch","_productRefinerValue$2","SwatchComponent","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_this$props$selectedR","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","hideCount","getQuickOrderGridAddToCartDialog","AddToCartProductListComponent","removeActionHandler","removeQuickOrderList","addProductListToBag","CONTENT","AddLineToTemplate","Component","productCatalogs","Search","selectedCatalogId","searchTextInput","createRef","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","autoComplete","_onSearchSubmit","htmlFor","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","_onInputChange","_get","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","varianteInput","productVariant","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","RegExp","dangerouslySetInnerHTML","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","AddItemToOrderTemplateInput","addItemToOrderTemplate","reloadPage","_toggleModalHandler","_getCatalogs","onComponentDidMount","_this$searchTextInput","onComponentDidUpdate","_this$searchTextInput2","addLineModalLinkText","backToResultsText","showBackArrow","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","renderResultCountText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","productCatalog","selected","searchText","searchCriteriaInput","Context","ChannelId","IncludeAttributes","SearchCondition","searchByCriteriaAsync","Dropdown","selectMenu","_onChanged","selectedIndex","selectId","selectedValue","innerText","dropdownList","dropdownName","OrderTemplateQuantity","inputRef","_validateMin","minValue","currentInput","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","incDisabled","extraClass","getChangeHandler","amount","_onIncrementalChange","onBlur","updatedQuantity","defaultProps","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","isBusy","showAddConfirmation","add","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","newValue","totalPrice","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","dimensionInput","variantDimensions","availabilityInput","priceInput","unitPrice","sort","a","b","_product$PrimaryImage","_product$Name2","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","ModalFooter","_getConfirmationMessage","selectedDimensionNames","addToTemplateConfirmation","values","_this$state$errors2","unshift","assertive","currencyCode","selectProductButtonText","_generateImageUrl","primaryImageSource","fallBackImg","ProductSelectButton","buttonText","setBusy","getClickHandler","removeOrderActionHandler","_removeOrderTemplate","addTemplateToBag","_getOrderTemplateAddToCartDialog","renameTemplate","_getOrderTemplateRenameControl","removeTemplate","actionsSplitButton","ActionsSplitButton","RenameOrderTemplateComponent","buttonEventReference","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","OrderTemplateNameDialog","existingOrderTemplate","isUpdateDialog","setModalOpen","onCancel","onOrderTemplateNameCancel","_buttonEventReference","onSuccess","requestStatementDropdownString","Random","Guid","generateGuid","OrderTemplateLineActions","getAddToBag","getRemoveItem","PopUp","showMobile","setShowMobile","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","checked","UnitOfMeasure","fallbackImage","selectLine","productLineCatalog","renderProductCatalog","_renderProductImage","productInfo","renderProductInfo","_renderPrice","_renderProductError","productUnitOfMeasure","productQuantityView","_generateQuantity","addToBagButton","extraActionsPopup","ExtraActionsPopup","popUp","showActions","setShowActions","_context$request$app2","onChangeHandler","_context$actionContex","_context$request","isB2b","catalog","OOS","UNASSORTED","NONE","_orderTemplateLine$fu","_renderProductDimensions","dimensionsLine","componentClassName","getOnChange","checkedLines","scope","getInventoryLabel","inventoryAttribute","TextValue","closeButtonGlyph","stopPropagation","_getSelectedRefinerChoice","itemClicked","nextItemToFocus","nextSibling","_this$props$context","choice","parent","hierarchy","_getKeyForRefinerValue","selectedRefinersMap","clearAllAttributes","overallFormat","rangeFormat","refinerName","UnitText","filterValue","currency","_onToggleItem","_onToggleSubmenu","expanded","timeout","_renderChildItems","_renderRange","_renderSingleMultiSelect","refinerValuesList","listItems","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","Slider","SliderWithBars","rangeType","RangeRefineItem","sliderKey","prevState","QuickOrderGridDesktopHeaderCellsComponent","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","setShowPreviousActions","onRemoveHandler","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","onClickViewDetails","shouldShowActionsNewValue","actionsContainerClassName","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_productListLine$Line","quickOrderGridProductDimensionsSeparator","renderProductPrice","renderUnitOfMeasure","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","_quickOrderProduct$pr","_quickOrderProduct$pr2","modalCloseButtonReference","CreateOrderTemplateButton","onCancelHandler","isCreateOrderTemplateDialogOpen","onCreateButtonClick","createOrderTemplateText","createOrderTemplateDialogResources","onOrderTemplateCreated","OrderTemplateList","_reloadPage","_onRemoveFromOrderTemplateList","orderTemplates","p","headerStatusMessage","_heading$text","_heading$tag3","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","_heading$tag","_heading$tag2","createOrderTemplateButton","CreateNewTemplateButtonComponent","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","createOrderTemplateHeader","createOrderTemplateDescription","createOrderTemplateButtonText","cancelNewOrderTemplateCreationButtonText","currentTemplateProps","_quickOrderTemplate$q","_quickOrderTemplate$q2","buttonLabel","buttonAriaLabel","_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","continueShoppingText","headerItemOneText","headerItemFormatText","headerLinesFormatText","headerMessageText","buyAgainNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","salesLine","OrderDetailsProduct","getOrderDetails","AddToCartComponent","outOfStockText","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","_selectedRefinementCr","_this$props$selectedR2","_ref2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","ariaValueText","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","initialMin","initialMax","String","maxValue","labels","sliderKeyString","sliderThumbs","validationErrorMin","validationErrorMax","touchedMin","touchedMax","componentDidUpdate","previousProps","updateSliderProps","_renderInputFields","_renderSlider","_ref3","_this$props$selectedR5","_this$props$selectedR6","_ref4","_this$props$selectedR7","_this$props$selectedR8","formAttrs","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","onFocus","ariaAttributes","inForm","step","orientation","showLabels","showTooltip","onChangeEnd","handleTooltipText","_changeValue","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","maxNum","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","touched","validationError","inputAsNum","get","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","element","tooltip","_renderItem","quantityLabel","disableElement","pointerEvents","opacity","OrderTemplateLinesView","toggleDetails","fade","applicationNode","BulkPurchase","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_toggleCollapse","hasDimensionsInProps","hasDimensionsInData","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","_renderMainContent","isMobileDevice","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_featureState$result","_this$props$data$cust","isMultipleCatalogsFeatureEnabled","ProductDimensionsMatrix","dimensionOnChange","quickOrderGridView","quickOrderMessageContent","modalNode","modalHeaderNode","modalFooterNode","returnFocusRef","zIndex","isAddDisabled","isRemoveDisabled","addHandler","removeHandler","_this$props$data$cata","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","productRecordId","featureSimilarDescriptionTitle","featureSimilarLooksTitle","img","OrderTemplateListView","_renderOrderTemplate"],"sourceRoot":""}