{"version":3,"file":"static/js/5.87656c85f96519619a30.chunk.js","mappings":"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","sources":["webpack://Citta2.0/./src/components/price-component.tsx?ed26","webpack://Citta2.0/./src/modules/citta-promo-banner/components/close-button.tsx?7ba2","webpack://Citta2.0/./src/modules/citta-promo-banner/components/links.tsx?a64a","webpack://Citta2.0/./src/modules/citta-promo-banner/components/text.tsx?2035","webpack://Citta2.0/./src/modules/citta-promo-banner/citta-promo-banner.tsx?f097","webpack://Citta2.0/./src/modules/citta-promo-banner/citta-promo-banner.view.tsx?4353","webpack://Citta2.0/./src/modules/citta-search/actions/get-auto-suggest-suggestions.ts?357b","webpack://Citta2.0/./src/modules/citta-search/components/citta-search.keywordsuggest.tsx?fcba","webpack://Citta2.0/./src/modules/citta-search/components/citta-search.productsuggest.tsx?89f1","webpack://Citta2.0/./src/modules/citta-search/components/citta-search.categorysuggest.tsx?2fc6","webpack://Citta2.0/./src/modules/citta-search/components/citta-search.form.tsx?f887","webpack://Citta2.0/./src/modules/citta-search/components/citta-search.label.tsx?585c","webpack://Citta2.0/./src/modules/citta-search/citta-search.tsx?9717","webpack://Citta2.0/./src/modules/citta-search/citta-search.view.tsx?861d","webpack://Citta2.0/./src/themes/citta/utilities/quantity/Quantity.tsx?4279","webpack://Citta2.0/./src/themes/citta/views/checkout.view.tsx?084a","webpack://Citta2.0/./src/themes/citta/views/components/cartlineitem.component.tsx?ca68","webpack://Citta2.0/./src/themes/citta/views/components/promocode.component.tsx?26ab","webpack://Citta2.0/./src/themes/citta/views/components/product-collection-component.tsx?595b","webpack://Citta2.0/./src/themes/citta/views/product-collection.view.tsx?2634","webpack://Citta2.0/./src/modules/active-image-utilities/active-product.tsx?69b2","webpack://Citta2.0/./src/modules/active-image-utilities/additional-content.tsx?6946","webpack://Citta2.0/./src/modules/active-image-utilities/image-mapper.tsx?dd86","webpack://Citta2.0/./src/modules/active-image/active-image.tsx?00d3","webpack://Citta2.0/./src/modules/active-image/active-image.view.tsx?a935","webpack://Citta2.0/./src/modules/bulk-purchase/bulk-purchase.tsx?9fd5","webpack://Citta2.0/./src/modules/bulk-purchase/bulk-purchase.view.tsx?feac","webpack://Citta2.0/./src/modules/header/components/header-preferred-store.tsx?ee9c","webpack://Citta2.0/./src/modules/header/components/logo.tsx?f27e","webpack://Citta2.0/./src/modules/header/components/nav-icon.tsx?2475","webpack://Citta2.0/./src/modules/header/header.tsx?e91a","webpack://Citta2.0/./src/modules/header/header.view.tsx?cf0f","webpack://Citta2.0/./src/modules/order-template-list/components/order-template-list.tsx?86c4","webpack://Citta2.0/./src/modules/order-template-list/components/orderTemplateList-status-message.tsx?183c","webpack://Citta2.0/./src/modules/order-template-list/components/create-order-template.tsx?ea38","webpack://Citta2.0/./src/modules/order-template-list/order-template-list.tsx?18d0","webpack://Citta2.0/./src/modules/order-template-list/order-template-list.view.tsx?103b","webpack://Citta2.0/./src/modules/order-template/components/add-line/spinner.tsx?b423","webpack://Citta2.0/./src/modules/order-template/components/add-line/add-line.tsx?5f8a","webpack://Citta2.0/./src/modules/order-template/components/add-line/dropdown.tsx?1cba","webpack://Citta2.0/./src/modules/order-template/components/add-line/not-found.tsx?392d","webpack://Citta2.0/./src/modules/order-template/components/common/order-template-quantity.tsx?99a1","webpack://Citta2.0/./src/modules/order-template/components/add-line/product-configuration.tsx?b256","webpack://Citta2.0/./src/modules/order-template/components/add-line/product-list.tsx?4284","webpack://Citta2.0/./src/modules/order-template/components/bulk-actions.tsx?dbe8","webpack://Citta2.0/./src/modules/order-template/components/order-template-actions.tsx?8136","webpack://Citta2.0/./src/modules/order-template/components/order-template-lines.tsx?3703","webpack://Citta2.0/./src/modules/order-template/components/order-template-lines-status-message.tsx?2986","webpack://Citta2.0/./src/modules/order-template/components/order-template-table-heading.tsx?665c","webpack://Citta2.0/./src/modules/order-template/order-template.tsx?4ecb","webpack://Citta2.0/./src/modules/order-template/order-template.view.tsx?a45e","webpack://Citta2.0/./src/modules/product-collection/product-collection.tsx?4008","webpack://Citta2.0/./src/modules/product-collection/product-collection.view.tsx?5d36","webpack://Citta2.0/./src/modules/promo-banner/components/close-button.tsx?063b","webpack://Citta2.0/./src/modules/promo-banner/components/links.tsx?2587","webpack://Citta2.0/./src/modules/promo-banner/components/text.tsx?782b","webpack://Citta2.0/./src/modules/promo-banner/promo-banner.tsx?9ee9","webpack://Citta2.0/./src/modules/promo-banner/promo-banner.view.tsx?7f77","webpack://Citta2.0/./src/modules/quick-order-grid/components/add-to-list/add-to-cart-selected-items.tsx?de21","webpack://Citta2.0/./src/modules/quick-order-grid/components/quick-order-grid-actions.tsx?ca97","webpack://Citta2.0/./src/modules/quick-order-grid/components/quick-order-grid-drawer.tsx?8701","webpack://Citta2.0/./src/modules/quick-order-grid/components/quick-order-grid-form.tsx?5cbb","webpack://Citta2.0/./src/modules/quick-order-grid/components/quick-order-grid-product.ts?187e","webpack://Citta2.0/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-header-component.tsx?69b3","webpack://Citta2.0/./src/modules/quick-order-grid/components/quick-order-grid-table/components/quick-order-grid-table-row-component.tsx?cd92","webpack://Citta2.0/./src/modules/quick-order-grid/components/quick-order-grid-table/quick-order-grid-table-component.tsx?7cbc","webpack://Citta2.0/./src/modules/quick-order-grid/quick-order-grid.tsx?fddf","webpack://Citta2.0/./src/modules/quick-order-grid/quick-order-grid.view.tsx?f941","webpack://Citta2.0/./src/modules/ratings-histogram/component/components.tsx?f324","webpack://Citta2.0/./src/modules/ratings-histogram/ratings-histogram.tsx?f6bc","webpack://Citta2.0/./src/modules/ratings-histogram/ratings-histogram.view.tsx?5bff","webpack://Citta2.0/./src/search-state.ts?dd10"],"sourcesContent":["import { __assign } from \"tslib\";\r\nimport { msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nvar PriceComponentActions = {};\r\nvar Price = function (props: any) {\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n return (React.createElement(\"span\", { className: classnames('msc-price', props.className) }, showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)));\r\n};\r\nvar showStrikethroughPricing = function (props: any) {\r\n var originalPrice = getOriginalPrice(props);\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n return false;\r\n};\r\nvar getOriginalPrice = function (props: any) {\r\n return Math.max(props.data.price.BasePrice || 0, props.data.price.TradeAgreementPrice || 0, props.data.price.AdjustedPrice || 0);\r\n};\r\nvar renderCurrentPrice = function (props: any) {\r\n var initialPrice = formatCurrency(props, props.data.price.CustomerContextualPrice);\r\n return (React.createElement(\"span\", { className: 'msc-price__actual', itemProp: 'price' }, initialPrice));\r\n};\r\nvar formatCurrency = function (props: any, price: any) {\r\n if (price === undefined) {\r\n return undefined;\r\n }\r\n if (price === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n let returnPrice = `$${price}`;\r\n try {\r\n var formatter = new Intl.NumberFormat(props.context.cultureFormatter.locale, {\r\n style: 'currency',\r\n currency: props.context.cultureFormatter.currencyCode,\r\n currencyDisplay: 'narrowSymbol'\r\n });\r\n returnPrice = formatter.format(price)\r\n\r\n } catch {}\r\n return returnPrice;\r\n};\r\nvar renderCurrentPriceWithOriginalPrice = function (props: any) {\r\n var originalPrice = getOriginalPrice(props);\r\n var initialPrice = formatCurrency(props, originalPrice);\r\n return (React.createElement(React.Fragment, null,\r\n React.createElement(\"span\", { className: 'sr-only' },\r\n ' ',\r\n props.originalPriceText,\r\n ' ',\r\n initialPrice,\r\n ' ',\r\n props.currentPriceText,\r\n ' ',\r\n renderCurrentPrice(props)),\r\n React.createElement(\"span\", { className: 'msc-price__strikethrough', \"aria-hidden\": 'true' }, initialPrice),\r\n React.createElement(\"span\", { \"aria-hidden\": 'true' }, renderCurrentPrice(props)),\r\n props.savingsText && React.createElement(\"span\", { className: 'msc-price__savings' }, props.savingsText)));\r\n};\r\n\r\nconst PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'Product',\r\n { component: msdyn365Commerce.createComponent('Price', __assign({ component: Price }, PriceComponentActions)) }\r\n);\r\n\r\nexport default PriceComponent","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IPromoBannerCloseButton {\r\n closeButtonAriaLabel?: string;\r\n label?: string;\r\n telemetryContent?: ITelemetryContent;\r\n onClose(): void;\r\n\r\n}\r\n\r\nexport const PromoBannerCloseButton: React.FC = ({ closeButtonAriaLabel, label, telemetryContent, onClose }) => {\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PromoBannerClose);\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { ILinksData } from '../citta-promo-banner.props.autogenerated';\r\n\r\nexport interface IPromoBannerLinks {\r\n links: ILinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\nexport const PromoBannerLinks: React.FC = ({ links, requestContext, onTextChange, telemetryContent }) => {\r\n const editableLinks = _mapEditableLinks(links, telemetryContent);\r\n return(\r\n \r\n {editableLinks && editableLinks.length ?\r\n \r\n : null\r\n }\r\n \r\n );\r\n};\r\n\r\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent: ITelemetryContent): Msdyn365.ILinksData[] | null => {\r\n if(!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n linkdata.forEach((link,index) => {\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\r\n const linkText = link.linkText ? link.linkText : '';\r\n payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'ms-promo-banner__link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'button',\r\n additionalProperties: attributes,\r\n onClick: onTelemetryClick(telemetryContent, payLoad, linkText)\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport interface IPromoBannerText {\r\n text: string;\r\n requestContext: Msdyn365.IRequestContext;\r\n onTextChange(event: Msdyn365.ContentEditableEvent): void;\r\n}\r\n\r\nexport const PromoBannerText: React.FC = ({ text, onTextChange, requestContext }) => {\r\n return(\r\n \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { Carousel } from '@msdyn365-commerce/components';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { PromoBannerCloseButton, PromoBannerLinks, PromoBannerText } from './components';\r\nimport { IBannerMessagesData, ICittaPromoBannerProps } from './citta-promo-banner.props.autogenerated';\r\n\r\nexport interface IPromoBannerState {\r\n animating: boolean;\r\n isVisible: boolean;\r\n activeIndex: number;\r\n}\r\n\r\nexport interface IPromoBannerViewProps extends ICittaPromoBannerProps<{}>, IPromoBannerState {\r\n promoBannerProps: IModuleProps;\r\n contentProps: INodeProps ;\r\n bannerMessages: IBannerMessagesData[];\r\n PromoBannerTextProps: INodeProps;\r\n PromoBannerLinksProps: INodeProps;\r\n CarouselProps: INodeProps;\r\n closeButton?: React.ReactNode;\r\n className: string;\r\n onDismiss(): void;\r\n handleText(): void;\r\n handleLinks(): void;\r\n}\r\n\r\n/**\r\n *\r\n * PromoBannerModule component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass PromoBanner extends React.PureComponent, IPromoBannerState> {\r\n public state: IPromoBannerState = {\r\n animating: false,\r\n isVisible: true,\r\n activeIndex: 0\r\n };\r\n\r\n private telemetryContent: ITelemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry);\r\n\r\n public render(): JSX.Element | null {\r\n const { bannerMessages, dismissEnabled, interval, hideFlipper, autoplay, className= '' } = this.props.config;\r\n const { closeButtonAriaLabel, closeButtonLabel } = this.props.resources;\r\n const { isVisible, activeIndex } = this.state;\r\n\r\n if (!isVisible) {\r\n this.props.context.telemetry.error('Promo banner content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n const viewProps = {\r\n // Context for telemetry and raw data for C1 to do customization\r\n // Including computed data, state data and methods\r\n ...this.props,\r\n className: classnames('ms-promo-banner', className),\r\n isVisible, // state data\r\n onDismiss: this._onDismiss, // methods\r\n handleLinks: this.handleLinkClick,\r\n handleText: this.handleTextChange,\r\n\r\n promoBannerProps: { className: classnames('ms-promo-banner', className), moduleProps: this.props, role: 'banner' },\r\n PromoBannerTextProps: {\r\n tag: PromoBannerText\r\n },\r\n PromoBannerLinksProps: {\r\n tag: PromoBannerLinks,\r\n telemetryContent: this.telemetryContent\r\n },\r\n contentProps: { className: 'ms-promo-banner__content' },\r\n bannerMessages: bannerMessages,\r\n activeIndex: activeIndex,\r\n CarouselProps: {\r\n tag: Carousel,\r\n className: 'ms-promo-banner__carousel',\r\n activeIndex: activeIndex,\r\n next: this._next,\r\n previous: this._previous,\r\n onIndicatorsClickHandler: this._goToIndex,\r\n hideIndicator: hideFlipper,\r\n interval: interval,\r\n hideFlipper: hideFlipper,\r\n autoplay: autoplay\r\n },\r\n closeButton: dismissEnabled && \r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => {\r\n if(this.props.config.bannerMessages && this.props.config.bannerMessages[0]) {\r\n this.props.config.bannerMessages[0].text = event.target.value;\r\n }\r\n }\r\n\r\n public handleLinkClick = () => {\r\n // console.log('mlmlm')\r\n //const links = this.props.config.bannerMessages[1].links;\r\n // console.log('links', links)\r\n }\r\n\r\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\r\n if(this.props.config.bannerMessages && this.props.config.bannerMessages[1]) {\r\n const links = this.props.config.bannerMessages[1].links;\r\n if(links) {\r\n links[linkIndex].linkText = event.target.value;\r\n }\r\n }\r\n };\r\n\r\n private _next = (): void => {\r\n const nextIndex = this._isLastItem() ? 0 : this.state.activeIndex + 1;\r\n this._goToIndex(nextIndex);\r\n };\r\n\r\n private _previous = (): void => {\r\n const nextIndex = this._isFirstItem() ? (this.props.config.bannerMessages ? this.props.config.bannerMessages.length - 1 : 0) : this.state.activeIndex - 1;\r\n this._goToIndex(nextIndex);\r\n };\r\n\r\n private _goToIndex = (index: number): void => {\r\n if (this.state.animating) {\r\n return;\r\n }\r\n this.setState({ activeIndex: index });\r\n };\r\n\r\n private _isFirstItem = () => this.state.activeIndex === 0;\r\n\r\n private _isLastItem = () => this.props.config.bannerMessages && this.state.activeIndex === this.props.config.bannerMessages.length - 1;\r\n\r\n private _onDismiss = (): void => {\r\n this.setState({ isVisible: false });\r\n };\r\n}\r\n\r\nexport default PromoBanner;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-duplicate-imports */\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\nimport { IPromoBannerViewProps } from './citta-promo-banner';\r\n\r\nconst PromoBannerView: React.FC = props => {\r\n const {\r\n promoBannerProps,\r\n contentProps,\r\n closeButton,\r\n bannerMessages,\r\n PromoBannerTextProps,\r\n PromoBannerLinksProps,\r\n CarouselProps,\r\n handleLinks,\r\n handleText\r\n } = props;\r\n const slides = bannerMessages && bannerMessages.map((message, index) => {\r\n if (message.links?.length) {\r\n return ( \r\n \r\n {message.text && }\r\n {message.links && message.links.length > 0 && }\r\n \r\n );\r\n }\r\n return (\r\n \r\n {message.text && }\r\n {message.links && message.links.length > 0 && }\r\n \r\n );\r\n });\r\n if(bannerMessages.length > 0){\r\n return (\r\n \r\n \r\n {closeButton}\r\n \r\n );\r\n }\r\n return null;\r\n};\r\nexport default PromoBannerView;\r\n","import { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType, createObservableDataAction, IAction, IActionContext, IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion, SearchSuggestionCriteria } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getSearchSuggestionsAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\n\r\n// @ts-ignore\r\nexport const enum SuggestionType {\r\n Category = 'ScopedCategory',\r\n Keyword = 'Keyword',\r\n Product = 'Product',\r\n None = 'None'\r\n}\r\n\r\n/**\r\n * Input class for auto suggest search input\r\n */\r\nexport class AutoSuggestInput implements IActionInput {\r\n public searchQuery?: string;\r\n public topResultsCount?: number;\r\n public suggestionType?: string;\r\n public hitPrefix?: string;\r\n public hitSuffix?: string;\r\n\r\n constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\r\n this.searchQuery = searchText;\r\n this.topResultsCount = top;\r\n this.suggestionType = suggestionType;\r\n this.hitPrefix = hitPrefix;\r\n this.hitSuffix = hitSuffix;\r\n }\r\n\r\n public getCacheKey = () => `AutoSuggestSearchSuggestions`;\r\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\nconst createInput = (inputData: ICreateActionContext) => {\r\n return new AutoSuggestInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail API and returns a auto-suggest suggestions\r\n */\r\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\r\n // If no input is provided fail out\r\n if (!input || !input.searchQuery) {\r\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\r\n }\r\n\r\n const autosuggest: Autosuggestions = {};\r\n\r\n const autoSuggestPromises = [\r\n _getAutoSuggest(input, autosuggest, ctx),\r\n ];\r\n return Promise.all(autoSuggestPromises).then(() => {\r\n return autosuggest;\r\n });\r\n}\r\n\r\nasync function _getAutoSuggest(\r\n input: AutoSuggestInput,\r\n autosuggest: Autosuggestions,\r\n ctx: IActionContext\r\n): Promise {\r\n const searchCriteria: SearchSuggestionCriteria = {\r\n ProductSearchCriteria: {\r\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n },\r\n HitPrefix: input.hitPrefix,\r\n HitSuffix: input.hitSuffix,\r\n SuggestionType: input.suggestionType\r\n };\r\n\r\n const searchSuggestions = await getSearchSuggestionsAsync(\r\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\r\n searchCriteria\r\n );\r\n\r\n if (searchSuggestions && searchSuggestions.length > 0) {\r\n // Generate image url\r\n searchSuggestions.map(\r\n (item: SearchSuggestion) =>\r\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\r\n );\r\n\r\n autosuggest.AllSearchResults = searchSuggestions;\r\n } else {\r\n ctx.telemetry.error(`[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`);\r\n }\r\n}\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/citta-search/get-auto-suggest-suggestions',\r\n action: >getSearchSuggestionsAction,\r\n input: createInput\r\n});\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { ICittaSearchData } from '../citta-search.data';\r\nimport { ICittaSearchProps } from '../citta-search.props.autogenerated';\r\n\r\nexport interface ISearchKeywordSuggestProps {\r\n searchKeywordSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ICittaSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchKeywordViewProps {\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * KeywordSuggestionsComponent\r\n */\r\nexport const KeywordSuggestionsComponent = (props: ISearchKeywordSuggestProps): ISearchKeywordViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitPrefix,\r\n hitSuffix\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, props));\r\n });\r\n\r\n return { text: reactNodes };\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = ariaLabel;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, hitPrefix, hitSuffix, props) &&\r\n _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, props: ISearchKeywordSuggestProps): string => {\r\n const { searchPageURL, searchQsp } = props;\r\n\r\n const formattedLink = (suggestion.Value as string)\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n const route = searchPageURL || '';\r\n return formattedLink && formattedLink.length > 0\r\n ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${formattedLink}`\r\n : route;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { getRichTextHtml, IActionContext, ITelemetry } from '@msdyn365-commerce/core';\r\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, INodeProps, IPayLoad, ITelemetryContent, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICittaSearchData } from '../citta-search.data';\r\nimport { ICittaSearchProps } from '../citta-search.props.autogenerated';\r\n\r\nexport interface ISearchProductSuggestProps {\r\n searchProductSuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ICittaSearchProps;\r\n searchText: string;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetry: ITelemetry;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchProductViewProps {\r\n title: React.ReactNode;\r\n items: ISearchProductItemViewProps[];\r\n}\r\n\r\nexport interface ISearchProductItemViewProps {\r\n text: React.ReactNode;\r\n price: React.ReactNode;\r\n LiProduct: INodeProps;\r\n AProduct: INodeProps;\r\n id: string | undefined;\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\nlet telemetryContent: ITelemetryContent | undefined;\r\n\r\n/**\r\n *\r\n * ProductSuggestionsComponent\r\n */\r\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\r\n const {\r\n suggestions,\r\n hitSuffix,\r\n hitPrefix,\r\n autoSuggestProps: {\r\n context: { actionContext },\r\n resources: { productSuggestionHeading }\r\n },\r\n moduleType,\r\n moduleId\r\n } = props;\r\n const reactNodes: ISearchProductItemViewProps[] = [];\r\n telemetryContent = props.telemetryContent;\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\r\n });\r\n\r\n const titleNode = _renderTitle(productSuggestionHeading);\r\n\r\n return { title: titleNode, items: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (productSuggestionHeading: string) => {\r\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\r\n\r\n return
  • {productAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (\r\n item: SearchSuggestion,\r\n hitPrefix: string,\r\n hitSuffix: string,\r\n actionContext: IActionContext,\r\n props: ISearchProductSuggestProps,\r\n moduleType: string,\r\n moduleId: string\r\n): ISearchProductItemViewProps => {\r\n return {\r\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\r\n price:\r\n item.Id &&\r\n item.Value3 &&\r\n item.Value3.Value &&\r\n item.Value3.Value.DecimalValue &&\r\n _renderPrice(item.Value3.Value.DecimalValue, item.Value3.Value.DecimalValue, moduleId, moduleType, props),\r\n LiProduct: _getLiWrapper(),\r\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext),\r\n id: item.Id\r\n };\r\n};\r\n\r\nconst _getLiWrapper = () => {\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'li' as NodeTag\r\n };\r\n};\r\n\r\nconst _getAWrapper = (item: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const ariaLabel = item.Value &&\r\n (item.Value).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n payLoad.contentAction.recid = item.Id;\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return {\r\n className: 'msc-autoSuggest__productResults-item',\r\n tag: 'a' as NodeTag,\r\n 'aria-label': ariaLabel,\r\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\r\n ...attribute\r\n };\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\r\n const formattedLink = (suggestion.Value as string).replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n return suggestion.Value && suggestion.Id ?\r\n getProductPageUrlSync(formattedLink,suggestion.Id as unknown as number, actionContext, undefined) : '';\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n const formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\nconst _renderPrice = (adjustedPrice: number, basePrice: number, moduleId: string, moduleType: string, props: ISearchProductSuggestProps): JSX.Element | null => {\r\n const {\r\n autoSuggestProps: { context }\r\n } = props;\r\n\r\n return (\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as React from 'react';\r\n\r\nimport { getRichTextHtml } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICittaSearchData } from '../citta-search.data';\r\nimport { ICittaSearchProps } from '../citta-search.props.autogenerated';\r\n\r\nexport interface ISearchCategorySuggestProps {\r\n searchCategorySuggestClass: string;\r\n searchPageURL: string;\r\n searchQsp: string | undefined;\r\n hitPrefix: string;\r\n hitSuffix: string;\r\n autoSuggestProps: ICittaSearchProps;\r\n searchText: string;\r\n searchRefiners: ProductRefiner[] | undefined;\r\n suggestions: SearchSuggestion[] | undefined;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport interface ISearchCategoryViewProps {\r\n title: React.ReactNode;\r\n text: React.ReactNode[];\r\n}\r\n\r\nlet payLoad: IPayLoad;\r\n\r\n/**\r\n *\r\n * CategorySuggestionsComponent\r\n */\r\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\r\n const {\r\n suggestions,\r\n searchText,\r\n autoSuggestProps: {\r\n resources: { categorySuggestionHeading }\r\n }\r\n } = props;\r\n\r\n if (!suggestions) {\r\n return undefined;\r\n }\r\n\r\n const reactNodes: React.ReactNode[] = [];\r\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\r\n\r\n suggestions.map(item => {\r\n reactNodes.push(_assembleNode(item, props));\r\n });\r\n\r\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\r\n\r\n return { title: titleNode, text: reactNodes };\r\n};\r\n\r\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\r\n const categoryAutoSuggestionHeading = categorySuggestionHeading\r\n ? format(categorySuggestionHeading, searchText)\r\n : `Search \"${searchText}\" in categories`;\r\n\r\n return
  • {categoryAutoSuggestionHeading}
  • ;\r\n};\r\n\r\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\r\n const { searchText, hitPrefix, hitSuffix } = props;\r\n\r\n const splitValue = item.Value && item.Value.split('|').pop();\r\n const ariaLabel = splitValue\r\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\r\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n payLoad.contentAction.etext = item.Value;\r\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\r\n return (\r\n
  • \r\n \r\n {_generateLink(item, searchText, props) && _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix)}\r\n \r\n
  • \r\n );\r\n};\r\n\r\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\r\n};\r\n\r\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\r\n const { searchPageURL, searchQsp, searchRefiners } = props;\r\n\r\n const route = searchPageURL || '';\r\n const urlPath = `${route}${route.indexOf('?') === -1 ? '?' : '&'}${searchQsp}=${searchText}`;\r\n const categoryRefiners =\r\n searchRefiners &&\r\n searchRefiners.find(refiners => {\r\n return refiners.KeyName === 'Category';\r\n });\r\n const refiner =\r\n categoryRefiners &&\r\n categoryRefiners.Values &&\r\n categoryRefiners.Values.find(item => {\r\n return item.RefinerRecordId === parseInt(id, 10);\r\n });\r\n\r\n const encodedRefiner = refiner && encodeURIComponent(JSON.stringify(compressRefiners([refiner])));\r\n\r\n return encodedRefiner ? `${urlPath}&refiners=${encodedRefiner}` : urlPath;\r\n};\r\n\r\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\r\n let formattedText = suggestion\r\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\r\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\r\n formattedText = formattedText.split('|').pop() || '';\r\n\r\n // tslint:disable:react-no-dangerous-html\r\n return ;\r\n};\r\n\r\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\r\n// or move this code to a common place\r\nconst compressedRefinerKeys = ['DataTypeValue', 'LeftValueBoundString', 'RefinerRecordId', 'RefinerSourceValue', 'RightValueBoundString', 'UnitText'];\r\n\r\n/**\r\n * Compressed a list of refiners for use in URLs\r\n * @param refiners The uncompressed refiners\r\n */\r\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\r\n const compressedRefiners: (string | number)[][] = [];\r\n\r\n refiners.forEach((refiner) => {\r\n const compressedRefiner: (string | number)[] = [];\r\n compressedRefinerKeys.forEach((refinerKey) => {\r\n // @ts-ignore: This line is intentionally not typesafe\r\n compressedRefiner.push(refiner[refinerKey]);\r\n });\r\n compressedRefiners.push(compressedRefiner);\r\n });\r\n\r\n return compressedRefiners;\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchFormProps {\r\n hideSearchLabel: boolean | undefined;\r\n isSearchFormExpanded: boolean | undefined;\r\n disableSubmitSearch: boolean | undefined;\r\n searchTextInput: React.RefObject;\r\n maxChars: number;\r\n searchQsp: string;\r\n searchPlaceholder: string;\r\n query: string;\r\n ariaLabelCancel: string;\r\n ariaLabelSearch: string;\r\n ariaLabelSubmit: string;\r\n handleCancelSearchChange(): void;\r\n handleInputChange(query: string): void;\r\n handleSearchClick(): void;\r\n}\r\n\r\nexport interface ISearchFormViewProps {\r\n input: React.ReactNode;\r\n submitBtn: React.ReactNode;\r\n cancelBtn: React.ReactNode;\r\n searchBtn: React.ReactNode;\r\n}\r\n\r\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\r\n const {\r\n searchQsp,\r\n searchPlaceholder,\r\n hideSearchLabel,\r\n isSearchFormExpanded,\r\n searchTextInput,\r\n handleInputChange,\r\n maxChars,\r\n disableSubmitSearch,\r\n handleCancelSearchChange,\r\n handleSearchClick,\r\n query,\r\n ariaLabelCancel,\r\n ariaLabelSearch,\r\n ariaLabelSubmit\r\n } = props;\r\n\r\n const onInputChange = (e: React.ChangeEvent): void => {\r\n handleInputChange(e.target.value || '');\r\n };\r\n\r\n const inputNode = !hideSearchLabel ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const submitBtnNode = !disableSubmitSearch && (\r\n \r\n );\r\n\r\n const cancelBtNoden = (\r\n \r\n );\r\n\r\n return {input: inputNode, cancelBtn: cancelBtNoden, submitBtn: submitBtnNode, searchBtn: searchBtnNode };\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ISearchLabelProps {\r\n isSearchFormExpanded: boolean;\r\n searchLabelClass: string;\r\n searchLabelArialLabel: string;\r\n searchtext: string;\r\n searchCollapsedLabel: React.RefObject;\r\n hideSearchLabel?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n handleCancelSearchChange(): void;\r\n}\r\n\r\nexport const LabelComponent = (props: ISearchLabelProps) => {\r\n const { searchLabelClass, searchLabelArialLabel, isSearchFormExpanded, searchtext, searchCollapsedLabel, hideSearchLabel, handleCancelSearchChange, telemetryContent} = props;\r\n const payLoad = getPayloadObject('click', telemetryContent, searchtext, '');\r\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\r\n\r\n return (\r\n
    \r\n \r\n {!hideSearchLabel && {searchtext}}\r\n \r\n
    \r\n );\r\n};","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport classnames from 'classnames';\r\nimport { debounce } from 'lodash';\r\nimport * as React from 'react';\r\n\r\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\r\nimport { getUrlSync } from '@msdyn365-commerce/core';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n\r\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\r\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\r\n\r\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\r\nimport { ICittaSearchData } from './citta-search.data';\r\nimport { ICittaSearchProps, ISuggestionTypeCriterionData } from './citta-search.props.autogenerated';\r\nimport {\r\n CategorySuggestionsComponent,\r\n FormComponent,\r\n ISearchCategoryViewProps,\r\n ISearchKeywordViewProps,\r\n ISearchProductViewProps,\r\n KeywordSuggestionsComponent,\r\n LabelComponent,\r\n ProductSuggestionsComponent\r\n} from './components';\r\n\r\nexport interface ISearchState {\r\n isSearchFormExpanded: boolean;\r\n searchText: string;\r\n searchKeywordSuggestClass: string;\r\n searchProductSuggestClass: string;\r\n searchCategorySuggestClass: string;\r\n suggestions: Autosuggestions | undefined;\r\n searchRefiners?: ProductRefiner[] | undefined;\r\n autoSuggestAriaLabel: string;\r\n isInitialState: boolean;\r\n inSearchMode: boolean;\r\n}\r\n\r\nexport interface ISearchViewProps extends ICittaSearchProps {\r\n Search: IModuleProps;\r\n AutoSuggestAriaLabel: INodeProps;\r\n AutoSuggestAriaLabelText: string;\r\n searchText: string;\r\n AutoSuggest: INodeProps;\r\n KeywordSuggest: INodeProps;\r\n ProductSuggest: INodeProps;\r\n CategorySuggest: INodeProps;\r\n SearchForm: INodeProps;\r\n SearchBtn: INodeProps;\r\n FormWrapper: INodeProps;\r\n BtnWrapper: INodeProps;\r\n UlKeyword: INodeProps;\r\n UlProduct: INodeProps;\r\n UlCategory: INodeProps;\r\n label: React.ReactNode;\r\n searchLabel: INodeProps;\r\n searchLabelText: string;\r\n form: React.ReactNode;\r\n autosuggestKeyword?: ISearchKeywordViewProps;\r\n autosuggestProduct?: ISearchProductViewProps;\r\n autosuggestCategory?: ISearchCategoryViewProps;\r\n callbacks: {\r\n handleCancelSearchChange(): void;\r\n handleSearchClick(): void;\r\n };\r\n isSearchFormExpanded: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * Search module\r\n * @extends {React.Component, ISearchState>}\r\n */\r\nclass Search extends React.Component, ISearchState> {\r\n private searchTextInput: React.RefObject;\r\n private searchCollapsedLabel: React.RefObject;\r\n private formReference: React.RefObject;\r\n private maxChars: number;\r\n private inputSuggestionType?: ISuggestionTypeCriterionData[];\r\n private topResultsCount?: number;\r\n private hitPrefix: string = '{';\r\n private hitSuffix: string = '}';\r\n private waitTime: number = 500;\r\n private autoSuggestResultScreenReaderDiv: React.RefObject;\r\n private autoSuggestResultDiv: React.RefObject;\r\n private searchFormClass: string;\r\n private searchBtnClass: string;\r\n private searchLabelClass: string;\r\n private telemetryContent: ITelemetryContent;\r\n // @ts-ignore\r\n private cancellabelDebounce: debounce;\r\n\r\n constructor(props: ICittaSearchProps) {\r\n super(props);\r\n this.searchTextInput = React.createRef();\r\n this.searchCollapsedLabel = React.createRef();\r\n this.autoSuggestResultScreenReaderDiv = React.createRef();\r\n this.autoSuggestResultDiv = React.createRef();\r\n this.formReference = React.createRef();\r\n this.state = {\r\n isSearchFormExpanded: false,\r\n searchText: '',\r\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\r\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\r\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\r\n suggestions: undefined,\r\n searchRefiners: undefined,\r\n autoSuggestAriaLabel: '',\r\n isInitialState: true,\r\n inSearchMode: false\r\n };\r\n this.maxChars =\r\n (this.props.context &&\r\n this.props.context.app &&\r\n this.props.context.app.config &&\r\n this.props.context.app.config.searchInputMaxLength) ||\r\n 50;\r\n this.inputSuggestionType = this.props.config && this.props.config.suggestionTypeCriterion;\r\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\r\n this.searchFormClass = 'ms-search__form';\r\n this.searchBtnClass = 'ms-search__btn';\r\n this.searchLabelClass = 'ms-search__label';\r\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!, this.props.friendlyName, this.props.telemetry);\r\n }\r\n\r\n public async componentDidMount(): Promise {\r\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\r\n window && window.addEventListener('keyup', this._keyup);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\r\n window && window.removeEventListener('keyup', this._keyup, false);\r\n }\r\n\r\n public componentDidUpdate(): void {\r\n const {\r\n config: { hideSearchLabel }\r\n } = this.props;\r\n const { isSearchFormExpanded, isInitialState } = this.state;\r\n\r\n if (!this.props.context.request.params.isEditor) {\r\n if (!hideSearchLabel && isSearchFormExpanded) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else if (!isInitialState) {\r\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\r\n }\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity max-func-body-length\r\n public render(): JSX.Element {\r\n const {\r\n context,\r\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\r\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, className = '' }\r\n } = this.props;\r\n\r\n const {\r\n isSearchFormExpanded,\r\n searchText,\r\n searchKeywordSuggestClass,\r\n searchProductSuggestClass,\r\n searchCategorySuggestClass,\r\n suggestions,\r\n searchRefiners\r\n } = this.state;\r\n\r\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\r\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\r\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\r\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : '';\r\n\r\n const keywordSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(\r\n i => i.SuggestionType === SuggestionType.Keyword || i.SuggestionType === SuggestionType.None\r\n );\r\n const productSuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Product);\r\n const categorySuggestions =\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n suggestions.AllSearchResults.filter(i => i.SuggestionType === SuggestionType.Category);\r\n\r\n const viewProps: ISearchViewProps = {\r\n ...(this.props as ICittaSearchProps),\r\n\r\n Search: {\r\n moduleProps: this.props,\r\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`,\r\n },\r\n AutoSuggestAriaLabel: {\r\n tag: 'div',\r\n className: 'msc-autoSuggest__screen-reader',\r\n 'aria-live': 'assertive',\r\n ref: this.autoSuggestResultScreenReaderDiv\r\n },\r\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\r\n searchText: this.state.searchText,\r\n AutoSuggest: {\r\n ref: this.autoSuggestResultDiv,\r\n className: 'ms-search__autoSuggest'\r\n },\r\n KeywordSuggest: {\r\n className: searchKeywordSuggestClass\r\n },\r\n ProductSuggest: {\r\n className: searchProductSuggestClass\r\n },\r\n CategorySuggest: {\r\n className: searchCategorySuggestClass\r\n },\r\n SearchForm: {\r\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\r\n },\r\n SearchBtn: {\r\n className: `${this.searchBtnClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-show'}`\r\n },\r\n BtnWrapper: {\r\n className: 'ms-search__btnWrapper',\r\n 'aria-label': 'Search',\r\n },\r\n FormWrapper: {\r\n tag: 'form',\r\n ref: this.formReference,\r\n className: 'ms-search__searchForm',\r\n 'aria-label': 'Search',\r\n name: 'searchForm',\r\n role: 'Search',\r\n action: searchURL,\r\n autoComplete: 'off',\r\n onSubmit: this._handleSubmit\r\n },\r\n UlKeyword: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__keywordResults-items', className)\r\n },\r\n UlProduct: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__productResults-items', className)\r\n },\r\n UlCategory: {\r\n tag: 'ul',\r\n className: classnames('msc-autoSuggest__categoryResults-items', className)\r\n },\r\n searchLabel: {\r\n tag: 'div',\r\n className: 'search-label',\r\n },\r\n searchLabelText: 'Search',\r\n label: LabelComponent({\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n searchLabelClass: `${this.searchLabelClass} 'bx-show'}`,\r\n searchtext: searchtext,\r\n searchLabelArialLabel: searchLabelArialLabel,\r\n searchCollapsedLabel: this.searchCollapsedLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n telemetryContent: this.telemetryContent\r\n }),\r\n // @ts-ignore\r\n form: FormComponent({\r\n ariaLabelCancel: cancelBtnAriaLabel,\r\n ariaLabelSearch: searchBtnAriaLabel,\r\n ariaLabelSubmit: submitBtnAriaLabel,\r\n hideSearchLabel: hideSearchLabel,\r\n searchTextInput: this.searchTextInput,\r\n isSearchFormExpanded: isSearchFormExpanded,\r\n disableSubmitSearch: disableSubmitSearch,\r\n handleInputChange: this._handleInputChange,\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n handleSearchClick: this._handleSearchClick,\r\n maxChars: this.maxChars,\r\n searchQsp: searchQsp,\r\n searchPlaceholder: searchPlaceholder,\r\n query: searchText\r\n }),\r\n autosuggestKeyword:\r\n searchText && searchText.length > 0 && keywordSuggestions && keywordSuggestions.length > 0\r\n ? KeywordSuggestionsComponent({\r\n searchKeywordSuggestClass: searchKeywordSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: keywordSuggestions,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestProduct:\r\n searchText && searchText.length > 0 && productSuggestions && productSuggestions.length > 0\r\n ? ProductSuggestionsComponent({\r\n searchProductSuggestClass: searchProductSuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: productSuggestions,\r\n telemetry: this.props.telemetry,\r\n moduleType: this.props.typeName,\r\n moduleId: this.props.id,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n autosuggestCategory:\r\n searchText && searchText.length > 0 && categorySuggestions && categorySuggestions.length > 0\r\n ? CategorySuggestionsComponent({\r\n searchCategorySuggestClass: searchCategorySuggestClass,\r\n searchPageURL: searchPageURL,\r\n searchQsp: searchQsp,\r\n hitPrefix: this.hitPrefix,\r\n hitSuffix: this.hitSuffix,\r\n autoSuggestProps: this.props,\r\n searchText: searchText,\r\n suggestions: categorySuggestions,\r\n searchRefiners: searchRefiners,\r\n telemetryContent: this.telemetryContent\r\n })\r\n : undefined,\r\n callbacks: {\r\n handleCancelSearchChange: this._handleCancelSearchChange,\r\n handleSearchClick: this._handleSearchClick\r\n },\r\n isSearchFormExpanded: this.state.isSearchFormExpanded\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n // tslint:disable-next-line:no-any\r\n private _focusOutTarget = (e: any): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (\r\n suggestions &&\r\n suggestions.AllSearchResults &&\r\n e.target.closest('.ms-search') === null\r\n ) {\r\n this._clearAutoSuggestState();\r\n }\r\n };\r\n\r\n private _keyup = (e: KeyboardEvent): void => {\r\n const { suggestions } = this.state;\r\n\r\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\r\n this._clearAutoSuggestState();\r\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\r\n if (this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n }\r\n\r\n if (!((this.formReference.current && this.formReference.current.contains(e.target as unknown as Node)) ||\r\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains(e.target as unknown as Node)))) {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n if (this.state.isSearchFormExpanded) {\r\n this.setState({ isSearchFormExpanded: false });\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n }\r\n };\r\n\r\n private _clearAutoSuggestState = (): void => {\r\n const {\r\n context: { actionContext },\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\r\n searchState.searchText = '';\r\n searchState.defaultBasicSearchUrl = '';\r\n searchState.searchQueryStringParameter = '';\r\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\r\n this.searchTextInput.current.value = '';\r\n }\r\n\r\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\r\n };\r\n\r\n private _handleSearchClick = (): void => {\r\n console.log('handle search click')\r\n const { isSearchFormExpanded } = this.state;\r\n const updatedIsSearchFormExpanded = !isSearchFormExpanded;\r\n const headerElem = document.querySelector('.ms-header');\r\n if (headerElem) {\r\n if (updatedIsSearchFormExpanded) {\r\n headerElem.classList.add('lock-opaque');\r\n // window.document.body.classList.toggle('menu-open', true);\r\n window.document.body.classList.toggle('search-open', true);\r\n } else {\r\n if (document.documentElement.scrollTop < 2) {\r\n headerElem.classList.remove('lock-opaque');\r\n }\r\n // window.document.body.classList.toggle('menu-open', false);\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n }\r\n this.setState({ isSearchFormExpanded: updatedIsSearchFormExpanded });\r\n }\r\n\r\n private _handleInputChange = (query: string): void => {\r\n if (!query || query.length < this.maxChars) {\r\n this.setState({ searchText: query });\r\n }\r\n\r\n if (this.cancellabelDebounce) {\r\n this.cancellabelDebounce.cancel();\r\n }\r\n\r\n const {\r\n telemetry,\r\n context,\r\n data: { searchState }\r\n } = this.props;\r\n\r\n if (context) {\r\n if (query && query.length > 0) {\r\n if (query.length > this.maxChars) {\r\n return;\r\n }\r\n\r\n this.cancellabelDebounce = debounce(\r\n () => {\r\n getSearchSuggestionsAction(\r\n new AutoSuggestInput(\r\n query,\r\n this.topResultsCount,\r\n this._getSuggestionType(this.inputSuggestionType),\r\n this.hitPrefix,\r\n this.hitSuffix\r\n ),\r\n context.actionContext\r\n )\r\n .then(results => {\r\n this._getSearchRefiners(query)\r\n .then(refiners => {\r\n this.setState({\r\n suggestions: results, searchRefiners: refiners,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results)\r\n });\r\n })\r\n .catch(error => {\r\n this.setState({\r\n suggestions: results, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(results)\r\n });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get refiners results');\r\n });\r\n })\r\n .catch(error => {\r\n this.setState({\r\n suggestions: undefined, searchRefiners: undefined,\r\n autoSuggestAriaLabel: this._setAutoSuggestResultCount()\r\n });\r\n telemetry.exception(error);\r\n telemetry.debug('Unable to get auto suggest results');\r\n });\r\n },\r\n this.waitTime\r\n );\r\n\r\n setTimeout(\r\n () => {\r\n this.cancellabelDebounce();\r\n },\r\n 0\r\n );\r\n\r\n searchState.searchText = query;\r\n } else {\r\n this.setState({ suggestions: undefined, searchRefiners: undefined });\r\n searchState.searchText = '';\r\n }\r\n context.actionContext.update(createSearchStateInput(searchState), searchState);\r\n }\r\n };\r\n\r\n private _getSuggestionType = (suggestionTypes?: ISuggestionTypeCriterionData[]): string => {\r\n if (suggestionTypes && suggestionTypes.length > 0) {\r\n const distinctSuggestionTypes: string[] = [];\r\n suggestionTypes && suggestionTypes.forEach((suggestionTypeItem, index) => {\r\n suggestionTypeItem.SuggestionType && distinctSuggestionTypes.push(suggestionTypeItem.SuggestionType.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType.slice(1));\r\n });\r\n return distinctSuggestionTypes.join(',');\r\n }\r\n return 'Keyword, Product, ScopedCategory';\r\n };\r\n\r\n private async _getSearchRefiners(searchText: string): Promise {\r\n const { actionContext: ctx } = this.props.context;\r\n return getProductSearchRefinersAsync(\r\n { callerContext: ctx },\r\n {\r\n SearchCondition: searchText,\r\n Context: {\r\n ChannelId: +ctx.requestContext.apiSettings.channelId,\r\n CatalogId: +ctx.requestContext.apiSettings.catalogId\r\n }\r\n }\r\n );\r\n }\r\n\r\n private _handleSubmit = (\r\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\r\n ): void => {\r\n const {\r\n config: { disableSubmitSearch },\r\n context: {\r\n actionContext,\r\n app: {\r\n config: { searchQueryStringParameter }\r\n }\r\n }\r\n } = this.props;\r\n\r\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\r\n e.preventDefault();\r\n\r\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\r\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\r\n } else {\r\n const searchQsp = searchQueryStringParameter || 'q';\r\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\r\n document.location.href = searchURL;\r\n }\r\n };\r\n\r\n private _handleCancelSearchChange = (): void => {\r\n const { isSearchFormExpanded, suggestions } = this.state;\r\n\r\n if (!isSearchFormExpanded) {\r\n this.setState({\r\n isSearchFormExpanded: true,\r\n searchText: '',\r\n isInitialState: false\r\n });\r\n } else {\r\n if (suggestions && suggestions.AllSearchResults) {\r\n this._clearAutoSuggestState();\r\n }\r\n\r\n this.setState({ isSearchFormExpanded: false });\r\n window.document.body.classList.toggle('search-open', false);\r\n }\r\n };\r\n\r\n private _appendQueryParams = (route: string, query: string, qsp: string): string => {\r\n if (route && route.length > 0) {\r\n return query && query.length > 0 ? `${route}${route.indexOf('?') === -1 ? '?' : '&'}${qsp}=${query}` : route;\r\n }\r\n return '';\r\n };\r\n\r\n private _setAutoSuggestResultCount = (result?: Autosuggestions) => {\r\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\r\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\r\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\r\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\r\n ariaLiveRegion.innerText = result && (result.AllSearchResults && result.AllSearchResults.length > 0) ? suggestResultString : emptyResultString;\r\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\r\n return ariaLiveRegion.innerText;\r\n } else {\r\n return '';\r\n }\r\n };\r\n}\r\n\r\nexport default Search;\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport * as React from 'react';\r\nimport { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\r\n\r\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { ISearchViewProps } from './citta-search';\r\n\r\nconst SearchView: React.FC = props => {\r\n const {\r\n Search,\r\n AutoSuggestAriaLabel,\r\n AutoSuggestAriaLabelText,\r\n searchText,\r\n AutoSuggest,\r\n KeywordSuggest,\r\n ProductSuggest,\r\n CategorySuggest,\r\n UlKeyword,\r\n UlProduct,\r\n UlCategory,\r\n form,\r\n searchLabel,\r\n searchLabelText,\r\n autosuggestCategory,\r\n autosuggestKeyword,\r\n autosuggestProduct,\r\n SearchForm,\r\n SearchBtn,\r\n FormWrapper,\r\n BtnWrapper\r\n } = props;\r\n\r\n return (\r\n \r\n { /* @ts-ignore */}\r\n {_renderButton(form as ISearchFormViewProps, SearchBtn, BtnWrapper)}\r\n { /* @ts-ignore */}\r\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper, searchLabel, searchLabelText)}\r\n \r\n {searchText && searchText.length > 0 ?\r\n {AutoSuggestAriaLabelText} : ''\r\n }\r\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword)}\r\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct)}\r\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory)}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderButton = (form: ISearchFormViewProps, SearchBtn: INodeProps, BtnWrapper: INodeProps) => {\r\n return (\r\n \r\n \r\n {form.searchBtn}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps, searchLabel: INodeProps, searchLabelText: string) => {\r\n return (\r\n \r\n \r\n {form.input}\r\n \r\n {form.cancelBtn}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderKeywordSuggestions = (\r\n KeywordSuggest: INodeProps,\r\n UlKeyword: INodeProps,\r\n keywordSuggestions?: ISearchKeywordViewProps\r\n) => {\r\n return (\r\n keywordSuggestions && (\r\n \r\n \r\n {keywordSuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderProductSuggestions = (\r\n ProductSuggest: INodeProps,\r\n UlProduct: INodeProps,\r\n productSuggestions?: ISearchProductViewProps\r\n) => {\r\n return (\r\n productSuggestions && (\r\n \r\n \r\n {productSuggestions.title}\r\n {productSuggestions.items.map((item, index) => {\r\n return (\r\n \r\n \r\n {item.text}\r\n {item.price}\r\n \r\n \r\n );\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nconst _renderCategorySuggestions = (\r\n CategorySuggest: INodeProps,\r\n UlCategory: INodeProps,\r\n categorySuggestions?: ISearchCategoryViewProps\r\n) => {\r\n return (\r\n categorySuggestions && (\r\n \r\n \r\n {categorySuggestions.title}\r\n {categorySuggestions.text.map(text => {\r\n return text;\r\n })}\r\n \r\n \r\n )\r\n );\r\n};\r\n\r\nexport default SearchView;","import { debounce } from 'lodash';\r\nimport * as React from 'react';\r\nimport { IQuantityProps } from './Quantity.props';\r\n\r\ninterface IQuantityState {\r\n currentInput: number;\r\n}\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity\r\n */\r\n\r\nexport default class Quantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private inputRef: React.RefObject = React.createRef();\r\n\r\n constructor(props: IQuantityProps) {\r\n super(props);\r\n this.state = { currentInput: props.currentCount || 1 };\r\n this._onIncrement = this._onIncrement.bind(this);\r\n this._onDecrement = this._onDecrement.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\r\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\r\n this.setState({\r\n currentInput: this.props.currentCount || 1\r\n })\r\n const disabled = this.state.currentInput === this.props.min;\r\n const incDisabled = this.state.currentInput === this.props.max;\r\n const currentValue = this.state.currentInput;\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n );\r\n }\r\n\r\n private _onIncrement(): void {\r\n let invokeCallback = false;\r\n let amount:number = this.props.min || 1;\r\n this.setState((prevState: IQuantityState) => {\r\n if (prevState.currentInput + amount <= this.props.max) {\r\n invokeCallback = true;\r\n return { currentInput: prevState.currentInput + amount};\r\n } else {\r\n invokeCallback = false;\r\n return { currentInput: prevState.currentInput };\r\n }\r\n // tslint:disable-next-line:align\r\n }, () => {\r\n invokeCallback && this.props.onChange && this.props.onChange(this.state.currentInput);\r\n });\r\n }\r\n\r\n private _onDecrement(): void {\r\n let invokeCallback = false;\r\n let amount:number = this.props.min || 1;\r\n this.setState((prevState: IQuantityState) => {\r\n if (prevState.currentInput > amount) {\r\n invokeCallback = true;\r\n return { currentInput: prevState.currentInput - amount };\r\n } else {\r\n invokeCallback = false;\r\n return { currentInput: amount };\r\n }\r\n // tslint:disable-next-line:align\r\n }, () => { invokeCallback && this.props.onChange && this.props.onChange(this.state.currentInput); });\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n const currentValue = parseInt((e.target.value), 10);\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n const inputElement = this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n\r\n if (currentValue > this.props.max) {\r\n this.setState({ currentInput: this.props.max },\r\n () => {\r\n debounce(() => {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }, 200)();});\r\n } else {\r\n this.setState({ currentInput: currentValue },\r\n () => {\r\n debounce(() => {\r\n if(!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\r\n inputElement.setAttribute('value', currentValue.toString());\r\n }\r\n }\r\n }, 200)();});\r\n }\r\n }\r\n\r\n private _validateMin = (): void => {\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n if(isNaN(this.state.currentInput) || (this.state.currentInput < minValue)) {\r\n this.setState({ currentInput: minValue }, () => { this.props.onChange && this.props.onChange(this.state.currentInput); });\r\n } else {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }\r\n }\r\n}","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport msdyn365Commerce from '@msdyn365-commerce/core';\r\nimport { ICheckoutViewProps, IEmailDelivery, ILineItem, ILineItemDeliveryGroup, ILineItems, IPickUpAtStore } from '@msdyn365-commerce-modules/checkout';\r\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\nimport { ICheckoutProps } from '../definition-extensions/checkout.ext.props.autogenerated';\r\n\r\n\r\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\r\n \r\n {label}\r\n {location}\r\n \r\n);\r\n\r\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => (\r\n \r\n {label}\r\n \r\n);\r\n\r\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\r\n \r\n {item}\r\n {pickUpAtStore && }\r\n {emailDelivery && }\r\n \r\n);\r\n\r\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\r\n \r\n {heading}\r\n \r\n {lineItems.map(lineItem => (\r\n \r\n ))}\r\n \r\n \r\n);\r\n\r\nexport const LineItemsComponent: React.FC = ({ LineItems, Header, heading, editLink, itemsForPickup, itemsForShip, itemsForEmail }) => (\r\n \r\n \r\n {heading}\r\n {editLink}\r\n \r\n {itemsForPickup && }\r\n {itemsForEmail && }\r\n {itemsForShip && }\r\n \r\n);\r\n\r\nfunction _renderOtherCharges(props: ICheckoutViewProps): React.ReactNode | null{\r\n const chargeAmountInclTax = props.data.checkout.result?.checkoutCart.cart.ChargeAmount && props.data.checkout.result?.checkoutCart.cart.ChargeAmount || 0;\r\n const shippingCharges = props.data.checkout.result?.checkoutCart.cart.ShippingChargeAmount && props.data.checkout.result?.checkoutCart.cart.ShippingChargeAmount || 0;\r\n const chargeLines = props.data.checkout.result?.checkoutCart.cart.ChargeLines;\r\n\r\n let otherChargesAmountFromLines = 0;\r\n let totalChargeAmountFromLines = 0;\r\n let chargesOverriden = false;\r\n let displayOtherChargesAmount = 0;\r\n let shippingChargesFromLines = 0;\r\n const freightChargeCode = props.context.app.config.freightChargeCode;\r\n\r\n if(chargeLines) {\r\n chargeLines.forEach(chargeLine => {\r\n const chargeAmountInclTaxLocal = chargeLine.CalculatedAmount ? chargeLine.CalculatedAmount : 0;\r\n if (chargeLine.ChargeCode != freightChargeCode) {\r\n otherChargesAmountFromLines += chargeAmountInclTaxLocal;\r\n }\r\n if (chargeLine.ChargeCode == freightChargeCode){\r\n shippingChargesFromLines += chargeAmountInclTaxLocal;\r\n }\r\n });\r\n }\r\n\r\n if(shippingChargesFromLines == 0 && shippingCharges != shippingChargesFromLines)\r\n {\r\n totalChargeAmountFromLines = shippingCharges + otherChargesAmountFromLines;\r\n }\r\n else{\r\n totalChargeAmountFromLines = shippingChargesFromLines + otherChargesAmountFromLines;\r\n }\r\n \r\n chargesOverriden = totalChargeAmountFromLines != chargeAmountInclTax;\r\n displayOtherChargesAmount = chargesOverriden ? 0 : otherChargesAmountFromLines;\r\n if (displayOtherChargesAmount == 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n

    \r\n {displayOtherChargesAmount && displayOtherChargesAmount > 0 ? (\r\n <>\r\n Other charges\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\n\r\n\r\nfunction _renderShippingInclTaxes(props: ICheckoutViewProps): React.ReactNode | null{\r\n const chargeLines = props.data.checkout.result?.checkoutCart.cart.ChargeLines;\r\n let chargeAmountInclTax = 0;\r\n if(chargeLines) {\r\n chargeLines.forEach(chargeLine => {\r\n if (chargeLine.IsShipping) {\r\n const chargeAmountInclTaxLocal = chargeLine.GrossAmount ? chargeLine.GrossAmount : 0;\r\n chargeAmountInclTax += chargeAmountInclTaxLocal;\r\n }\r\n });\r\n }\r\n if (chargeAmountInclTax == 0) {\r\n return props.orderSummary?.lines?.shipping;\r\n }\r\n\r\n return (\r\n

    \r\n {chargeAmountInclTax && chargeAmountInclTax > 0 ? (\r\n <>\r\n {props.resources.shippingLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\n\r\nfunction _renderTotalSavings(props: ICheckoutViewProps): JSX.Element | null {\r\n\r\n const DiscountAmount = props.data.checkout.result?.checkoutCart.cart.DiscountAmount;\r\n return (\r\n

    \r\n {DiscountAmount && DiscountAmount > 0 ? (\r\n <>\r\n {props.resources.totalSavingsLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\n\r\nconst _renderOrderSummarylines = (props: ICheckoutViewProps & ICheckoutProps<{}>): JSX.Element | null => {\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n const {orderSummary } = props;\r\n if (!orderSummary) {\r\n return null;\r\n }\r\n return (\r\n
    \r\n {orderSummary.heading}\r\n
    \r\n {orderSummary.lines && (\r\n <>\r\n {isB2B ? orderSummary.lines.subtotal : _renderSubTotal(props)}\r\n {isB2B ? null : orderSummary.lines.totalDiscounts}\r\n {_renderShippingInclTaxes(props)}\r\n {_renderOtherCharges(props)}\r\n {/*hide on us*/}\r\n {props.config.hideTaxLine ? null : orderSummary.lines.tax}\r\n {_renderTotalOrder(props)}\r\n {orderSummary.lines.loyalty}\r\n {orderSummary.lines.giftCard}\r\n {isB2B ? null : orderSummary.lines.orderTotal}\r\n {isB2B? null : _renderTotalSavings(props)}\r\n \r\n )}\r\n
    \r\n {_renderFreeShippingMessage(props)}\r\n {_getCheckoutSummaryText(props)}\r\n
    \r\n );\r\n};\r\n\r\nfunction _renderFreeShippingMessage(props: ICheckoutViewProps & ICheckoutProps<{}>): JSX.Element | null {\r\n const shippingAmount = props.data.checkout.result?.checkoutCart.cart.DeliveryModeChargeAmount || 0;\r\n const OrderSubTotal = (props.data.checkout.result?.checkoutCart.cart.AmountDue || 0) - shippingAmount;\r\n \r\n const freeShippingAmount = props.config.freeShippingAmount;\r\n\r\n if (!freeShippingAmount || !OrderSubTotal || OrderSubTotal >= freeShippingAmount) {\r\n return null;\r\n }\r\n return
    \r\n Spend an additional ${Math.ceil(freeShippingAmount - OrderSubTotal)} to get FREE SHIPPING\r\n
    \r\n}\r\n\r\nfunction _renderSubTotal(props: ICheckoutViewProps): JSX.Element | null {\r\n var subtotal=0;\r\n props.data.checkout.result?.checkoutCart.cart.CartLines?.forEach((item)=>{\r\n subtotal += item.Price! * item.Quantity!;\r\n });\r\n const OrderSubTotal = subtotal;//props.data.checkout.result?.checkoutCart.cart.NetPrice;\r\n return (\r\n

    \r\n {OrderSubTotal && OrderSubTotal > 0 ? (\r\n <>\r\n {props.resources.subTotalLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\nfunction _renderTotalOrder(props: ICheckoutViewProps): JSX.Element | null {\r\n\r\n const OrderTotal = props.data.checkout.result?.checkoutCart.cart.TotalAmount;\r\n return (\r\n

    \r\n {OrderTotal && OrderTotal > 0 ? (\r\n <>\r\n {props.resources.totalAmountLabel}\r\n \r\n \r\n ) : null}\r\n

    \r\n );\r\n}\r\nconst _getCheckoutSummaryText = (props: ICheckoutViewProps & ICheckoutProps<{}>): React.ReactNode | undefined => {\r\n const { paragraph } = props.config;\r\n\r\n return (\r\n paragraph && (\r\n \r\n )\r\n );\r\n};\r\nconst CheckoutView: React.FC> = props => {\r\n const {\r\n canShow,\r\n checkoutProps,\r\n headerProps,\r\n hasSalesOrder,\r\n bodyProps,\r\n mainProps,\r\n mainControlProps,\r\n sideProps,\r\n sideControlFirstProps,\r\n sideControlSecondProps,\r\n termsAndConditionsProps,\r\n orderConfirmation,\r\n loading,\r\n alert,\r\n title,\r\n guidedForm,\r\n lineItems,\r\n placeOrderButton,\r\n termsAndConditions,\r\n keepShoppingButton\r\n } = props;\r\n\r\n let isBusy = false;\r\n if(msdyn365Commerce.isBrowser) {\r\n const url: string = decodeURI(window.location.search);\r\n const urlParams: URLSearchParams = new URLSearchParams(url);\r\n if (urlParams.get('paymentMethod') === 'AP' && urlParams.has('orderToken')) {\r\n const orderToken = urlParams.get('orderToken');\r\n const afterpayStatus = urlParams.get('status') || 'FAILURE';\r\n\r\n if (afterpayStatus === 'SUCCESS' && orderToken) {\r\n isBusy = true;\r\n }\r\n }\r\n }\r\n\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n function _renderPlaceOrderCopy(): JSX.Element | null {\r\n return (\r\n
    \r\n By clicking Place order you agree to your signed terms of business, please contact your account manager for further information.\r\n
    \r\n )\r\n }\r\n\r\n return (\r\n \r\n {!hasSalesOrder && {title}}\r\n {!hasSalesOrder &&\r\n \r\n {loading}\r\n {\r\n isBusy ? (\r\n
    \r\n
    \r\n
    \r\n ) : null\r\n }\r\n {alert}\r\n {canShow && (\r\n <>\r\n \r\n {guidedForm}\r\n \r\n {termsAndConditions}\r\n \r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n {isB2B? _renderPlaceOrderCopy() : null}\r\n \r\n \r\n {_renderOrderSummarylines(props)}\r\n \r\n \r\n {termsAndConditions}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n {lineItems && }\r\n \r\n \r\n {termsAndConditions}\r\n \r\n {placeOrderButton}\r\n {keepShoppingButton}\r\n \r\n \r\n \r\n )}\r\n \r\n }\r\n {hasSalesOrder && orderConfirmation}\r\n \r\n );\r\n};\r\n\r\nexport default CheckoutView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { getFallbackImageUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, IGridSettings, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { CartLine, SalesLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport * as React from 'react';\r\nimport { Quantity } from '../../utilities/quantity';\r\nimport getAttributesForSelectedVariant, { AttributesForSelectedVariantInput } from '../../../../data-actions/accordion/get-attributes-for-selected-variant';\r\n\r\n\r\n\r\n/**\r\n * ICartlineResourceString: Interface for specifying the\r\n * resource strings that the component needs\r\n */\r\nexport interface ICartlineResourceString {\r\n /** Display string for discount label */\r\n discountStringText: string;\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n /** Display string for quantity label */\r\n quantityDisplayString: string;\r\n /** Display string for quantity label */\r\n inputQuantityAriaLabel: string;\r\n /** Aria label for the decrement button in quanitity component */\r\n decrementButtonAriaLabel: string;\r\n /** Aria label for the increment button in quanitity component */\r\n incrementButtonAriaLabel: string;\r\n salesLineSkuText: string;\r\n}\r\n\r\ninterface ICartLineData {\r\n cartLine: CartLine | SalesLine;\r\n product: SimpleProduct;\r\n imperilDimension: string;\r\n}\r\n\r\n/**\r\n * ICartLineProps: The props required to render cartLineitem\r\n */\r\nexport interface ICartLineProps extends IComponentProps {\r\n /** The flag to change the quantity component from interactible to static */\r\n disableQuantityInteractivity?: boolean;\r\n /** The primary image url */\r\n primaryImageUrl?: string;\r\n /** The product url */\r\n productUrl?: string;\r\n /** GridSettings for the product image in cartLine */\r\n gridSettings: IGridSettings;\r\n /** ImageSettings for the product image in cartLine */\r\n imageSettings: IImageSettings;\r\n /** Boolean flag to indicate if the item is out of stock */\r\n isOutOfStock?: boolean;\r\n /** Flag to make quantity section editable */\r\n isQuantityEditable?: boolean;\r\n /** Max quantity for line item */\r\n maxQuantity?: number;\r\n /** Current quantity for line item */\r\n currentQuantity?: number;\r\n /** Resource string for the component */\r\n resources: ICartlineResourceString;\r\n /** SalesLine flag */\r\n isSalesLine?: boolean;\r\n /** Error message to show in place of quantity */\r\n errorMessage?: string;\r\n /** Quantity onChange callback */\r\n quantityOnChange?(cartLine: CartLine, newQuantity: number): void;\r\n\r\n}\r\n\r\ninterface IDimensionStrings {\r\n /** String for size key */\r\n sizeString: string;\r\n /** String for color key */\r\n colorString: string;\r\n /** String associated with the configuration product dimension */\r\n configString: string;\r\n /** String for style key */\r\n styleString: string;\r\n}\r\n\r\nconst CartLineItemFunctions = {\r\n renderProductDimensions: (Product: SimpleProduct, DimensionStrings: IDimensionStrings, props: any) => {\r\n if (!Product || !Product.Dimensions) {\r\n return [];\r\n }\r\n\r\n return Product.Dimensions.map(productDimension => {\r\n\r\n if (productDimension.DimensionTypeValue === 1) {\r\n return (\r\n
    \r\n {DimensionStrings.colorString}\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n if (productDimension.DimensionTypeValue === 2) {\r\n return (\r\n
    \r\n {DimensionStrings.configString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 3) {\r\n return (\r\n
    \r\n {DimensionStrings.sizeString}\r\n {/* {productDimension.DimensionValue && productDimension.DimensionValue.Value} */}\r\n \r\n \r\n\r\n
    \r\n );\r\n }\r\n\r\n if (productDimension.DimensionTypeValue === 4) {\r\n return (\r\n
    \r\n {DimensionStrings.styleString}:\r\n {productDimension.DimensionValue && productDimension.DimensionValue.Value}\r\n
    \r\n );\r\n }\r\n return null;\r\n });\r\n },\r\n\r\n renderProductSKU:(props:ICartLineProps) => {\r\n var CartLine = props.data.cartLine;\r\n if (!CartLine || !CartLine.ItemId) {\r\n return undefined;\r\n }\r\n if(CartLine) {\r\n return(\r\n
    \r\n SKU:\r\n {CartLine.ItemId}\r\n
    \r\n );\r\n }\r\n return undefined;\r\n },\r\n\r\n renderDiscountLines: (props: ICartLineProps) => {\r\n\r\n if (!props.data.cartLine.DiscountLines || props.data.cartLine.DiscountLines.length === 0) {\r\n return null;\r\n }\r\n return props.data.cartLine.DiscountLines.map((discountLine, index) => {\r\n return (\r\n
    \r\n \r\n {discountLine.OfferName ? discountLine.OfferName : ''}:\r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n \r\n \r\n \r\n \r\n {` (${discountLine.Percentage !== undefined ? discountLine.Percentage : ''}%)`}\r\n \r\n
    \r\n );\r\n });\r\n }\r\n};\r\n\r\nclass DimensionLine extends React.Component {\r\n public dimension: string = '';\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n // dimension: props.data.product.result.Dimensions[1].DimensionValue.Value\r\n dimension: props.defaultValue\r\n };\r\n }\r\n public async componentDidMount(): Promise {\r\n const actionInput = new AttributesForSelectedVariantInput(\r\n this.props.product.RecordId,\r\n // @ts-ignore\r\n +this.props.context.actionContext.requestContext.apiSettings.channelId,\r\n this.props.product);\r\n\r\n await getAttributesForSelectedVariant(actionInput, this.props.context.actionContext).then((result) => {\r\n result!.forEach(res => {\r\n if (res.Name === \"Online size imperial\" && res.TextValue) {\r\n this.setState({ dimension: res.TextValue })\r\n }\r\n })\r\n }).catch(error => {\r\n console.log('error', error);\r\n });\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n {this.state.dimension}\r\n );\r\n }\r\n}\r\n\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nconst CartLine: React.FC = (props: ICartLineProps) => {\r\n const { isSalesLine, productUrl, resources } = props;\r\n const { product } = props.data;\r\n\r\n\r\n const destructDimensionStrings = {\r\n sizeString: resources.sizeString,\r\n colorString: resources.colorString,\r\n styleString: resources.styleString,\r\n configString: resources.configString\r\n };\r\n const fallbackImageUrl = getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const productDimensions = CartLineItemFunctions.renderProductDimensions(product, destructDimensionStrings, props);\r\n const productSKU = CartLineItemFunctions.renderProductSKU(props);\r\n const renderDisountLines = CartLineItemFunctions.renderDiscountLines(props);\r\n const onChange = (newValue: number) => {\r\n if (props.quantityOnChange) {\r\n props.quantityOnChange(props.data.cartLine, newValue);\r\n }\r\n };\r\n\r\n const _generateErrorMessage = (): JSX.Element | null => {\r\n if (props.errorMessage) {\r\n return (\r\n
    \r\n \r\n {props.errorMessage}\r\n
    \r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n const _generateQuantityandPrice = (): JSX.Element[] | null => {\r\n const nodes = [];\r\n // if (props.isOutOfStock) {\r\n // const errorMessage = _generateErrorMessage();\r\n\r\n // if (errorMessage) {\r\n // return [errorMessage];\r\n // }\r\n\r\n // return null;\r\n // }\r\n if (props.isQuantityEditable && !props.data.cartLine.IsGiftCardLine) {\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n const eoqQuantity = isB2B ? props.data?.product?.Behavior?.MultipleOfQuantity : 1;\r\n nodes.push(\r\n
    \r\n
    {resources.quantityDisplayString}
    \r\n\r\n {_generateErrorMessage()}\r\n\r\n \r\n
    \r\n );\r\n } else {\r\n nodes.push(\r\n
    \r\n \r\n\r\n {_generateErrorMessage()}\r\n\r\n {props.data.cartLine.Quantity}\r\n
    \r\n );\r\n }\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n\r\n nodes.push(\r\n
    \r\n \r\n {\r\n props.data.cartLine.DiscountAmount && props.data.cartLine.DiscountAmount > 0 &&\r\n <>\r\n {` ${props.resources.discountStringText || 'Discount'} `}\r\n \r\n ||\r\n null\r\n }\r\n
    \r\n );\r\n\r\n return nodes;\r\n };\r\n const isB2B = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits === 'b2b';\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {product.Name}\r\n {productDimensions.length > 0 ?\r\n
    \r\n {productDimensions}\r\n {productSKU}\r\n
    :\r\n ''\r\n }\r\n
    \r\n \r\n
    \r\n {renderDisountLines}\r\n
    \r\n {\r\n _generateQuantityandPrice()\r\n }\r\n {props.data.cartLine.ItemId &&\r\n

    \r\n {resources.salesLineSkuText || 'SKU:'} {props.data.cartLine.ItemId}\r\n

    \r\n }\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default CartLine;","import * as React from 'react';\r\n\r\nimport { Button, format } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\nexport interface IPromoCodeProps extends IComponentProps<{}> {\r\n cart: ICartState | undefined;\r\n promoCodeHeadingText: string;\r\n appliedPromoCodeHeadingText: string;\r\n removePromoAriaLabelFormat: string;\r\n promoPlaceholderText: string;\r\n promoCodeApplyButtonText: string;\r\n collapseTimeOut: number;\r\n removePromoText: string;\r\n invalidPromoCodeErrorText: string;\r\n failedToAddPromoCodeErrorText: string;\r\n duplicatePromoCodeErrorText: string;\r\n failedToRemovePromoCodeErrorText: string;\r\n promoCodeApplyCallback?(): void;\r\n}\r\n\r\ninterface IPromoCodeState {\r\n isCollapseOpen: boolean;\r\n promoCodeInputValue: string;\r\n error: string;\r\n canApply: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * The PromoCode component renders the promocode section.\r\n * @extends {React.PureComponent}\r\n */\r\nclass PromoCode extends React.Component {\r\n\r\n constructor(props: IPromoCodeProps, state: IPromoCodeState) {\r\n super(props);\r\n this.state = {\r\n isCollapseOpen: false,\r\n promoCodeInputValue: '',\r\n error: '',\r\n canApply: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n
    \r\n
    {this.props.promoCodeHeadingText}
    \r\n {this._renderForm(this.props.promoPlaceholderText, this.props.promoCodeApplyButtonText, this.props.cart)}\r\n

    {this.state.error}

    \r\n {this._renderAppliedPromoCode(this.props)}\r\n
    \r\n );\r\n }\r\n\r\n private _onInputChange = (e: React.ChangeEvent) => {\r\n const error = e.target.value === '' ? '' : this.state.error;\r\n this.setState({\r\n promoCodeInputValue: e.target.value, error: error,\r\n canApply: e.target.value ? true : false\r\n });\r\n }\r\n\r\n private _applyPromotion = (cartState: ICartState | undefined) => {\r\n if (!cartState || !cartState.cart) {\r\n return;\r\n }\r\n const appliedPromo = this.state.promoCodeInputValue;\r\n\r\n cartState.addPromoCode({ promoCode: appliedPromo })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n // show success text\r\n this.setState({ promoCodeInputValue: '', error: '', canApply: false});\r\n } else if (result.substatus === 'ALREADYADDED') {\r\n this.setState({ error: this.props.duplicatePromoCodeErrorText });\r\n } else {\r\n this.setState({ error: this.props.invalidPromoCodeErrorText });\r\n }\r\n })\r\n .catch(error => {\r\n this.setState({ error: this.props.failedToAddPromoCodeErrorText });\r\n });\r\n }\r\n\r\n private _renderForm = (promoPlaceholderText: string, promoCodeApplyButtonText: string, cartState: ICartState | undefined) => {\r\n const _onSubmit = (event: React.FormEvent) => {event.preventDefault(); this._applyPromotion(cartState);};\r\n const _applyPromotion = (event: React.MouseEvent) => {this._applyPromotion(cartState);};\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n {promoCodeApplyButtonText}\r\n \r\n
    \r\n
    \r\n );\r\n }\r\n\r\n private _removePromotion = (cartState: ICartState | undefined, event: React.MouseEvent) => {\r\n if (!cartState) {\r\n return;\r\n }\r\n const code = event.currentTarget.getAttribute('data-value') || '';\r\n cartState.removePromoCodes({\r\n promoCodes: [\r\n code\r\n ]\r\n })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n this.setState({ error: ''});\r\n }\r\n })\r\n .catch(() => {\r\n this.setState({ error: this.props.failedToRemovePromoCodeErrorText});\r\n });\r\n\r\n }\r\n private _calculateDiscount = (code: string, cartState: ICartState | undefined) => {\r\n if (!cartState || !cartState.cart || !cartState.cart.CartLines || cartState.cart.CartLines.length === 0 || !code) {\r\n return;\r\n }\r\n let discountAmount = 0;\r\n for (const line of cartState.cart.CartLines) {\r\n if (line.DiscountLines) {\r\n for (const discountLine of line.DiscountLines) {\r\n if (discountLine.DiscountCode === code) {\r\n discountAmount += discountLine.DiscountCost!;\r\n }\r\n }\r\n }\r\n }\r\n return discountAmount * -1;\r\n }\r\n\r\n private _renderAppliedPromoCode = (props: IPromoCodeProps) => {\r\n if (!props.cart || !props.cart.cart || !props.cart.cart.Coupons || !(props.cart.cart.Coupons.length > 0)) {\r\n return;\r\n }\r\n\r\n const _removePromotion = (event: React.MouseEvent) => {this._removePromotion(props.cart, event);};\r\n\r\n return (\r\n <>\r\n
    \r\n
    {this.props.appliedPromoCodeHeadingText}
    \r\n \r\n
    \r\n {\r\n props.cart.cart.Coupons.map((coupon: Coupon) => {\r\n const ariaLabel = props.removePromoAriaLabelFormat ? format(props.removePromoAriaLabelFormat, props.removePromoText, coupon.Code) : '';\r\n\r\n return (\r\n
    \r\n
    \r\n {coupon.Code} (\r\n )\r\n
    \r\n \r\n {props.removePromoText}\r\n \r\n
    \r\n );\r\n })\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default PromoCode;","import { getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { format } from '@msdyn365-commerce-modules/utilities';\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport { IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport React from 'react';\r\nimport PriceComponent from '../../../../components/price-component';\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}\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 typeName,\r\n id\r\n}) => {\r\n const product = data.product;\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n let imageOrientation: string = '';\r\n if (product.AttributeValues!.length > 0) {\r\n product.AttributeValues!.map(property => {\r\n if (property.Name === 'Image Orientation') {\r\n imageOrientation = property.TextValue!;\r\n }\r\n });\r\n }\r\n const productUrl = getProductPageUrlSync(product.Name || '', product.RecordId, context && context.actionContext, undefined);\r\n const productImageSettings = imageOrientation === 'Landscape' ? getLandscapeImageSettings(imageSettings) : imageSettings;\r\n\r\n // Construct telemetry attribute to render\r\n const attribute = context\r\n && context.telemetry\r\n && context.telemetry.setTelemetryAttribute\r\n && context.telemetry.setTelemetryAttribute(product.RecordId.toString(), {\r\n pid: product.RecordId,\r\n pname: product.Name,\r\n mname: id\r\n }\r\n );\r\n return (\r\n \r\n
    \r\n {renderProductPlacementImage(productImageSettings, context.request.gridSettings, product.PrimaryImageUrl, product.Name)}\r\n
    \r\n
    \r\n

    {product.Name}

    \r\n {renderPrice(context, typeName, id, product.BasePrice, product.Price, savingsText, freePriceText, originalPriceText, currentPriceText)}\r\n {renderDescription(product.Description)}\r\n {renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nfunction renderLabel(name: string = '', price: string = '', rating?: number, ratingAriaLabel?: string): string {\r\n let ratingLabel = '';\r\n\r\n if (rating) {\r\n const roundedRating = rating.toFixed(2);\r\n ratingLabel = format(ratingAriaLabel || '', roundedRating, '5');\r\n }\r\n\r\n return (`${name} ${price} ${ratingLabel}`);\r\n}\r\n\r\nfunction renderDescription(description?: string): JSX.Element | null {\r\n return

    {description}

    ;\r\n}\r\n\r\nfunction renderRating(context: ICoreContext, typeName: string, id: string, avgRating?: number, totalRatings?: number, ariaLabel?: string): JSX.Element | null {\r\n if (!avgRating) {\r\n return null;\r\n }\r\n\r\n const numRatings = totalRatings && totalRatings.toString() || undefined;\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderPrice(\r\n context: ICoreContext,\r\n typeName: string,\r\n id: string,\r\n basePrice?: number,\r\n adjustedPrice?: number,\r\n savingsText?: string,\r\n freePriceText?: string,\r\n originalPriceText?: string,\r\n currentPriceText?: string): JSX.Element | null {\r\n const price: ProductPrice = {\r\n BasePrice: basePrice,\r\n AdjustedPrice: adjustedPrice,\r\n CustomerContextualPrice: adjustedPrice\r\n };\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction renderProductPlacementImage(imageSettings?: IImageSettings, gridSettings?: IGridSettings, imageUrl?: string, altText: string = ''): JSX.Element | null {\r\n if (!imageUrl || !gridSettings || !imageSettings) {\r\n return null;\r\n }\r\n const img: IImageData = {\r\n src: imageUrl,\r\n altText: altText\r\n };\r\n const imageProps = {\r\n gridSettings: gridSettings,\r\n imageSettings: imageSettings\r\n };\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction getLandscapeImageSettings(cmsImageSettings?: IImageSettings): IImageSettings {\r\n // tslint:disable-next-line: no-unnecessary-local-variable\r\n const landscapeImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: 'w=390&h=292&q=80&m=6&f=jpg', w: 390, h: 292 },\r\n sm: { q: 'w=528&h=396&q=80&m=6&f=jpg', w: 528, h: 396 },\r\n md: { q: 'w=640&h=479&q=80&m=6&f=jpg', w: 640, h: 479 },\r\n lg: { q: 'w=584&h=437&q=80&m=6&f=jpg', w: 584, h: 437 },\r\n xl: { q: 'w=702&h=526&q=80&m=6&f=jpg', w: 702, h: 526 }\r\n },\r\n disableLazyLoad: cmsImageSettings && cmsImageSettings.disableLazyLoad,\r\n lazyload: cmsImageSettings && cmsImageSettings.lazyload\r\n };\r\n\r\n return landscapeImageSettings;\r\n}\r\n\r\n// @ts-ignore\r\nexport const ProductComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'Product',\r\n { component: ProductCard }\r\n);","import { IProductCollectionViewProps } from '@msdyn365-commerce-modules/product-collection';\r\nimport { INodeProps, Module, Node, NodeTag } from '@msdyn365-commerce-modules/utilities';\r\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport {ProductComponent} from './components/product-collection-component';\r\n\r\nconst ProductCollectionView: React.FC = props => {\r\n const { heading, ProductCollectionContainer, products, SingleSlideCarouselComponentProps, GridComponentProps, isCarousel } = props;\r\n if (products) {\r\n return (\r\n \r\n {heading}\r\n {\r\n isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps,props.config.productCollection.products,props) :\r\n _renderGrid(GridComponentProps, props.config.productCollection.products,props)\r\n }\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst _renderCarousel = (carouselContainer: INodeProps, items: ProductSearchResult[],PropDetails: React.PropsWithChildren): JSX.Element => {\r\n const isMobile = PropDetails.context && PropDetails.context.request && PropDetails.context.request.device.Type === 'Mobile'\r\n let mobileCarouselContainer = {\r\n tag: 'ul' as NodeTag,\r\n className: 'ms-product-collection__custom-carousel'\r\n }\r\n return (\r\n \r\n {items && items.map((item,index)=>_renderProduct(item,PropDetails,index))}\r\n \r\n );\r\n};\r\n\r\nconst _renderGrid = (gridContainer: INodeProps, items: ProductSearchResult[],PropDetails: React.PropsWithChildren): JSX.Element => {\r\n return (\r\n \r\n {items && items.map((item,index)=>_renderProduct(item,PropDetails,index))}\r\n \r\n );\r\n};\r\n\r\nconst _renderProduct = (product: ProductSearchResult,PropDetails: React.PropsWithChildren,index: number): JSX.Element => {\r\n const liClass = 'ms-product-collection__item';\r\n const orientationClass = getImageOrientation(product) === 'Landscape'? 'product-placement__item-limage' : 'product-placement__item-pimage';\r\n return (\r\n
  • \r\n \r\n
  • \r\n );\r\n};\r\n\r\nfunction getImageOrientation(product: ProductSearchResult): string {\r\n let imageOrientation: string ='';\r\n if (product.AttributeValues!.length > 0) {\r\n product.AttributeValues!.map(property => {\r\n if (property.Name?.toLowerCase() === 'image orientation') {\r\n imageOrientation = property.TextValue!;\r\n }\r\n });\r\n }\r\n return imageOrientation;\r\n}\r\n\r\nexport default ProductCollectionView;","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent, RatingComponent } from '@msdyn365-commerce/components';\nimport {\n IComponent,\n IComponentProps,\n ICoreContext,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n IRequestContext\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * IActiveProductProps interface.\n */\nexport interface IActiveProductProps extends IComponentProps<{ product?: ProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n}\n\n/**\n * IActiveProduct interface.\n */\nexport interface IActiveProduct extends IComponent {}\n\n/**\n * RenderDescription function.\n * @param description - Product description string.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderDescription(description?: string): JSX.Element | null {\n return

    {description}

    ;\n}\n\n/**\n * GetRatingAriaLabel function.\n * @param rating - Product rating number.\n * @param ratingAriaLabel - Product rating aria label.\n * @returns - Returns string.\n */\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n const numberTwo: number = 2;\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(numberTwo);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\n/**\n * RenderRating function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param ratingId - The rating id.\n * @param avgRating - The average rating.\n * @param totalRatings - The total ratings.\n * @param ariaLabel - The rating aria label.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderRating(\n context: ICoreContext,\n typeName: string,\n ratingId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() ?? undefined;\n const ratingAriaLabel = getRatingAriaLabel(avgRating, ariaLabel);\n\n return (\n \n );\n}\n\n/**\n * RenderPrice function.\n * @param context - The core context.\n * @param typeName - The type name of the module.\n * @param productId - The product id.\n * @param basePrice - The base price of the product.\n * @param adjustedPrice - The adjusted price of the product.\n * @param savingsText - The savings text of the product.\n * @param freePriceText - The free price text.\n * @param originalPriceText - The original price text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n productId: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string\n): JSX.Element | null {\n const price: ProductPrice = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n \n );\n}\n\n/**\n * RenderProductPlacementImage function.\n * @param requestContext - RequestContext.\n * @param imageSettings - The product image settings.\n * @param gridSettings - The viewport gird settings.\n * @param imageUrl - The product image url.\n * @param altText - The product image alt text.\n * @returns - Returns JSX.Element | null.\n */\nfunction renderProductPlacementImage(\n requestContext: IRequestContext,\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const imgData: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return ;\n}\n\n/**\n * ActiveProduct constant.\n * @param props - The active product props.\n * @param props.data - The product search result data.\n * @param props.context - The core context.\n * @param props.imageSettings - The prodcut image settings.\n * @param props.savingsText - The product savings text.\n * @param props.freePriceText - The free price text.\n * @param props.originalPriceText - The original price text.\n * @param props.ratingAriaLabel - The product rating aria label.\n * @param props.typeName - The type name of the module.\n * @param props.id - The id of the product.\n * @returns - Returns JSX.Element | null.\n */\nexport const ActiveProductComponent: React.FC = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n ratingAriaLabel,\n typeName,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Do not need naming convention check for library prameters\n id\n}) => {\n const product = data.product;\n if (!product) {\n return null;\n }\n\n return (\n <>\n
    \n
    \n {renderProductPlacementImage(\n context.actionContext.requestContext,\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name\n )}\n
    \n
    \n

    {product.Name}

    \n {renderPrice(context, typeName, id, product.BasePrice, product.Price, savingsText, freePriceText, originalPriceText)}\n {renderDescription(product.Description)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel)}\n
    \n
    \n \n );\n};\n\nexport default ActiveProductComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/**\n * ILinksData: Interface for\n * Additional content.\n */\ninterface ILinksData {\n linkText?: string;\n linkUrl: Msdyn365.ILinkData;\n ariaLabel?: string;\n isOpenInNewTab?: boolean;\n}\n\n/**\n * IAdditionalContentData: Interface for\n * Active content.\n */\ninterface IAdditionalContentData {\n heading?: string;\n subtext?: string;\n links?: ILinksData[];\n}\n\n/**\n * IActiveImageAdditionalContentProps: Interface for\n * Active Image Additional Content Component props.\n */\nexport interface IActiveImageAdditionalContentProps {\n requestContext: Msdyn365.IRequestContext;\n additionalContent: IAdditionalContentData | undefined;\n handleAdditionalTextChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalParagraphChange(event: Msdyn365.ContentEditableEvent): void;\n handleAdditionalLinkTextChange(linkIndex: number, event: Msdyn365.ContentEditableEvent): void;\n}\n\n/**\n * IActiveImageAdditionalContentViewProps: Interface for\n * Active Image Additional Content view props.\n */\nexport interface IActiveImageAdditionalContentViewProps {\n additionalContentNode: INodeProps;\n heading: React.ReactNode;\n text: React.ReactNode;\n links: React.ReactNode;\n additionalContentContainer: INodeProps;\n additionalContentItemLinks: INodeProps;\n}\n\n/**\n * Renders additional content heading.\n * @param additionalContentHeading - Additional content heading.\n * @param props - Active Image Additional content component props.\n * @returns Heading Node.\n */\nconst renderHeading = (additionalContentHeading: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param additionalContentParagraphText - Additional content paragraph text.\n * @param props - Active Image Additional content component props.\n * @returns Paragraph Node.\n */\nconst renderParagraph = (additionalContentParagraphText: string, props: IActiveImageAdditionalContentProps) => {\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalTextChange(event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Renders additional content heading.\n * @param ctaLink - Additional content link.\n * @param props - Active Image Additional content component props.\n * @param linkIndex - Additional content link index.\n * @returns Link Node.\n */\nconst renderLinks = (ctaLink: ILinksData, props: IActiveImageAdditionalContentProps, linkIndex: number) => {\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: ctaLink.ariaLabel,\n className: 'msc-active-image__details__additional-content__cta__links',\n linkText: ctaLink.linkText,\n linkUrl: ctaLink.linkUrl.destinationUrl,\n openInNewTab: ctaLink.isOpenInNewTab,\n role: 'button'\n };\n const requestContext = props.requestContext;\n return (\n {\n props.handleAdditionalLinkTextChange(linkIndex, event);\n },\n requestContext\n }}\n />\n );\n};\n\n/**\n * Create node for each additonal content item.\n * @param item - Active Image additonal content item props.\n * @param props - Active Image Additional content component props.\n * @returns IActiveImageAdditionalContentItemViewProps.\n */\nconst assembleNode = (item: IAdditionalContentData, props: IActiveImageAdditionalContentProps): IActiveImageAdditionalContentViewProps => {\n const headingNode = item.heading && renderHeading(item.heading, props);\n const paragraphNode = item.subtext && renderParagraph(item.subtext, props);\n const linksNode = item.links?.map((ctaLink: ILinksData, index: number) => {\n return renderLinks(ctaLink, props, index);\n });\n\n return {\n additionalContentNode: { className: 'msc-active-image__details__additional-content' },\n heading: headingNode,\n text: paragraphNode,\n links: linksNode,\n additionalContentContainer: { className: 'msc-active-image__details__additional-content__container' },\n additionalContentItemLinks: { className: 'msc-active-image__details__additional__content__cta' }\n };\n};\n\n/**\n * ActiveImageAdditionalContent component.\n * @param props - Active Image Additional content component props.\n * @returns Active Image Additional content view props.\n */\nexport const activeImageAdditionalContent = (\n props: IActiveImageAdditionalContentProps\n): IActiveImageAdditionalContentViewProps | undefined => {\n const { additionalContent } = props;\n if (!additionalContent) {\n return undefined;\n }\n\n return assembleNode(additionalContent, props);\n};\n\nexport default activeImageAdditionalContent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IImageData, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport React from 'react';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IRgbColor\n * @description - The IRgbColor interface contract.\n */\nexport interface IRgbColor {\n rValue: number;\n gValue: number;\n bValue: number;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IArea {\n areaId: string;\n coords: number[];\n href?: string;\n center?: number[];\n primaryImageUrl?: string;\n productUrl: string;\n productSearchResult?: ProductSearchResult;\n}\n\n/**\n * @interface IArea\n * @description - The IArea interface contract.\n */\nexport interface IAreaMap {\n name: string;\n areas: IArea[];\n}\n\n/**\n * @enum CanvasCalculations\n * @description - The canvas calculations enum.\n */\nexport enum CanvasCalculations {\n defaultWidth = 0,\n defaultHeight = 0,\n defaultPositionX = 0,\n defaultPositionY = 0,\n defaultScale = 1,\n halfDivisor = 2,\n doubleMultiplier = 2,\n buttonHeight = 30,\n buttonPadding = 30,\n paddingAdjustment = 3,\n expandAnimationStartWidth = 10,\n expandAnimationEndWidth = 40,\n collapseAnimationStartWidth = 40,\n collapseAnimationEndWidth = 8,\n expandRadius = 12,\n collapseRadius = 8,\n rotation = 1.57,\n startAngle = 0,\n endAngle = 7,\n clearMargin = 50,\n clearHeight = 100,\n clearWidth = 100,\n textFadeInStartValue = 0,\n textFadeOutStartValue = 0.5,\n textFadeInterval = 0.01\n}\n\n/**\n * @enum CanvasStyles\n * @description - The canvas styles enum.\n */\nexport enum CanvasStyles {\n color = '#FFFFFF',\n buttonTextClor = '#000000'\n}\n\n/**\n * @enum\n * @description - The canvas styles enum.\n */\nexport interface IImageMapperResources {\n buttonText?: string;\n altText?: string;\n}\n\n/**\n * @interface IImageMapperProps\n * @description - The IImageMapperProps interface contract.\n */\nexport interface IImageMapperProps {\n imageData: IImageData;\n areaMap: IAreaMap;\n viewPort: string;\n requestContext: IRequestContext;\n color?: string;\n buttonTextClor?: string;\n width?: number;\n imgWidth?: number;\n activeImageRefs: React.RefObject;\n imageMapperResources?: IImageMapperResources;\n onLoad?(): void;\n onClick?(area: IArea, index: number, event: AreaEvent): void;\n onFocus?(area: IArea, index: number, event: AreaEvent): void;\n onMouseEnter?(area: IArea, index: number, event: AreaEvent): void;\n onMouseLeave?(area: IArea, index: number, event: AreaEvent): void;\n}\n\n/**\n * ImageMapper.\n */\nexport class ImageMapper extends React.Component {\n private readonly _backgroundImage: React.RefObject;\n\n private readonly _container: React.RefObject;\n\n private readonly _canvas: React.RefObject;\n\n private _isDesktopViewPort: boolean = false;\n\n private _context: CanvasRenderingContext2D | null | undefined = null;\n\n public constructor(props: IImageMapperProps) {\n super(props);\n this._backgroundImage = React.createRef();\n this._container = React.createRef();\n this._canvas = React.createRef();\n }\n\n /**\n * ComponentDidMount method.\n */\n public componentDidMount(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n this.renderAreas();\n this._context = null;\n }\n\n /**\n * ComponentDidUpdate method.\n */\n public componentDidUpdate(): void {\n const { viewPort } = this.props;\n this.initCanvas();\n this._isDesktopViewPort = viewPort === 'lg' || viewPort === 'xl';\n }\n\n /**\n * ShouldComponentUpdate method.\n * @param nextProps - Next props.\n * @returns Returns boolean.\n */\n public shouldComponentUpdate(nextProps: IImageMapperProps): boolean {\n let shouldRender = false;\n if (nextProps !== this.props) {\n shouldRender = true;\n }\n return shouldRender;\n }\n\n /**\n * GetActiveImageWidth method - Gets the active image width.\n * @returns Returns number | undefined.\n */\n public getActiveImageWidth = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return undefined;\n };\n\n /**\n * GetActiveImageHeight method - Gets the active image height.\n * @returns Returns number | undefined.\n */\n public getActiveImageHeight = (): number | undefined => {\n if (MsDyn365.isBrowser) {\n const activeImageReferenceValue = this.props.activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return undefined;\n };\n\n /**\n * ConvertHexToRgb method - This method takes color in HEX format and returns IRgbColor color object.\n * @param hexColor -The color hex value.\n * @returns -Returns IRgbColor object.\n */\n public convertHexToRgb = (hexColor: string): IRgbColor => {\n // RegEx used to execute the conversion of the hex color to rgb value.\n const regEx = new RegExp('^#?([a-f\\\\d]{2})([a-f\\\\d]{2})([a-f\\\\d]{2})$', 'u');\n\n // RegEx.exec method executes a search for a match in a specified string. Returns a result array, or null.\n const result = regEx.exec(hexColor);\n const defaultValue = 0;\n return result\n ? {\n rValue: Number.parseInt(result[1], 16),\n gValue: Number.parseInt(result[2], 16),\n bValue: Number.parseInt(result[3], 16)\n }\n : {\n rValue: defaultValue,\n gValue: defaultValue,\n bValue: defaultValue\n };\n };\n\n /**\n * ApplyFadingTransition method - Applys fading transition to button text.\n * @param text -The button text.\n * @param coords -The coordinates.\n * @param rgbColor -The RGB color object.\n * @param alpha -The alpha value of the button text.\n */\n public applyFadingTransition = (text: string, coords: number[], rgbColor: IRgbColor, alpha: number): void => {\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n context.fillStyle = `rgba(${rgbColor.rValue}, ${rgbColor.gValue}, ${rgbColor.bValue}, ${alpha} )`;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * Draw button method - Draws button and contains fixed hight, padding values.\n * @param text -The button text.\n * @param coords -The coordinates.\n */\n public drawButton = (text: string, coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const halfDivisor: number = CanvasCalculations.halfDivisor;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (context && this._isDesktopViewPort) {\n const buttonHeight = CanvasCalculations.buttonHeight;\n const buttonPadding = CanvasCalculations.buttonPadding;\n const paddingAdjustment = CanvasCalculations.paddingAdjustment;\n const buttonWidth = context.measureText(text).width + buttonPadding;\n const buttonPositionX = coords[0] - buttonWidth / halfDivisor;\n const buttonPositionY = coords[1] - buttonHeight / halfDivisor;\n const arcsize = buttonHeight / halfDivisor;\n\n context.beginPath();\n context.moveTo(buttonPositionX + arcsize, buttonPositionY);\n context.lineTo(buttonPositionX + buttonWidth - arcsize, buttonPositionY);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY,\n buttonPositionX + buttonWidth,\n buttonPositionY + arcsize,\n arcsize\n );\n context.lineTo(buttonPositionX + buttonWidth, buttonPositionY + buttonHeight - arcsize);\n context.arcTo(\n buttonPositionX + buttonWidth,\n buttonPositionY + buttonHeight,\n buttonPositionX + buttonWidth - arcsize,\n buttonPositionY + buttonHeight,\n arcsize\n );\n context.lineTo(buttonPositionX + arcsize, buttonPositionY + buttonHeight);\n context.arcTo(buttonPositionX, buttonPositionY + buttonHeight, buttonPositionX, buttonPositionY - arcsize, arcsize);\n context.lineTo(buttonPositionX, buttonPositionY + arcsize);\n context.arcTo(buttonPositionX, buttonPositionY, buttonPositionX + arcsize, buttonPositionY, arcsize);\n context.lineTo(buttonPositionX + arcsize, buttonPositionY);\n context.stroke();\n context.closePath();\n context.fillStyle = color;\n context.fill();\n context.fillStyle = buttonTextClor;\n if (MsDyn365.isBrowser && document.body.parentElement && document.body.parentElement.getAttribute('dir') === 'rtl') {\n context.fillText(text, coords[0] + buttonWidth / halfDivisor - buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n } else {\n context.fillText(text, coords[0] - buttonWidth / halfDivisor + buttonPadding / halfDivisor, coords[1] + paddingAdjustment);\n }\n }\n };\n\n /**\n * ExpandAnimation method - Shows expand animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public expandAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.expandAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.expandAnimationEndWidth;\n const radius = CanvasCalculations.expandRadius;\n const rotation = CanvasCalculations.rotation;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeInValue = CanvasCalculations.textFadeInStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Reders expand animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n context.fillStyle = color;\n if (buttonText) {\n if (animationStartWidth < animationEndWidth) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeInValue);\n textFadeInValue += CanvasCalculations.textFadeInterval;\n animationStartWidth++;\n } else {\n this.drawButton(buttonText, [pointPositionX, pointPositionY]);\n }\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * CollapseAnimation method - Shows collapse animation and contains fixed values to draw the circle and ellipse shapes.\n * @param coords -Coordinates.\n */\n public collapseAnimation = (coords: number[]): void => {\n const { color = CanvasStyles.color, buttonTextClor = CanvasStyles.buttonTextClor } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText;\n let animationStartWidth = CanvasCalculations.collapseAnimationStartWidth;\n const pointPositionX = coords[0];\n const pointPositionY = coords[1];\n const animationEndWidth = CanvasCalculations.collapseAnimationEndWidth;\n const rotation = CanvasCalculations.rotation;\n const clearMargin = CanvasCalculations.clearMargin;\n const clearHeight = CanvasCalculations.clearHeight;\n const clearWidth = CanvasCalculations.clearWidth;\n const radius = CanvasCalculations.collapseRadius;\n const startAngle = CanvasCalculations.startAngle;\n const endAngle = CanvasCalculations.endAngle;\n let textFadeOutValue = CanvasCalculations.textFadeOutStartValue;\n const buttonTextClorInRgb = this.convertHexToRgb(buttonTextClor.toLocaleLowerCase());\n\n /**\n * Animate method - Renders collapse animation.\n */\n const animate = () => {\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.beginPath();\n context.clearRect(pointPositionX - clearMargin, pointPositionY - clearMargin, clearWidth, clearHeight);\n context.ellipse(pointPositionX, pointPositionY, radius, animationStartWidth, rotation, startAngle, endAngle);\n context.fillStyle = color;\n context.fill();\n if (animationEndWidth < animationStartWidth && buttonText) {\n requestAnimationFrame(animate);\n this.applyFadingTransition(buttonText, coords, buttonTextClorInRgb, textFadeOutValue);\n textFadeOutValue -= CanvasCalculations.textFadeInterval;\n animationStartWidth--;\n }\n };\n\n if (this._isDesktopViewPort) {\n animate();\n }\n };\n\n /**\n * DrawCircle method - Renders active points.\n * @param coords -Coordinates.\n */\n public drawCircle = (coords: number[]): void => {\n const { color = CanvasStyles.color, viewPort } = this.props;\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n const startAngle: number = CanvasCalculations.startAngle;\n const context = this._canvas.current?.getContext('2d') ?? this._context;\n const radius = viewPort === 'xs' || viewPort === 'sm' ? coords[2] * doubleMultiplier : coords[2];\n if (!context) {\n return;\n }\n context.fillStyle = color;\n context.beginPath();\n context.strokeStyle = color;\n context.arc(coords[0], coords[1], radius, startAngle, Math.PI * doubleMultiplier);\n context.closePath();\n context.stroke();\n context.fill();\n };\n\n /**\n * ScaleCoords method - To scale the active point coordinates based on the window size.\n * @param coords -Coordinates.\n * @returns -Returns number[].\n */\n public scaleCoords = (coords: number[]): number[] => {\n const { imgWidth } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultScale: number = CanvasCalculations.defaultScale;\n\n // Calculate scale based on current 'width' and the original 'imgWidth'\n const width = this.getActiveImageWidth();\n const scale = width && imgWidth && imgWidth > defaultWidth ? width / imgWidth : defaultScale;\n return coords.map(coord => coord * scale);\n };\n\n /**\n * RenderPrefilledAreas method - To render active points in case of events.\n */\n public renderPrefilledAreas = (): void => {\n const { areaMap } = this.props;\n areaMap.areas.map(area => {\n this.drawCircle(this.scaleCoords(area.coords));\n return null;\n });\n };\n\n /**\n * ComputeCenter method - To re-calculate the center of active point based on window size.\n * @param area -IArea.\n * @returns -Returns number[].\n */\n public computeCenter = (area: IArea): number[] => {\n const scaledCoords = this.scaleCoords(area.coords);\n return [scaledCoords[0], scaledCoords[1]];\n };\n\n /**\n * HandleHoverOn method - To handle mouse hover on event.\n * @param area -IArea.\n */\n public handleHoverOn = (area: IArea): void => {\n if (area.center && this._canvas.current) {\n this.drawCircle(this.scaleCoords(area.coords));\n this.expandAnimation(area.center);\n }\n };\n\n /**\n * HandleHoverOff method - To handle mouse hover off event.\n * @param area -IArea.\n */\n public handleHoverOff = (area: IArea): void => {\n if (this._canvas.current) {\n const context = this._canvas.current.getContext('2d') ?? this._context;\n const canvasPositionX: number = CanvasCalculations.defaultPositionX;\n const canvasPositionY: number = CanvasCalculations.defaultPositionY;\n\n if (!context) {\n return;\n }\n context.clearRect(canvasPositionX, canvasPositionY, this._canvas.current.width, this._canvas.current.height);\n this.renderPrefilledAreas();\n if (area.center) {\n this.collapseAnimation(area.center);\n }\n }\n };\n\n /**\n * Click method - Mouse click event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public click = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onClick } = this.props;\n if (onClick) {\n event.preventDefault();\n onClick(area, index, event);\n }\n };\n\n /**\n * HoverOn method - Mouse hover on event.\n * @param area -IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOn = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseEnter } = this.props;\n this.handleHoverOn(area);\n if (onMouseEnter) {\n onMouseEnter(area, index, event);\n }\n };\n\n /**\n * HoverOff method - Mouse hover off event.\n * @param area - IArea.\n * @param index - Number.\n * @returns - Void.\n */\n public hoverOff = (area: IArea, index: number) => (event: AreaEvent): void => {\n const { onMouseLeave } = this.props;\n\n this.handleHoverOff(area);\n\n if (onMouseLeave) {\n onMouseLeave(area, index, event);\n }\n };\n\n /**\n * RenderAreas method - Renders active points at given coordinates.\n * @returns -Returns JSX.Element[].\n */\n public renderAreas = (): JSX.Element[] => {\n const { areaMap, viewPort } = this.props;\n const buttonText = this.props.imageMapperResources?.buttonText ? this.props.imageMapperResources.buttonText : '';\n const altText = this.props.imageMapperResources?.altText ? this.props.imageMapperResources.altText : '';\n const doubleMultiplier: number = CanvasCalculations.doubleMultiplier;\n\n return areaMap.areas.map((area, index) => {\n const scaledCoords = this.scaleCoords(area.coords);\n const xsRadius = area.coords[2] * doubleMultiplier;\n if (viewPort === 'xs') {\n scaledCoords[2] = xsRadius;\n }\n const center = this.computeCenter(area);\n const extendedArea = { ...area, scaledCoords, center };\n const areaKey = `area-${index}`;\n const altTextWithProductName = altText\n .replace('{buttonText}', buttonText ? buttonText : '')\n .replace('{productName}', area.productSearchResult?.Name ? area.productSearchResult.Name : '');\n return (\n \n );\n });\n };\n\n /**\n * InitCanvas method - To render the canvas.\n */\n public initCanvas = (): void => {\n if (!this._canvas.current || !this._backgroundImage.current || !this._container.current) {\n return;\n }\n\n const { color, onLoad } = this.props;\n const defaultWidth: number = CanvasCalculations.defaultWidth;\n const defaultHeight: number = CanvasCalculations.defaultHeight;\n\n const canvasWidth = this.getActiveImageWidth() ?? defaultWidth;\n const canvasHeight = this.getActiveImageHeight() ?? defaultHeight;\n\n this._canvas.current.width = canvasWidth;\n this._canvas.current.height = canvasHeight;\n this._container.current.style.width = `${canvasWidth}px`;\n\n const context = this._canvas.current.getContext('2d') ?? this._context;\n if (!context) {\n return;\n }\n context.fillStyle = color ?? '';\n\n if (onLoad) {\n onLoad();\n }\n\n this.renderPrefilledAreas();\n };\n\n /**\n * Render method - To render the image mapper component with active image, canvas and active points.\n * @returns -Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const { imageData, areaMap, requestContext } = this.props;\n\n return (\n
    \n \n \n \n {this.renderAreas()}\n \n
    \n );\n }\n}\n\nexport default ImageMapper;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as MsDyn365 from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n activeImageAdditionalContent,\n ActiveProductComponent,\n IActiveImageAdditionalContentViewProps,\n IArea,\n IAreaMap,\n IImageMapperProps,\n ImageMapper\n} from '../active-image-utilities';\nimport { IActiveImageData } from './active-image.data';\nimport { IActiveImageProps } from './active-image.props.autogenerated';\n\n/**\n * @type AreaEvent for active points\n */\ntype AreaEvent = Event | React.MouseEvent | React.FocusEvent;\n\n/**\n * @interface IActiveImageViewProps\n * @classdesc - The IActiveImageViewProps interface contract.\n */\nexport interface IActiveImageViewProps extends IActiveImageProps<{}>, IImageMapperProps {\n activePointContainer: IModuleProps;\n activePointDetailsContainer: INodeProps;\n imageMapper: React.ReactNode;\n overlay: React.ReactNode;\n productCard: React.ReactNode;\n title?: React.ReactNode;\n text?: React.ReactNode;\n links?: React.ReactNode;\n detailsContainer?: INodeProps;\n detailsContainerCta?: INodeProps;\n additionalContent?: IActiveImageAdditionalContentViewProps;\n productCardleftPosition: number;\n productCardtopPosition: number;\n handleAdditionalText?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalParagraph?(event: MsDyn365.ContentEditableEvent): void;\n handleAdditionalLinkText?(event: MsDyn365.ContentEditableEvent): void;\n}\n\n/**\n * @interface IActiveImageLinksData\n * @classdesc - The IActiveImageLinksData interface contract.\n */\nexport interface IActiveImageLinksData {\n linkText?: string;\n linkUrl: MsDyn365.ILinkData;\n ariaLabel?: string;\n willOpenInNewTab?: boolean;\n}\n\n/**\n * @interface IActiveImageState\n * @classdesc - The IActiveImageState interface contract.\n */\ninterface IActiveImageState {\n clientWidth: number;\n area: IArea | null;\n viewport: string;\n overlayClass: string;\n}\n\n/**\n * @enum ActiveImageConstants\n * @description - The active image constants enum.\n */\nexport enum ActiveImageConstants {\n timeoutInterval = 200,\n enterKey = 'Enter',\n escKey = 'Escape'\n}\n\n/**\n *\n * ActiveImage class.\n * @extends {React.PureComponent & IImageMapperProps, IActiveImageState>}\n */\nexport class ActiveImage extends React.PureComponent & IImageMapperProps, IActiveImageState> {\n private readonly _telemetryContent: ITelemetryContent;\n\n private _isDesktopViewPort: boolean;\n\n private readonly _defaultProductCardWidth: number = 315;\n\n private readonly _defaultProdutCardHight: number = 490;\n\n private readonly _activePoints: IArea[] = [];\n\n private readonly _activeImageRefs: React.RefObject;\n\n private readonly _activeImageClass: string;\n\n private readonly _productCardDivRef: React.RefObject;\n\n public constructor(props: IActiveImageProps & IImageMapperProps) {\n super(props);\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this._activeImageClass = `msc-active-image-${this.getActiveImageId()}`;\n this.state = {\n clientWidth: 0,\n area: null,\n viewport,\n overlayClass: ''\n };\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n this._activeImageRefs = React.createRef();\n this._productCardDivRef = React.createRef();\n }\n\n public componentDidMount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.addEventListener('resize', this.updateClientWidth);\n document.addEventListener('keydown', this.keyDown, false);\n document.addEventListener('mousedown', this._handleOutsideClick);\n }\n setTimeout(() => {\n this.updateClientWidth();\n }, ActiveImageConstants.timeoutInterval);\n\n if (MsDyn365.msdyn365Commerce.isBrowser && this._activeImageRefs.current) {\n const images: HTMLCollectionOf = this._activeImageRefs.current.getElementsByClassName(\n 'msc-thumbnail_image msc-active-image-img'\n );\n if (ArrayExtensions.hasElements(Array.from(images))) {\n images[0].removeAttribute('usemap');\n }\n }\n }\n\n /**\n * AddActivePoints method - To handle add Active Points.\n * @param area - IArea.\n * @param product - ProductSearchResult.\n * @param coords - Coords.\n * @param productUrl - String.\n */\n public addActivePoints = (area: IArea | undefined, product: ProductSearchResult, coords: number[], productUrl: string): void => {\n if (!area) {\n this._activePoints.push({\n areaId: product.RecordId.toString(),\n coords,\n primaryImageUrl: product.PrimaryImageUrl ?? '',\n productUrl,\n productSearchResult: product\n });\n }\n };\n\n /**\n * ComponentWillUnmount method.\n */\n public componentWillUnmount(): void {\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n window.removeEventListener('resize', this.updateClientWidth);\n document.removeEventListener('keydown', (this.keyDown as unknown) as EventListener, false);\n document.removeEventListener('mousedown', this._handleOutsideClick, false);\n }\n }\n\n /**\n * UpdateClientWidth method to update client width in state.\n */\n public updateClientWidth = (): void => {\n const viewport = isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n this.setState({ clientWidth: this.getActiveImageWidth(), viewport });\n this._isDesktopViewPort = viewport === 'lg' || viewport === 'xl';\n };\n\n /**\n * Render method.\n * @returns - Returns JSX.Element | null.\n */\n public render(): JSX.Element | null {\n const viewProps: IActiveImageViewProps = {\n ...(this.props as IImageMapperProps & IActiveImageProps<{}>),\n activePointContainer: {\n moduleProps: this.props,\n className: classnames('msc-active-image', this._activeImageClass, this.props.config.className)\n },\n activePointDetailsContainer: {\n tag: 'div',\n className: classnames('msc-active-image-wrapper', this._activeImageClass, this.props.config.className),\n ref: this._activeImageRefs\n },\n imgWidth: this.props.config.canvasWidth,\n imageMapper: this.renderImageMapper(),\n overlay: this.renderOverlay(),\n productCard: this.renderProductCard(),\n productCardleftPosition: this.getProductCardPositionX(),\n productCardtopPosition: this.getProductCardPositionY(),\n title: this.renderActiveImageDetailsHeading(),\n text: this.renderActiveImageDetailsParagraph(),\n links: this.renderActiveImageDetailsLinks(),\n detailsContainer: { className: 'msc-active-image__details' },\n detailsContainerCta: { className: 'msc-active-image__details__cta' },\n additionalContent: activeImageAdditionalContent({\n requestContext: this.props.context.request,\n additionalContent: this.props.config.additionalContent,\n handleAdditionalTextChange: this.handleAdditionalTextChange,\n handleAdditionalParagraphChange: this.handleAdditionalParagraphChange,\n handleAdditionalLinkTextChange: this.handleAdditionalLinkTextChange\n }),\n handleAdditionalText: this.handleAdditionalTextChange,\n handleAdditionalParagraph: this.handleAdditionalParagraphChange,\n handleAdditionalLinkText: this.handleAdditionalTextChange\n };\n\n return this.props.renderView(viewProps);\n }\n\n /**\n * RenderImageMapper method - To render image mapper.\n * @returns - Returns React.ReactNode | null.\n */\n public renderImageMapper = (): React.ReactNode | null => {\n const { config, context } = this.props;\n const defaultPosition: number = 0;\n const defaultLength: number = 0;\n const productResults = this.props.data.products.result;\n if (config.activePoints && productResults) {\n for (const product of productResults) {\n for (const configProduct of config.activePoints) {\n if (product.ItemId === configProduct.itemId) {\n const productUrl = getProductPageUrlSync(product.Name ?? '', product.RecordId, context.actionContext, undefined);\n const coords = [\n configProduct.xPosition ?? defaultPosition,\n configProduct.yPosition ?? defaultPosition,\n configProduct.radius ?? defaultPosition\n ];\n const area = this._activePoints.find(activePoint => JSON.stringify(activePoint.coords) === JSON.stringify(coords));\n this.addActivePoints(area, product, coords, productUrl);\n }\n }\n }\n }\n const mappedArea: IAreaMap = {\n name: `map-${this._activeImageClass}`,\n areas: this._activePoints.length > defaultLength ? this._activePoints : []\n };\n\n // If image is null, we want to render the placeholder SVG - by passing image data with empty src\n return (\n \n );\n };\n\n /**\n * EnterArea method - To handle mouse enter event.\n * @param area - Active point area.\n * @param index - Active point index.\n * @param event - Active point AreaEvent.\n */\n public enterArea = (area: IArea, index: number, event: AreaEvent): void => {\n this.setState({ area, overlayClass: 'msc-active-image-overlay' });\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(area, index, event);\n }\n if (event.type.toLocaleLowerCase() === 'click' && this._isDesktopViewPort) {\n window.open(area.productUrl, '_self');\n }\n };\n\n /**\n * LeaveArea method - To handle mouse leave event.\n */\n public leaveArea = (): void => {\n if (this._isDesktopViewPort) {\n this.resetState();\n }\n };\n\n /**\n * ResetState method - To reset the state for area and overlayclass.\n */\n public resetState = (): void => {\n this.setState({ area: null, overlayClass: '' });\n };\n\n /**\n * RenderProductComponent method - To render the product card with product information.\n * @returns - Returns React.ReactNode.\n */\n public renderProductComponent = (): React.ReactNode => {\n if (this.state.area?.productSearchResult) {\n const baseImageUrl: string = this.props.context.request.apiSettings.baseImageUrl;\n const imageUrl: string = this.state.area.primaryImageUrl ?? '';\n const primaryImageUrl: string = `${baseImageUrl}${imageUrl}`;\n const product: ProductSearchResult = this.state.area.productSearchResult;\n product.PrimaryImageUrl = primaryImageUrl;\n\n return (\n \n );\n }\n return React.Fragment;\n };\n\n /**\n * RenderProductCard method - To render product cards.\n * @returns - Returns React.ReactNode.\n */\n public renderProductCard = (): React.ReactNode => {\n const { area } = this.state;\n\n return (\n <>\n {area?.center && (\n
    \n
    \n {!this._isDesktopViewPort &&
    \n
    \n )}\n \n );\n };\n\n /**\n * RenderOverlay method - To render overlay for non desktop viewports.\n * @returns - Returns React.ReactNode.\n */\n public renderOverlay = (): React.ReactNode => {\n return <>{!this._isDesktopViewPort &&
    };\n };\n\n /**\n * GetProductCardPositionX method - Provides product card x position to the left or right of active point based on available space.\n * For xs, sm and md viewports it provides x position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionX = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsWidth = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.w\n : defaultImageSettings.viewports.lg?.w;\n const defaultPositionX: number = 0;\n const halfDivisor: number = 2;\n const productCardWidth: number = productImageSettingsWidth ? productImageSettingsWidth : this._defaultProductCardWidth;\n const { area, clientWidth, viewport } = this.state;\n const pointPositionX = area?.center?.[0] ?? clientWidth / halfDivisor;\n const leftAllignPosition = pointPositionX - productCardWidth - productCardWidth / halfDivisor;\n const rightAllignPosition = pointPositionX + productCardWidth / halfDivisor;\n let position: number = (clientWidth - productCardWidth) / halfDivisor;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n if (leftAllignPosition < defaultPositionX) {\n position = rightAllignPosition;\n } else {\n position = leftAllignPosition;\n }\n }\n return position;\n };\n\n /**\n * GetProductCardPositionY method - Provides product card y position in center with respect to active point.\n * For xs, sm and md viewports it provides y position for the center alignment.\n * @returns - Returns number.\n */\n public getProductCardPositionY = (): number => {\n const defaultImageSettings = this.getDefaultImageSettings();\n const productImageSettingsHeight = this.props.config.productImageSettings?.viewports\n ? this.props.config.productImageSettings.viewports.lg?.h\n : defaultImageSettings.viewports.lg?.h;\n const halfDivisor: number = 2;\n const { area, viewport } = this.state;\n const produtCardHight: number = productImageSettingsHeight ? productImageSettingsHeight : this._defaultProdutCardHight;\n const pointPositionY = (this.getActiveImageHeight() - produtCardHight) / halfDivisor;\n let position: number = pointPositionY;\n if (viewport !== 'xs' && viewport !== 'sm' && viewport !== 'md') {\n position = (area?.center?.[1] ?? this.getActiveImageHeight() / halfDivisor) - produtCardHight / halfDivisor;\n }\n return position;\n };\n\n /**\n * GetDefaultImageSettings method.\n * @returns MsDyn365.IImageSettings.\n */\n public getDefaultImageSettings = (): MsDyn365.IImageSettings => {\n const defaultImageSettings: MsDyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n lg: { q: 'w=275&h=275&m=6', w: 275, h: 275 },\n xl: { q: 'w=275&h=275&m=6', w: 275, h: 275 }\n },\n lazyload: true\n };\n\n return defaultImageSettings;\n };\n\n /**\n * KeyDown method - To handle keydown event.\n * @param event - KeyboardEvent.\n */\n public keyDown = (event: KeyboardEvent): void => {\n if (event.key === ActiveImageConstants.enterKey) {\n const target: HTMLElement = event.target as HTMLElement;\n if (target.nodeName === 'AREA') {\n const area: HTMLAreaElement = target as HTMLAreaElement;\n if (area.href) {\n window.open(area.href, '_self');\n }\n }\n }\n if (event.key === ActiveImageConstants.escKey) {\n this.resetState();\n }\n };\n\n /**\n * GetActiveImageWidth method - To get active image width.\n * @returns Returns number.\n */\n public getActiveImageWidth = (): number => {\n const defaultWidth: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientWidth;\n }\n }\n return defaultWidth;\n };\n\n /**\n * GetActiveImageHeight method - To get active image height.\n * @returns Returns number.\n */\n public getActiveImageHeight = (): number => {\n const defaultHeight: number = 0;\n if (MsDyn365.msdyn365Commerce.isBrowser) {\n const activeImageReferenceValue = this._activeImageRefs;\n if (activeImageReferenceValue.current !== null) {\n return activeImageReferenceValue.current.clientHeight;\n }\n }\n return defaultHeight;\n };\n\n /**\n * HandleLinkTextChange method - To handle link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.links && this.props.config.links[Number(linkIndex)]) {\n this.props.config.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleTextChange method - To handle text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleTextChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.heading!.text = event.target.value;\n };\n\n /**\n * HandleParagraphChange method - To handle paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleParagraphChange = (event: MsDyn365.ContentEditableEvent): void => {\n this.props.config.paragraph = event.target.value;\n };\n\n /**\n * HandleAdditionalTextChange method - To handle additional text change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalTextChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.heading = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalLinkTextChange method - To handle additional link text change event.\n * @param linkIndex - The link index.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalLinkTextChange(linkIndex: number, event: MsDyn365.ContentEditableEvent): void {\n const additionalContent = this.props.config.additionalContent ?? {};\n if (additionalContent.links) {\n additionalContent.links[Number(linkIndex)].linkText = event.target.value;\n }\n }\n\n /**\n * HandleAdditionalParagraphChange method - To handle additional paragraph change event.\n * @param event - The dialog that is allowed to remain open.\n */\n public handleAdditionalParagraphChange(event: MsDyn365.ContentEditableEvent): void {\n if (this.props.config.additionalContent) {\n this.props.config.additionalContent.subtext = event.target.value;\n }\n }\n\n /**\n * RenderActiveImageDetailsLinks method - To render active image details links.\n * @returns - React node.\n */\n public renderActiveImageDetailsLinks = (): React.ReactNode[] | undefined => {\n const { links } = this.props.config;\n const payLoad = getPayloadObject('click', this._telemetryContent, '');\n\n return links?.map((linkData: IActiveImageLinksData, index: number) => {\n payLoad.contentAction.etext = linkData.linkText;\n const attributes = getTelemetryAttributes(this._telemetryContent, payLoad);\n const linkId = index;\n const editableLink: MsDyn365.ILinksData = {\n ariaLabel: linkData.ariaLabel,\n className: 'msc-active-image__details__cta__link',\n linkText: linkData.linkText,\n linkUrl: linkData.linkUrl.destinationUrl,\n openInNewTab: linkData.willOpenInNewTab,\n role: 'button',\n additionalProperties: attributes\n };\n\n return (\n {\n this.handleLinkTextChange(index, event);\n },\n requestContext: this.props.context.request\n }}\n />\n );\n });\n };\n\n /**\n * RenderActiveImageDetailsHeading method - To render active image details heading.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsHeading = (): React.ReactNode | undefined => {\n const { heading } = this.props.config;\n\n return (\n heading && (\n \n )\n );\n };\n\n /**\n * RenderActiveImageDetailsParagraph method - To render active image details paragraph.\n * @returns - React.ReactNode | undefined.\n */\n public renderActiveImageDetailsParagraph = (): React.ReactNode | undefined => {\n const { paragraph } = this.props.config;\n\n return (\n paragraph && (\n \n )\n );\n };\n\n /**\n * GetActiveImageId - To get active image id from src.\n * @returns - String.\n */\n public getActiveImageId = (): string => {\n const { activeImage } = this.props.config;\n let activeImageId: string = '';\n if (activeImage?.src) {\n const activeImageSource = activeImage.src.split('/');\n const decrementOne: number = 1;\n const activeImageIdPart = activeImageSource[activeImageSource.length - decrementOne].split('?');\n activeImageId = activeImageIdPart[0] ?? '';\n }\n return activeImageId;\n };\n\n /**\n * Handle outside click method - To handle outside click of the active image product.\n * @param event - Mouse event.\n */\n private readonly _handleOutsideClick = (event: MouseEvent) => {\n if (this._productCardDivRef.current?.contains(event.target as Node)) {\n return;\n }\n this.resetState();\n };\n}\nexport default ActiveImage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IActiveImageAdditionalContentViewProps } from '../active-image-utilities';\nimport { IActiveImageViewProps } from './active-image';\n\n/**\n * Render Additional Content.\n * @param additionalContent - Additional content view props.\n * @returns JSX Element.\n */\nconst renderAdditionalContent = (additionalContent: IActiveImageAdditionalContentViewProps) => {\n return (\n \n {additionalContent.heading}\n \n {additionalContent.text}\n {additionalContent.links}\n \n \n );\n};\n\n/**\n * Render View.\n * @param props - The view props.\n * @returns -The JSX Element.\n */\nexport const activeImageView: React.FC = props => {\n return (\n \n \n {props.imageMapper}\n \n {props.title}\n {props.text}\n {props.additionalContent && renderAdditionalContent(props.additionalContent)}\n \n {props.links}\n \n \n \n \n {props.overlay}\n {props.productCard}\n \n \n );\n};\n\nexport default activeImageView;\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 {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps {\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 {\n public static readonly className = 'ms-bulk-purchase';\n private readonly collapseRef: React.RefObject = React.createRef();\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
    \n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n
    \n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n \n {this.props.resources.bulkPurchaseHeaderTitle}\n \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 \n {this._renderMainContent(`${className}__main-content`)}\n \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
    \n {!isMobileDevice && (\n
    \n \n
    \n )}\n {this._renderMatrix(`${className}__matrix-container`)}\n
    \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 }\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 { 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 { 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","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources, OrderTemplateNameDialog } from '@msdyn365-commerce/components';\nimport { IComponentProps } from '@msdyn365-commerce/core';\nimport React, { useState } from 'react';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * The Create Order Template Button Props.\n */\nexport interface ICreateOrderTemplateButtonProps extends IComponentProps {\n /**\n * The label for create order template.\n */\n createOrderTemplateText: string;\n\n /**\n * The create order template dialog resources.\n */\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n\n /**\n * The delegate to fire when dialog captured any user entry.\n */\n onOrderTemplateCreated(): Promise;\n}\n\nconst CreateOrderTemplateButton: React.FC = props => {\n const onCancelHandler = React.useCallback(() => {\n return;\n }, []);\n const [isCreateOrderTemplateDialogOpen, setOrderTemplateNameDialogOpen] = useState(false);\n const onCreateButtonClick = React.useCallback(() => {\n setOrderTemplateNameDialogOpen(true);\n }, []);\n\n return (\n <>\n \n {props.createOrderTemplateText}\n \n \n \n );\n};\n\nexport default CreateOrderTemplateButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\nimport { deleteAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { OrderTemplate } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport Spinner from '../order-template/components/add-line/spinner';\nimport {\n ISingleOrderTemplateProps,\n ISingleOrderTemplateViewProps,\n OrderTemplateListStatusMessage,\n OrderTemplateRender\n} from './components';\nimport CreateNewTemplateButtonComponent from './components/create-order-template';\nimport { IOrderTemplateListData } from './order-template-list.data';\nimport { HeadingTag, IOrderTemplateListProps, IOrderTemplateListResources } from './order-template-list.props.autogenerated';\n\nexport interface IOrderTemplateActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n headerStatusMessage: string;\n}\n\nexport type orderTemplateListStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\n\nexport interface IOrderTemplateListViewProps extends IOrderTemplateListProps {\n OrderTemplateList: IModuleProps;\n status?: orderTemplateListStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplates?: INodeProps;\n OrderTemplate?: INodeProps;\n orderTemplates?: ISingleOrderTemplateViewProps[];\n createOrderTemplateButton?: React.ReactNode;\n templateHeaderStatusMessage?: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateList component.\n * @extends {React.PureComponent, IOrderTemplateListActionMessageState>}\n */\n@observer\nclass OrderTemplateList extends React.Component, IOrderTemplateActionMessageState> {\n constructor(props: IOrderTemplateListProps) {\n super(props);\n this.state = {\n itemKey: '',\n userMessage: '',\n headerStatusMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false\n };\n }\n\n public async componentDidMount(): Promise {\n this.setState({});\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateListProps,\n nextState: IOrderTemplateActionMessageState\n ): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { className, heading } = this.props.config;\n const { emptyOrderTemplateText, createNewTemplateButtonText } = this.props.resources;\n const { orderTemplates } = this.props.data;\n const orderTemplatesData = orderTemplates && orderTemplates.result;\n const orderTemplateListHeading = heading?.text ?? this.props.resources.orderTemplateListTitle;\n\n if (orderTemplates.status === 'LOADING') {\n const errorProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'LOADING',\n statusMessage: ,\n heading: (\n \n )\n };\n return this.props.renderView(errorProps);\n }\n\n if (orderTemplatesData && orderTemplatesData.length === 0) {\n // When no order templates are found for customer\n const emptyViewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'EMPTY',\n statusMessage: ,\n createOrderTemplateButton: (\n \n ),\n heading: (\n \n )\n };\n\n return this.props.renderView(emptyViewProps);\n }\n\n const viewProps: IOrderTemplateListViewProps = {\n ...(this.props as IOrderTemplateListProps),\n OrderTemplateList: {\n moduleProps: this.props,\n className: classnames('ms-order-template', className)\n },\n status: 'SUCCESS',\n heading: ,\n createOrderTemplateButton: (\n \n ),\n templateHeaderStatusMessage: this.state.isOpen && this.state.headerStatusMessage && (\n
    \n \n {this.state.headerStatusMessage}\n \n
    \n ),\n OrderTemplates: {\n className: 'ms-order-template__list-item',\n tag: 'ul'\n },\n OrderTemplate: {\n className: 'ms-order-template__tile',\n tag: 'li'\n },\n orderTemplates: orderTemplatesData && this._renderOrderTemplateList(orderTemplatesData)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _generateOrderTemplateNameDialogResources(resources: IOrderTemplateListResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderOrderTemplateList(orderTemplates: OrderTemplate[]): ISingleOrderTemplateViewProps[] {\n const { context, telemetry } = this.props;\n const { imageSettings, enableImageProductLink } = this.props.config;\n return orderTemplates.map((orderTemplate: OrderTemplate, index) => {\n const currentTemplateProps: ISingleOrderTemplateProps = {\n orderTemplateState: this.state,\n Id: orderTemplate.productList.Id,\n name: orderTemplate.productList.Name,\n orderTemplate,\n context,\n imageSettings,\n enableImageProductLink,\n removeFromOrderTemplateListText: 'remove',\n addToBagText: this.props.resources.addToBagButtonText,\n index,\n itemKey: orderTemplate.productList.Id,\n telemetry,\n moduleId: this.props.id,\n moduleTypeName: this.props.typeName,\n handlers: {\n onRemoveOrderTemplate: this._onRemoveFromOrderTemplateList,\n onDismiss: this._onDismiss\n },\n resources: {\n closeWindowButtonText: this.props.resources.closeWindowButtonText,\n addToCartFailureMessage: this.props.resources.addToCartFailureMessage,\n addToCartSuccessMessage: this.props.resources.addToCartSuccessMessage,\n addToCartProcessMessage: this.props.resources.addToCartProcessMessage,\n orderTemplateErrorMessage: this.props.resources.orderTemplateErrorMessage,\n linesAddedToCartDialogResources: {\n viewCartButtonText: this.props.resources.viewCartButtonText,\n orderTemplateCloseButtonText: this.props.resources.orderTemplateCloseButtonText,\n linesAddedToCartHeaderItemsOneText: this.props.resources.linesAddedToCartHeaderItemsOneText,\n linesAddedToCartHeaderLinesOneText: this.props.resources.linesAddedToCartHeaderLinesOneText,\n linesAddedToCartHeaderLinesFormatText: this.props.resources.linesAddedToCartHeaderLinesFormatText,\n linesAddedToCartHeaderMessageText: this.props.resources.linesAddedToCartHeaderMessageText\n }\n },\n isMultipleCatalogFeatureEnabledInHq: this._isChannelMultipleCatalogsFeatureEnabled()\n };\n\n return OrderTemplateRender(currentTemplateProps)!;\n });\n }\n\n private readonly _onDismiss = () => {\n this.setState({\n isOpen: false\n });\n };\n\n private readonly _reloadPage = async () => {\n window.location.reload();\n };\n\n private readonly _onRemoveFromOrderTemplateList = (productListId: string): void | undefined => {\n const { context, data, telemetry, resources } = this.props;\n const { orderTemplates } = data;\n\n if (context && context.actionContext) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && orderTemplates.result && orderTemplates.result[0] && productListId) {\n const orderTemplate = orderTemplates.result.find(p => p.productList.Id === productListId);\n if (orderTemplate) {\n deleteAsync({ callerContext: context.actionContext }, orderTemplate.productList)\n .then()\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n this.setState({\n itemKey: productListId,\n headerStatusMessage: resources.deleteOrderTemplateFailedText,\n statusCssString: 'danger',\n messageGlyph: 'fas fa-exclamation-triangle',\n isOpen: true\n });\n })\n .then(this._reloadPage)\n .catch((error: string) => {\n telemetry.warning('[order-template-list] Unable to delete order template.');\n telemetry.error(error);\n });\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template. Order template was not found');\n }\n } else {\n telemetry.warning('[order-template-list] Failed to delete order template.');\n }\n }\n };\n}\n\nexport default OrderTemplateList;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { INodeProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISingleOrderTemplateViewProps } from './components';\nimport { IOrderTemplateListViewProps } from './order-template-list';\n\nexport const OrderTemplateListView: React.FC = props => {\n const {\n OrderTemplateList,\n status,\n statusMessage,\n heading,\n OrderTemplates,\n orderTemplates,\n OrderTemplate,\n createOrderTemplateButton,\n templateHeaderStatusMessage\n } = props;\n\n return (\n \n {heading}\n {status !== 'SUCCESS' && statusMessage}\n \n {createOrderTemplateButton}\n {templateHeaderStatusMessage}\n \n {OrderTemplates && orderTemplates && orderTemplates.length > 0 && (\n \n {orderTemplates &&\n orderTemplates.map(orderTemplate => {\n return _renderOrderTemplate(orderTemplate, OrderTemplate);\n })}\n \n )}\n \n );\n};\n\nconst _renderOrderTemplate = (orderTemplate: ISingleOrderTemplateViewProps, OrderTemplate?: INodeProps): JSX.Element | null => {\n const { key, addToCartButton, orderTemplateImage, orderTemplateStatusMessage, removeButton, orderTemplateName } = orderTemplate;\n return (\n \n {orderTemplateName}\n {orderTemplateImage}\n {addToCartButton}\n {removeButton}\n {orderTemplateStatusMessage}\n \n );\n};\n\nexport default OrderTemplateListView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport default (props: { className: string; msg?: string }) => (\n <>\n
    \n {props?.msg &&
    {props?.msg}
    }\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { getCatalogId, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductListLine, ProductSearchCriteria, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n addItemToOrderTemplate,\n AddItemToOrderTemplateInput,\n ArrayExtensions,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getSelectedVariant,\n SelectedVariantInput,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Modal, ModalBody, ModalHeader, getPayloadObject, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport { get } from 'lodash';\nimport { computed } from 'mobx';\nimport React from 'react';\n\nimport { IProductConfigurationState, NotFoundComponent, ProductConfiguration, ProductList } from '.';\nimport Spinner from './spinner';\n\nexport interface IAddLineToTemplateProps {\n context: ICoreContext;\n resources: IAddLineToTemplateResources;\n orderTemplateId: string;\n imageSettings?: IImageSettings;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogs?: ProductCatalog[] | undefined;\n telemetryContent?: ITelemetryContent;\n}\n\nexport interface IAddLineToTemplateResources {\n addLineModalLinkText: string;\n searchButtonAriaLabel: string;\n searchInputAriaLabel: string;\n searchModalPlaceholderText: string;\n selectCatalogTitleText: string;\n selectProductButtonText: string;\n addItemToTemplateText: string;\n addLineProductUnitPricePrefix: string;\n backButtonText: string;\n decrementButtonAriaLabel: string;\n incrementButtonAriaLabel: string;\n quantitySelectLabel: string;\n addLineProductUnitOfMeasurePrefix: string;\n notFoundSearchErrorNotice: string;\n notFoundSearchErrorRedediation: string;\n searchErrorMessage: string;\n productDimensionTypeColor: string;\n productDimensionTypeConfiguration: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n searchResultsCountVerbage: string;\n searchResultsCountSubject: string;\n addToTemplateConfirmation: string;\n totalPriceLabel: string;\n progressNotificationText: string;\n addToTemplateDuplicateError: string;\n addToTemplateGenericError: string;\n dimensionMissingError: string;\n backToResultsText?: string;\n}\n\nenum CONTENT {\n Search,\n ProductList,\n ProductConfiguration,\n NotFound,\n Error,\n Loading\n}\n\ninterface IAddLineToTemplateState {\n isOpen: boolean;\n query: string;\n products: ProductSearchResult[];\n productCatalogs: ProductCatalog[] | null;\n content: number;\n selectedProduct: SimpleProduct | null;\n selectedCatalogId: number | undefined;\n selectedProductDimensions?: ProductDimensionFull[];\n selectedQuantity?: number;\n reloadPage?: boolean;\n}\n\n/**\n * Add Lines to order template.\n */\nexport class AddLineToTemplate extends React.Component {\n public state: IAddLineToTemplateState = {\n isOpen: false,\n query: '',\n products: [],\n productCatalogs: [],\n content: CONTENT.Search,\n selectedProduct: null,\n selectedCatalogId: 0\n };\n\n public defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n lg: { q: 'w=64&h=64&m=6', w: 0, h: 0 },\n xl: { q: 'w=64&h=64&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n public searchTextInput: React.RefObject = React.createRef(); // @TODO public/private\n\n private readonly addLineButtonRef: React.RefObject = React.createRef();\n\n constructor(props: IAddLineToTemplateProps) {\n super(props);\n }\n\n public onComponentDidMount(): void {\n this.searchTextInput.current?.focus();\n }\n\n public componentDidMount(): void {\n this._getCatalogs();\n }\n\n public onComponentDidUpdate(): void {\n this.searchTextInput.current?.focus();\n }\n\n @computed get showBackArrow(): boolean {\n return this.state.content === CONTENT.ProductConfiguration;\n }\n\n public shouldComponentUpdate(nextProps: IAddLineToTemplateProps, nextState: IAddLineToTemplateState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element {\n const {\n resources: { addLineModalLinkText, backToResultsText }\n } = this.props;\n\n const modalProps = {\n ...this.props,\n className: 'msc-add-line-to-template',\n toggle: this._toggleModalHandler,\n isOpen: this.state.isOpen,\n ariaLabel: addLineModalLinkText\n };\n\n return (\n <>\n \n \n {this.showBackArrow && (\n \n )}\n {addLineModalLinkText}\n \n {this._renderContent()}\n \n \n \n {addLineModalLinkText}\n \n \n );\n }\n\n private readonly _renderSearchForm = () => {\n const {\n resources: { searchButtonAriaLabel, searchModalPlaceholderText, selectCatalogTitleText }\n } = this.props;\n\n return (\n \n {this.state.productCatalogs && ArrayExtensions.hasElements(this.state.productCatalogs) && (\n <>\n \n \n {this._getCatalogNodes()}\n \n \n )}\n
    \n \n
    \n \n );\n };\n\n private readonly _onSearchSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n\n const query = get(this, 'searchTextInput.current.value', null);\n\n if (!query) {\n return;\n }\n\n this.setState({\n content: CONTENT.Loading\n });\n\n this._getSearchResults(query)\n .then(result => {\n if (result.length === 0) {\n this.setState({\n products: result,\n content: CONTENT.NotFound\n });\n } else {\n this.setState({\n products: result,\n content: CONTENT.ProductList\n });\n }\n })\n .catch(error => {\n this.setState({\n content: CONTENT.Error\n });\n });\n };\n\n private readonly _onQuantityChangeHandler = (event: React.ChangeEvent) => {\n this.setState({\n selectedQuantity: +event.target.value\n });\n };\n\n private readonly _onSelectItem = async (product: ProductSearchResult): Promise => {\n const {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n } = this.props.context;\n const varianteInput = new SelectedVariantInput(product.RecordId, channelId, [], undefined, this.props.context.request);\n const productVariant = await getSelectedVariant(varianteInput, actionContext);\n\n if (!productVariant) {\n this.props.context.telemetry.error('Error retrieving product variant');\n return Promise.resolve([]);\n }\n\n const dimensions = await this._getProductDimensions(product as SimpleProduct);\n\n this.setState({\n selectedProductDimensions: dimensions,\n content: CONTENT.ProductConfiguration,\n selectedProduct: productVariant\n });\n\n return dimensions;\n };\n\n private readonly _onInputChange = (event: React.ChangeEvent): void => {\n this.setState({\n query: event.target.value\n });\n };\n\n private readonly _onBackButtonClickHandler = (): void => {\n this.setState({\n content: CONTENT.ProductList\n });\n };\n\n private readonly _highlightSearchTerm = (name: string) => {\n const parsedName = name && unescape(name.replace(new RegExp(this.state.query, 'i'), '$&'));\n\n return (\n \n );\n };\n\n private readonly _resultCountText = (): string => {\n return this.props.resources.searchResultsCountVerbage\n .replace('{count}', this.state.products.length.toString())\n .replace('{subject}', `${this.props.resources.searchResultsCountSubject}${this.state.products.length > 1 ? 's' : ''}`);\n };\n\n private _renderContent(): React.ReactNode | null {\n switch (this.state.content) {\n case CONTENT.ProductConfiguration:\n const { selectedProduct, selectedProductDimensions } = this.state;\n const viewProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n product: selectedProduct!,\n dimensions: selectedProductDimensions!,\n addToTemplateHandler: this._addItemToTemplateHandler,\n onQuantityChangeHandler: this._onQuantityChangeHandler,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm()\n };\n\n return ;\n\n case CONTENT.ProductList:\n const productProps = {\n ...this.props,\n imageSettings: this.props.imageSettings || this.defaultImageSettings,\n clickHandler: this._onSelectItem,\n products: this.state.products,\n highlightSearchTerm: this._highlightSearchTerm,\n searchForm: this._renderSearchForm(),\n renderResultCountText: this._resultCountText\n };\n\n return (\n \n \n \n );\n\n case CONTENT.Loading:\n return (\n \n {this._renderSearchForm()}\n \n \n );\n\n case CONTENT.NotFound:\n const { notFoundSearchErrorNotice, notFoundSearchErrorRedediation } = this.props.resources;\n\n return (\n \n

    {this._resultCountText()}

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

    \n {renderResultCountText()}\n

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

    {text}

    ;\n case 'FAILED':\n return

    {text}

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

    {text}

    ;\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewModel } from '../order-template';\n\nexport interface IOrderTemplateTableHeadingProps {\n selectAllRowsText?: string;\n productNumber: string;\n productName: string;\n productUnitPrice: string;\n productUOM: string;\n productQuantity: string;\n productActions: string;\n lines: IOrderTemplateLineViewModel[];\n isMobile: boolean;\n clickHandler(isChecked: boolean): void;\n productImage?: string;\n isMultipleCatalogFeatureEnabledInHq?: boolean;\n productLineCatalogName?: string;\n}\n\n/**\n * Order Template's table state.\n */\nexport interface IOrderTemplateTableHeadingState {\n isChecked: boolean;\n}\n\nexport interface IOrderTemplateTableShortHeading {\n productNumber: string;\n productActions: string;\n}\n\n/**\n * Order Template's table heading.\n */\nexport class OrderTemplateTableHeading extends React.PureComponent {\n public state: IOrderTemplateTableHeadingState = {\n isChecked: false\n };\n\n private readonly componentClassName: string = 'ms-table';\n\n public static getDerivedStateFromProps(\n props: IOrderTemplateTableHeadingProps,\n state: IOrderTemplateTableHeadingState\n ): IOrderTemplateTableHeadingState {\n const checkedLines = props.lines.filter(line => !line.isChecked).length;\n let nextState = { ...state };\n nextState = { isChecked: checkedLines === 0 };\n return nextState;\n }\n\n public getOnChange = () => (event: React.ChangeEvent) => {\n this.setState(\n {\n isChecked: this.state.isChecked\n },\n () => {\n this.props.clickHandler(!this.state.isChecked);\n }\n );\n };\n\n public render(): JSX.Element {\n return (\n \n \n \n \n \n {!this.props.isMobile && this.props.isMultipleCatalogFeatureEnabledInHq ? (\n {this.props.productLineCatalogName}\n ) : null}\n {!this.props.isMobile ? {this.props.productImage} : null}\n {this.props.productNumber}\n {!this.props.isMobile ? {this.props.productName} : null}\n {!this.props.isMobile ? {this.props.productUnitPrice} : null}\n {!this.props.isMobile ? {this.props.productUOM} : null}\n {!this.props.isMobile ? {this.props.productQuantity} : null}\n {!this.props.isMobile ? {this.props.productActions} : }\n \n \n );\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IItemAddedToCartDialogData,\n IItemAddedToCartDialogResources,\n ILinesAddedToCartDialogResources,\n IOrderTemplateNameDialogResources,\n ItemAddedToCartDialog\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { AsyncResult, getCatalogId, getUrlSync, ICoreContext, IRequestContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { ProductList, ProductListLine } from '@msdyn365-commerce/retail-proxy';\nimport {\n deleteAsync,\n removeProductListLinesAsync,\n updateProductListLinesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g';\nimport { FeatureState, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport {\n ArrayExtensions,\n createGetFeatureStateInput,\n getFeatureState,\n getPriceForSelectedVariant,\n getProductUrlSync,\n ObjectExtensions,\n OrderTemplate,\n OrderTemplateLine,\n PriceForSelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n UncontrolledPagination\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport debounce from 'lodash/debounce';\nimport { action, computed, observable } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n IOrderTemplateActionsProps,\n IOrderTemplateActionsViewProps,\n IOrderTemplateLineProps,\n IOrderTemplateLineViewProps,\n IOrderTemplateTableHeadingProps,\n OrderTemplateActionsView,\n OrderTemplateLinesStatusMessage,\n OrderTemplateLineView,\n OrderTemplateMobileLineView,\n OrderTemplateTableHeading\n} from '../..';\nimport { ActiveOrderTemplateLinesInput } from './actions/get-order-template';\nimport { OrderTemplateBulkActions } from './components/bulk-actions';\nimport { IOrderTemplateData } from './order-template.data';\nimport { IOrderTemplateProps, IOrderTemplateResources } from './order-template.props.autogenerated';\nimport Spinner from './components/add-line/spinner';\n\nexport interface IOrderTemplateLineActionMessageState {\n itemKey: string;\n userMessage: string;\n statusCssString: string;\n messageGlyph: string;\n isOpen: boolean;\n isItemAddedToOrderTemplateOpen: boolean;\n isConfirmAddSelectionToBagModalOpen: boolean;\n itemAddedToCartDialogData?: IItemAddedToCartDialogData;\n productSelection: IOrderTemplateLineViewModel[];\n isDetailsDisplayed: boolean;\n detailedProductView?: IOrderTemplateLineViewProps;\n isQuantityDisabledForUpdate?: boolean;\n}\n\nexport type orderTemplateLinesStatus = 'LOADING' | 'SUCCESS' | 'FAILED' | 'EMPTY';\ntype GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface IOrderTemplateViewProps extends IOrderTemplateProps {\n OrderTemplateLines: IModuleProps;\n callbacks?: IOrderTemplateLinesCallbacks;\n status?: orderTemplateLinesStatus;\n statusMessage?: React.ReactNode;\n heading?: React.ReactNode;\n OrderTemplateActions?: INodeProps;\n ProductsTable?: INodeProps;\n ProductsTableRow?: INodeProps;\n ProductsTableHeading?: React.ReactNode;\n ProductDetails?: INodeProps;\n orderLines?: IOrderTemplateLineViewProps[];\n productListLines?: ProductListLine[];\n productsStatusMessage?: React.ReactNode;\n orderActions?: IOrderTemplateActionsViewProps | null;\n resources: IOrderTemplateResources;\n pagination?: React.ReactNode;\n itemAddedToCartDialog?: React.ReactNode;\n bulkOrderLineActions?: React.ReactNode;\n isDetailsDisplayed?: boolean;\n detailedProduct?: IOrderTemplateLineProps;\n detailedProductView?: IOrderTemplateLineViewProps;\n productQuantityView?: React.ReactNode;\n addButton?: React.ReactNode;\n isMobile?: boolean;\n toggleDetailsDisplayed?(props: IOrderTemplateLineProps | undefined): void;\n}\n\nexport interface IOrderTemplateLinesCallbacks {\n updateQuantity(itemKey: string, quantity: number): void;\n}\n\nexport interface IOrderTemplateLineViewModel extends OrderTemplateLine {\n isChecked: boolean;\n productQuantityView: React.ReactNode;\n}\n\n/**\n *\n * OrderTemplateLines component.\n * @extends {React.PureComponent, IOrderTemplateLineActionMessageState>}\n */\n@observer\nclass OrderTemplateLines extends React.Component, IOrderTemplateLineActionMessageState> {\n private readonly className: string;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n @observable\n private _viewport: GridSize;\n\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n constructor(props: IOrderTemplateProps, state: IOrderTemplateLineActionMessageState) {\n super(props);\n this.className = 'ms-order-template';\n this._viewport =\n props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._updateViewport = this._updateViewport.bind(this);\n\n this.state = {\n itemKey: '',\n userMessage: '',\n statusCssString: 'success',\n messageGlyph: 'fas fa-check',\n isOpen: false,\n isItemAddedToOrderTemplateOpen: false,\n isConfirmAddSelectionToBagModalOpen: false,\n productSelection: [],\n isDetailsDisplayed: false,\n isQuantityDisabledForUpdate: false\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n\n if (MsDyn365.isBrowser && !this.props.context.request.user.isAuthenticated && !this.props.context.request.params.isEditor) {\n window.location.assign(this.props.context.request.user.signInUrl || '/');\n }\n }\n\n @action\n public async componentDidMount(): Promise {\n this.setState({});\n const orderTemplate = await this.props.data.orderTemplate;\n this.props.config.heading!.text = orderTemplate?.productList.Name || '';\n this.setState({\n productSelection: orderTemplate?.orderTemplateLines as IOrderTemplateLineViewModel[]\n });\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public shouldComponentUpdate(\n nextProps: IOrderTemplateProps,\n nextState: IOrderTemplateLineActionMessageState\n ): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { heading, className } = this.props.config;\n const { emptyOrderTemplateLinesText, errorGettingOrderTemplateLines } = this.props.resources;\n const { orderTemplate, cart } = this.props.data;\n 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 { Button, INodeProps, Modal, ModalBody, ModalFooter, ModalHeader, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IOrderTemplateLineViewProps } from './components';\nimport { IOrderTemplateViewProps } from './order-template';\n\nconst OrderTemplateLinesView: React.FC = (props: IOrderTemplateViewProps) => {\n const {\n OrderTemplateLines,\n status,\n statusMessage,\n heading,\n ProductsTable,\n ProductsTableHeading,\n orderLines,\n ProductsTableRow,\n productsStatusMessage,\n OrderTemplateActions,\n orderActions,\n pagination,\n itemAddedToCartDialog,\n bulkOrderLineActions,\n isDetailsDisplayed,\n detailedProductView,\n toggleDetailsDisplayed,\n resources: {\n cancelBtnLabel,\n productNumberText,\n productText,\n productUnitPriceText,\n productUOMText,\n productQuantityText,\n productLineCatalogName\n }\n } = props;\n\n const toggleDetails = React.useCallback(() => {\n toggleDetailsDisplayed && toggleDetailsDisplayed(undefined);\n }, [toggleDetailsDisplayed]);\n\n return (\n \n {heading}\n {OrderTemplateActions && (\n \n {orderActions?.addTemplateToBag}\n {orderActions?.renameTemplate}\n {orderActions?.removeTemplate}\n {orderActions?.actionsSplitButton}\n {!isDetailsDisplayed && productsStatusMessage}\n \n )}\n {bulkOrderLineActions}\n {status !== 'SUCCESS' && statusMessage}\n {ProductsTable && orderLines && orderLines.length > 0 && (\n \n \n {ProductsTableHeading}\n \n {orderLines &&\n orderLines.map(product => {\n return _renderItem(product, productQuantityText, ProductsTableRow);\n })}\n \n \n {pagination}\n \n )}\n {itemAddedToCartDialog}\n \n Product Details\n \n
      \n
    • {detailedProductView?.productImage}
    • \n
    • \n {productText}:\n {detailedProductView?.productInfo}\n
    • \n
    • \n {productLineCatalogName}:\n {detailedProductView?.productLineCatalog}\n
    • \n
    • \n {productNumberText}:\n {detailedProductView?.productNumber}\n
    • \n
    • \n {productUnitPriceText}:\n {` `}\n {detailedProductView?.productPrice}\n
    • \n
    • \n {productUOMText}:\n {` `}\n {detailedProductView?.productUnitOfMeasure}\n
    • \n
    • \n {productQuantityText}:\n {detailedProductView?.productQuantityView}\n
    • \n {productsStatusMessage &&
    • {productsStatusMessage}
    • }\n
    \n
    \n \n \n \n \n
    \n );\n};\n\nconst _renderItem = (product: IOrderTemplateLineViewProps, quantityLabel: string, ProductsTableRow?: INodeProps): JSX.Element | null => {\n if (!product) {\n return null;\n }\n\n const {\n key,\n selectLine,\n productLineCatalog,\n productImage,\n productPrice,\n productNumber,\n addToBagButton,\n removeButton,\n productInfo,\n productUnitOfMeasure,\n productQuantityView,\n productQuantity,\n popUp,\n isMobile,\n extraActionsPopup,\n isMultipleCatalogFeatureEnabledInHq,\n disabled\n } = product;\n\n const lineVisibility = disabled\n ? {\n pointerEvents: 'none',\n opacity: 0.5\n }\n : {\n pointerEvents: 'auto',\n opacity: 1\n };\n\n const disableElement: React.CSSProperties = lineVisibility as React.CSSProperties;\n\n return (\n \n {selectLine}\n {!isMobile && isMultipleCatalogFeatureEnabledInHq && {productLineCatalog}}\n {productImage}\n {isMobile ? (\n \n
    {productNumber}
    \n
    \n {quantityLabel}:{` `}\n {productQuantity}\n
    \n \n ) : (\n {productNumber}\n )}\n {!isMobile && {productInfo}}\n {!isMobile && {productPrice}}\n {!isMobile && {productUnitOfMeasure}}\n {!isMobile && {productQuantityView}}\n {isMobile && {popUp}}\n {!isMobile && !isMultipleCatalogFeatureEnabledInHq && (\n \n {addToBagButton}\n {removeButton}\n \n )}\n {extraActionsPopup}\n
    \n );\n};\n\nexport default OrderTemplateLinesView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 {\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, IProductComponentState> {\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n constructor(props: IProductCollectionProps) {\n super(props);\n this.productPrices = [];\n this.state = {\n products: this.props.config.productCollection.products || []\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n }\n\n public async componentDidMount(): Promise {\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext.user.isAuthenticated) {\n await this._getActivePrice();\n }\n }\n\n public render(): JSX.Element | null {\n const { heading, className, shouldDisplaySeeAllButton } = this.props.config;\n const { resources } = this.props;\n const recommendation = this.props.config.productCollection.recommendationListId;\n\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 \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,\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 => {\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n const validProducts = ArrayExtensions.validValues(products);\n if (\n ArrayExtensions.hasElements(validProducts) &&\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none)\n ) {\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n validProducts,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n }\n };\n\n /**\n * Helper method to initialize products state.\n * @param productCollection - List of products.\n */\n private readonly initProductState = async (productCollection: Msdyn365.IProductList) => {\n let products = this.state.products;\n 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 \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === (product.MasterProductId ?? product.RecordId)\n )}\n />\n )\n };\n };\n\n /**\n * Get the active price for products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.state.products;\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n if (Msdyn365.msdyn365Commerce.isBrowser) {\n await this._getProductsDimensionsAvailabilities(products);\n }\n\n this.setState({ products });\n };\n\n /**\n * Get the see all button.\n * @param 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 \n {this.props.resources.seeAllButtonText}\n \n );\n };\n}\n\nexport default ProductCollection;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 = 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 \n {heading}\n {seeAllButton}\n {isCarousel ? _renderCarousel(SingleSlideCarouselComponentProps, products) : _renderGrid(GridComponentProps, products)}\n \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 {items && items.map(_renderProduct)};\n};\n\nconst _renderGrid = (gridContainer: INodeProps, items: IProductComponentViewProps[]): JSX.Element => {\n return {items && items.map(_renderProduct)};\n};\n\nconst _renderProduct = (product: IProductComponentViewProps): JSX.Element => {\n const { ProductContainer, productComponent } = product;\n\n return {productComponent};\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 { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPromoBannerCloseButton {\n closeButtonAriaLabel?: string;\n label?: string;\n telemetryContent?: ITelemetryContent;\n onClose(): void;\n}\n\nexport const PromoBannerCloseButton: React.FC = ({ closeButtonAriaLabel, label, telemetryContent, onClose }) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PromoBannerClose);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ILinksData } from '../promo-banner.props.autogenerated';\n\nexport interface IPromoBannerLinks {\n links: ILinksData[];\n requestContext: Msdyn365.IRequestContext;\n telemetryContent: ITelemetryContent;\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\n}\n\nexport const PromoBannerLinks: React.FC = ({ links, requestContext, onTextChange, telemetryContent }) => {\n const editableLinks = _mapEditableLinks(links, telemetryContent);\n return (\n \n {editableLinks && editableLinks.length > 0 ? (\n \n ) : null}\n \n );\n};\n\nconst _mapEditableLinks = (linkdata: ILinksData[], telemetryContent: ITelemetryContent): Msdyn365.ILinksData[] | null => {\n if (!linkdata || linkdata.length === 0) {\n return null;\n }\n const editableLinks: Msdyn365.ILinksData[] = [];\n linkdata.forEach((link, index) => {\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent, '', '');\n const linkText = link.linkText ? link.linkText : '';\n payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(telemetryContent, payLoad);\n const editableLink: Msdyn365.ILinksData = {\n ariaLabel: link.ariaLabel,\n className: 'ms-promo-banner__link',\n linkText: link.linkText,\n linkUrl: link.linkUrl.destinationUrl,\n openInNewTab: link.openInNewTab,\n role: 'link',\n additionalProperties: attributes,\n onClick: onTelemetryClick(telemetryContent, payLoad, linkText)\n };\n editableLinks.push(editableLink);\n });\n\n return editableLinks;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport * as React from 'react';\n\nexport interface IPromoBannerText {\n text: string;\n requestContext: Msdyn365.IRequestContext;\n onTextChange(event: Msdyn365.ContentEditableEvent): void;\n}\n\nexport const PromoBannerText: React.FC = ({ text, onTextChange, requestContext }) => {\n return ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Carousel } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { PromoBannerCloseButton, PromoBannerLinks, PromoBannerText } from './components';\nimport { IBannerMessagesData, IPromoBannerProps, IPromoBannerResources } from './promo-banner.props.autogenerated';\n\nexport interface IPromoBannerState {\n animating: boolean;\n isVisible: boolean;\n activeIndex: number;\n}\n\nexport interface IPromoBannerViewProps extends IPromoBannerProps<{}>, IPromoBannerState {\n promoBannerProps: IModuleProps;\n contentProps: INodeProps;\n bannerMessages: IBannerMessagesData[];\n promoBannerTextProps: INodeProps;\n promoBannerLinksProps: INodeProps;\n carouselProps: INodeProps;\n closeButton?: React.ReactNode;\n className: string;\n promoBannerText: string;\n resources: IPromoBannerResources;\n onDismiss(): void;\n handleText(): void;\n handleLinks(): void;\n}\n\n/**\n *\n * PromoBannerModule component.\n * @extends {React.PureComponent>}\n */\nclass PromoBanner extends React.PureComponent, IPromoBannerState> {\n public state: IPromoBannerState = {\n animating: false,\n isVisible: true,\n activeIndex: 0\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n public render(): JSX.Element | null {\n const { bannerMessages, dismissEnabled, interval, hideFlipper, autoplay, className = '' } = this.props.config;\n const { closeButtonAriaLabel, closeButtonLabel, bannerText, bannerAriaLabel } = this.props.resources;\n const { isVisible, activeIndex } = this.state;\n\n if (!isVisible) {\n this.props.context.telemetry.error('Promo banner content is empty, module wont render.');\n return null;\n }\n\n const viewProps = {\n // Context for telemetry and raw data for C1 to do customization\n // Including computed data, state data and methods\n ...this.props,\n className: classnames('ms-promo-banner', className),\n isVisible, // State data\n onDismiss: this._onDismiss, // Methods\n handleLinks: this.handleLinkTextChange,\n handleText: this.handleTextChange,\n\n promoBannerProps: {\n className: classnames('ms-promo-banner', className),\n moduleProps: this.props,\n role: 'banner',\n 'aria-label': bannerAriaLabel\n },\n promoBannerTextProps: {\n tag: PromoBannerText\n },\n promoBannerLinksProps: {\n tag: PromoBannerLinks,\n telemetryContent: this.telemetryContent\n },\n contentProps: { className: 'ms-promo-banner__content' },\n promoBannerText: bannerText,\n bannerMessages,\n activeIndex,\n carouselProps: {\n tag: Carousel,\n className: 'ms-promo-banner__carousel',\n activeIndex,\n next: this._next,\n previous: this._previous,\n onIndicatorsClickHandler: this._goToIndex,\n hideIndicator: hideFlipper,\n interval,\n hideFlipper,\n autoplay\n },\n closeButton: dismissEnabled && (\n \n )\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleTextChange = (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[0]) {\n this.props.config.bannerMessages[0].text = event.target.value;\n }\n };\n\n public handleLinkTextChange = (linkIndex: number) => (event: Msdyn365.ContentEditableEvent) => {\n if (this.props.config.bannerMessages && this.props.config.bannerMessages[1]) {\n const links = this.props.config.bannerMessages[1].links;\n if (links) {\n links[linkIndex].linkText = event.target.value;\n }\n }\n };\n\n private readonly _next = (): void => {\n const nextIndex = this._isLastItem() ? 0 : this.state.activeIndex + 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _previous = (): void => {\n const nextIndex = this._isFirstItem()\n ? this.props.config.bannerMessages\n ? this.props.config.bannerMessages.length - 1\n : 0\n : this.state.activeIndex - 1;\n this._goToIndex(nextIndex);\n };\n\n private readonly _goToIndex = (index: number): void => {\n if (this.state.animating) {\n return;\n }\n this.setState({ activeIndex: index });\n };\n\n private readonly _isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly _isLastItem = () =>\n this.props.config.bannerMessages && this.state.activeIndex === this.props.config.bannerMessages.length - 1;\n\n private readonly _onDismiss = (): void => {\n this.setState({ isVisible: false });\n };\n}\n\nexport default PromoBanner;\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 { IPromoBannerViewProps } from './promo-banner';\n\nconst PromoBannerView: React.FC = props => {\n const {\n promoBannerProps,\n contentProps,\n closeButton,\n bannerMessages,\n promoBannerTextProps,\n promoBannerLinksProps,\n carouselProps,\n promoBannerText,\n handleLinks,\n handleText\n } = props;\n\n const slides =\n bannerMessages &&\n bannerMessages.map((message, index) => {\n return (\n \n {promoBannerText}\n {message.text && }\n {message.links && message.links.length > 0 && (\n \n )}\n \n );\n });\n\n return (\n \n \n {closeButton}\n \n );\n};\nexport default PromoBannerView;\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 {\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 = (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 \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 {\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 \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 \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 {\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 | React.KeyboardEvent): 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
    \n \n {this._generateDrawerButtonInnerMarkup(collapseProps.isOpen, drawerClass)}\n \n \n
    \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

    {this.props.moduleHeadingText}

    \n {this.props.moduleDescriptionText}\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 ;\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 { IQuickOrderGridState } from './utilities';\n\n/**\n * Interface quick order grid form props.\n */\nexport interface IQuickOrderGridFormProps {\n isAddtoListDisabled: boolean | undefined;\n productTextInput: React.RefObject;\n quantityTextInput: React.RefObject;\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;\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) => {\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\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
    \n

    \n {ariaLabelProduct}\n

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

    \n {ariaLabelQuantity}\n

    \n \n
    \n );\n\n const addToListNode = (\n
    \n \n {ariaLabelAddtoCart}\n \n
    \n );\n\n const userMessageNode = quickOrderGridState.stateMessage ? (\n \n \n {quickOrderGridState.stateMessage.messageText}\n \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 { 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 { 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 {}\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 = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n const columnWithNumberClassName = `${props.className}__row__column-with-number`;\n return (\n <>\n \n \n \n {resources.quickOrderGridProductNumberText}\n {resources.quickOrderGridProductText}\n {resources.quickOrderGridUnitPriceText}\n {resources.quickOrderGridUnitOfMeasureText}\n {resources.quickOrderGridQuantityText}\n {resources.quickOrderGridActionsText}\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 = (props: IQuickOrderGridTableHeaderProps) => {\n const { resources } = props;\n return (\n <>\n \n {resources.quickOrderGridProductNumberText}\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 QuickOrderGridTableHeaderComponent: React.FC = (props: IQuickOrderGridTableHeaderProps) => {\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 { 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 {\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 = (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
    \n \n
    \n );\n};\n\nlet setShowPreviousActions: React.Dispatch> | 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 \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
    \n {StringExtensions.isNullOrEmpty(props.productListLine.UnitOfMeasure) || price.UnitOfMeasure}\n
    \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 = (\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
    \n \n \n {props.resources.quickOrderGridRemoveItemButtonAriaLabel}\n \n
    \n )}\n
    \n );\n};\n\n/**\n * Renders quick order grid table rows for desktop view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for desktop view.\n */\nexport const QuickOrderGridDesktopTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { quantity } = props;\n const columnWithNumberClassName = `${props.className}__column-with-number`;\n if (product !== undefined) {\n let productUrl = '';\n if (!StringExtensions.isNullOrWhitespace(product.Name) && !ObjectExtensions.isNullOrUndefined(product.RecordId)) {\n productUrl = getProductPageUrlSync(product.Name!, product.RecordId, props.context.actionContext);\n }\n\n return (\n <>\n \n \n \n {product.ItemId}\n \n
    \n \n {product.Name}\n \n \n {product.Dimensions?.map(dimension => dimension.DimensionValue?.Value)\n .filter(dimensionValue => !StringExtensions.isNullOrWhitespace(dimensionValue))\n .join(props.resources.quickOrderGridProductDimensionsSeparator)}\n \n
    \n \n {renderProductPrice(props)}\n {renderUnitOfMeasure(props)}\n \n \n \n \n \n \n \n );\n }\n\n return null;\n};\n\n/**\n * Renders rows for mobile view.\n * @param props - Configuration for the rows.\n * @returns A react node with a list of quick order grid rows for mobile view.\n */\nexport const QuickOrderGridMobileTableRowCellComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const product = props.data.product.productLine.fullProduct?.ProductDetails;\n const productListLine = props.data.product.productLine.productListLine;\n const { quantity } = props;\n if (product !== undefined) {\n return (\n <>\n \n \n \n \n
    \n {product.RecordId}\n \n \n \n
    \n \n \n \n \n \n );\n }\n return null;\n};\n\n/**\n * Quick order table row component.\n * @param props - Configuration of the component.\n * @returns React node for the row.\n */\nexport const QuickOrderGridTableRowComponent: React.FC = (props: IQuickOrderGridTableRowProps) => {\n const rowClassName = `${props.className}__row`;\n const isMobileView = isMobile({ variant: VariantType.Viewport, context: props.context.request }) === 'xs';\n let headerCells: JSX.Element;\n if (isMobileView) {\n headerCells = ;\n } else {\n headerCells = ;\n }\n\n return (\n \n {headerCells}\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IComponent, IComponentProps, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport React from 'react';\n\nimport { 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 {\n context: ICoreContext;\n className: string;\n moduleId: string;\n moduleTypeName: string;\n\n resources: IQuickOrderGridTableResources;\n isMobileView: boolean;\n imageSettings?: IImageSettings;\n callBacks: IQuickOrderGridRowCallbacks;\n}\n\n/**\n * Quick order table component.\n */\nexport interface IQuickOrderGridTableComponent extends IComponent {}\n\n/**\n * The quick order table.\n * @param props -- The quick order table props.\n * @returns The quick order table element.\n */\nexport const QuickOrderGridTableComponent: React.FC = (props: IQuickOrderGridTableProps) => {\n const [isMobile, setIsMobile] = React.useState(props.isMobileView);\n const quickOrderGridProducts = props.data.quickOrderGridProducts;\n\n /**\n * Update the view port.\n */\n const updateViewport = () => {\n setIsMobile(props.isMobileView);\n };\n\n if (MsDyn365.isBrowser) {\n window.addEventListener('resize', updateViewport);\n }\n\n const headerClassName = `${props.className}__header`;\n const rowClassName = `${props.className}__row`;\n\n return (\n \n \n {quickOrderGridProducts.map((quickOrderProduct, index) => {\n const price = quickOrderProduct.productLine.fullProduct?.ProductPrice;\n const quantity = quickOrderProduct.productLine.productListLine.Quantity!;\n return (\n \n );\n })}\n
    \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getProductConfigure,\n IProductDimensionCallbacks,\n IProductDimensionConfigureResources,\n IProductDimensionConfigureViewProps\n} from '@msdyn365-commerce/components';\nimport {\n ProductDimension,\n ProductDimensionType,\n ProductDimensionValue,\n ProductListsDataActions,\n ProductListType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n addItemToProductListAction,\n AddItemToProductListInput,\n ArrayExtensions,\n createProductList,\n CreateProductListInput,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getScanResult,\n GetScanResultInput,\n getSelectedVariant,\n IDimensionForSelectedVariant,\n IPromiseQueue,\n QuickOrderTemplate,\n QuickOrderTemplateLine,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n Heading,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { ActiveProductListInput } from './actions';\nimport {\n IQuickOrderGridActionsProps,\n IQuickOrderGridActionsViewProps,\n IQuickOrderGridRowCallbacks,\n IQuickOrderGridState,\n QuickOrderGridActionsView,\n QuickOrderGridDrawer,\n QuickOrderGridFormComponent,\n QuickOrderGridProduct,\n QuickOrderGridTableComponent\n} from './components';\nimport { IQuickOrderGridData } from './quick-order-grid.data';\nimport { IQuickOrderGridProps, IQuickOrderGridResources } from './quick-order-grid.props.autogenerated';\n\n/**\n * QuickOrder Grid View props.\n */\nexport interface IQuickOrderGridViewProps extends IQuickOrderGridProps {\n header: JSX.Element;\n actions?: INodeProps;\n isB2bCustomer?: boolean;\n isQuickOrderGridFormExpanded: boolean;\n contentProps: INodeProps;\n drawer: INodeProps;\n loading?: React.ReactNode;\n quickOrderGridForm: INodeProps;\n quickOrderGridFormProductContent: INodeProps;\n quickOrderGridFormMsgContent: INodeProps;\n quickOrderGridProps: IModuleProps;\n form: React.ReactNode;\n configure?: IProductDimensionConfigureViewProps;\n isMobileView: boolean;\n container?: JSX.Element;\n orderActions?: IQuickOrderGridActionsViewProps | null;\n bulkPurchase?: React.ReactNode;\n}\n\n/**\n * QuickOrder Grid View port.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * QuickOrderGrid component.\n * @extends {React.PureComponent>}\n */\nclass QuickOrderGrid extends React.PureComponent, IQuickOrderGridState> {\n private readonly _productTextInput: React.RefObject;\n\n private readonly _quantityInput: React.RefObject;\n\n private readonly _waitTime: number = 500;\n\n private readonly _dimensionUpdateQueueMaxLength: number = 2;\n\n private readonly _errorCssClass: string = 'danger';\n\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n\n private readonly _quickOrderGridFormClass: string;\n\n private readonly _quickOrderGridFormProductContent: string;\n\n private readonly _quickOrderGridFormMsgContent: string;\n\n private readonly _telemetryContent: ITelemetryContent;\n\n private readonly _dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(this._dimensionUpdateQueueMaxLength);\n\n private _dimensions: { [id: number]: string } = {};\n\n private readonly _cssClassNameConfigure: string = 'ms-quick-order_grid__content-form-main';\n\n private readonly _className: string = 'ms-quick-order-grid';\n\n // @ts-expect-error: Debouce needs to be used as type.\n private _cancellabelDebounce: debounce;\n\n private readonly _quickOrderGridCallbacks: IProductDimensionCallbacks = {\n /**\n * Get Dropdown name.\n * @param selectedDimensionId - Dimension type.\n * @param selectedDimensionValueId - Resources.\n * @returns Dropdown name.\n */\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this._dimensions[selectedDimensionId] = selectedDimensionValueId;\n return this._dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: string) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw new Error(error);\n }\n });\n },\n\n /**\n * Get Dropdown name.\n * @param dimensionType - Dimension type.\n * @param resources - Resources.\n * @returns Dropdown name.\n */\n getDropdownName: (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n\n /**\n * Method to call on dimension change.\n * @param isUpdatingDimension - Flag to update dimension.\n */\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n }\n };\n\n private readonly _quickOrderGridRowCallbacks: IQuickOrderGridRowCallbacks = {\n /**\n * Method to call remove button.\n * @param line - Grid row product.\n */\n onRemoveItem: (line: QuickOrderGridProduct): void => {\n this._removeItemRowFromTable(line.productLine);\n },\n\n /**\n * Method to call on change quantity button.\n * @param productListLineId - Grid row product list line id.\n * @param quantity - Product quantity.\n * @returns - Falg to get confirmation for action.\n */\n onChangeQuantity: (productListLineId: string | undefined, quantity: number): boolean => {\n return this._changeRowQuantity(productListLineId, quantity);\n }\n };\n\n public constructor(props: IQuickOrderGridProps) {\n super(props);\n this._productTextInput = React.createRef();\n this._quantityInput = React.createRef();\n\n this._telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.state = {\n isQuickOrderGridFormExpanded: false,\n quantity: 1,\n productResponse: undefined,\n productDimensions: undefined,\n productDimensionErrorState: {\n configureErrors: {}\n },\n isMobile: this.isMobile,\n products: [],\n isUpdatingDimension: false,\n productListId: ''\n };\n\n this._quickOrderGridFormClass = 'ms-quick-order-grid__content-form';\n this._quickOrderGridFormProductContent = 'ms-quick-order-grid__content-form-main';\n this._quickOrderGridFormMsgContent = 'ms-quick-order-grid__content-form-msg';\n }\n\n @computed public get isMobile(): boolean {\n const size = isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n return size === 'xs';\n }\n\n public render(): JSX.Element | null {\n const { data } = this.props;\n if (!data.customerInformation.result) {\n return null;\n }\n const quickOrderTemplate = data.quickOrderTemplate;\n\n if (quickOrderTemplate?.result !== undefined) {\n this.setState({\n products: quickOrderTemplate.result.quickOrderTemplateLines,\n productListId: quickOrderTemplate.result.productList.Id\n });\n }\n const { className = '', maxQuantity } = this.props.config;\n const customerInfo = this.props.data.customerInformation.result;\n const {\n quickOrderGridModuleHeading,\n quickOrderGridModuleDescription,\n quickOrderGridAddtogrid,\n quickOrderGridProductQuantityInputLabel,\n quickOrderGridProductInputLabel,\n quickOrderGridProductDimensionTypeColor,\n quickOrderGridProductDimensionTypeConfiguration,\n quickOrderGridSelectDimensionFormatString,\n quickOrderGridProductDimensionTypeSize,\n quickOrderGridProductDimensionTypeStyle,\n quickOrderGridProductDimensionTypeAmount,\n quickOrderGridModulePageHeading\n } = this.props.resources;\n\n const productConfigureResources: IProductDimensionConfigureResources = {\n selectDimensionFormatString: quickOrderGridSelectDimensionFormatString,\n productDimensionTypeColor: quickOrderGridProductDimensionTypeColor,\n productDimensionTypeConfiguration: quickOrderGridProductDimensionTypeConfiguration,\n productDimensionTypeSize: quickOrderGridProductDimensionTypeSize,\n productDimensionTypeStyle: quickOrderGridProductDimensionTypeStyle,\n productDimensionTypeAmount: quickOrderGridProductDimensionTypeAmount\n };\n\n const { isQuickOrderGridFormExpanded, productDimensionErrorState, productResponse, productDimensions } = this.state;\n\n const headerClassName = `${this._className}__header`;\n\n const header = (\n
    \n \n
    \n );\n\n const viewProps: IQuickOrderGridViewProps = {\n ...(this.props as IQuickOrderGridProps),\n\n quickOrderGridProps: { className: classnames('ms-quick-order-grid', className), moduleProps: this.props },\n contentProps: { className: 'ms-quick-order-grid__content' },\n isB2bCustomer: customerInfo?.IsB2b,\n header,\n actions: {\n className: `${this._className}-action-bar`,\n tag: 'div'\n },\n drawer: {\n tag: QuickOrderGridDrawer,\n className: `${this._className}__drawer`,\n collapseProps: { isOpen: this.state.isQuickOrderGridFormExpanded },\n moduleHeadingText: quickOrderGridModuleHeading,\n moduleDescriptionText: quickOrderGridModuleDescription,\n requestContext: this.props.context.request,\n telemetryContent: this._telemetryContent\n },\n bulkPurchase: this._renderBulkPurchase(),\n quickOrderGridForm: {\n className: `${this._quickOrderGridFormClass} ${isQuickOrderGridFormExpanded ? 'qo-show' : 'qo-hide'}`\n },\n quickOrderGridFormProductContent: {\n className: this._quickOrderGridFormProductContent\n },\n quickOrderGridFormMsgContent: {\n className: this._quickOrderGridFormMsgContent\n },\n form: QuickOrderGridFormComponent({\n productTextInput: this._productTextInput,\n quantityTextInput: this._quantityInput,\n isAddtoListDisabled: !productResponse,\n ariaLabelAddtoCart: quickOrderGridAddtogrid,\n ariaLabelProduct: quickOrderGridProductInputLabel,\n ariaLabelQuantity: quickOrderGridProductQuantityInputLabel,\n maxChars: 50,\n maxQuantity,\n moduleClassName: this._className,\n quickOrderGridState: this.state,\n handleInputChange: this._handleInputChange,\n handleQuantityChange: this._handleQuantityChange,\n handleAddProductListClick: this._addItemToProductListLine\n }),\n configure:\n productResponse && productDimensions\n ? getProductConfigure(\n this._cssClassNameConfigure,\n this.props.context,\n this.props.friendlyName,\n this.props.telemetry,\n quickOrderGridSelectDimensionFormatString,\n productConfigureResources,\n this._quickOrderGridCallbacks,\n productResponse,\n productDimensions,\n productDimensionErrorState\n )\n : undefined,\n isQuickOrderGridFormExpanded: this.state.isQuickOrderGridFormExpanded,\n isMobileView: this.state.isMobile,\n container: ArrayExtensions.hasElements(this.state.products) ? this._renderListContainer() : undefined,\n orderActions: this._renderQuickOrderGridActions(quickOrderTemplate?.result)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderQuickOrderGridActions(quickOrderTemplate: QuickOrderTemplate | undefined): IQuickOrderGridActionsViewProps | null {\n const { typeName, context, resources } = this.props;\n const {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n } = resources;\n if (ArrayExtensions.hasElements(quickOrderTemplate?.quickOrderTemplateLines)) {\n const quickOrderGridActions: IQuickOrderGridActionsProps = {\n data: { quickOrderTemplate },\n moduleClassName: this._className,\n id: 'quick-order-grid',\n typeName,\n context,\n handlers: {\n removeProductList: this._removeProductList\n },\n resources: {\n quickOrderGridDeleteButtonText,\n quickOrderGridBuySelectedButtonText,\n quickOrderGridBuySelectedButtonAriaLabel,\n quickOrderGridBuySelectedAddingToCartErrorNotificationTitle,\n quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel,\n quickOrderGridGoToCartText,\n quickOrderGridDialogCloseText,\n quickOrderGridSingleItemText,\n quickOrderGridMultiLineItemFormatText,\n quickOrderGridMultiLinesFormatText,\n quickOrderGridHeaderMessageText,\n addedQuantityText,\n originalPriceText,\n currentPriceText,\n freePriceText\n }\n };\n\n return QuickOrderGridActionsView(quickOrderGridActions);\n }\n return null;\n }\n\n /**\n * Renders bulk purchase module.\n * @returns Bulk purchase module react node.\n */\n private _renderBulkPurchase(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!ArrayExtensions.hasElements(this.props.slots.bulkPurchaseSlots)) {\n return null;\n }\n\n const containerClass = `${this._className}__bulk-purchase`;\n return (\n
    \n {React.cloneElement(this.props.slots.bulkPurchaseSlots[0] as React.ReactElement, {\n productDimensions: this.state.productDimensions\n })}\n
    \n );\n }\n\n /**\n * Render list container.\n * @returns JSX element.\n */\n private _renderListContainer(): JSX.Element {\n const containerClass = `${this._className}__table-content`;\n return
    {this._renderQuickOrderTable(this._className)}
    ;\n }\n\n /**\n * Initial the products on quick order.\n * @returns List of quick order products or undefined.\n */\n private _initQuickOrderGridProducts(): QuickOrderGridProduct[] {\n const products: QuickOrderTemplateLine[] = this.state.products;\n\n const quickOrderGridProduct: QuickOrderGridProduct[] = products.map((product: QuickOrderTemplateLine) => {\n return new QuickOrderGridProduct(product);\n });\n\n return ArrayExtensions.validValues(quickOrderGridProduct);\n }\n\n /**\n * Method to call on clear button.\n */\n private readonly _removeProductList = () => {\n const { context, data, telemetry, resources } = this.props;\n const { quickOrderTemplate } = data;\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken && quickOrderTemplate && quickOrderTemplate.result) {\n ProductListsDataActions.deleteAsync({ callerContext: context.actionContext }, quickOrderTemplate.result.productList)\n .then(() => {\n window.location.reload();\n })\n .catch((error: string) => {\n telemetry.warning('[quick-order-grid] Unable to delete product list.');\n telemetry.error(error);\n this._updateStatusState(\n resources.quickOrderGridDeleteProductListFailedText,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n });\n } else {\n telemetry.warning('[quick-order-grid] Failed to delete product list. Product List was not found');\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param className - Class name.\n * @returns JSX element.\n */\n private _renderQuickOrderTable(className: string): JSX.Element {\n const tableClassName = `${className}__table-list`;\n\n return (\n \n );\n }\n\n /**\n * Method to called on product input change.\n * @param query - Product inventory info.\n */\n private readonly _handleInputChange = (query: string): void => {\n const queryMinLength = 4;\n if (!query || query.length > queryMinLength) {\n this.setState({ quantity: 0, productDimensions: [], productResponse: undefined });\n this._updateStatusState('', '', '', false);\n }\n if (this._cancellabelDebounce) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call -- existing code.\n this._cancellabelDebounce.cancel();\n }\n\n const { telemetry, context } = this.props;\n const zeroNumber = 0;\n if (!StringExtensions.isNullOrEmpty(query)) {\n this._cancellabelDebounce = debounce(() => {\n getScanResult(\n new GetScanResultInput(\n context.actionContext.requestContext.apiSettings,\n query,\n context.actionContext.requestContext.apiSettings.channelId\n ),\n this.props.context.actionContext\n )\n .then(results => {\n this.setState({\n productResponse: results?.Product,\n productDimensions: results?.ProductDimensionFull,\n isQuickOrderGridFormExpanded: true\n });\n })\n .catch((error: Error) => {\n telemetry.exception(error);\n telemetry.debug('Unable to get scan results');\n });\n }, this._waitTime);\n\n setTimeout(() => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Existing code.\n this._cancellabelDebounce();\n }, zeroNumber);\n this.setState({ isQuickOrderGridFormExpanded: true });\n } else {\n this.setState({ productResponse: undefined, isQuickOrderGridFormExpanded: true });\n }\n };\n\n /**\n * Method to called on quantity change.\n * @param value - Quantity value.\n */\n private readonly _handleQuantityChange = (value: string): void => {\n const currentValue = Number.parseInt(value, 10);\n const inputElement = this._quantityInput.current instanceof HTMLInputElement && this._quantityInput.current;\n const quantityChangeDebounceTimeout = 200;\n const minimumQuantity = 0;\n\n this.setState({ quantity: currentValue }, () => {\n debounce(() => {\n if (!Number.isNaN(this.state.quantity) && !(this.state.quantity < minimumQuantity) && inputElement) {\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\n inputElement.setAttribute('value', currentValue.toString());\n }\n }, quantityChangeDebounceTimeout)();\n });\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionType - Dimension Type.\n * @param resources - String resources.\n * @returns Dropdwon label.\n */\n private readonly _getDropdownName = (dimensionType: number, resources: IProductDimensionConfigureResources): string => {\n const isGiftCard = this.state.productResponse?.IsGiftCard;\n\n switch (dimensionType) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n /**\n * Method to update dimension and product in UI.\n */\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n const { productDimensions, productResponse } = this.state;\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n if (!productResponse || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this._dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // eslint-disable-next-line no-console -- Testing.\n console.log(this.state.isUpdatingDimension);\n\n // Step 1: Update state to indicate which dimensions are selected\n if (this.state.productDimensionErrorState.otherError) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const clearOtherErrorState = { ...this.state.productDimensionErrorState };\n clearOtherErrorState.otherError = undefined;\n this.setState({ productDimensionErrorState: clearOtherErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const dimensionKey of Object.keys(dimensionsToUpdate)) {\n if (this.state.productDimensionErrorState.configureErrors[dimensionKey]) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code.\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors[dimensionKey] = undefined;\n\n this.setState({ productDimensionErrorState: errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n ?.map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n // eslint-disable-next-line no-async-promise-executor -- existing code\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n productResponse.MasterProductId ? productResponse.MasterProductId : productResponse.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n const variantProduct = await selectedProduct;\n this.setState({ productResponse: variantProduct !== null ? variantProduct : undefined });\n };\n\n /**\n * Method to get updated dimension value.\n * @param productDimensionFull - Product dimension full.\n * @param newValueId - New Dimension value.\n * @returns Dimension Value.\n */\n private readonly _updateDimensionValue = (\n productDimensionFull: IDimensionForSelectedVariant,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n /**\n * Method to get dropdwon name.\n * @param dimensionTypeValue - Dimension Type.\n * @param resources - String resources.\n * @param isGiftCard - Flag to check if its a giftcard product.\n * @returns Dropdwon error label.\n */\n private readonly _getDimensionErrorString = (\n dimensionTypeValue: number,\n resources: IQuickOrderGridResources,\n isGiftCard?: boolean\n ): string => {\n const amountErrorMessage = resources.quickOrderGridproductDimensionTypeAmountErrorMessage;\n\n switch (dimensionTypeValue) {\n case ProductDimensionType.Color: // ProductDimensionType.Color\n return resources.quickOrderGridproductDimensionTypeColorErrorMessage;\n case ProductDimensionType.Configuration: // ProductDimensionType.Configuration\n return resources.quickOrderGridproductDimensionTypeConfigurationErrorMessage;\n case ProductDimensionType.Size: // ProductDimensionType.Size\n return resources.quickOrderGridproductDimensionTypeSizeErrorMessage;\n case ProductDimensionType.Style: // ProductDimensionType.Style\n return isGiftCard ? amountErrorMessage : resources.quickOrderGridproductDimensionTypeStyleErrorMessage;\n default:\n return '';\n }\n };\n\n /**\n * Initial the products on quick order.\n * @param productResponse - Simple Product.\n * @param quantity - Product Quantity.\n * @returns Flag to validate productlistline.\n */\n private readonly _validateCart = (productResponse: SimpleProduct, quantity: number): boolean => {\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain -- existing code\n const missingDimensions = productResponse.Dimensions?.filter(\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\n );\n const minimumQuantity = 0;\n if (ArrayExtensions.hasElements(missingDimensions)) {\n const userMessage = this._getConfigureErrors(missingDimensions, false);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code\n if (this.state.productDimensionErrorState.configureErrors) {\n // eslint-disable-next-line react/no-access-state-in-setstate -- existing code\n const errorState = { ...this.state.productDimensionErrorState };\n errorState.configureErrors = userMessage;\n\n this.setState({ productDimensionErrorState: errorState });\n return false;\n }\n }\n\n if (quantity <= minimumQuantity) {\n const resources = this.props.resources;\n this._updateStatusState(resources.quickOrderGridWrongQuantityErrorMsg, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n }\n return true;\n };\n\n /**\n * Initial the products on quick order.\n * @param result - Simple Product.\n * @param isGiftCard - Product Quantity.\n * @returns Flag to validate cart.\n */\n private _getConfigureErrors(\n result: ProductDimension[] | undefined,\n isGiftCard?: boolean\n ): { [configureId: string]: string | undefined } {\n if (!result) {\n return {};\n }\n const dimensions: { [configureId: string]: string | undefined } = {};\n const resources = this.props.resources;\n for (const dimension of result) {\n dimensions[dimension.DimensionTypeValue] = this._getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\n }\n return dimensions;\n }\n\n /**\n * Method to call on quantity change in row.\n * @param itemKey - Product Key.\n * @param quantity - Product quantity.\n * @returns Flag to update status.\n */\n private readonly _changeRowQuantity = (itemKey: string | undefined, quantity: number): boolean => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n if (quickOrderTemplate?.result) {\n const quickOrderTemplateLinesData = quickOrderTemplate.result.quickOrderTemplateLines;\n if (ArrayExtensions.hasElements(quickOrderTemplateLinesData)) {\n const orderLineIndex = quickOrderTemplateLinesData.findIndex(\n (lines: QuickOrderTemplateLine) => lines.productListLine.LineId === itemKey\n );\n const newProductListLine = { ...quickOrderTemplateLinesData[orderLineIndex] };\n if (quickOrderTemplateLinesData[orderLineIndex].productListLine.Quantity === quantity) {\n return true;\n }\n const previousQuantity = newProductListLine.productListLine.Quantity;\n newProductListLine.productListLine.Quantity = quantity;\n const { fullProduct, ...line } = newProductListLine;\n\n ProductListsDataActions.updateProductListLinesAsync(\n { callerContext: context.actionContext },\n quickOrderTemplate.result.productList.Id,\n [line.productListLine]\n )\n .then(list => {\n if (ArrayExtensions.hasElements(list)) {\n const newLine = list.find(lines => lines.LineId === itemKey);\n quickOrderTemplateLinesData[orderLineIndex].productListLine = newLine!;\n const updatedLines = [...quickOrderTemplateLinesData];\n updatedLines[orderLineIndex] = { fullProduct, productListLine: newLine! };\n const updatedProductList = { ...quickOrderTemplate.result, ProductListLines: updatedLines };\n context.actionContext.update(\n new ActiveProductListInput(context.actionContext.requestContext),\n updatedProductList\n );\n return true;\n }\n\n return false;\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable to update product quantity.');\n telemetry.error(error.message);\n const userMessage = 'Failed to update quantity value.';\n newProductListLine.productListLine.Quantity = previousQuantity;\n this._updateStatusState(userMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return false;\n });\n }\n return false;\n }\n\n return false;\n };\n\n /**\n * Method to call on remove item from table.\n * @param line - Order Template Line.\n */\n private readonly _removeItemRowFromTable = (line: QuickOrderTemplateLine): void => {\n const { context, data, telemetry } = this.props;\n const { quickOrderTemplate } = data;\n\n if (quickOrderTemplate?.result) {\n const userToken = context.request.user.isAuthenticated && context.request.user.token;\n if (userToken) {\n ProductListsDataActions.removeProductListLinesAsync(\n { callerContext: context.actionContext },\n line.productListLine.ProductListId!,\n [line.productListLine]\n )\n .then(() => {\n window.location.reload(false);\n })\n .catch((error: Error) => {\n telemetry.warning('[quick-order-grid] Unable remove item from product list grid');\n telemetry.error(error.message);\n });\n } else {\n telemetry.warning('[quick-order-grid] Unable remove items from product list grid user token was not found');\n }\n }\n };\n\n /**\n * Method to call on add item from form.\n */\n private readonly _addItemToProductListLine = async (): Promise => {\n const {\n context: { actionContext },\n resources,\n telemetry\n } = this.props;\n const {\n quickOrderGridAddedToGridSuccessMessage,\n quickOrderGridAddedToGridFailureMessage,\n quickOrderGridAddedToGridDuplicateError\n } = resources;\n const { productResponse, quantity, productListId } = this.state;\n\n this._updateStatusState('', '', '', false);\n\n if (productResponse !== undefined && this._validateCart(productResponse, quantity)) {\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n await this._createProductList();\n }\n\n if (StringExtensions.isNullOrWhitespace(this.state.productListId)) {\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return;\n }\n const input = new AddItemToProductListInput(\n this.state.productListId,\n productResponse.RecordId,\n quantity,\n productResponse.DefaultUnitOfMeasure ?? 'ea'\n );\n\n await addItemToProductListAction(input, actionContext)\n .then(result => {\n if (result.ProductListId) {\n this._updateStatusState(quickOrderGridAddedToGridSuccessMessage, 'success', 'fas fa-check', true);\n window.location.reload();\n this.setState({});\n }\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error trying to Update Grid Line from the quick order grid');\n if (error.name === 'Microsoft_Dynamics_Commerce_Runtime_DuplicateObject') {\n this._updateStatusState(\n quickOrderGridAddedToGridDuplicateError,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n } else {\n this._updateStatusState(\n quickOrderGridAddedToGridFailureMessage,\n this._errorCssClass,\n this._errorCssGlyphClass,\n true\n );\n }\n });\n }\n };\n\n /**\n * Method to create product list.\n * @returns - ProductListId.\n */\n private _createProductList = async (): Promise => {\n const {\n context: { actionContext },\n telemetry,\n resources\n } = this.props;\n const { productListId } = this.state;\n const { quickOrderGridAddedToGridFailureMessage } = resources;\n\n if (StringExtensions.isNullOrWhitespace(productListId)) {\n const input = new CreateProductListInput('', ProductListType.QuickOrder);\n\n await createProductList(input, actionContext)\n .then(result => {\n if (!StringExtensions.isNullOrWhitespace(result.Id)) {\n this.setState({ productListId: result.Id });\n return result.Id;\n }\n return '';\n })\n .catch((error: Error) => {\n telemetry.debug('[quick-order-grid] Error on creating productlist from quick order grid');\n telemetry.error(error.message);\n this._updateStatusState(quickOrderGridAddedToGridFailureMessage, this._errorCssClass, this._errorCssGlyphClass, true);\n return '';\n });\n return '';\n }\n\n return productListId;\n };\n\n /**\n * Method to create product list.\n * @param messageText - Message Text.\n * @param statusCssString - Css class names.\n * @param messageGlyph - Glyph string.\n * @param isOpen - Flag to show.\n */\n private readonly _updateStatusState = (messageText: string, statusCssString: string, messageGlyph: string, isOpen: boolean): void => {\n this.setState({\n // eslint-disable-next-line react/no-unused-state -- Showing user message in Form component.\n stateMessage: {\n messageText,\n statusCssString,\n messageGlyph,\n isOpen\n }\n });\n };\n}\nexport default QuickOrderGrid;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { 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 \n {heading}\n {errors}\n {select}\n \n );\n};\n\n/**\n * Render product dimension/configure container.\n * @param configure -- Product dimension configuration.\n * @returns Container to have dimension dropdown.\n */\nconst renderConfigure = (configure?: IProductDimensionConfigureViewProps): JSX.Element | null => {\n if (configure !== undefined) {\n const { containerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n }\n return null;\n};\n\n/**\n * Render product dimension/configure container.\n * @param form -- Form props.\n * @param isMobileView -- Flag to check mobile view.\n * @param quickOrderForm - Form component container.\n * @param quickOrderProductContent - Form product component.\n * @param quickOrderMessageContent - Form user message component.\n * @param configure - Product Dimension component.\n * @returns Jsx element of quick order form component.\n */\nconst renderForm = (\n form: IQuickOrderGridFormViewProps,\n isMobileView: boolean,\n quickOrderForm: INodeProps,\n quickOrderProductContent: INodeProps,\n quickOrderMessageContent: INodeProps,\n configure?: IProductDimensionConfigureViewProps\n) => {\n return isMobileView ? (\n \n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.userMessage}\n {form.addToListBtn}\n \n \n ) : (\n \n {form.userMessage}\n \n {form.product}\n {renderConfigure(configure)}\n {form.quantity}\n {form.addToListBtn}\n \n \n );\n};\n\n/**\n * Retrieves current sort criteria.\n * @param props - QuickOrder Grid view props.\n * @returns - Render View.\n */\nconst quickOrderGridView: React.FC = props => {\n const {\n quickOrderGridProps,\n contentProps,\n form,\n quickOrderGridForm,\n drawer,\n configure,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n isMobileView,\n header,\n container,\n actions,\n orderActions\n } = props;\n\n return (\n \n {header}\n {actions && (\n \n {orderActions?.addProductListToBag}\n {orderActions?.removeProductList}\n \n )}\n \n \n {renderForm(\n form as IQuickOrderGridFormViewProps,\n isMobileView,\n quickOrderGridForm,\n quickOrderGridFormProductContent,\n quickOrderGridFormMsgContent,\n configure\n )}\n {props.bulkPurchase}\n \n \n {container}\n \n );\n};\n\nexport default quickOrderGridView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\nimport { format, INodeProps, Progress } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface IHistogramItemsProps {\n ratingsSummary: RatingsSummary;\n resources: IHistogramItemsResources;\n locale: string;\n onClick(stars: number): void;\n}\n\nexport interface IHistogramItemsResources {\n barItemAriaLabel: string;\n}\n\nexport interface IHistogramItemViewProps {\n starLabel: React.ReactElement;\n bar: React.ReactElement;\n percentage: React.ReactElement;\n buttonProps: INodeProps;\n}\n\n/**\n * CartLineItems component.\n */\n\nexport const HistogramItems = (props: IHistogramItemsProps): IHistogramItemViewProps[] => {\n const { ratingsSummary } = props;\n const totalRatingsCount: number = ratingsSummary.totalRatingsCount || 0;\n if (totalRatingsCount === 0) {\n return [];\n }\n return [\n renderItem(props, 5, ratingsSummary.star5Count, totalRatingsCount),\n renderItem(props, 4, ratingsSummary.star4Count, totalRatingsCount),\n renderItem(props, 3, ratingsSummary.star3Count, totalRatingsCount),\n renderItem(props, 2, ratingsSummary.star2Count, totalRatingsCount),\n renderItem(props, 1, ratingsSummary.star1Count, totalRatingsCount)\n ];\n};\n\nconst renderItem = (props: IHistogramItemsProps, stars: number, count?: number, totalCount?: number): IHistogramItemViewProps => {\n count = count || 0;\n totalCount = totalCount || 0;\n const percentage = totalCount === 0 ? 0 : count / totalCount;\n const formattedPercent = new Intl.NumberFormat(props.locale, { style: 'percent' }).format(percentage);\n const ariaLabel = format(props.resources.barItemAriaLabel, stars, formattedPercent);\n\n return {\n starLabel: (\n \n ),\n percentage: (\n \n ),\n bar: ,\n buttonProps: {\n tag: 'button',\n className: 'ms-ratings-histogram__item',\n onClick: () => {\n props.onClick(stars);\n }\n }\n };\n};\n\nexport const AverageRatingNumber: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return (\n

    \n {props.summary.averageRating}\n {` `}/ 5\n

    \n );\n};\n\nexport const TotalReviews: React.FC<{ summary: RatingsSummary }> = (props: { summary: RatingsSummary }) => {\n return

    {props.summary.totalRatingsCount}

    ;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { RatingComponent } from '@msdyn365-commerce/components';\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { format, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { createRatingsReviewsStateInput } from '../../actions/ratings-reviews-state-data-action';\nimport { AverageRatingNumber, HistogramItems, IHistogramItemViewProps, TotalReviews } from './component/components';\nimport { IRatingsHistogramData } from './ratings-histogram.data';\nimport { IRatingsHistogramProps } from './ratings-histogram.props.autogenerated';\n\nexport interface IRatingsHistogramViewProps extends IRatingsHistogramProps {\n className: string;\n histogramItems: IHistogramItemViewProps[];\n moduleProps: IModuleProps;\n heading: React.ReactNode;\n averageRating: React.ReactNode;\n averageNumber: React.ReactNode;\n totalReviews: React.ReactNode;\n histogramProps: INodeProps;\n ratingsSummaryProps: INodeProps;\n callbacks: IRatingsHistogramCallbacks;\n}\n\nexport interface IRatingsHistogramCallbacks {\n selectFilterBy(stars: number): void;\n}\n\n/**\n * RatingsHistogram component.\n * @extends {React.Component>}\n */\n@observer\nclass RatingsHistogram extends React.PureComponent> {\n constructor(props: IRatingsHistogramProps) {\n super(props);\n this.selectFilterBy = this.selectFilterBy.bind(this);\n }\n\n public render(): JSX.Element | null {\n const { resources } = this.props;\n const { className, heading } = this.props.config;\n const {\n ratingsSummary: { result: ratingsSummary }\n } = this.props.data;\n const ratingCount = ratingsSummary && ratingsSummary.totalRatingsCount ? `${ratingsSummary.totalRatingsCount}` : '0';\n\n const completeClass = classname('ms-ratings-histogram', className);\n const viewProps: IRatingsHistogramViewProps = {\n ...this.props,\n className: completeClass,\n callbacks: {\n selectFilterBy: this.selectFilterBy\n },\n moduleProps: {\n moduleProps: this.props,\n className: completeClass\n },\n histogramItems: ratingsSummary\n ? HistogramItems({\n ratingsSummary,\n resources: { ...resources },\n locale: this.props.context.request.locale,\n onClick: this.selectFilterBy\n })\n : [],\n averageRating: ratingsSummary && (\n \n ),\n averageNumber: ratingsSummary && ,\n totalReviews: ratingsSummary && ,\n ratingsSummaryProps: { className: 'ms-ratings-histogram__summary' },\n heading: heading && (\n \n ),\n histogramProps: { className: 'ms-ratings-histogram__histogram' }\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n public handleHeadingChange = (event: Msdyn365.ContentEditableEvent) => (this.props.config.heading!.text = event.target.value);\n\n public selectFilterBy(stars: number): void {\n const filterKey = `${stars}`;\n this.props.context.actionContext.update(createRatingsReviewsStateInput({ filterKey }), { filterKey });\n }\n}\n\nexport default RatingsHistogram;\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 { IHistogramItemViewProps } from './component/components';\nimport { IRatingsHistogramViewProps } from './ratings-histogram';\n\nconst RatingsHistogramView: React.FC = props => {\n const { heading, histogramItems, histogramProps, moduleProps } = props;\n\n return (\n \n {heading}\n \n {histogramItems.map(item => {\n return histogramItem(item);\n })}\n \n \n );\n};\n\nconst histogramItem = (props: IHistogramItemViewProps) => {\n return (\n \n {props.starLabel}\n {props.bar}\n {props.percentage}\n \n );\n};\n\nexport default RatingsHistogramView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { observable } from 'mobx';\n\n/**\n * State information related to what is needed to succesfully perform a autosuggest.\n */\nexport class SearchState {\n @observable public searchText?: string;\n\n @observable public defaultBasicSearchUrl?: string;\n\n @observable public searchQueryStringParameter?: string;\n}\n"],"names":["showStrikethroughPricing","props","originalPrice","getOriginalPrice","data","price","CustomerContextualPrice","Math","max","BasePrice","TradeAgreementPrice","AdjustedPrice","renderCurrentPrice","initialPrice","formatCurrency","React","className","itemProp","undefined","freePriceText","returnPrice","Intl","NumberFormat","context","cultureFormatter","locale","style","currency","currencyCode","currencyDisplay","format","_unused","renderCurrentPriceWithOriginalPrice","originalPriceText","currentPriceText","savingsText","msdyn365Commerce","createComponent","component","__assign","classnames","PromoBannerCloseButton","_ref","closeButtonAriaLabel","label","telemetryContent","onClose","payLoad","getPayloadObject","TelemetryConstant","PromoBannerClose","attributes","getTelemetryAttributes","Object","assign","onClick","PromoBannerLinks","links","requestContext","onTextChange","editableLinks","_mapEditableLinks","length","Msdyn365","editProps","linkdata","forEach","link","index","linkText","contentAction","etext","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","role","additionalProperties","onTelemetryClick","push","PromoBannerText","text","tag","onEdit","PromoBanner","constructor","state","animating","isVisible","activeIndex","getTelemetryObject","this","request","telemetryPageName","friendlyName","telemetry","handleTextChange","event","config","bannerMessages","target","value","handleLinkClick","handleLinkTextChange","linkIndex","_next","nextIndex","_isLastItem","_goToIndex","_previous","_isFirstItem","setState","_onDismiss","render","dismissEnabled","interval","hideFlipper","autoplay","closeButtonLabel","resources","error","viewProps","_objectSpread","onDismiss","handleLinks","handleText","promoBannerProps","moduleProps","PromoBannerTextProps","PromoBannerLinksProps","contentProps","CarouselProps","Carousel","next","previous","onIndicatorsClickHandler","hideIndicator","closeButton","renderView","slides","map","message","_message$links","Node","key","href","Module","items","SuggestionType","AutoSuggestInput","searchText","top","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","searchQuery","topResultsCount","async","_getAutoSuggest","input","autosuggest","ctx","searchCriteria","ProductSearchCriteria","SearchCondition","Context","ChannelId","apiSettings","channelId","CatalogId","catalogId","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","callerContext","queryResultSettings","Paging","Top","item","ImageUrl","generateImageUrl","AllSearchResults","createObservableDataAction","id","action","Error","autoSuggestPromises","Promise","all","then","inputData","KeywordSuggestionsComponent","suggestions","reactNodes","_assembleNode","Value","replace","RegExp","attribute","Id","_generateLink","_getHighlightedText","suggestion","searchPageURL","searchQsp","formattedLink","route","indexOf","formattedText","dangerouslySetInnerHTML","getRichTextHtml","ProductSuggestionsComponent","autoSuggestProps","actionContext","productSuggestionHeading","moduleType","moduleId","title","_renderTitle","productAutoSuggestionHeading","Value3","DecimalValue","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","recid","getProductPageUrlSync","adjustedPrice","basePrice","PriceComponent","typeName","CategorySuggestionsComponent","categorySuggestionHeading","categoryAutoSuggestionHeading","splitValue","split","pop","_getCategoryLink","searchRefiners","urlPath","categoryRefiners","find","refiners","KeyName","refiner","Values","RefinerRecordId","parseInt","encodedRefiner","encodeURIComponent","JSON","stringify","compressRefiners","compressedRefinerKeys","compressedRefiners","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","isSearchFormExpanded","searchTextInput","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","handleSearchClick","query","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","onInputChange","e","inputNode","type","name","placeholder","ref","onChange","maxLength","submitBtnNode","Button","searchBtnNode","cancelBtn","submitBtn","searchBtn","LabelComponent","searchLabelClass","searchLabelArialLabel","searchtext","searchCollapsedLabel","innerRef","Search","super","waitTime","_focusOutTarget","closest","_clearAutoSuggestState","_keyup","keyCode","KeyCodes","Escape","window","document","body","classList","toggle","formReference","current","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","update","createSearchStateInput","_handleSearchClick","console","log","updatedIsSearchFormExpanded","headerElem","querySelector","add","documentElement","scrollTop","remove","_handleInputChange","cancellabelDebounce","cancel","_debounce","getSearchSuggestionsAction","_getSuggestionType","inputSuggestionType","results","_getSearchRefiners","autoSuggestAriaLabel","_setAutoSuggestResultCount","catch","exception","debug","setTimeout","suggestionTypes","distinctSuggestionTypes","suggestionTypeItem","charAt","toUpperCase","slice","join","_handleSubmit","app","preventDefault","focus","searchURL","_appendQueryParams","getUrlSync","location","_handleCancelSearchChange","isInitialState","qsp","result","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","setAttribute","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","inSearchMode","searchInputMaxLength","suggestionTypeCriterion","searchFormClass","searchBtnClass","addEventListener","componentWillUnmount","removeEventListener","componentDidUpdate","params","isEditor","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","keywordSuggestions","filter","i","Keyword","None","productSuggestions","Product","categorySuggestions","Category","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","SearchBtn","BtnWrapper","FormWrapper","autoComplete","onSubmit","UlKeyword","UlProduct","UlCategory","searchLabel","searchLabelText","form","autosuggestKeyword","autosuggestProduct","autosuggestCategory","callbacks","getProductSearchRefinersAsync","_renderButton","_renderForm","_renderKeywordSuggestions","_renderProductSuggestions","_renderCategorySuggestions","Quantity","inputRef","_validateMin","minValue","min","isNaN","currentInput","currentCount","_onIncrement","bind","_onDecrement","_handleChange","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","disabled","incDisabled","currentValue","decrementButtonAriaLabel","tabIndex","color","pattern","onBlur","inputQuantityAriaLabel","incrementButtonAriaLabel","invokeCallback","amount","prevState","inputElement","HTMLInputElement","toString","defaultProps","PickUpAtStoreComponent","PickUpAtStore","EmailDeliveryComponent","_ref2","EmailDelivery","LineItemComponent","_ref3","LineItem","pickUpAtStore","emailDelivery","LineItemGroupComponent","_ref4","LineItemDeliveryGroup","LineItemList","heading","lineItems","lineItem","LineId","LineItemsComponent","_ref5","LineItems","Header","editLink","itemsForPickup","itemsForShip","itemsForEmail","_renderOrderSummarylines","_props$context","isB2B","platform","enableDefaultOrderQuantityLimits","orderSummary","lines","subtotal","_props$data$checkout$10","checkout","checkoutCart","cart","CartLines","Price","OrderSubTotal","subTotalLabel","_renderSubTotal","totalDiscounts","_props$data$checkout$6","chargeLines","ChargeLines","chargeAmountInclTax","_props$orderSummary","chargeLine","IsShipping","chargeAmountInclTaxLocal","GrossAmount","shipping","shippingLabel","_renderShippingInclTaxes","_props$data$checkout$","_props$data$checkout$2","_props$data$checkout$3","_props$data$checkout$4","_props$data$checkout$5","ChargeAmount","shippingCharges","ShippingChargeAmount","otherChargesAmountFromLines","totalChargeAmountFromLines","chargesOverriden","displayOtherChargesAmount","shippingChargesFromLines","freightChargeCode","CalculatedAmount","ChargeCode","_renderOtherCharges","hideTaxLine","tax","_props$data$checkout$11","OrderTotal","TotalAmount","totalAmountLabel","_renderTotalOrder","loyalty","giftCard","orderTotal","_props$data$checkout$7","DiscountAmount","totalSavingsLabel","_renderTotalSavings","_props$data$checkout$8","_props$data$checkout$9","shippingAmount","DeliveryModeChargeAmount","AmountDue","freeShippingAmount","ceil","_renderFreeShippingMessage","_getCheckoutSummaryText","paragraph","MsDyn365","_props$context2","canShow","checkoutProps","headerProps","hasSalesOrder","bodyProps","mainProps","mainControlProps","sideProps","sideControlFirstProps","sideControlSecondProps","termsAndConditionsProps","orderConfirmation","loading","alert","guidedForm","placeOrderButton","termsAndConditions","keepShoppingButton","isBusy","isBrowser","url","decodeURI","search","urlParams","URLSearchParams","get","has","orderToken","CartLineItemFunctions","renderProductDimensions","DimensionStrings","Dimensions","productDimension","DimensionTypeValue","RecordId","colorString","DimensionValue","configString","sizeString","DimensionLine","product","defaultValue","styleString","CartLine","cartLine","ItemId","DiscountLines","discountLine","OfferId","OfferName","discountStringText","isSalesLine","PeriodicDiscount","DiscountAmountWithoutTax","Percentage","dimension","actionInput","AttributesForSelectedVariantInput","getAttributesForSelectedVariant","res","Name","TextValue","_props$context3","productUrl","destructDimensionStrings","fallbackImageUrl","getFallbackImageUrl","productDimensions","productSKU","renderDisountLines","newValue","quantityOnChange","_generateErrorMessage","errorMessage","Image","src","primaryImageUrl","fallBackSrc","altText","gridSettings","imageSettings","loadFailureBehavior","TaxAmount","NetAmountWithoutTax","_generateQuantityandPrice","nodes","isQuantityEditable","IsGiftCardLine","_props$data","eoqQuantity","Behavior","MultipleOfQuantity","quantityDisplayString","maxQuantity","currentQuantity","salesLineSkuText","PromoCode","_onInputChange","promoCodeInputValue","canApply","_applyPromotion","cartState","appliedPromo","addPromoCode","promoCode","status","substatus","duplicatePromoCodeErrorText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","promoPlaceholderText","promoCodeApplyButtonText","_removePromotion","code","currentTarget","getAttribute","removePromoCodes","promoCodes","failedToRemovePromoCodeErrorText","_calculateDiscount","discountAmount","line","DiscountCode","DiscountCost","_renderAppliedPromoCode","Coupons","appliedPromoCodeHeadingText","coupon","removePromoAriaLabelFormat","removePromoText","Code","isCollapseOpen","promoCodeHeadingText","renderLabel","arguments","rating","ratingAriaLabel","ratingLabel","roundedRating","toFixed","ProductComponent","imageOrientation","AttributeValues","property","productImageSettings","viewports","xs","q","w","h","sm","md","lg","xl","disableLazyLoad","cmsImageSettings","lazyload","setTelemetryAttribute","pid","pname","mname","AverageRating","imageUrl","img","imageProps","renderProductPlacementImage","PrimaryImageUrl","renderPrice","description","Description","avgRating","totalRatings","numRatings","RatingComponent","ratingCount","readOnly","renderRating","TotalRatings","_renderCarousel","carouselContainer","PropDetails","isMobile","device","Type","_renderProduct","_renderGrid","gridContainer","orientationClass","_property$Name","toLowerCase","getImageOrientation","priceFree","ProductCollectionContainer","products","SingleSlideCarouselComponentProps","GridComponentProps","isCarousel","productCollection","ratingId","_totalRatings$toStrin","numberRatings","getRatingAriaLabel","ActiveProductComponent","imgData","cropFocalRegion","productId","hideRating","assembleNode","_item$links","headingNode","renderHeading","additionalContentHeading","handleAdditionalTextChange","paragraphNode","subtext","renderParagraph","additionalContentParagraphText","linksNode","ctaLink","renderLinks","isOpenInNewTab","handleAdditionalLinkTextChange","additionalContentNode","additionalContentContainer","additionalContentItemLinks","activeImageAdditionalContent","additionalContent","CanvasCalculations","CanvasStyles","ImageMapper","_isDesktopViewPort","_context","getActiveImageWidth","activeImageReferenceValue","activeImageRefs","clientWidth","getActiveImageHeight","clientHeight","convertHexToRgb","hexColor","exec","rValue","Number","gValue","bValue","applyFadingTransition","coords","rgbColor","alpha","_this$_canvas$current","_this$_canvas$current2","halfDivisor","_canvas","getContext","buttonPadding","paddingAdjustment","buttonWidth","measureText","width","fillStyle","parentElement","fillText","drawButton","_this$_canvas$current3","_this$_canvas$current4","buttonTextClor","buttonHeight","buttonPositionX","buttonPositionY","arcsize","beginPath","moveTo","lineTo","arcTo","stroke","closePath","fill","expandAnimation","_this$props$imageMapp","buttonText","imageMapperResources","animationStartWidth","expandAnimationStartWidth","pointPositionX","pointPositionY","animationEndWidth","expandAnimationEndWidth","radius","expandRadius","rotation","startAngle","endAngle","textFadeInValue","textFadeInStartValue","buttonTextClorInRgb","toLocaleLowerCase","animate","_this$_canvas$current5","_this$_canvas$current6","ellipse","requestAnimationFrame","textFadeInterval","collapseAnimation","_this$props$imageMapp2","collapseAnimationStartWidth","collapseAnimationEndWidth","clearMargin","clearHeight","clearWidth","collapseRadius","textFadeOutValue","textFadeOutStartValue","_this$_canvas$current7","_this$_canvas$current8","clearRect","drawCircle","_this$_canvas$current9","_this$_canvas$current10","viewPort","doubleMultiplier","strokeStyle","arc","PI","scaleCoords","imgWidth","defaultWidth","defaultScale","scale","coord","renderPrefilledAreas","areaMap","areas","area","computeCenter","scaledCoords","handleHoverOn","center","handleHoverOff","_this$_canvas$current11","canvasPositionX","defaultPositionX","canvasPositionY","defaultPositionY","height","click","hoverOn","onMouseEnter","hoverOff","onMouseLeave","renderAreas","_this$props$imageMapp3","_this$props$imageMapp4","_area$productSearchRe","xsRadius","extendedArea","areaKey","altTextWithProductName","productSearchResult","shape","onFocus","alt","initCanvas","_this$getActiveImageW","_this$getActiveImageH","_this$_canvas$current12","_backgroundImage","_container","onLoad","defaultHeight","canvasWidth","canvasHeight","componentDidMount","shouldComponentUpdate","nextProps","shouldRender","_requestContext$gridS","imageData","useMap","ActiveImageConstants","ActiveImage","_defaultProductCardWidth","_defaultProdutCardHight","_activePoints","addActivePoints","_product$PrimaryImage","areaId","updateClientWidth","viewport","variant","VariantType","Browser","renderImageMapper","_this$props$config$ac","productResults","activePoints","configProduct","itemId","_product$Name","_configProduct$xPosit","_configProduct$yPosit","_configProduct$radius","xPosition","yPosition","activePoint","mappedArea","_activeImageClass","enterArea","leaveArea","activeImage","_activeImageRefs","altTextForSeeMoreButtonWithProductName","seeMoreButtonText","overlayClass","open","resetState","renderProductComponent","_this$state$area","_this$state$area$prim","_product$ItemId","baseImageUrl","renderProductCard","_productCardDivRef","renderOverlay","getProductCardPositionX","_this$props$config$pr","_this$props$config$pr2","_defaultImageSettings","_area$center$","_area$center","defaultImageSettings","getDefaultImageSettings","productImageSettingsWidth","productCardWidth","leftAllignPosition","position","getProductCardPositionY","_this$props$config$pr3","_this$props$config$pr4","_defaultImageSettings2","productImageSettingsHeight","produtCardHight","_area$center$2","_area$center2","keyDown","enterKey","nodeName","escKey","handleParagraphChange","renderActiveImageDetailsLinks","_telemetryContent","linkData","linkId","willOpenInNewTab","renderActiveImageDetailsHeading","_heading$tag","renderActiveImageDetailsParagraph","getActiveImageId","activeImageId","_activeImageIdPart$","activeImageSource","decrementOne","_handleOutsideClick","_this$_productCardDiv","timeoutInterval","images","getElementsByClassName","ArrayExtensions","hasElements","Array","from","removeAttribute","activePointContainer","activePointDetailsContainer","imageMapper","overlay","productCard","productCardleftPosition","productCardtopPosition","detailsContainer","detailsContainerCta","handleAdditionalParagraphChange","handleAdditionalText","handleAdditionalParagraph","handleAdditionalLinkText","_this$props$config$ad","activeImageView","left","BulkPurchase","collapseRef","_dimensionDropDownChange","_this$collapseRef$cur","reEvaluateHeight","_toggleCollapse","isExpanded","_this$props$data$prod","hasDimensionsInProps","hasDimensionsInData","container","content","_renderCollapseContent","_renderCollapseButton","_renderCollapse","bulkPurchaseHeaderTitle","Collapse","isOpen","_renderMainContent","isMobileDevice","Viewport","RichTextComponent","bulkPurchaseDescriptionText","_renderMatrix","_featureState$result","_this$props$data$orde","_this$props$data$cust","featureState","isMultipleCatalogsFeatureEnabled","IsEnabled","getCatalogId","validateCatalogId","ProductDimensionsMatrix","dimensions","orderTemplates","customerInformation","dimensionOnChange","isMultipleCatalogFeatureEnabledInHq","BulkPurchaseViewComponent","HeaderPreferredStore","modalCloseButtonRef","handleClick","_findPreferredStoreOnClick","storeSelectorStateManager","slots","storeSelector","storeName","preferredStore","StoreName","headerPreferredStoreText","headerPreferredStoreAriaLabel","modules","storeSelectorId","keys","openDialog","showMapViewLink","parentElementRef","onLocationSelected","orgUnitLocation","resolve","__decorate","observer","Logo","_renderLogo","rel","_renderImage","image","imagePropertyName","shouldSkipToMainImage","NavIcon","toggleNavBar","mobileHamburgerAriaLabel","targetId","isB2BSite","_this$props$config$my","myAccountLinks","popOverRef","_toggleNavbar","_togglePopover","_keydown","mobileMenuCollapsed","signinPopoverOpen","hasSigninerror","isChannelTypeB2B","displayName","_this$props$context$r","workerName","customerName","user","_this$props$data$empl","worker","employee","_this$props$data$acco","customer","accountInformation","FirstName","reaction","signUpCustomerNotFoundTitle","signUpMultipleCustomerFoundTitle","signInCustomerNotAuthorizedTitle","closeNotificationLabel","signinNotificationError","_getSigninNotification","NotificationsManager","instance","addNotification","ErrorNotification","wishlists","cartLabel","cartQtyLabel","logoLink","logoImage","shouldShowWishlistCount","disableTooltip","headerToggleClass","headerClassName","navbarKey","cartIconSlot","_getSlot","menuBarSlot","searchSlot","wishlistCount","siteOptionsSlot","preferredStoreSlot","currentDistributorSlot","CommerceListLines","logo","wishListIconDesktop","WishListIconComponent","showButtonTooltip","wishlistTooltipText","wishlistCountLabel","isDispayWishlistCount","wishListIconMobile","cartIcon","CartIconComponent","navIcon","menuBar","siteOptions","HeaderTag","headerAriaLabel","HeaderContainer","HeaderTopBarContainer","Divider","MobileMenuContainer","Modal","wrapClassName","MobileMenuHeader","ModalHeader","MobileMenuBodyContainer","ModalBody","MobileMenuLinksContainer","AccountInfoDropdownParentContainer","AccountInfoDropdownPopoverConentContainer","Popover","placement","signInLink","_getSigninButton","signOutLink","_getSignOutButton","isOBORequest","switchCustomerLink","_getSwitchCustomerButton","accountInfoDropdownButton","_getAccountInfoDropdownButton","accountLinks","_getAccountLinks","currentDistributor","slotName","SignIn","signInLinkText","signInUrl","signInLinkAriaText","_user$signOutUrl","SignOut","signOutLinkText","signOutUrl","signOutLinkAriaText","SwitchCustomer","isOBOAccountSelected","cookies","getAccountSelectionCookie","switchCustomerLinkAriaText","switchCustomerLinkText","getBusinessPartnerSelectionUrl","removeAccountSelectionCookie","shoppingAsText","URL","param","searchParams","delete","retailServerErrorCode","signUpCustomerNotFound","signUpMultipleCustomerFound","signInCustomerNotAuthorized","retailServerErrorMessage","MyProfile","cta","computed","_renderReactFragment","slot","_renderDesktopAccountBlock","OrderTemplateActions","onRemoveOrderTemplate","handlers","itemKey","removeOrderTemplateActionHandler","OrderTemplateRender","orderTemplate","removeFromOrderTemplateListText","orderTemplateState","enableImageProductLink","orderTemplateImage","_renderOrderTemplateImages","orderTemplateLines","orderTemplateAriaLabel","_renderAriaLabel","orderTemplateName","_getOrderTemplatePageUrl","_getUrlSync","separator","includes","totalLines","addToCartButton","AddOrderTemplateToCartComponent","moduleTypeName","addToCartText","addToBagText","dialogStrings","removeButton","orderTemplateStatusMessage","userMessage","Alert","statusCssString","onClickHandler","count","_line$productListLine","_line$fullProduct$Pro","_line$fullProduct","_line$fullProduct2","_line$fullProduct$Pro2","_line$fullProduct3","_getFallbackImageUrl","_line$fullProduct4","_context$request$app","fullProduct","_updateProductUrlCatalog","ProductDetails","productListLine","OmniChannelMedia","productDetails","getProductUrlSync","StringExtensions","isNullOrWhitespace","fullUrl","set","OrderTemplateListStatusMessage","errorType","modalCloseButtonReference","onCancelHandler","isCreateOrderTemplateDialogOpen","setOrderTemplateNameDialogOpen","useState","onCreateButtonClick","createOrderTemplateText","OrderTemplateNameDialog","modalOpen","isUpdateDialog","setModalOpen","createOrderTemplateDialogResources","onCancel","onSuccess","onOrderTemplateCreated","OrderTemplateList","_isChannelMultipleCatalogsFeatureEnabled","_this$props$data$feat","feature","_reloadPage","reload","_onRemoveFromOrderTemplateList","productListId","isAuthenticated","token","p","productList","deleteAsync","warning","headerStatusMessage","deleteOrderTemplateFailedText","messageGlyph","nextState","_heading$text","_heading$tag3","emptyOrderTemplateText","createNewTemplateButtonText","orderTemplatesData","orderTemplateListHeading","orderTemplateListTitle","errorProps","statusMessage","Spinner","msg","progressNotificationText","Heading","_heading$tag2","emptyViewProps","createOrderTemplateButton","CreateNewTemplateButtonComponent","_generateOrderTemplateNameDialogResources","templateHeaderStatusMessage","OrderTemplates","OrderTemplate","_renderOrderTemplateList","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","currentTemplateProps","addToBagButtonText","closeWindowButtonText","addToCartFailureMessage","addToCartSuccessMessage","addToCartProcessMessage","orderTemplateErrorMessage","linesAddedToCartDialogResources","viewCartButtonText","orderTemplateCloseButtonText","linesAddedToCartHeaderItemsOneText","linesAddedToCartHeaderLinesOneText","linesAddedToCartHeaderLinesFormatText","linesAddedToCartHeaderMessageText","OrderTemplateListView","_renderOrderTemplate","CONTENT","AddLineToTemplate","productCatalogs","selectedProduct","selectedCatalogId","addLineButtonRef","_renderSearchForm","searchButtonAriaLabel","searchModalPlaceholderText","selectCatalogTitleText","_onSearchSubmit","htmlFor","_onCatalogSelectionChange","_getCatalogNodes","autoFocus","_get","Loading","_getSearchResults","NotFound","ProductList","_onQuantityChangeHandler","selectedQuantity","_onSelectItem","varianteInput","SelectedVariantInput","productVariant","getSelectedVariant","_getProductDimensions","selectedProductDimensions","ProductConfiguration","_onBackButtonClickHandler","_highlightSearchTerm","parsedName","unescape","__html","_resultCountText","searchResultsCountVerbage","searchResultsCountSubject","_addItemToTemplateHandler","orderTemplateId","AddItemToOrderTemplateInput","quantity","DefaultUnitOfMeasure","addItemToOrderTemplate","reloadPage","_toggleModalHandler","_getCatalogs","onComponentDidMount","_this$searchTextInput","onComponentDidUpdate","_this$searchTextInput2","showBackArrow","addLineModalLinkText","backToResultsText","modalProps","_renderContent","addToTemplateHandler","onQuantityChangeHandler","highlightSearchTerm","searchForm","productProps","clickHandler","renderResultCountText","notFoundSearchErrorNotice","notFoundSearchErrorRedediation","NotFoundComponent","searchErrorMessage","catalogs","productCatalog","isSelected","selected","searchCriteriaInput","IncludeAttributes","searchByCriteriaAsync","MasterProductId","getDimensionsForSelectedVariant","GetDimensionsForSelectedVariantInput","Dropdown","selectMenu","_onChanged","selectedIndex","dropdownId","selectId","selectedValue","dropdownList","dropdownName","OrderTemplateQuantity","extraClass","getChangeHandler","_onIncrementalChange","updatedQuantity","selectedDimensions","_getDimensionsError","dimensionName","dimensionMissingError","_addToTemplateHandler","showAddConfirmation","errors","missingDimensions","ProductListId","addToTemplateDuplicateError","addToTemplateGenericError","_onQuantityChange","totalPrice","_updateDimensionValue","productDimensionFull","newValueId","DimensionValues","_onDimensionChanged","_this$state$errors","remainingDimensionsErrors","selection","buttonDisabled","mappedDimensions","ExtensionProperties","variantProduct","dimensionInput","variantDimensions","availabilityInput","ProductAvailabilitiesForSelectedVariantInput","newAvailableQuantity","getProductAvailabilitiesForSelectedVariant","priceInput","PriceForSelectedVariantInput","productPrice","getPriceForSelectedVariant","productAvailableQuantity","unitPrice","sort","a","b","_getDropdownName","dimensionType","productDimensionTypeColor","productDimensionTypeConfiguration","productDimensionTypeSize","productDimensionTypeStyle","_product$Name2","addItemToTemplateText","addLineProductUnitPricePrefix","quantitySelectLabel","addLineProductUnitOfMeasurePrefix","totalPriceLabel","isMultipleCatalogSelect","_formatPrice","_getDimensionsNodes","ModalFooter","_getConfirmationMessage","selectedDimensionNames","_dimension$DimensionV","addToTemplateConfirmation","values","_this$state$errors2","unshift","assertive","selectProductButtonText","_generateImageUrl","_props$context$reques","primaryImageSource","fallBackImg","ProductSelectButton","setBusy","getClickHandler","OrderTemplateBulkActions","isAddDisabled","isRemoveDisabled","addHandler","onAddSelectionToBag","removeHandler","onRemoveSelection","static","selectedLines","_this$props$data$cata","searchInputAriaLabel","backButtonText","addSelectedToBagButtonText","removeSelectedToBagButtonText","addLineProps","isMinifiedView","removeOrderActionHandler","_removeOrderTemplate","onRemoveTemplate","_getOrderTemplateAddToCartDialog","addTemplateToBagButtonText","_getOrderTemplateRenameControl","renameOrderTemplateDialogStrings","RenameOrderTemplateComponent","onRenameTemplate","renameOrderTemplateButtonText","renameTemplateButtonText","buttonEventReference","ActionsSplitButton","isStatementRequestAdminDropdownOpen","setIsStatementRequestAdminDropdownOpen","renameOrderTemplateDialogOpen","onToggleDropdown1","popoverReference","renderModalPopup","existingOrderTemplate","onOrderTemplateNameCancel","_buttonEventReference","requestStatementDropdownString","Random","Guid","generateGuid","OrderTemplateLineActions","orderTemplateLine","onAddToBag","onRemoveItem","getAddToBag","getRemoveItem","PopUp","removeFromOrderTemplateLinesText","moreButtonText","viewProductDetailsText","showMobile","setShowMobile","toggleDetailsDisplayed","getActionButton","removeButtonClassName","addButtonClassName","getDesktopActionButton","onSelectLineHandler","isChecked","onSelect","checked","ExtraActionsPopup","showActions","setShowActions","actionsContainerClassName","OrderTemplateMobileLineView","_context$request$app2","UnitOfMeasure","fallbackImage","productLineCatalog","renderProductCatalog","productImage","_renderProductImage","productInfo","renderProductInfo","productNumber","productUnitOfMeasure","productQuantityView","_generateQuantity","onChangeHandler","onChangeQuantity","isQuantityDisabledForUpdate","_context$actionContex","_context$request","isB2b","catalog","_renderProductError","OOS","outOfStockProductErrorMessage","UNASSORTED","unavailableProductErrorMessage","NONE","_orderTemplateLine$fu","_renderProductDimensions","productName","dimensionsLine","OrderTemplateLinesStatusMessage","OrderTemplateTableHeading","componentClassName","getOnChange","checkedLines","scope","selectAllRowsText","productLineCatalogName","productUnitPrice","productUOM","productQuantity","productActions","OrderTemplateLines","_onRemoveSelection","removeSelectedFailureMessage","removeSelectedSuccessMessage","productSelection","productListLines","maxWaitTimeInMilliSeconds","removeProductListLinesAsync","substr","_onAddSelectionToBag","productLine","_productLine$fullProd","_productLine$fullProd2","_productLine$fullProd3","_productLine$fullProd4","_productLine$productL","ProductTypeValue","_addItemToBag","_getCurrentUrl","reqContext","requestUrl","onCloseHandler","isItemAddedToOrderTemplateOpen","_renderItemAddedToCartDialog","_this$props$data$feat2","itemAddedToCartDialogData","ItemAddedToCartDialog","_generateItemAddedToCartDialogResources","_renderPagination","itemsPerPage","skipCount","_getCurrentPageNumber","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_toggleDetailsDisplayed","isDetailsDisplayed","detailedProductView","absoluteUrl","_changeQuantity","orderTemplateLinesData","orderLineIndex","findIndex","newProductListLine","prevQuantity","_objectWithoutProperties","_excluded","updateProductListLinesAsync","list","newLine","updatedLines","updatedOrderTemplate","ProductListLines","ActiveOrderTemplateLinesInput","editOrderTemplateLineQuantityError","maxQuantityLimitText","addedToCartFailureMessage","addProductToCartInput","addProductToCart","priceResult","AsyncResult","reject","isMiniCart","addToCartBehavior","maxQuantityForCartLineItem","_cart$result","_cart$result2","cartLineQuantity","ProductId","defaultMessage","_removeItemFromOrderTemplateLines","userToken","featureStates","getFeatureState","createGetFeatureStateInput","_featureStates$find","_renameTemplate","_removeTemplate","_orderTemplate$result","newLink","_getViewport","innerWidth","paginationPreviousText","paginationNextText","_viewport","_updateViewport","isConfirmAddSelectionToBagModalOpen","emptyOrderTemplateLinesText","errorGettingOrderTemplateLines","ObjectExtensions","isNullOrUndefined","orderTemplateResult","_isFirstPage","orderActions","_renderOrderTemplateActions","bulkOrderLineActions","_getOrderTemplateLineActions","productsStatusMessage","ProductsTable","ProductsTableRow","ProductsTableHeading","_renderProductListHeader","orderLines","_renderProductList","updateQuantity","debounce","pagination","itemAddedToCartDialog","updated","_product$fullProduct","onSelectAll","productNumberText","productText","productUnitPriceText","productUOMText","productQuantityText","productActionsText","headers","_generateLinesAddedToCartDialogResources","itemAddedToCartHeaderItemOneText","itemAddedToCartHeaderItemFormatText","itemAddedToCartHeaderMessageText","deleteTemplateButtonText","addTemplateToBag","renameTemplate","removeTemplate","actionsSplitButton","OrderTemplateActionsView","renameOrderTemplateTitleText","cancelBtnLabel","skip","selectOneRowText","addOrderTemplateItemToBagButtonText","removeItemFromOrderTemplateButtonText","deleteButtonText","selectLine","addToBagButton","extraActionsPopup","popUp","shouldDisable","OrderTemplateLineView","ProductPrice","observable","_renderItem","quantityLabel","disableElement","pointerEvents","opacity","toggleDetails","fade","applicationNode","ProductCollection","handleHeadingChange","_getProductsDimensionsAvailabilities","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","validProducts","validValues","DimensionTypes","none","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","initProductState","productCollectionProducts","equals","_getProduct","_this$state$productsD","trace","allowBackNavigation","breaCrumbType","breadcrumbType","allowBack","quickviewSlot","quickview","productComparisonButtonSlot","productComparisonButton","reviewCountAriaLabelValue","ratingCountAriaLabel","ratingCountAriaLabelSingleUser","isPriceMinMaxEnabled","priceResources","priceRangeSeparator","ProductContainer","productComponent","quickViewButton","dimensionAvailabilities","dimensionAvailability","_product$MasterProduc","masterProductId","_getActivePrice","productsList","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSeeAllButton","recommendation","headingLabel","searchPageLink","seeAllButtonText","productPrices","enableAffiliationBasedPricing","shouldDisplaySeeAllButton","recommendationListId","layout","headingComponent","updatedProducts","getProductData","productCollectionViewProps","SingleSlideCarousel","flipperPrevLabel","flipperNextLabel","parentId","seeAllButton","bannerText","bannerAriaLabel","promoBannerTextProps","promoBannerLinksProps","promoBannerText","carouselProps","AddToCartProductListComponent","_quickOrderTemplate$q","_quickOrderTemplate$q2","quickOrderTemplate","quickOrderTemplateLines","buttonLabel","quickOrderGridBuySelectedButtonText","buttonAriaLabel","quickOrderGridBuySelectedButtonAriaLabel","_props$resources$quic","_props$resources$quic2","_props$resources$quic3","_props$resources$quic4","_props$resources$quic5","_props$resources$quic6","_props$resources$quic7","_props$resources$free","_props$resources$orig","_props$resources$curr","_props$resources$adde","_props$resources$quic8","_props$resources$quic9","goToCartText","quickOrderGridGoToCartText","continueShoppingText","quickOrderGridDialogCloseText","quickOrderGridBuySelectedAddingToCartErrorNotificationCloseAriaLabel","headerItemOneText","quickOrderGridSingleItemText","headerItemFormatText","quickOrderGridMultiLineItemFormatText","headerLinesFormatText","quickOrderGridMultiLinesFormatText","headerMessageText","quickOrderGridHeaderMessageText","addedQuantityText","buyAgainNotificationTitle","quickOrderGridBuySelectedAddingToCartErrorNotificationTitle","buyAgainNotificationCloseAriaLabel","getDialogStrings","orderDetailProducts","quickOrder","orderDetails","quickLine","_quickLine$fullProduc","salesLine","OrderDetailsProduct","getOrderDetails","AddToCartComponent","outOfStockText","addToCartArialLabel","navigationUrl","shouldSkipSiteSettings","orderDetailsProducts","getQuickOrderGridAddToCartDialog","moduleClassName","removeActionHandler","removeProductList","removeQuickOrderList","QuickOrderGridDrawer","_props$collapseProps$","_props$collapseProps","_isManuallyToggled","onToggle","previousState","collapseProps","_drawerGlyphClass","toggleGlyphClassName","closeGlyph","isAnimateGlyph","_drawerOpenGlyph","openGlyph","_drawerCloseGlyph","children","drawerClass","drawerButtonClassName","toggleButtonProps","block","isDisabled","_generateDrawerButtonInnerMarkup","isCollapseState","drawerButtonTextClass","toggleButtonClassName","headingDrawerClass","descriptionDrawerClass","moduleHeadingText","moduleDescriptionText","_generateGlyphMarkup","glyphClass","QuickOrderGridFormComponent","productTextInput","quantityTextInput","quickOrderGridState","isAddtoListDisabled","ariaLabelQuantity","ariaLabelProduct","ariaLabelAddtoCart","handleQuantityChange","handleAddProductListClick","onInputChangeFunction","onQuantityInputChange","onQuantityChangeFunction","productNode","quantityNode","addToListBtn","stateMessage","messageText","QuickOrderGridProduct","QuickOrderGridDesktopHeaderCellsComponent","columnWithNumberClassName","quickOrderGridProductNumberText","quickOrderGridProductText","quickOrderGridUnitPriceText","quickOrderGridUnitOfMeasureText","quickOrderGridQuantityText","quickOrderGridActionsText","QuickOrderGridMobileHeaderCellsComponent","QuickOrderGridTableHeaderComponent","rowClassName","headerCells","QuickOrderGridTableRowProductImageComponent","_props$data$product$p","_props$imageSettings","containerClassName","setShowPreviousActions","onRemoveHandler","quickOrderGridProductKey","QuickOrderGridExtraActionsPopupComponent","_props$data$product$p2","quickOrderGridViewDetailsButtonAriaLabel","quickOrderGridViewDetailsButtonText","shouldShowActions","onClickViewDetails","shouldShowActionsNewValue","quickOrderGridRemoveItemButtonAriaLabel","QuickOrderGridDesktopTableRowCellComponent","_props$data$product$p3","_product$Dimensions","_productListLine$Line","dimensionValue","quickOrderGridProductDimensionsSeparator","renderProductPrice","isNullOrEmpty","renderUnitOfMeasure","IncrementalQuantity","quickOrderGridInputQuantityAriaLabel","quickOrderGridDecrementButtonAriaLabel","quickOrderGridIncrementButtonAriaLabel","isGiftCard","IsGiftCard","QuickOrderGridMobileTableRowCellComponent","_props$data$product$p4","_productListLine$Line2","QuickOrderGridTableRowComponent","QuickOrderGridTableComponent","setIsMobile","isMobileView","quickOrderGridProducts","updateViewport","quickOrderProduct","_quickOrderProduct$pr","_quickOrderProduct$pr2","callBacks","QuickOrderGrid","_waitTime","_dimensionUpdateQueueMaxLength","_errorCssClass","_errorCssGlyphClass","_dimensionUpdateQueue","FinitePromiseQueue","_dimensions","_cssClassNameConfigure","_className","_quickOrderGridCallbacks","dimensionSelectedAsync","selectedDimensionId","selectedDimensionValueId","enqueue","_updateDimensions","FinitePromiseQueueError","ProcessWasDiscardedFromTheQueue","getDropdownName","changeUpdatingDimension","isUpdatingDimension","_quickOrderGridRowCallbacks","_removeItemRowFromTable","productListLineId","_changeRowQuantity","_removeProductList","ProductListsDataActions","_updateStatusState","quickOrderGridDeleteProductListFailedText","productResponse","_cancellabelDebounce","isQuickOrderGridFormExpanded","getScanResult","GetScanResultInput","ProductDimensionFull","_handleQuantityChange","_quantityInput","_this$state$productRe","ProductDimensionType","Color","Configuration","Size","Style","productDimensionTypeAmount","hasProductDimensions","dimensionsToUpdate","productDimensionErrorState","otherError","clearOtherErrorState","dimensionKey","configureErrors","errorState","_this$_updateDimensio","newProduct","_getDimensionErrorString","dimensionTypeValue","amountErrorMessage","quickOrderGridproductDimensionTypeAmountErrorMessage","quickOrderGridproductDimensionTypeColorErrorMessage","quickOrderGridproductDimensionTypeConfigurationErrorMessage","quickOrderGridproductDimensionTypeSizeErrorMessage","quickOrderGridproductDimensionTypeStyleErrorMessage","_validateCart","_productResponse$Dime","_getConfigureErrors","quickOrderGridWrongQuantityErrorMsg","quickOrderTemplateLinesData","previousQuantity","updatedProductList","ActiveProductListInput","_addItemToProductListLine","quickOrderGridAddedToGridSuccessMessage","quickOrderGridAddedToGridFailureMessage","quickOrderGridAddedToGridDuplicateError","_productResponse$Defa","_createProductList","AddItemToProductListInput","addItemToProductListAction","CreateProductListInput","ProductListType","QuickOrder","createProductList","_productTextInput","_quickOrderGridFormClass","_quickOrderGridFormProductContent","_quickOrderGridFormMsgContent","customerInfo","quickOrderGridModuleHeading","quickOrderGridModuleDescription","quickOrderGridAddtogrid","quickOrderGridProductQuantityInputLabel","quickOrderGridProductInputLabel","quickOrderGridProductDimensionTypeColor","quickOrderGridProductDimensionTypeConfiguration","quickOrderGridSelectDimensionFormatString","quickOrderGridProductDimensionTypeSize","quickOrderGridProductDimensionTypeStyle","quickOrderGridProductDimensionTypeAmount","quickOrderGridModulePageHeading","productConfigureResources","selectDimensionFormatString","header","quickOrderGridProps","isB2bCustomer","IsB2b","actions","drawer","bulkPurchase","_renderBulkPurchase","quickOrderGridForm","quickOrderGridFormProductContent","quickOrderGridFormMsgContent","configure","getProductConfigure","_renderListContainer","_renderQuickOrderGridActions","quickOrderGridDeleteButtonText","addProductListToBag","QuickOrderGridActionsView","isBulkPurchaseEnabled","bulkPurchaseSlots","containerClass","_renderQuickOrderTable","_initQuickOrderGridProducts","quickOrderGridProduct","tableClassName","renderConfigureDropdown","dropdown","containerProps","labelContainerProps","select","renderConfigure","dropdowns","renderForm","quickOrderForm","quickOrderProductContent","quickOrderMessageContent","HistogramItems","ratingsSummary","totalRatingsCount","renderItem","star5Count","star4Count","star3Count","star2Count","star1Count","stars","totalCount","percentage","formattedPercent","barItemAriaLabel","starLabel","bar","Progress","buttonProps","AverageRatingNumber","summary","averageRating","TotalReviews","RatingsHistogram","selectFilterBy","completeClass","classname","histogramItems","averageRatingAriaLabel","hideCount","averageNumber","totalReviews","ratingsSummaryProps","histogramProps","filterKey","createRatingsReviewsStateInput","histogramItem","SearchState"],"sourceRoot":""}