{"version":3,"file":"static/js/5.f436dab31334a2f73739.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 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","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":""}