{"version":3,"file":"static/js/eef218c93f9d0b25039b.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./lib/search/module-registration.js?f197","webpack://Msdyn365.Commerce.Online/./src/search-state-data-action.ts?8223","webpack://Msdyn365.Commerce.Online/./src/search-state.ts?dd10","webpack://Msdyn365.Commerce.Online/../src/components/Spinner/Spinner.types.ts?d830","webpack://Msdyn365.Commerce.Online/./src/modules/search/actions/get-auto-suggest-suggestions.ts?4735","webpack://Msdyn365.Commerce.Online/../src/components/Spinner/Spinner.base.tsx?dabc","webpack://Msdyn365.Commerce.Online/../src/components/Spinner/Spinner.styles.tsx?beac","webpack://Msdyn365.Commerce.Online/../src/components/Spinner/Spinner.tsx?3f11","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.categorysuggest.tsx?c65d","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.form.tsx?25a5","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.keywordsuggest.tsx?297c","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.label.tsx?0c17","webpack://Msdyn365.Commerce.Online/./src/modules/search/components/search.productsuggest.tsx?2af9","webpack://Msdyn365.Commerce.Online/./src/modules/search/search.tsx?72fb","webpack://Msdyn365.Commerce.Online/./src/modules/search/search.view.tsx?1505","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/search.categorysuggest.tsx?6bcf","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/search.mobile.empty.tsx?ff32","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/search.form.tsx?d41a","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/search.keywordsuggest.tsx?2724","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/search.productsuggest.tsx?6616","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/search.view.tsx?bfa7","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['search'] = {\n c: () => require('@msdyn365-commerce-modules/search/dist/lib/modules/search/search'),\n $type: 'contentModule',\n da: [{name:'searchState', path:'@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'search',\n p: 'search',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/search/dist/lib/modules/search'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action';\n let dataAction = require('@msdyn365-commerce-modules/search-utilities/dist/lib/search-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['@msdyn365-commerce-modules|search|modules|search|search'] = {\n c: () => require('@msdyn365-commerce-modules/search/dist/lib/modules/search/search.view.js'),\n cn: '@msdyn365-commerce-modules-search-search'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|search'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/search.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-search'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { SearchState } from './search-state';\n\nexport function createSearchStateInput(result: SearchState): GenericInput {\n return new GenericInput('searchState', result, 'SearchState');\n}\n\nconst createsearchStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createSearchStateInput({ searchText: '' });\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createsearchStateInputInternal\n});\n\nexport default getGenericActionDataAction;\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","import * as React from 'react';\nimport { ITheme, IStyle } from '../../Styling';\nimport { IRefObject, IStyleFunctionOrObject } from '../../Utilities';\n\n/**\n * {@docCategory Spinner}\n */\nexport interface ISpinner {}\n\n/**\n * Spinner component props.\n * {@docCategory Spinner}\n */\nexport interface ISpinnerProps extends React.HTMLAttributes {\n /**\n * Optional callback to access the ISpinner interface. Use this instead of ref for accessing\n * the public methods and properties of the component.\n */\n componentRef?: IRefObject;\n\n /**\n * Deprecated and will be removed at \\>= 2.0.0. Use `SpinnerSize` instead.\n * @deprecated Use `SpinnerSize` instead.\n */\n // eslint-disable-next-line deprecation/deprecation\n type?: SpinnerType;\n\n /**\n * The size of Spinner to render. \\{ extraSmall, small, medium, large \\}\n * @defaultvalue SpinnerType.medium\n */\n size?: SpinnerSize;\n\n /**\n * The label to show next to the Spinner. Label updates will be announced to the screen readers.\n * Use ariaLive to control politeness level.\n */\n label?: string;\n\n /**\n * Additional CSS class(es) to apply to the Spinner.\n */\n className?: string;\n\n /**\n * Politeness setting for label update announcement.\n * @defaultvalue polite\n */\n ariaLive?: 'assertive' | 'polite' | 'off';\n\n /**\n * Alternative status label for screen reader\n */\n ariaLabel?: string;\n\n /**\n * Theme (provided through customization.)\n */\n theme?: ITheme;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: IStyleFunctionOrObject;\n\n /**\n * The position of the label in regards of the spinner animation.\n * @defaultvalue SpinnerLabelPosition.bottom\n */\n labelPosition?: SpinnerLabelPosition;\n}\n\n/**\n * Possible variations of the spinner circle size.\n * {@docCategory Spinner}\n */\nexport enum SpinnerSize {\n /**\n * 12px Spinner diameter\n */\n xSmall = 0,\n\n /**\n * 16px Spinner diameter\n */\n small = 1,\n\n /**\n * 20px Spinner diameter\n */\n medium = 2,\n\n /**\n * 28px Spinner diameter\n */\n large = 3,\n}\n\n/**\n * Possible locations of the label in regards to the spinner\n * @defaultvalue bottom\n * {@docCategory Spinner}\n */\nexport type SpinnerLabelPosition = 'top' | 'right' | 'bottom' | 'left';\n\n/**\n * Deprecated at v2.0.0, use `SpinnerSize` instead.\n * @deprecated Use `SpinnerSize` instead.\n * {@docCategory Spinner}\n */\nexport enum SpinnerType {\n /**\n * Deprecated and will be removed at \\>= 2.0.0. Use `SpinnerSize.medium` instead.\n * @deprecated Use `SpinnerSize.medium` instead.\n */\n normal = 0,\n\n /**\n * Deprecated and will be removed at \\>= 2.0.0. Use `SpinnerSize.large` instead.\n * @deprecated Use `SpinnerSize.large` instead.\n */\n large = 1,\n}\n\n/**\n * The props needed to construct styles.\n * This represents the simplified set of immutable things which control the class names.\n * {@docCategory Spinner}\n */\nexport interface ISpinnerStyleProps {\n /** Theme provided by High-Order Component. */\n theme: ITheme;\n\n /** Size of the spinner animation. */\n size?: SpinnerSize;\n\n /** CSS class name for the component attached to the root stylable area. */\n className?: string;\n\n /** Position of the label in regards to the spinner animation. */\n labelPosition?: SpinnerLabelPosition;\n}\n\n/**\n * Represents the stylable areas of the control.\n * {@docCategory Spinner}\n */\nexport interface ISpinnerStyles {\n /** Styles for the root element. Refers to the wrapper containing both the circle and the label. */\n root?: IStyle;\n\n /** Styles for the spinner circle animation. */\n circle?: IStyle;\n\n /** Styles for the label accompanying the circle. */\n label?: IStyle;\n\n /** Styles for the hidden helper element to aid with screen readers. */\n screenReaderText?: IStyle;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n getCatalogId,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AttributeDataType,\n ChannelInventoryConfiguration,\n ProductRefinerSource,\n ProductRefinerValue,\n ProductSearchCriteria,\n SearchSuggestion,\n SearchSuggestionCriteria\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n getInventoryConfigurationAsync,\n getSearchSuggestionsAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\n\nexport enum SuggestionType {\n Category = 'ScopedCategory',\n Keyword = 'Keyword',\n Product = 'Product',\n None = 'None'\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * Input class for auto suggest search input.\n */\nexport class AutoSuggestInput implements IActionInput {\n public searchQuery?: string;\n\n public topResultsCount?: number;\n\n public suggestionType?: string;\n\n public hitPrefix?: string;\n\n public hitSuffix?: string;\n\n public constructor(searchText?: string, top?: number, suggestionType?: string, hitPrefix?: string, hitSuffix?: string) {\n this.searchQuery = searchText;\n this.topResultsCount = top;\n this.suggestionType = suggestionType;\n this.hitPrefix = hitPrefix;\n this.hitSuffix = hitSuffix;\n }\n\n public getCacheKey = () => 'AutoSuggestSearchSuggestions';\n\n public getCacheObjectType = () => 'AutoSuggestSearchSuggestions';\n\n public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n return new AutoSuggestInput();\n};\n\n/**\n * Calls the Retail API and returns a auto-suggest suggestions.\n * @param input\n * @param ctx\n */\nexport async function getSearchSuggestionsAction(input: AutoSuggestInput, ctx: IActionContext): Promise {\n // If no input is provided fail out\n if (!input || !input.searchQuery) {\n throw new Error('[getSearchSuggestionsAction]No valid Input was provided, failing');\n }\n\n const autosuggest: Autosuggestions = {};\n\n const autoSuggestPromises = [_getAutoSuggest(input, autosuggest, ctx)];\n return Promise.all(autoSuggestPromises).then(() => {\n return autosuggest;\n });\n}\n\n/**\n * Returns inventory in stock sortable refiner value.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @param isInStock - The flag indicating whether is getting in-stock refiner or out-of-stock refiner.\n * @returns Refiners.\n */\nconst getInventorySortableRefinerValue = (\n channelInventoryConfiguration: ChannelInventoryConfiguration,\n isInStock: boolean\n): ProductRefinerValue | undefined => {\n if (channelInventoryConfiguration && channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId) {\n return {\n RefinerRecordId: channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId,\n DataTypeValue: AttributeDataType.TrueFalse,\n LeftValueBoundString: isInStock ? 'true' : 'false',\n RightValueBoundString: isInStock ? 'true' : 'false',\n UnitText: '',\n RowNumber: 0,\n Count: 0,\n ExtensionProperties: [],\n RefinerSourceValue: ProductRefinerSource.Attribute\n };\n }\n return undefined;\n};\n\nasync function _getAutoSuggest(input: AutoSuggestInput, autosuggest: Autosuggestions, ctx: IActionContext): Promise {\n const catalogId = getCatalogId(ctx.requestContext);\n let productSearchCriteria: ProductSearchCriteria = {\n SearchCondition: input.searchQuery && input.searchQuery.length > 0 ? input.searchQuery : '',\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n };\n\n if (ctx.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const channelInventoryConfiguration = await getInventoryConfigurationAsync({ callerContext: ctx });\n const isInStockRefiner = true;\n const inventoryRefinerValue = getInventorySortableRefinerValue(channelInventoryConfiguration, isInStockRefiner);\n\n if (inventoryRefinerValue) {\n productSearchCriteria = {\n ...productSearchCriteria,\n Refinement: [inventoryRefinerValue]\n };\n }\n }\n\n const searchCriteria: SearchSuggestionCriteria = {\n ProductSearchCriteria: productSearchCriteria,\n HitPrefix: input.hitPrefix,\n HitSuffix: input.hitSuffix,\n SuggestionType: input.suggestionType\n };\n\n const searchSuggestions = await getSearchSuggestionsAsync(\n { callerContext: ctx, queryResultSettings: { Paging: { Top: input.topResultsCount } } },\n searchCriteria\n );\n\n if (searchSuggestions && searchSuggestions.length > 0) {\n // Generate image url\n searchSuggestions.map(\n (item: SearchSuggestion) =>\n (item.ImageUrl = item.ImageUrl ? generateImageUrl(item.ImageUrl, ctx.requestContext.apiSettings) : '')\n );\n\n autosuggest.AllSearchResults = searchSuggestions;\n } else {\n ctx.telemetry.error(\n `[getSearchSuggestionsAction] unable to get availabilites for search with suggestion type ${searchCriteria.SuggestionType}`\n );\n }\n}\n\nexport const getSearchSuggestionsActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search/get-auto-suggest-suggestions',\n action: >getSearchSuggestionsAction,\n input: createInput\n});\n\nexport default getSearchSuggestionsActionDataAction;\n","import * as React from 'react';\nimport { ISpinnerProps, ISpinnerStyleProps, ISpinnerStyles, SpinnerType, SpinnerSize } from './Spinner.types';\nimport { classNamesFunction, DelayedRender, getNativeProps, divProperties } from '../../Utilities';\n\nconst getClassNames = classNamesFunction();\n\nexport class SpinnerBase extends React.Component {\n public static defaultProps: ISpinnerProps = {\n size: SpinnerSize.medium,\n ariaLive: 'polite',\n labelPosition: 'bottom',\n };\n\n public render() {\n // eslint-disable-next-line deprecation/deprecation\n const { type, size, ariaLabel, ariaLive, styles, label, theme, className, labelPosition } = this.props;\n const statusMessage = ariaLabel;\n const nativeProps = getNativeProps>(this.props, divProperties, ['size']);\n\n // SpinnerType is deprecated. If someone is still using this property, rather than putting the SpinnerType into the\n // ISpinnerStyleProps, we'll map SpinnerType to its equivalent SpinnerSize and pass that in. Once SpinnerType\n // finally goes away we should delete this.\n let styleSize = size;\n if (styleSize === undefined && type !== undefined) {\n // eslint-disable-next-line deprecation/deprecation\n styleSize = type === SpinnerType.large ? SpinnerSize.large : SpinnerSize.medium;\n }\n\n const classNames = getClassNames(styles!, {\n theme: theme!,\n size: styleSize,\n className,\n labelPosition,\n });\n\n return (\n
\n
\n {label &&
{label}
}\n {statusMessage && (\n
\n \n
{statusMessage}
\n
\n
\n )}\n
\n );\n }\n}\n","import { ISpinnerStyleProps, ISpinnerStyles, SpinnerSize } from './Spinner.types';\nimport {\n hiddenContentStyle,\n keyframes,\n HighContrastSelector,\n getGlobalClassNames,\n getEdgeChromiumNoHighContrastAdjustSelector,\n} from '../../Styling';\nimport { memoizeFunction } from '../../Utilities';\n\nconst GlobalClassNames = {\n root: 'ms-Spinner',\n circle: 'ms-Spinner-circle',\n label: 'ms-Spinner-label',\n};\n\nconst spinAnimation = memoizeFunction(() =>\n keyframes({\n '0%': {\n transform: 'rotate(0deg)',\n },\n '100%': {\n transform: 'rotate(360deg)',\n },\n }),\n);\n\nexport const getStyles = (props: ISpinnerStyleProps): ISpinnerStyles => {\n const { theme, size, className, labelPosition } = props;\n\n const { palette } = theme;\n\n const classNames = getGlobalClassNames(GlobalClassNames, theme);\n\n return {\n root: [\n classNames.root,\n {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n },\n labelPosition === 'top' && {\n flexDirection: 'column-reverse',\n },\n labelPosition === 'right' && {\n flexDirection: 'row',\n },\n labelPosition === 'left' && {\n flexDirection: 'row-reverse',\n },\n className,\n ],\n circle: [\n classNames.circle,\n {\n boxSizing: 'border-box',\n borderRadius: '50%',\n border: '1.5px solid ' + palette.themeLight,\n borderTopColor: palette.themePrimary,\n animationName: spinAnimation(),\n animationDuration: '1.3s',\n animationIterationCount: 'infinite',\n animationTimingFunction: 'cubic-bezier(.53,.21,.29,.67)',\n selectors: {\n [HighContrastSelector]: {\n borderTopColor: 'Highlight',\n },\n ...getEdgeChromiumNoHighContrastAdjustSelector(),\n },\n },\n size === SpinnerSize.xSmall && [\n 'ms-Spinner--xSmall',\n {\n width: 12,\n height: 12,\n },\n ],\n size === SpinnerSize.small && [\n 'ms-Spinner--small',\n {\n width: 16,\n height: 16,\n },\n ],\n size === SpinnerSize.medium && [\n 'ms-Spinner--medium',\n {\n width: 20,\n height: 20,\n },\n ],\n size === SpinnerSize.large && [\n 'ms-Spinner--large',\n {\n width: 28,\n height: 28,\n },\n ],\n ],\n label: [\n classNames.label,\n theme.fonts.small,\n {\n color: palette.themePrimary,\n margin: '8px 0 0',\n textAlign: 'center',\n },\n labelPosition === 'top' && {\n margin: '0 0 8px',\n },\n labelPosition === 'right' && {\n margin: '0 0 0 8px',\n },\n labelPosition === 'left' && {\n margin: '0 8px 0 0',\n },\n ],\n screenReaderText: hiddenContentStyle,\n };\n};\n","import * as React from 'react';\nimport { styled } from '../../Utilities';\nimport { SpinnerBase } from './Spinner.base';\nimport { getStyles } from './Spinner.styles';\nimport { ISpinnerProps, ISpinnerStyles, ISpinnerStyleProps } from './Spinner.types';\n\nexport const Spinner: React.FunctionComponent = styled<\n ISpinnerProps,\n ISpinnerStyleProps,\n ISpinnerStyles\n>(SpinnerBase, getStyles, undefined, { scope: 'Spinner' });\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { getRichTextHtml } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductRefinerValue, SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\nexport interface ISearchCategorySuggestProps {\n searchCategorySuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n searchRefiners: ProductRefiner[] | undefined;\n suggestions: SearchSuggestion[] | undefined;\n telemetryContent?: ITelemetryContent;\n shouldShowFullPath?: boolean;\n}\n\nexport interface ISearchCategoryViewProps {\n title: React.ReactNode;\n text: React.ReactNode[];\n}\n\nlet payLoad: IPayLoad;\n\n/**\n * CategorySuggestionsComponent.\n * @param props\n */\nexport const CategorySuggestionsComponent = (props: ISearchCategorySuggestProps): ISearchCategoryViewProps | undefined => {\n const {\n suggestions,\n searchText,\n autoSuggestProps: {\n resources: { categorySuggestionHeading }\n }\n } = props;\n\n const reactNodes: React.ReactNode[] = [];\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, props));\n });\n\n const titleNode = _renderTitle(categorySuggestionHeading, searchText);\n\n return { title: titleNode, text: reactNodes };\n};\n\nconst _renderTitle = (categorySuggestionHeading: string, searchText: string) => {\n const categoryAutoSuggestionHeading = categorySuggestionHeading\n ? format(categorySuggestionHeading, searchText)\n : `Search \"${searchText}\" in categories`;\n\n return
  • {categoryAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (item: SearchSuggestion, props: ISearchCategorySuggestProps) => {\n const { searchText, hitPrefix, hitSuffix, shouldShowFullPath } = props;\n\n const splitValue = shouldShowFullPath ? item.Value : item.Value && item.Value.split('|').pop();\n const ariaLabel = splitValue\n ? splitValue.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '')\n : item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n payLoad.contentAction.etext = item.Value;\n const attribute = getTelemetryAttributes(props.telemetryContent!, payLoad);\n return (\n
  • \n \n {_generateLink(item, searchText, props) && _getHighlightedText(splitValue ? splitValue : '', hitPrefix, hitSuffix)}\n \n
  • \n );\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, searchText: string, props: ISearchCategorySuggestProps): string => {\n return suggestion && suggestion.Id ? _getCategoryLink(suggestion.Id, searchText, props) : '';\n};\n\nconst _getCategoryLink = (id: string, searchText: string, props: ISearchCategorySuggestProps): string => {\n const { searchPageURL, searchQsp, searchRefiners } = props;\n\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(searchPageURL, window.location.href);\n\n if (searchQsp && searchText) {\n queryUrl.searchParams.set(searchQsp, searchText);\n }\n\n const categoryRefiners = searchRefiners?.find(refiners => {\n return refiners.SourceValue === ProductRefinerSource.Category;\n });\n const refiner = categoryRefiners?.Values?.find(item => {\n return item.RefinerRecordId === Number.parseInt(id, 10);\n });\n\n const encodedRefiner = refiner && JSON.stringify(compressRefiners([refiner]));\n if (encodedRefiner) {\n queryUrl.searchParams.set('refiners', encodedRefiner);\n }\n\n return queryUrl.href;\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n // eslint-disable-next-line react/no-danger\n return ;\n};\n\n// TODO: This code is currently duplicated in categoryautosuggest need to either remove one of these files\n// or move this code to a common place\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nconst compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Button } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ISearchFormProps {\n hideSearchLabel: boolean | undefined;\n isSearchFormExpanded?: boolean | undefined;\n disableSubmitSearch: boolean | undefined;\n searchTextInput: React.RefObject;\n maxChars: number;\n searchQsp: string;\n searchPlaceholder: string;\n query: string;\n ariaLabelCancel: string;\n ariaLabelSearch: string;\n ariaLabelSubmit: string;\n handleCancelSearchChange(): void;\n handleInputChange(query: string): void;\n}\n\nexport interface ISearchFormViewProps {\n input: React.ReactNode;\n submitBtn: React.ReactNode;\n cancelBtn: React.ReactNode;\n}\n\n/**\n * On Input Change functionality.\n * @param handleInputChange -Input change function.\n * @returns Set updated input value.\n */\nconst onInputChangeFunction = (handleInputChange: (query: string) => void) => (event: React.ChangeEvent) => {\n handleInputChange(event.target.value || '');\n};\nexport const FormComponent = (props: ISearchFormProps): ISearchFormViewProps => {\n const {\n searchQsp,\n searchPlaceholder,\n hideSearchLabel,\n searchTextInput,\n handleInputChange,\n maxChars,\n disableSubmitSearch,\n handleCancelSearchChange,\n query,\n ariaLabelCancel,\n ariaLabelSearch,\n ariaLabelSubmit\n } = props;\n\n const onInputChange = onInputChangeFunction(handleInputChange);\n\n const inputNode = !hideSearchLabel ? (\n \n ) : (\n \n );\n\n const submitBtnNode = !disableSubmitSearch && \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 { getRichTextHtml, IActionContext, IImageSettings, Image, ITelemetry } from '@msdyn365-commerce/core';\nimport { SearchSuggestion } from '@msdyn365-commerce/retail-proxy';\nimport { getProductPageUrlSync, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n NodeTag\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchData } from '../search.data';\nimport { ISearchProps } from '../search.props.autogenerated';\n\n/**\n * Search product suggest resources.\n */\nexport interface ISearchProductSuggestResources {\n freePriceText: string;\n}\n\nexport interface ISearchProductSuggestProps {\n searchProductSuggestClass: string;\n searchPageURL: string;\n searchQsp: string | undefined;\n hitPrefix: string;\n hitSuffix: string;\n autoSuggestProps: ISearchProps;\n searchText: string;\n suggestions: SearchSuggestion[] | undefined;\n telemetry: ITelemetry;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n resources?: ISearchProductSuggestResources;\n}\n\nexport interface ISearchProductViewProps {\n title: React.ReactNode;\n items: ISearchProductItemViewProps[];\n}\n\nexport interface ISearchProductItemViewProps {\n text: React.ReactNode;\n thumbnail: React.ReactNode;\n price: React.ReactNode;\n LiProduct: INodeProps;\n AProduct: INodeProps;\n id: string | undefined;\n}\n\nlet payLoad: IPayLoad;\nlet telemetryContent: ITelemetryContent | undefined;\n\n/**\n * ProductSuggestionsComponent.\n * @param props\n */\nexport const ProductSuggestionsComponent = (props: ISearchProductSuggestProps): ISearchProductViewProps | undefined => {\n const {\n suggestions,\n hitSuffix,\n hitPrefix,\n autoSuggestProps: {\n context: { actionContext },\n resources: { productSuggestionHeading }\n },\n moduleType,\n moduleId\n } = props;\n const reactNodes: ISearchProductItemViewProps[] = [];\n telemetryContent = props.telemetryContent;\n payLoad = getPayloadObject('click', props.telemetryContent!, '');\n\n suggestions?.map(item => {\n reactNodes.push(_assembleNode(item, hitPrefix, hitSuffix, actionContext, props, moduleType, moduleId));\n });\n\n const titleNode = _renderTitle(productSuggestionHeading);\n\n return { title: titleNode, items: reactNodes };\n};\n\nconst _renderTitle = (productSuggestionHeading: string) => {\n const productAutoSuggestionHeading = productSuggestionHeading ? productSuggestionHeading : 'Go to products';\n\n return
  • {productAutoSuggestionHeading}
  • ;\n};\n\nconst _assembleNode = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps,\n moduleType: string,\n moduleId: string\n): ISearchProductItemViewProps => {\n const altText =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n const price = item.Value3?.Value?.DecimalValue;\n return {\n text: _getHighlightedText(item.Value ? item.Value : '', hitPrefix, hitSuffix),\n thumbnail: _renderThumbnail(item, altText ? altText : '', props),\n price: !ObjectExtensions.isNullOrUndefined(price) && _renderPrice(price, price, moduleId, moduleType, props),\n LiProduct: _getLiWrapper(),\n AProduct: _getAWrapper(item, hitPrefix, hitSuffix, actionContext, props),\n id: item.Id\n };\n};\n\nconst _getLiWrapper = () => {\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'li' as NodeTag\n };\n};\n\nconst _getAWrapper = (\n item: SearchSuggestion,\n hitPrefix: string,\n hitSuffix: string,\n actionContext: IActionContext,\n props: ISearchProductSuggestProps\n) => {\n const {\n autoSuggestProps: { context }\n } = props;\n const ariaLabel =\n item.Value && item.Value.replace(new RegExp(`[${hitPrefix}]`, 'gi'), '').replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n payLoad.contentAction.recid = item.Id;\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n const productPrice = context.cultureFormatter.formatCurrency(item.Value3!.Value!.DecimalValue!);\n\n return {\n className: 'msc-autoSuggest__productResults-item',\n tag: 'a' as NodeTag,\n 'aria-label': `${ariaLabel!} ${productPrice}`,\n href: _generateLink(item, hitPrefix, hitSuffix, actionContext),\n ...attribute\n };\n};\n\nconst _generateLink = (suggestion: SearchSuggestion, hitPrefix: string, hitSuffix: string, actionContext: IActionContext) => {\n const formattedLink = (suggestion.Value as string)\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n return suggestion.Value && suggestion.Id\n ? getProductPageUrlSync(formattedLink, (suggestion.Id as unknown) as number, actionContext, undefined)\n : '';\n};\n\nconst _getHighlightedText = (suggestion: string, hitPrefix: string, hitSuffix: string): JSX.Element => {\n const formattedText = suggestion\n .replace(new RegExp(`[${hitPrefix}]`, 'gi'), '')\n .replace(new RegExp(`[${hitSuffix}]`, 'gi'), '');\n\n return (\n // eslint-disable-next-line react/no-danger\n \n );\n};\n\nconst _renderPrice = (\n adjustedPrice: number,\n basePrice: number,\n moduleId: string,\n moduleType: string,\n props: ISearchProductSuggestProps\n): JSX.Element | null => {\n const {\n autoSuggestProps: { context }\n } = props;\n\n return (\n \n );\n};\n\nconst _renderThumbnail = (suggestion: SearchSuggestion, altText: string, props: ISearchProductSuggestProps): JSX.Element | null => {\n const {\n autoSuggestProps: {\n context: {\n request: { gridSettings }\n },\n config: { imageSettings }\n }\n } = props;\n if (imageSettings) {\n imageSettings.cropFocalRegion = true;\n }\n\n if (!suggestion || !suggestion.ImageUrl) {\n props.telemetry.error('Search suggestion content is empty, module wont render.');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n lg: { q: 'w=40&h=40&m=6', w: 0, h: 0 },\n xl: { q: 'w=40&h=40&m=6', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\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 { Autosuggestions } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, getUrlSync } from '@msdyn365-commerce/core';\nimport { ProductRefiner, ProductRefinerSource, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, ObjectExtensions, Random, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { createSearchStateInput } from '@msdyn365-commerce-modules/search-utilities';\nimport { getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, KeyCodes } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { debounce } from 'lodash';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport * as React from 'react';\n\nimport getSearchSuggestionsAction, { AutoSuggestInput, SuggestionType } from './actions/get-auto-suggest-suggestions';\nimport {\n CategorySuggestionsComponent,\n FormComponent,\n ISearchCategoryViewProps,\n ISearchKeywordViewProps,\n ISearchProductViewProps,\n KeywordSuggestionsComponent,\n LabelComponent,\n ProductSuggestionsComponent\n} from './components';\nimport { ISearchData } from './search.data';\nimport { ISearchProps, ISuggestionTypeCriterionData, SuggestionTypeCriterionSuggestionType } from './search.props.autogenerated';\n\nexport interface ISearchState {\n isSearchFormExpanded: boolean;\n searchText: string;\n searchKeywordSuggestClass: string;\n searchProductSuggestClass: string;\n searchCategorySuggestClass: string;\n suggestions: Autosuggestions | undefined;\n searchRefiners?: ProductRefiner[] | undefined;\n autoSuggestAriaLabel: string;\n isInitialState: boolean;\n isLoadingAutoSuggest?: boolean;\n}\n\nexport interface ISearchViewProps extends ISearchProps {\n Search: IModuleProps;\n AutoSuggestAriaLabel: INodeProps;\n AutoSuggestAriaLabelText: string;\n searchText: string;\n AutoSuggest: INodeProps;\n KeywordSuggest: INodeProps;\n ProductSuggest: INodeProps;\n CategorySuggest: INodeProps;\n SearchForm: INodeProps;\n FormWrapper: INodeProps;\n UlKeyword: INodeProps;\n UlProduct: INodeProps;\n UlCategory: INodeProps;\n label: React.ReactNode;\n form: React.ReactNode;\n autosuggestKeyword?: ISearchKeywordViewProps;\n autosuggestProduct?: ISearchProductViewProps;\n autosuggestCategory?: ISearchCategoryViewProps;\n callbacks: {\n handleCancelSearchChange(): void;\n handleCancelSearchFocused?(): void;\n };\n isSearchFormExpanded: boolean;\n isLoadingAutoSuggest?: boolean;\n isLoadingNode?: React.ReactNode;\n}\n\n/**\n *\n * Search module.\n * @extends {React.Component, ISearchState>}\n */\nclass Search extends React.Component, ISearchState> {\n private readonly searchTextInput: React.RefObject;\n\n private readonly searchCollapsedLabel: React.RefObject;\n\n private readonly formReference: React.RefObject;\n\n private readonly maxChars: number;\n\n private readonly topResultsCount?: number;\n\n private readonly hitPrefix: string = '{';\n\n private readonly hitSuffix: string = '}';\n\n private readonly waitTime: number = 500;\n\n private readonly autoSuggestResultScreenReaderDiv: React.RefObject;\n\n private readonly autoSuggestResultDiv: React.RefObject;\n\n private readonly searchFormClass: string;\n\n private readonly searchLabelClass: string;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private loadSuggestionsRequestId?: string;\n\n private inputSuggestionType: ISuggestionTypeCriterionData[];\n\n // @ts-expect-error\n private cancellabelDebounce: debounce;\n\n public constructor(props: ISearchProps) {\n super(props);\n this.searchTextInput = React.createRef();\n this.searchCollapsedLabel = React.createRef();\n this.autoSuggestResultScreenReaderDiv = React.createRef();\n this.autoSuggestResultDiv = React.createRef();\n this.formReference = React.createRef();\n this.state = {\n isSearchFormExpanded: false,\n searchText: '',\n searchKeywordSuggestClass: 'ms-search__autoSuggest__keyword',\n searchProductSuggestClass: 'ms-search__autoSuggest__product',\n searchCategorySuggestClass: 'ms-search__autoSuggest__category',\n suggestions: undefined,\n searchRefiners: undefined,\n autoSuggestAriaLabel: '',\n isInitialState: true,\n isLoadingAutoSuggest: false\n };\n this.maxChars =\n (this.props.context &&\n this.props.context.app &&\n this.props.context.app.config &&\n this.props.context.app.config.searchInputMaxLength) ||\n 50;\n\n this.inputSuggestionType = [];\n this.topResultsCount = this.props.config && this.props.config.topResultsCount ? this.props.config.topResultsCount : 5;\n this.searchFormClass = 'ms-search__form';\n this.searchLabelClass = 'ms-search__label';\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n this._initSuggestionTypes();\n }\n\n public async componentDidMount(): Promise {\n document.body && document.body.addEventListener('mousedown', this._focusOutTarget);\n window && window.addEventListener('keyup', this._keyup);\n }\n\n public componentWillUnmount(): void {\n document.body && document.body.removeEventListener('mousedown', this._focusOutTarget, false);\n window && window.removeEventListener('keyup', this._keyup, false);\n }\n\n public componentDidUpdate(): void {\n const {\n config: { hideSearchLabel }\n } = this.props;\n const { isSearchFormExpanded, isInitialState } = this.state;\n\n if (!this.props.context.request.params.isEditor) {\n if (!hideSearchLabel && isSearchFormExpanded) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else if (!isInitialState) {\n this.searchCollapsedLabel && this.searchCollapsedLabel.current && this.searchCollapsedLabel.current.focus();\n }\n }\n }\n\n public shouldComponentUpdate(nextProps: ISearchProps, nextState: ISearchState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n // eslint-disable-next-line complexity -- ignore complexity.\n public render(): JSX.Element {\n const {\n context,\n resources: { searchtext, searchLabelArialLabel, cancelBtnAriaLabel, searchBtnAriaLabel, submitBtnAriaLabel },\n config: { hideSearchLabel, disableSubmitSearch, searchplaceholderText, shouldShowFullCategoryPath, className = '' }\n } = this.props;\n\n const {\n isSearchFormExpanded,\n searchText,\n searchKeywordSuggestClass,\n searchProductSuggestClass,\n searchCategorySuggestClass,\n suggestions,\n searchRefiners,\n isLoadingAutoSuggest\n } = this.state;\n\n const searchQsp = (context && context.app && context.app.config && context.app.config.searchQueryStringParameter) || 'q';\n const searchPageURL = getUrlSync('search', context && context.actionContext) || '';\n const searchURL = this._appendQueryParams(searchPageURL, searchText, searchQsp);\n const searchPlaceholder = searchplaceholderText && searchplaceholderText.length > 0 ? searchplaceholderText : 'Search in Fabrikam';\n\n const keywordSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Keyword || suggestion.SuggestionType === SuggestionType.None\n );\n const productSuggestions = suggestions?.AllSearchResults?.filter(\n suggestion => suggestion.SuggestionType === SuggestionType.Product\n );\n const categoryRefiners = searchRefiners?.find(refiner => {\n return refiner.SourceValue === ProductRefinerSource.Category;\n });\n const categorySuggestions = suggestions?.AllSearchResults?.filter(suggestion => {\n if (suggestion.SuggestionType !== SuggestionType.Category) {\n return false;\n }\n const refiner = categoryRefiners?.Values?.find(item => {\n return `${item.RefinerRecordId ?? 0}` === suggestion.Id;\n });\n\n return !ObjectExtensions.isNullOrUndefined(refiner);\n });\n\n const viewProps: ISearchViewProps = {\n ...(this.props as ISearchProps),\n\n Search: {\n moduleProps: this.props,\n className: `${classnames('ms-search', className)} ${disableSubmitSearch ? 'no-submit' : 'with-submit'}`\n },\n AutoSuggestAriaLabel: {\n tag: 'div',\n className: 'msc-autoSuggest__screen-reader',\n 'aria-live': 'assertive',\n ref: this.autoSuggestResultScreenReaderDiv\n },\n AutoSuggestAriaLabelText: this.state.autoSuggestAriaLabel,\n searchText: this.state.searchText,\n AutoSuggest: {\n ref: this.autoSuggestResultDiv,\n className: 'ms-search__autoSuggest'\n },\n KeywordSuggest: {\n className: searchKeywordSuggestClass\n },\n ProductSuggest: {\n className: searchProductSuggestClass\n },\n CategorySuggest: {\n className: searchCategorySuggestClass\n },\n SearchForm: {\n className: `${this.searchFormClass} ${isSearchFormExpanded ? 'bx-show' : 'bx-hide'}`\n },\n FormWrapper: {\n tag: 'form',\n ref: this.formReference,\n className: 'ms-search__searchForm',\n 'aria-label': 'Search',\n name: 'searchForm',\n role: 'search',\n action: searchURL,\n autoComplete: 'off',\n onSubmit: this._handleSubmit\n },\n UlKeyword: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__keywordResults-items', className)\n },\n UlProduct: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__productResults-items', className)\n },\n UlCategory: {\n tag: 'ul',\n className: classnames('msc-autoSuggest__categoryResults-items', className)\n },\n label: LabelComponent({\n isSearchFormExpanded,\n searchLabelClass: `${this.searchLabelClass} ${isSearchFormExpanded ? 'bx-hide' : 'bx-show'}`,\n searchtext,\n searchLabelArialLabel,\n searchCollapsedLabel: this.searchCollapsedLabel,\n hideSearchLabel,\n handleCancelSearchChange: this._handleCancelSearchChange,\n telemetryContent: this.telemetryContent\n }),\n form: FormComponent({\n ariaLabelCancel: cancelBtnAriaLabel,\n ariaLabelSearch: searchBtnAriaLabel,\n ariaLabelSubmit: submitBtnAriaLabel,\n hideSearchLabel,\n searchTextInput: this.searchTextInput,\n disableSubmitSearch,\n handleInputChange: this._handleInputChange,\n handleCancelSearchChange: this._handleCancelSearchChange,\n maxChars: this.maxChars,\n searchQsp,\n searchPlaceholder,\n query: searchText\n }),\n autosuggestKeyword:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (keywordSuggestions && ArrayExtensions.hasElements(keywordSuggestions)))\n ? KeywordSuggestionsComponent({\n searchKeywordSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: keywordSuggestions,\n telemetryContent: this.telemetryContent\n })\n : undefined,\n autosuggestProduct:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (productSuggestions && ArrayExtensions.hasElements(productSuggestions)))\n ? ProductSuggestionsComponent({\n searchProductSuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: productSuggestions,\n telemetry: this.props.telemetry,\n moduleType: this.props.typeName,\n moduleId: this.props.id,\n telemetryContent: this.telemetryContent,\n resources: this.props.resources\n })\n : undefined,\n autosuggestCategory:\n searchText &&\n searchText.length > 0 &&\n (isLoadingAutoSuggest || (categorySuggestions && ArrayExtensions.hasElements(categorySuggestions)))\n ? CategorySuggestionsComponent({\n searchCategorySuggestClass,\n searchPageURL,\n searchQsp,\n hitPrefix: this.hitPrefix,\n hitSuffix: this.hitSuffix,\n autoSuggestProps: this.props,\n searchText,\n suggestions: categorySuggestions,\n searchRefiners,\n telemetryContent: this.telemetryContent,\n shouldShowFullPath: shouldShowFullCategoryPath\n })\n : undefined,\n callbacks: {\n handleCancelSearchChange: this._handleCancelSearchChange,\n handleCancelSearchFocused: this._handleCancelSearchFocused\n },\n isSearchFormExpanded: this.state.isSearchFormExpanded,\n isLoadingAutoSuggest,\n isLoadingNode: this._isLoadingNode()\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _initSuggestionTypes() {\n const suggestionTypes = this.props.config.suggestionTypeCriterion;\n\n const suggestions = ArrayExtensions.unique(ArrayExtensions.validValues(suggestionTypes));\n if (!ArrayExtensions.hasElements(suggestions)) {\n this.inputSuggestionType = [\n { SuggestionType: SuggestionTypeCriterionSuggestionType.keyword },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.product },\n { SuggestionType: SuggestionTypeCriterionSuggestionType.scopedCategory }\n ];\n return;\n }\n\n const validSuggestions = suggestions.filter(suggestion => suggestion.SuggestionType);\n if (ArrayExtensions.hasElements(validSuggestions)) {\n this.inputSuggestionType = validSuggestions;\n return;\n }\n\n this.inputSuggestionType = [];\n }\n\n /**\n * Function to create the ReactNode for loading Autosuggest result.\n * @returns ReachNode for loading Autosuggest result.\n */\n private readonly _isLoadingNode = (): React.ReactNode => {\n const loadingText = this.props.resources.autoSuggestResultLoadingMessage;\n return ;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _focusOutTarget = (e: any): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.target.closest('.ms-search') === null) {\n this._clearAutoSuggestState();\n }\n };\n\n private readonly _keyup = (e: KeyboardEvent): void => {\n const { suggestions } = this.state;\n\n if (suggestions && suggestions.AllSearchResults && e.keyCode === KeyCodes.Escape) {\n this._clearAutoSuggestState();\n } else if (this.state.isSearchFormExpanded && e.keyCode === KeyCodes.Escape) {\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n\n if (\n !(\n (this.formReference.current && this.formReference.current.contains((e.target as unknown) as Node)) ||\n (this.autoSuggestResultDiv.current && this.autoSuggestResultDiv.current.contains((e.target as unknown) as Node))\n )\n ) {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n\n if (this.state.isSearchFormExpanded) {\n this.setState({ isSearchFormExpanded: false });\n }\n }\n };\n\n private readonly _clearAutoSuggestState = (): void => {\n const {\n context: { actionContext },\n data: { searchState }\n } = this.props;\n\n if (this.searchTextInput.current && this.searchTextInput.current.value.length > 0) {\n searchState.searchText = '';\n searchState.defaultBasicSearchUrl = '';\n searchState.searchQueryStringParameter = '';\n actionContext ? actionContext.update(createSearchStateInput(searchState), searchState) : null;\n this.searchTextInput.current.value = '';\n }\n\n this.setState({ searchText: '', suggestions: undefined, searchRefiners: undefined });\n };\n\n private async _getSearchSuggestions(loadSuggestionsRequestId: string, query: string) {\n try {\n const searchSuggestions = await getSearchSuggestionsAction(\n new AutoSuggestInput(query, this.topResultsCount, this._getSuggestionType(), this.hitPrefix, this.hitSuffix),\n this.props.context.actionContext\n );\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n return searchSuggestions;\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return undefined;\n }\n this.setState({ suggestions: undefined, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount() });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get auto suggest results');\n return undefined;\n }\n }\n\n private async _updateSearchRefiners(loadSuggestionsRequestId: string, query: string, suggestions: Autosuggestions | undefined) {\n try {\n const refiners = await this._getSearchRefiners(query);\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({\n suggestions,\n searchRefiners: refiners,\n autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions),\n isLoadingAutoSuggest: false\n });\n } catch (error) {\n if (loadSuggestionsRequestId !== this.loadSuggestionsRequestId) {\n return;\n }\n this.setState({ suggestions, searchRefiners: undefined, autoSuggestAriaLabel: this._setAutoSuggestResultCount(suggestions) });\n this.props.telemetry.exception(error);\n this.props.telemetry.debug('Unable to get refiners results');\n }\n }\n\n private _loadSuggestions(query: string) {\n this.cancellabelDebounce = debounce(async () => {\n this.setState({ isLoadingAutoSuggest: true });\n const loadSuggestionsRequestId = Random.Guid.generateGuid();\n this.loadSuggestionsRequestId = loadSuggestionsRequestId;\n const searchSuggestions = await this._getSearchSuggestions(loadSuggestionsRequestId, query);\n await this._updateSearchRefiners(loadSuggestionsRequestId, query, searchSuggestions);\n }, this.waitTime);\n\n setTimeout(() => {\n this.cancellabelDebounce();\n }, 0);\n }\n\n private readonly _handleInputChange = (query: string): void => {\n if (!query || query.length <= this.maxChars) {\n this.setState({ searchText: query });\n }\n\n if (this.cancellabelDebounce) {\n this.cancellabelDebounce.cancel();\n }\n\n const {\n context,\n data: { searchState }\n } = this.props;\n\n if (context) {\n if (query && query.length > 0) {\n if (query.length > this.maxChars) {\n return;\n }\n\n if (ArrayExtensions.hasElements(this.inputSuggestionType)) {\n this._loadSuggestions(query);\n }\n\n searchState.searchText = query;\n } else {\n this.setState({ suggestions: undefined, searchRefiners: undefined });\n searchState.searchText = '';\n }\n context.actionContext.update(createSearchStateInput(searchState), searchState);\n }\n };\n\n private _getSuggestionType(): string {\n const distinctSuggestionTypes: string[] = this.inputSuggestionType.map(\n suggestionTypeItem => suggestionTypeItem.SuggestionType!.charAt(0).toUpperCase() + suggestionTypeItem.SuggestionType!.slice(1)\n );\n return distinctSuggestionTypes.join(',');\n }\n\n private async _getSearchRefiners(searchText: string): Promise {\n const { actionContext: ctx } = this.props.context;\n const catalogId = getCatalogId(ctx.requestContext);\n validateCatalogId(catalogId);\n return ProductsDataActions.getProductSearchRefinersAsync(\n { callerContext: ctx },\n {\n SearchCondition: searchText,\n Context: {\n ChannelId: +ctx.requestContext.apiSettings.channelId,\n CatalogId: catalogId\n }\n }\n );\n }\n\n private readonly _handleSubmit = (\n e: React.MouseEvent | React.KeyboardEvent | React.FormEvent\n ): void => {\n const {\n config: { disableSubmitSearch },\n context: {\n actionContext,\n app: {\n config: { searchQueryStringParameter }\n }\n }\n } = this.props;\n\n const query = this.searchTextInput.current && this.searchTextInput.current.value;\n e.preventDefault();\n\n if (!query || (query && query.length === 0) || disableSubmitSearch) {\n this.searchTextInput && this.searchTextInput.current && this.searchTextInput.current.focus();\n } else {\n const searchQsp = searchQueryStringParameter || 'q';\n const searchURL = this._appendQueryParams(getUrlSync('search', actionContext) || '', query, searchQsp);\n document.location.href = searchURL;\n }\n };\n\n private readonly _handleCancelSearchChange = (): void => {\n const { isSearchFormExpanded, suggestions } = this.state;\n\n if (!isSearchFormExpanded) {\n this.setState({\n isSearchFormExpanded: true,\n searchText: '',\n isInitialState: false\n });\n } else {\n if (suggestions && suggestions.AllSearchResults) {\n this._clearAutoSuggestState();\n }\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _handleCancelSearchFocused = (): void => {\n const { suggestions } = this.state;\n if (!(suggestions && suggestions.AllSearchResults)) {\n this._clearAutoSuggestState();\n this.setState({ isSearchFormExpanded: false });\n }\n };\n\n private readonly _appendQueryParams = (route: string, query: string, qsp: string): string => {\n if (!MsDyn365.isBrowser) {\n return '';\n }\n\n const queryUrl = new URL(route, window.location.href);\n if (qsp && query) {\n queryUrl.searchParams.set(qsp, query);\n }\n\n return queryUrl.href;\n };\n\n private readonly _setAutoSuggestResultCount = (result?: Autosuggestions) => {\n if (this.autoSuggestResultScreenReaderDiv.current !== null) {\n const ariaLiveRegion = this.autoSuggestResultScreenReaderDiv.current;\n const suggestResultString = this.props.resources.autoSuggestFoundMessage;\n const emptyResultString = this.props.resources.noAutoSuggestionMessage;\n ariaLiveRegion.innerText =\n result && result.AllSearchResults && result.AllSearchResults.length > 0 ? suggestResultString : emptyResultString;\n ariaLiveRegion.setAttribute('aria-live', 'assertive');\n return ariaLiveRegion.innerText;\n }\n return '';\n };\n}\n\nexport default Search;\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 { ISearchCategoryViewProps, ISearchFormViewProps, ISearchKeywordViewProps, ISearchProductViewProps } from './components';\nimport { ISearchViewProps } from './search';\n\nconst SearchView: React.FC = props => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n CategorySuggest,\n UlKeyword,\n UlProduct,\n UlCategory,\n form,\n autosuggestCategory,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n isLoadingAutoSuggest,\n isLoadingNode\n } = props;\n\n return (\n \n {label}\n {_renderForm(form as ISearchFormViewProps, SearchForm, FormWrapper)}\n \n {searchText && searchText.length > 0 ? {AutoSuggestAriaLabelText} : ''}\n {_renderKeywordSuggestions(KeywordSuggest, UlKeyword, autosuggestKeyword, isLoadingAutoSuggest, isLoadingNode)}\n {_renderProductSuggestions(ProductSuggest, UlProduct, autosuggestProduct, isLoadingAutoSuggest, isLoadingNode)}\n {_renderCategorySuggestions(CategorySuggest, UlCategory, autosuggestCategory, isLoadingAutoSuggest, isLoadingNode)}\n \n \n );\n};\n\nconst _renderForm = (form: ISearchFormViewProps, SearchForm: INodeProps, FormWrapper: INodeProps) => {\n return (\n \n \n {form.input}\n {form.cancelBtn}\n {form.submitBtn}\n \n \n );\n};\n\nconst _renderKeywordSuggestions = (\n KeywordSuggest: INodeProps,\n UlKeyword: INodeProps,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n keywordSuggestions && (\n \n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nconst _renderProductSuggestions = (\n ProductSuggest: INodeProps,\n UlProduct: INodeProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n productSuggestions && (\n \n \n {productSuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n \n \n {item.thumbnail}\n {item.text}\n {item.price}\n \n \n );\n })}\n \n \n )\n );\n};\n\nconst _renderCategorySuggestions = (\n CategorySuggest: INodeProps,\n UlCategory: INodeProps,\n categorySuggestions?: ISearchCategoryViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n) => {\n return (\n categorySuggestions && (\n \n \n {categorySuggestions.title}\n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n categorySuggestions.text.map(text => {\n return text;\n })}\n \n \n )\n );\n};\n\nexport default SearchView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ISearchData, ISearchViewProps } from '@msdyn365-commerce-modules/search';\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Categories heading.\n * @param inCategoriesHeading - The Keywords result heading.\n * @returns The JSX Element.\n */\nconst renderCategorySuggestionsTitle = (inCategoriesHeading: string): JSX.Element => {\n const categoryAutoSuggestionHeading = inCategoriesHeading ? inCategoriesHeading : 'In categories';\n\n return
    {categoryAutoSuggestionHeading}
    ;\n};\n\n/**\n * Render Categories suggestion result.\n * @param inCategoriesHeading - The Categories result heading.\n * @param noResultText - The \"No Result\" text.\n * @param props - The Categories suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns The JSX Element.\n */\nexport const CategorySuggestionsComponent = (\n inCategoriesHeading: string,\n noResultText: string,\n props: ISearchViewProps & ISearchProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n return props.autosuggestCategory ? (\n \n {renderCategorySuggestionsTitle(inCategoriesHeading)}\n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n props.autosuggestCategory.text.map(text => {\n return text;\n })}\n \n \n ) : (\n \n {renderCategorySuggestionsTitle(inCategoriesHeading)}\n \n
  • {noResultText}
  • \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 { IImageData, Image } from '@msdyn365-commerce/core';\nimport { ISearchData } from '@msdyn365-commerce-modules/search';\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Products Suggestion result heading.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\n if (!noSearchResultImage || !noSearchResultImage.src) {\n return null;\n }\n const imageSettings = {\n lazyload: true,\n viewports: {\n xs: { w: 100, h: 100, q: 'w=100&h=100&q=60&m=6' }\n }\n };\n return (\n \n );\n};\n\n/**\n * Render Product suggestion result.\n * @param props -The props.\n * @returns The JSX Element.\n */\nexport const MobileAutoSuggestEmptyComponent = (props: ISearchProps): JSX.Element => {\n return (\n \n
    {renderProductNotFoundResultsImage(props)}
    \n
    \n
    {props.resources.emptyMobileSearchTextHeading}
    \n
    {props.resources.emptyMobileSearchText}
    \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 { ISearchData, ISearchFormViewProps } from '@msdyn365-commerce-modules/search';\nimport { Button, INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\nimport { MobileAutoSuggestEmptyComponent } from './search.mobile.empty';\n\n/**\n * Render Clear button for mobile viewport.\n * @param clearSearchButtonText -The Clear button text.\n * @param clearSearch -Clear Search callback.\n * @returns -The JSX Element.\n */\nconst renderClearButton = (clearSearchButtonText: string, clearSearch: () => void): JSX.Element => {\n return (\n \n );\n};\n\n/**\n * Render Search form.\n * @param form -Form view props.\n * @param searchForm -Search Form props.\n * @param formWrapper -Form Wrapper props.\n * @param isMobile -Is mobile viewport flag.\n * @param clearSearchButtonText -The Clear button text.\n * @param props -The props for resource.\n * @param isSearchText -Is SearchText flag for input text.\n * @param clearSearch -Clear Search callback.\n * @returns -The JSX Element.\n */\nexport const FormComponent = (\n form: ISearchFormViewProps,\n searchForm: INodeProps,\n formWrapper: INodeProps,\n isMobile: boolean,\n clearSearchButtonText: string,\n props: ISearchProps,\n isSearchText: boolean,\n clearSearch: () => void\n): JSX.Element => {\n const cancelButtonNode = (\n \n );\n\n return isMobile ? (\n \n {form.cancelBtn}\n \n {form.input}\n {isSearchText && renderClearButton(clearSearchButtonText, clearSearch)}\n {!isSearchText ? MobileAutoSuggestEmptyComponent(props) : null}\n \n \n ) : (\n \n \n {form.submitBtn}\n {form.input}\n {isSearchText && cancelButtonNode}\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 { ISearchKeywordViewProps } from '@msdyn365-commerce-modules/search';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\n/**\n * Render keywords heading.\n * @param keywordsHeading -The Keywords result heading.\n * @returns The JSX Element.\n */\nconst renderKeywordSuggestionsTitle = (keywordsHeading: string): JSX.Element => {\n const categoryAutoSuggestionHeading = keywordsHeading ? keywordsHeading : 'Keywords';\n\n return
    {categoryAutoSuggestionHeading}
    ;\n};\n\n/**\n * Render keywords reults.\n * @param keywordSuggest -The Keywords suggest Node props.\n * @param ulKeyword -The List Node props.\n * @param keywordsHeading -The Keywords result heading.\n * @param noResultText -The \"No Result\" text.\n * @param keywordSuggestions -The Keywords suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns -The JSX Element.\n */\nexport const KeywordSuggestionsComponent = (\n keywordSuggest: INodeProps,\n ulKeyword: INodeProps,\n keywordsHeading: string,\n noResultText: string,\n keywordSuggestions?: ISearchKeywordViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n return keywordSuggestions ? (\n \n {renderKeywordSuggestionsTitle(keywordsHeading)}\n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n keywordSuggestions.text.map(text => {\n return text;\n })}\n \n \n ) : (\n \n {renderKeywordSuggestionsTitle(keywordsHeading)}\n \n
  • {noResultText}
  • \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 { IImageData, Image } from '@msdyn365-commerce/core';\nimport { ISearchData, ISearchProductViewProps } from '@msdyn365-commerce-modules/search';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nimport { ISearchProps } from '../../definition-extensions/search.ext.props.autogenerated';\n\n/**\n * Render Products Suggestion result heading.\n * @param productSuggestionsHeading -The products suggestion result heading.\n * @returns The JSX Element.\n */\nconst renderProductSuggestionsTitle = (productSuggestionsHeading: string): JSX.Element => {\n const productAutoSuggestionHeading = productSuggestionsHeading ? productSuggestionsHeading : 'Products';\n\n return
    {productAutoSuggestionHeading}
    ;\n};\n\n/**\n * Render Products Suggestion result heading.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResultsImage = (props: ISearchProps): JSX.Element | null => {\n const noSearchResultImage: IImageData | undefined = props.config.noSearchResultImage;\n if (!noSearchResultImage || !noSearchResultImage.src) {\n return null;\n }\n return (\n \n );\n};\n\n/**\n * Render Products No result section.\n * @param props -The props.\n * @returns The JSX Element.\n */\nconst renderProductNotFoundResults = (props: ISearchProps): JSX.Element => {\n return (\n \n
    {renderProductNotFoundResultsImage(props)}
    \n
    {props.resources.noResultContentHeadingText}
    \n
    \n {props.resources.noResultContentParagraphText}\n
    \n
    \n );\n};\n\n/**\n * Render Product suggestion result.\n * @param productSuggest -The product suggest Node props.\n * @param ulProduct -The List Node props.\n * @param props -The props.\n * @param productSuggestions -The Product suggestion result.\n * @param isLoadingAutoSuggest - The autosuggestion loading flag.\n * @param isLoadingNode - The autosuggestion loading node.\n * @returns The JSX Element.\n */\nexport const ProductSuggestionsComponent = (\n productSuggest: INodeProps,\n ulProduct: INodeProps,\n props: ISearchProps,\n productSuggestions?: ISearchProductViewProps,\n isLoadingAutoSuggest?: boolean,\n isLoadingNode?: React.ReactNode\n): JSX.Element => {\n const liProduct: INodeProps = {\n tag: 'li',\n className: 'msc-no-result-content'\n };\n return productSuggestions ? (\n \n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\n \n {isLoadingAutoSuggest && isLoadingNode}\n {!isLoadingAutoSuggest &&\n productSuggestions.items.map((item, index) => {\n return (\n \n \n {item.thumbnail}\n {item.text}\n {item.price}\n \n \n );\n })}\n \n \n ) : (\n \n {renderProductSuggestionsTitle(props.resources.productSuggestionHeading)}\n \n {renderProductNotFoundResults(props)}\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 { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ISearchData, ISearchFormViewProps, ISearchViewProps } from '@msdyn365-commerce-modules/search';\nimport { Button, format, isMobile, Module, Node, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { ISearchProps } from '../definition-extensions/search.ext.props.autogenerated';\nimport { CategorySuggestionsComponent } from './components/search.categorysuggest';\nimport { FormComponent } from './components/search.form';\nimport { KeywordSuggestionsComponent } from './components/search.keywordsuggest';\nimport { ProductSuggestionsComponent } from './components/search.productsuggest';\n\n/**\n * Render Title for AutoSuggest.\n * @param searchSuggestionHeading -The heading resource string.\n * @param searchText -The search string.\n * @returns -The JSX Element.\n */\nconst renderTitle = (searchSuggestionHeading: string, searchText: string): JSX.Element => {\n const searchTextString = '\"'.concat(searchText.concat('\"'));\n const searchAutoSuggestionHeading = searchSuggestionHeading\n ? format(searchSuggestionHeading, searchTextString)\n : `Search for ${searchTextString}`;\n\n return {searchAutoSuggestionHeading};\n};\n\n/**\n * Search View.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst SearchView: React.FC> = (\n props: ISearchViewProps & ISearchProps\n): JSX.Element => {\n const {\n Search,\n AutoSuggestAriaLabel,\n AutoSuggestAriaLabelText,\n searchText,\n AutoSuggest,\n KeywordSuggest,\n ProductSuggest,\n UlKeyword,\n UlProduct,\n form,\n autosuggestKeyword,\n autosuggestProduct,\n SearchForm,\n FormWrapper,\n label,\n context,\n isLoadingAutoSuggest,\n isLoadingNode,\n callbacks: { handleCancelSearchFocused }\n } = props;\n\n const { searchSuggestionHeading, categorySuggestionHeading, keywordsHeading, noResultText, clearSearchButtonText } = props.resources;\n\n const [searchTextString, setSearchTextString] = useState();\n const [isMobilePort, setIsMobile] = useState(false);\n\n useEffect(() => {\n setSearchTextString(searchText);\n }, [searchText]);\n\n /**\n * ClearSearch callback method to clear search string.\n */\n const clearSearch = (): void => {\n setSearchTextString('');\n\n const propsForm = props.form as ISearchFormViewProps;\n const propsFormInput = propsForm.input as React.DetailedHTMLProps, HTMLInputElement>;\n const propsFormInputCurrent = (propsFormInput.ref as React.RefObject).current;\n\n if (propsFormInputCurrent) {\n propsFormInputCurrent.value = '';\n }\n\n propsFormInput.value = '';\n props.searchText = '';\n props.FormWrapper.action = '';\n };\n\n const isMobileViewport = useCallback(() => {\n const isMobileView = isMobile({ variant: VariantType.Browser, context: context.request }) === 'xs';\n setIsMobile(isMobileView);\n }, [context]);\n\n useEffect(() => {\n window.addEventListener('resize', isMobileViewport);\n isMobileViewport();\n }, [isMobileViewport]);\n\n const viewport = isMobile({ variant: VariantType.Browser, context: context.request });\n\n const isMobileView = viewport === 'sm' || viewport === 'xs';\n\n AutoSuggest.className = !StringExtensions.isNullOrEmpty(searchTextString)\n ? `${AutoSuggest.className} show`\n : `${AutoSuggest.className} hide`;\n const isSearchText: boolean = !StringExtensions.isNullOrEmpty(searchTextString);\n\n return (\n \n {label}\n {FormComponent(\n form as ISearchFormViewProps,\n SearchForm,\n FormWrapper,\n isMobilePort,\n clearSearchButtonText,\n props,\n isSearchText,\n clearSearch\n )}\n {!isMobileView && (\n \n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n {AutoSuggestAriaLabelText}\n ) : (\n ''\n )}\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <>\n \n \n {renderTitle(searchSuggestionHeading, searchText)}\n \n \n \n {CategorySuggestionsComponent(\n categorySuggestionHeading,\n noResultText,\n props,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n {KeywordSuggestionsComponent(\n KeywordSuggest,\n UlKeyword,\n keywordsHeading,\n noResultText,\n autosuggestKeyword,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n {ProductSuggestionsComponent(\n ProductSuggest,\n UlProduct,\n props,\n autosuggestProduct,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n \n ) : null}\n \n )}\n {isMobileView && props.isSearchFormExpanded && (\n \n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n {AutoSuggestAriaLabelText}\n ) : (\n ''\n )}\n {!StringExtensions.isNullOrEmpty(searchTextString) ? (\n <>\n \n {(form as ISearchFormViewProps).cancelBtn}\n {renderTitle(searchSuggestionHeading, searchText)}\n \n \n \n {CategorySuggestionsComponent(\n categorySuggestionHeading,\n noResultText,\n props,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n {KeywordSuggestionsComponent(\n KeywordSuggest,\n UlKeyword,\n keywordsHeading,\n noResultText,\n autosuggestKeyword,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n {ProductSuggestionsComponent(\n ProductSuggest,\n UlProduct,\n props,\n autosuggestProduct,\n isLoadingAutoSuggest,\n isLoadingNode\n )}\n \n \n ) : null}\n \n )}\n \n );\n};\nexport default SearchView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","window","__bindings__","_objectSpread","viewDictionary","cn","createSearchStateInput","result","GenericInput","getGenericActionDataAction","createObservableDataAction","action","getGenericAction","input","inputData","searchText","SearchState","__decorate","observable","SpinnerSize","SpinnerType","SuggestionType","ProductListInventoryFilteringOptions","getClassNames","classNamesFunction","render","type","size","ariaLabel","ariaLive","styles","label","theme","className","labelPosition","statusMessage","nativeProps","this","props","styleSize","undefined","large","medium","classNames","root","circle","role","DelayedRender","screenReaderText","defaultProps","GlobalClassNames","spinAnimation","memoize","transform","Spinner","styled","SpinnerBase","palette","display","flexDirection","alignItems","justifyContent","boxSizing","borderRadius","border","themeLight","borderTopColor","themePrimary","animationName","animationDuration","animationIterationCount","animationTimingFunction","selectors","xSmall","width","height","small","fonts","color","margin","textAlign","scope","AutoSuggestInput","constructor","top","suggestionType","hitPrefix","hitSuffix","getCacheKey","getCacheObjectType","dataCacheType","searchQuery","topResultsCount","async","_getAutoSuggest","autosuggest","ctx","_ctx$requestContext$a","catalogId","getCatalogId","requestContext","productSearchCriteria","SearchCondition","length","Context","ChannelId","apiSettings","channelId","CatalogId","app","config","productListInventoryDisplay","HideOOS","inventoryRefinerValue","getInventorySortableRefinerValue","channelInventoryConfiguration","isInStock","ProductAvailabilitySortableAttributeRecordId","RefinerRecordId","DataTypeValue","AttributeDataType","TrueFalse","LeftValueBoundString","RightValueBoundString","UnitText","RowNumber","Count","ExtensionProperties","RefinerSourceValue","ProductRefinerSource","Attribute","getInventoryConfigurationAsync","callerContext","Refinement","searchCriteria","ProductSearchCriteria","HitPrefix","HitSuffix","searchSuggestions","getSearchSuggestionsAsync","queryResultSettings","Paging","Top","map","item","ImageUrl","generateImageUrl","AllSearchResults","telemetry","error","autoSuggestPromises","Promise","all","then","payLoad","CategorySuggestionsComponent","suggestions","autoSuggestProps","resources","categorySuggestionHeading","reactNodes","getPayloadObject","telemetryContent","push","_assembleNode","title","_renderTitle","text","categoryAutoSuggestionHeading","format","React","shouldShowFullPath","splitValue","Value","split","pop","replace","RegExp","contentAction","etext","attribute","getTelemetryAttributes","key","Id","Object","assign","href","_generateLink","_getHighlightedText","suggestion","_getCategoryLink","_categoryRefiners$Val","searchPageURL","searchQsp","searchRefiners","MsDyn365","isBrowser","queryUrl","URL","location","searchParams","set","categoryRefiners","find","refiners","SourceValue","Category","refiner","Values","Number","parseInt","encodedRefiner","JSON","stringify","compressRefiners","formattedText","dangerouslySetInnerHTML","getRichTextHtml","compressedRefinerKeys","compressedRefiners","forEach","compressedRefiner","refinerKey","FormComponent","searchPlaceholder","hideSearchLabel","searchTextInput","handleInputChange","maxChars","disableSubmitSearch","handleCancelSearchChange","query","ariaLabelCancel","ariaLabelSearch","ariaLabelSubmit","onInputChange","event","target","value","onInputChangeFunction","inputNode","placeholder","ref","onChange","maxLength","submitBtnNode","Button","cancelBtn","onClick","submitBtn","KeywordSuggestionsComponent","formattedLink","LabelComponent","searchLabelClass","searchLabelArialLabel","isSearchFormExpanded","searchtext","searchCollapsedLabel","attributes","innerRef","ProductSuggestionsComponent","context","actionContext","productSuggestionHeading","moduleType","moduleId","items","productAutoSuggestionHeading","_item$Value","altText","price","Value3","DecimalValue","thumbnail","_renderThumbnail","ObjectExtensions","isNullOrUndefined","_renderPrice","LiProduct","_getLiWrapper","AProduct","_getAWrapper","tag","recid","cultureFormatter","formatCurrency","getProductPageUrlSync","adjustedPrice","basePrice","_props$resources","PriceComponent","typeName","data","CustomerContextualPrice","BasePrice","freePriceText","request","gridSettings","imageSettings","cropFocalRegion","Image","src","viewports","xs","q","w","h","lg","xl","lazyload","loadFailureBehavior","Search","super","waitTime","_isLoadingNode","loadingText","autoSuggestResultLoadingMessage","_focusOutTarget","e","state","closest","_clearAutoSuggestState","_keyup","keyCode","KeyCodes","Escape","setState","formReference","current","contains","autoSuggestResultDiv","searchState","defaultBasicSearchUrl","searchQueryStringParameter","update","_handleInputChange","cancellabelDebounce","cancel","ArrayExtensions","hasElements","inputSuggestionType","_loadSuggestions","_handleSubmit","preventDefault","focus","searchURL","_appendQueryParams","getUrlSync","document","_handleCancelSearchChange","isInitialState","_handleCancelSearchFocused","route","qsp","_setAutoSuggestResultCount","autoSuggestResultScreenReaderDiv","ariaLiveRegion","suggestResultString","autoSuggestFoundMessage","emptyResultString","noAutoSuggestionMessage","innerText","setAttribute","searchKeywordSuggestClass","searchProductSuggestClass","searchCategorySuggestClass","autoSuggestAriaLabel","isLoadingAutoSuggest","searchInputMaxLength","searchFormClass","getTelemetryObject","telemetryPageName","friendlyName","_initSuggestionTypes","body","addEventListener","componentWillUnmount","removeEventListener","componentDidUpdate","params","isEditor","shouldComponentUpdate","nextProps","nextState","_suggestions$AllSearc","_suggestions$AllSearc2","_suggestions$AllSearc3","cancelBtnAriaLabel","searchBtnAriaLabel","submitBtnAriaLabel","searchplaceholderText","shouldShowFullCategoryPath","keywordSuggestions","filter","Keyword","None","productSuggestions","Product","categorySuggestions","_item$RefinerRecordId","viewProps","moduleProps","classnames","AutoSuggestAriaLabel","AutoSuggestAriaLabelText","AutoSuggest","KeywordSuggest","ProductSuggest","CategorySuggest","SearchForm","FormWrapper","autoComplete","onSubmit","UlKeyword","UlProduct","UlCategory","form","autosuggestKeyword","autosuggestProduct","autosuggestCategory","callbacks","handleCancelSearchFocused","isLoadingNode","renderView","suggestionTypes","suggestionTypeCriterion","unique","validValues","validSuggestions","loadSuggestionsRequestId","getSearchSuggestionsAction","_getSuggestionType","exception","debug","_getSearchRefiners","_debounce","Random","Guid","generateGuid","_getSearchSuggestions","_updateSearchRefiners","setTimeout","suggestionTypeItem","charAt","toUpperCase","slice","join","validateCatalogId","ProductsDataActions","_renderForm","Node","_renderKeywordSuggestions","_renderProductSuggestions","index","_renderCategorySuggestions","Module","renderCategorySuggestionsTitle","inCategoriesHeading","noResultText","MobileAutoSuggestEmptyComponent","noSearchResultImage","renderProductNotFoundResultsImage","emptyMobileSearchTextHeading","emptyMobileSearchText","searchForm","formWrapper","isMobile","clearSearchButtonText","isSearchText","clearSearch","cancelButtonNode","renderClearButton","renderKeywordSuggestionsTitle","keywordsHeading","keywordSuggest","ulKeyword","renderProductSuggestionsTitle","productSuggestionsHeading","renderProductNotFoundResults","noResultContentHeadingText","noResultContentParagraphText","productSuggest","ulProduct","_item$id","renderTitle","searchSuggestionHeading","searchTextString","concat","searchAutoSuggestionHeading","setSearchTextString","useState","isMobilePort","setIsMobile","useEffect","propsFormInput","propsFormInputCurrent","isMobileViewport","useCallback","isMobileView","variant","VariantType","Browser","viewport","StringExtensions","isNullOrEmpty","onBlur","module","exports","ReactDOM"],"sourceRoot":""}