{"version":3,"file":"static/js/2035a47c61b807515389.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/get-core-delivery-batch.ts?5a2b","webpack://mattressfirm/./src/Utilities/get-html-parser-value.ts?1fb6","webpack://mattressfirm/./src/Utilities/get-page-path.ts?590a","webpack://mattressfirm/./src/actions/srp-breadcrumb-page.action.ts?4397","webpack://mattressfirm/./src/data-actions/get-seo-data.action.ts?b8ff","webpack://mattressfirm/./src/data-actions/navigation-menu-state-data-action.ts?8ae5","webpack://mattressfirm/./src/modules/mfrm-search-result-container/actions/get-mapped-search-configuration.ts?52d6","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/choice-summary.tsx?ebc2","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/link.tsx?726c","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/product-search-result-items.tsx?e550","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/feature-search-result-item.tsx?8a9d","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/title.tsx?e620","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/separator.tsx?f678","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/modal.tsx?80e1","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/error-message.tsx?3838","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/range-refine-item.tsx?cf24","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/refine-item.tsx?931b","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/refine-submenu.tsx?3f0c","webpack://mattressfirm/./src/modules/mfrm-search-result-container/components/utilities.ts?e524","webpack://mattressfirm/./src/modules/mfrm-search-result-container/mfrm-search-result-container.data.ts?377f","webpack://mattressfirm/./src/Utilities/labeled-dropdown/ui-labeled-dropdown/UiLabeledDropdown.tsx?1565","webpack://mattressfirm/./src/modules/mfrm-search-result-container/mfrm-search-result-container.tsx?7819","webpack://mattressfirm/./src/themes/mattressfirm/custom-components/error-message.tsx?be72","webpack://mattressfirm/./src/modules/mfrm-search-result-container/mfrm-search-result-container.view.tsx?61e3","webpack://mattressfirm/./lib/mfrm-search-result-container/module-registration.js?a63b","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["import * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport dayjs from 'dayjs';\r\nimport { IMFIATPInventoryEntityPLP, IMFIATPInventoryPLPResponse, IMFICartLine } from '../actions/BatchCoreProductDataServiceEntities.g';\r\nimport fetchCoreDeliveryListAction, { FetchCoreDeliveryListInput } from \"../actions/fetch-core-delivery-list.action\";\r\n\r\nexport interface IMFIATPInventoryEntityPLPEx extends IMFIATPInventoryEntityPLP {\r\n deliveryMessage: string | undefined;\r\n}\r\n\r\nasync function getListOfCoreDeliveryMessage(ctx: Msdyn365.IActionContext, cartLines: IMFICartLine[], zipCode?: string): Promise {\r\n const data: IMFIATPInventoryPLPResponse = await fetchCoreDeliveryListAction(new FetchCoreDeliveryListInput(cartLines, zipCode), ctx);\r\n const updatedResponse: IMFIATPInventoryEntityPLPEx[] | undefined = data?.ATPInventoryPLPData?.map((deliveryItem: IMFIATPInventoryEntityPLP, i: number) => {\r\n let deliveryMessage = '';\r\n if (deliveryItem.Available === 'YES' && deliveryItem.ATPQuantity !== undefined && parseInt(deliveryItem.ATPQuantity, 10) > 0) {\r\n const date = new Date();\r\n const today = dayjs(Date.now()).format('D M YY');\r\n const deliveryDate = dayjs(deliveryItem.SlotDate).format('D M YY');\r\n if (today === deliveryDate) {\r\n deliveryMessage = `Delivery by Today ${dayjs(deliveryItem.SlotDate).format('MMM D')}`;\r\n } else if (deliveryDate === dayjs(date.setDate(date.getDate() + 1)).format('D M YY')) {\r\n deliveryMessage = `Delivery by Tomorrow ${dayjs(deliveryItem.SlotDate).format('MMM D')}`;\r\n } else {\r\n deliveryMessage = `Delivery by ${dayjs(deliveryItem.SlotDate).format('MMM D')}`;\r\n }\r\n } else {\r\n deliveryMessage = ctx.requestContext.app.config.defaultDeliveryMessage ? ctx.requestContext.app.config.defaultDeliveryMessage : '';\r\n }\r\n return { ...deliveryItem, deliveryMessage };\r\n });\r\n return updatedResponse;\r\n}\r\n\r\nexport default getListOfCoreDeliveryMessage;","import ReactHtmlParser from 'react-html-parser';\r\n\r\nconst getHtmlParserValue = (value?: string) => {\r\n let parsedValue = '';\r\n const parsedArr = value && ReactHtmlParser(value);\r\n if (parsedArr && parsedArr?.length > 0) {\r\n parsedValue = parsedArr[0] ? parsedArr[0].toString() : '';\r\n }\r\n return parsedValue;\r\n};\r\n\r\nexport default getHtmlParserValue;","import MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const getPagePath = (): string => {\r\n return MsDyn365.isBrowser\r\n ? window.location.href.split(location.host)[1].includes('?')\r\n ? window.location.href.split(location.host)[1].split('?')[0]\r\n : window.location.href.split(location.host)[1]\r\n : '';\r\n};","import * as Msdyn365 from '@msdyn365-commerce/core';\r\n\r\nexport interface ISRPBreadcrumbState {\r\n breadcrumbCheck: boolean;\r\n}\r\n\r\n/**\r\n * SrpBreadcrumbPage Input Action\r\n */\r\nexport class SrpBreadcrumbPageInput implements Msdyn365.IActionInput {\r\n // Construct the input needed to run the action\r\n // Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `BreadcrumbSrp`;\r\n public getCacheObjectType = () => 'BreadcrumbSrp';\r\n public dataCacheType = (): Msdyn365.CacheType => 'application';\r\n}\r\n\r\n// Create a data model here or import one to capture the response of the action\r\nexport interface ISrpBreadcrumbPageData {\r\n text: string;\r\n}\r\n\r\n/**\r\n * Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (args: Msdyn365.ICreateActionContext): Msdyn365.IActionInput => {\r\n return new SrpBreadcrumbPageInput();\r\n};\r\n\r\n/**\r\n * Use this function to call your action and process the results as needed\r\n */\r\nasync function action(input: SrpBreadcrumbPageInput, ctx: Msdyn365.IActionContext): Promise {\r\n // const apiSettings = Msdyn365.msdyn365Commerce.apiSettings;\r\n\r\n // Uncomment the below line to get the value from a service\r\n // const response = await Msdyn365.sendRequest('/get/example/id/1', 'get');\r\n return { breadcrumbCheck: false };\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n // Give your data action a unique id\r\n id: 'SrpBreadcrumbPage',\r\n input: createInput\r\n // Uncomment the below line if this is a meant to be a batched data action\r\n // isBatched: true\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 Msdyn365 from '@msdyn365-commerce/core';\r\nimport { filteredURL } from '../Utilities/plp-url-utils';\r\n\r\nexport class GetSeoDataInput extends Msdyn365.CommerceEntityInput implements Msdyn365.IActionInput {\r\n\r\n private seoDataUrl: string = '';\r\n constructor(seoDataUrl: string) {\r\n super({ shouldCacheOutput: true, cacheObjectType: 'SeoDataCache', cacheKey: 'SeoDataCache' });\r\n this.seoDataUrl = seoDataUrl;\r\n }\r\n\r\n public getSeoDataUrl = () => this.seoDataUrl;\r\n public getCacheKey = () => `SeoDataCache`;\r\n public getCacheObjectType = () => 'SeoDataCache';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n\r\n}\r\n\r\nconst createInput = (inputData: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n if (inputData.config && inputData.config.seoDataUrl) {\r\n return new GetSeoDataInput(inputData.config.seoDataUrl);\r\n }\r\n return new GetSeoDataInput('');\r\n};\r\n\r\n// tslint:disable: no-any\r\nasync function action(input: GetSeoDataInput, ctx: Msdyn365.IActionContext): Promise {\r\n\r\n const jsonUrlFromGlobals = ctx.requestContext.app.config.seoDataUrl;\r\n // TODO: Just remove the fallback\r\n const jsonUrl = jsonUrlFromGlobals || 'https://files-us-prod.cms.commerce.dynamics.com/cms/api/fknscsckgq/binary/MA5cA7';\r\n const res = await Msdyn365.sendRequest(jsonUrl, 'get');\r\n const filteredUrlPath = filteredURL(ctx.requestContext);\r\n const seoData = filteredUrlPath && res.data && res.data[filteredUrlPath];\r\n return seoData && seoData[0];\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n id: 'SeoDataCache',\r\n action: >action,\r\n input: createInput\r\n});\r\n","import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { INavigationMenuState } from './navigation-menu-state';\r\n\r\n/**\r\n * NavigationMenuState - action input\r\n */\r\nexport class NavMenuStateInput implements IActionInput {\r\n public getCacheKey = () => `NavMenuState`;\r\n public getCacheObjectType = () => 'NavMenuState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * NavMenuStateInput - action\r\n */\r\nexport async function navMenuStateAction(input: NavMenuStateInput, ctx: IActionContext): Promise {\r\n return { isMenuHasParent: false, isMobileMenuCollapsed: true, selectedNavMenu: '', menuItemData: [] };\r\n}\r\n\r\n/**\r\n * NavMenuStateInput - create new input for create action\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new NavMenuStateInput();\r\n};\r\n\r\n/**\r\n * NavMenuStateInput - create action\r\n */\r\nexport default createObservableDataAction({\r\n id: 'NavMenuState',\r\n action: >navMenuStateAction,\r\n input: createInput\r\n});\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\r\nimport { getSearchConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\nimport { MappedSearchConfiguration } from './MappedSearchConfiguration';\r\n\r\n// TODO: import from commerce entities when available\r\n// tslint:disable-next-line:interface-name\r\ninterface SearchConfiguration {\r\n ProductSortColumns?: SortColumn[];\r\n}\r\n\r\nexport const sortOptions = {\r\n sortByOptionRelevanceDesc: 'Ranking-Desc',\r\n sortByOptionRatingAsc: 'AverageRating-Asc',\r\n sortByOptionRatingDesc: 'AverageRating-Desc',\r\n sortByOptionNameAsc: 'Name-Asc',\r\n sortByOptionNameDesc: 'Name-Desc',\r\n sortByOptionPriceAsc: 'Price-Asc',\r\n sortByOptionPriceDesc: 'Price-Desc'\r\n};\r\n\r\n/**\r\n * ActionInput class for the get-mapped-search-configuration Data Action\r\n */\r\nexport class MappedSearchInput implements IActionInput {\r\n private apiSettings: ICommerceApiSettings;\r\n\r\n constructor(apiSettings: ICommerceApiSettings) {\r\n this.apiSettings = apiSettings;\r\n }\r\n\r\n public getCacheKey = () => buildCacheKey('MappedSearchInput', this.apiSettings);\r\n public getCacheObjectType = () => 'MappedSearchInput';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * Get a mapped search configuration that is easy to use for sorting\r\n */\r\nexport async function getMappedSearchConfiguration(input: MappedSearchInput, ctx: IActionContext): Promise {\r\n return getSearchConfigurationAsync({ callerContext: ctx }).then((searchConfiguration: SearchConfiguration) => {\r\n return ((searchConfiguration.ProductSortColumns || []).map((sortColumn: SortColumn) => {\r\n let key = '';\r\n if (sortColumn.ColumnName) {\r\n switch(sortColumn.ColumnName.toUpperCase()) {\r\n case 'NAME':\r\n key = sortColumn.IsDescending ? sortOptions.sortByOptionNameDesc : sortOptions.sortByOptionNameAsc;\r\n break;\r\n case 'PRICE':\r\n key = sortColumn.IsDescending ? sortOptions.sortByOptionPriceDesc : sortOptions.sortByOptionPriceAsc;\r\n break;\r\n case 'AVERAGERATING':\r\n key = sortColumn.IsDescending ? sortOptions.sortByOptionRatingDesc : sortOptions.sortByOptionRatingAsc;\r\n break;\r\n case 'RANKING':\r\n key = sortOptions.sortByOptionRelevanceDesc;\r\n break;\r\n default:\r\n }\r\n } else {\r\n ctx.telemetry.warning('[get-mapped-search-configuration] unknown search option');\r\n }\r\n if (key) {\r\n return {\r\n key,\r\n sortColumn\r\n };\r\n } else {\r\n return undefined;\r\n }\r\n }).filter(Boolean));\r\n });\r\n}\r\n\r\nexport const createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new MappedSearchInput(inputData.requestContext.apiSettings);\r\n};\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/search-result-container/get-mapped-search-configuration',\r\n action: >getMappedSearchConfiguration,\r\n input: createInput\r\n});","/* tslint:disable: no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IChoiceSummaryProps } from './choice-summary.props';\r\nimport { isMatchingRefinementCriterion, isRangeType } from './utilities';\r\ninterface IRefinerMap {\r\n key: string;\r\n parentKey: string;\r\n value: ProductRefinerValue;\r\n}\r\n/**\r\n * ChoiceSummary component\r\n */\r\n@observer\r\nexport default class ChoiceSummary extends React.Component {\r\n private closeButtonGlyph: string = 'msi-close-btn';\r\n private payLoad: IPayLoad;\r\n @computed get selectedRefinersMap(): IRefinerMap[] {\r\n const { selectedChoices } = this.props;\r\n return selectedChoices.map((selectedRefiner: ProductRefinerValue) => {\r\n return {\r\n key: this._getKeyForRefinerValue(selectedRefiner),\r\n value: selectedRefiner,\r\n parentKey: this._getParentKeyForRefinerValue(selectedRefiner)\r\n } as IRefinerMap;\r\n });\r\n }\r\n constructor(props: Readonly) {\r\n super(props);\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n public render(): JSX.Element {\r\n const { clearAllText, label, classNames, choiceAriaLabel, clearAllModal, closeAriaLabel } = this.props;\r\n const items = this.selectedRefinersMap;\r\n this.payLoad.contentAction.etext = clearAllText;\r\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n return (\r\n
0 ? 'msc-choice-summary__selection' : ''}`}>\r\n {!clearAllModal && items.length > 0 && label && {label}}\r\n {!clearAllModal && (\r\n
    \r\n {items.map((item: IRefinerMap, index: number) => {\r\n this.payLoad.contentAction.etext = item.key;\r\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\r\n return (\r\n
  • \r\n this._onClickKeyName(e, item.parentKey)}\r\n role=\"buton\"\r\n {...attribute}\r\n >\r\n {item.key}\r\n \r\n \r\n
  • \r\n );\r\n })}\r\n
\r\n )}\r\n {this.props.clearAllBtn ?\r\n // @ts-ignore\r\n items.length > 0 && clearAllText && \r\n :\r\n items.length > 0 && clearAllText && {clearAllText}}\r\n
\r\n );\r\n }\r\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue): string {\r\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry } = this.props;\r\n const overallFormat = choiceFormat || '{1}';\r\n const rangeFormat = choiceRangeValueFormat;\r\n let refinerName = '';\r\n if (refinerHierarchy && refinerHierarchy.find) {\r\n const parent = refinerHierarchy.find(\r\n (hierarchy: IProductRefinerHierarchy) =>\r\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\r\n );\r\n if (!parent) {\r\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\r\n } else {\r\n refinerName = parent.KeyName || '';\r\n }\r\n }\r\n let refinerValueName: string;\r\n if (isRangeType(productRefinerValue.DataTypeValue)) {\r\n refinerValueName = rangeFormat\r\n ?.replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\r\n ?.replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\r\n } else {\r\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n }\r\n return overallFormat?.replace('{0}', refinerName)?.replace('{1}', refinerValueName);\r\n }\r\n private _getParentKeyForRefinerValue(productRefinerValue: ProductRefinerValue): string {\r\n const { refinerHierarchy, telemetry } = this.props;\r\n let refinerName = '';\r\n if (refinerHierarchy && refinerHierarchy.find) {\r\n const parent = refinerHierarchy.find(\r\n (hierarchy: IProductRefinerHierarchy) =>\r\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\r\n );\r\n if (!parent) {\r\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\r\n } else {\r\n refinerName = parent.KeyName || '';\r\n }\r\n }\r\n return refinerName;\r\n }\r\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\r\n if (!amount || !currency) {\r\n this.props.telemetry.trace('[choice-summary] could not format price');\r\n return amount || '';\r\n }\r\n const priceAmount = (amount && Number(amount)) || 0;\r\n const locale = get(this.props, 'context.request.locale', 'en-US');\r\n let result: string;\r\n try {\r\n result = new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currencyDisplay: 'symbol',\r\n currency: currency,\r\n minimumFractionDigits: 0\r\n }).format(priceAmount);\r\n } catch (e) {\r\n result = `${priceAmount} ${currency}`;\r\n this.props.telemetry.warning(`Failed to format price for ${result}: ${e}`);\r\n }\r\n return result;\r\n }\r\n private _onClick = (e: React.MouseEvent): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const target = e.currentTarget as HTMLElement;\r\n const clearAll = target.getAttribute('class')!.indexOf('choice-summary__clear-all') > -1;\r\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\r\n if (this.props.onChoiceClicked) {\r\n this.props.onChoiceClicked({\r\n clearAll: clearAll,\r\n itemClicked: target,\r\n choiceClicked: selectedRefiner,\r\n nextItemToFocus: target.nextSibling as HTMLElement,\r\n parentKeyName: ''\r\n });\r\n }\r\n };\r\n private _onClickKeyName = (e: React.MouseEvent, keyName: string = ''): void => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const target = e.currentTarget as HTMLElement;\r\n const clearAll = target.getAttribute('class')!.indexOf('choice-summary__clear-all') > -1;\r\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\r\n if (this.props.onChoiceClicked) {\r\n this.props.onChoiceClicked({\r\n clearAll: clearAll,\r\n itemClicked: target,\r\n choiceClicked: selectedRefiner,\r\n nextItemToFocus: target.nextSibling as HTMLElement,\r\n parentKeyName: keyName\r\n });\r\n }\r\n };\r\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\r\n const result = this.selectedRefinersMap.find(\r\n selected => (itemClicked.innerText && itemClicked.innerText.trim().toUpperCase()) === selected.key.toUpperCase()\r\n );\r\n return (result && result.value) || undefined;\r\n }\r\n}","/* tslint:disable: no-duplicate-imports */\r\nimport * as React from 'react';\r\ninterface ILink {\r\n className?: string;\r\n text?: string;\r\n href?: string;\r\n ariaLabel?: string;\r\n}\r\n\r\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\r\n \r\n {' '}\r\n {text}{' '}\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 { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { IAny, ICoreContext, IGeneric, IImageSettings } from '@msdyn365-commerce/core';\r\n// tslint:disable-next-line: no-duplicate-imports\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { AttributeValue, CommerceProperty, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport get from 'lodash/get';\r\nimport uniqBy from 'lodash/uniqBy';\r\nimport * as React from 'react';\r\nimport { InView } from 'react-intersection-observer';\r\nimport { IMFICartLine as IMFICartLineBatch } from '../../../actions/BatchCoreProductDataServiceEntities.g';\r\nimport { IMFIItem, IMFIPromotion } from '../../../actions/EyebrowMessageDataServiceEntities.g';\r\nimport { GetCategoryPathsInput, getProductsCategoryPathsAction } from '../../../actions/get-mfrm-products-category-paths.action';\r\nimport { getBrandNameCheck } from '../../../Utilities/get-product-brand';\r\nimport {\r\n _coreProductATPCall,\r\n _getEyebrowMessage,\r\n _getSoonestDeliveryDate,\r\n _makeDeliveryMessage\r\n} from '../../../Utilities/product-search-result-utils';\r\nimport { IMfrmSearchResultContainerResources } from '../../../modules/mfrm-search-result-container/mfrm-search-result-container.props.autogenerated';\r\nimport { ProductComponent } from '../../../themes/mattressfirm/views/components/product.component';\r\nimport { getPagePath } from '../../../Utilities/get-page-path';\r\nimport getListOfCoreDeliveryMessage, { IMFIATPInventoryEntityPLPEx } from '../../../Utilities/get-core-delivery-batch';\r\nimport { _getProductType } from '../../../themes/mattressfirm/views/components/delivery-message/deliverymessage.component';\r\nimport { ErrorBoundary } from '../../../common/components/error-boundary';\r\nexport interface ProductSearchResultExtended extends ProductSearchResult {\r\n eyebrowMessage?: string;\r\n deliveryByMessage?: string;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\ninterface IProductSearchResultItems {\r\n products: ProductSearchResult[];\r\n onlyNewProducts: ProductSearchResult[];\r\n currentPromoProducts: ProductSearchResult[];\r\n context: ICoreContext>;\r\n resources: IMfrmSearchResultContainerResources;\r\n imageSettings?: IImageSettings;\r\n moduleType: string;\r\n moduleId: string;\r\n allowBackNavigation?: boolean;\r\n telemetryContent: ITelemetryContent;\r\n productBadgeAttribute?: string;\r\n mattressMatcherBanner?: React.ReactNode;\r\n bannerPosition?: number;\r\n mattressMatcherBannerIndex?: number;\r\n targetAudienceGroup?: string;\r\n listName?: string;\r\n isCategoryPage: boolean;\r\n categoryNameFromSlug: string | undefined;\r\n isRefinersEnabled?: boolean;\r\n showBvRatings?: boolean;\r\n}\r\ninterface IFetchedCategoryIds {\r\n productId?: number;\r\n categoryId?: number;\r\n categoryName?: string;\r\n brand: string;\r\n variantID: string | number | undefined;\r\n}\r\n\r\nconst getProductsCategories = async (\r\n context: ICoreContext>,\r\n products: ProductSearchResult[] | undefined,\r\n isCategoryPage: boolean,\r\n categoryNameFromSlug: string | undefined\r\n): Promise => {\r\n if (products && products.length > 0) {\r\n // VSI Customization Start - 42859\r\n let catName: string | undefined = '';\r\n if (isCategoryPage) {\r\n catName = categoryNameFromSlug;\r\n }\r\n // VSI Customization End - 42859\r\n const productIds: number[] = [];\r\n const catalogId = context.actionContext.requestContext.apiSettings.catalogId;\r\n for (let productPricesIter = 0;productPricesIter < products.length;productPricesIter++) {\r\n const prodId = products[productPricesIter].RecordId;\r\n productIds.push(prodId);\r\n }\r\n const productsCategories = await getProductsCategoryPathsAction(\r\n new GetCategoryPathsInput(context.request, catalogId, productIds),\r\n context.actionContext\r\n );\r\n const categoryIds: IFetchedCategoryIds[] = [];\r\n for (let productCategoriesIter = 0;productCategoriesIter < productsCategories.length;productCategoriesIter++) {\r\n if (\r\n productsCategories[productCategoriesIter] &&\r\n productsCategories[productCategoriesIter].CategoryPath &&\r\n productsCategories[productCategoriesIter].CategoryPath!.length > 0\r\n ) {\r\n const catPath = productsCategories[productCategoriesIter].CategoryPath;\r\n const catPathSegments = catPath![0].Segments;\r\n if (catPathSegments && catPathSegments.length > 0) {\r\n const catId = catPathSegments.length > 0 ? catPathSegments[catPathSegments.length - 1].CategoryId : -1;\r\n if (!isCategoryPage) {\r\n catName = catPathSegments.length > 0 ? catPathSegments[catPathSegments.length - 1].CategoryName : '';\r\n }\r\n const collectionProductAttributes: AttributeValue[] = products[productCategoriesIter].AttributeValues!;\r\n let variantId: string | number | undefined;\r\n const configVendorNamePlp = context.app.config.brandBackofficeAttributePlp;\r\n const configVendorNamePdp = context.app.config.brandBackofficeAttributePdp;\r\n let brandName = getBrandNameCheck(collectionProductAttributes, configVendorNamePlp);\r\n if (!brandName) {\r\n brandName = getBrandNameCheck(collectionProductAttributes, configVendorNamePdp);\r\n }\r\n if (!brandName) {\r\n brandName = 'Default brand name';\r\n }\r\n const eProps: CommerceProperty[] = products[productCategoriesIter].ExtensionProperties!;\r\n if (eProps && eProps.length > 0) {\r\n for (let ePropsIter = 0;ePropsIter < eProps.length;ePropsIter++) {\r\n if (eProps[ePropsIter].Key === 'Unbxd_DefaultVariantRetailVariantId') {\r\n variantId = eProps[ePropsIter].Value?.StringValue;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n categoryIds.push({\r\n productId: productsCategories[productCategoriesIter].ProductId,\r\n categoryId: catId,\r\n categoryName: catName,\r\n brand: brandName,\r\n variantID: variantId\r\n });\r\n }\r\n }\r\n }\r\n return categoryIds;\r\n }\r\n return [];\r\n};\r\n\r\nconst getSkipProductValue = (context: ICoreContext>): number => {\r\n let skipProducts: number = 0;\r\n const viewPortCode = getViewport(context);\r\n if (viewPortCode === 'xs' || viewPortCode === 'sm' || viewPortCode === 'md') {\r\n skipProducts = 1;\r\n } else if (viewPortCode === 'lg') {\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n if (window.innerWidth >= 1070 && window.innerWidth < 1112) {\r\n skipProducts = 2;\r\n } else {\r\n skipProducts = 3;\r\n }\r\n }\r\n } else if (viewPortCode === 'xl') {\r\n skipProducts = 3;\r\n }\r\n return skipProducts;\r\n};\r\n\r\nconst getViewport = (context: ICoreContext>): GridSize => {\r\n // always render in mobile viewport on a mobile device\r\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\r\n return 'xs';\r\n }\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n const gridSettings = context.request.gridSettings;\r\n if (gridSettings) {\r\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\r\n return 'xs';\r\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\r\n return 'sm';\r\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\r\n return 'md';\r\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\r\n return 'lg';\r\n } else {\r\n return 'xl';\r\n }\r\n }\r\n }\r\n\r\n return 'lg';\r\n};\r\n\r\nconst callTelium = (\r\n listName: string | undefined,\r\n products: ProductSearchResult[] | undefined,\r\n categoryID: IFetchedCategoryIds[],\r\n productIDList: number[]\r\n): void => {\r\n const listNameValue = listName ? `${listName}` : 'PLP';\r\n const pagePath = getPagePath();\r\n const categoryListArray = categoryID.filter(item1 => productIDList.some(item2 => item1.productId === item2));\r\n const categoryListArr: string[] = [];\r\n const brandNameArr: string[] = [];\r\n const productVariantArr: (string | number)[] = [];\r\n categoryListArray.map((item: IFetchedCategoryIds) => {\r\n categoryListArr.push(item.categoryName!);\r\n brandNameArr.push(item.brand);\r\n productVariantArr.push(item.variantID!);\r\n });\r\n const productNameArr: string[] = [];\r\n const productIdArr: string[] = [];\r\n const productPositionArr: number[] = [];\r\n const productPriceArr: number[] = [];\r\n const productListArray =\r\n products &&\r\n products.filter((item1, index) => {\r\n return productIDList.some(item2 => {\r\n const productID = item1.RecordId;\r\n if (productID === item2) {\r\n productPositionArr.push(index + 1);\r\n }\r\n return productID === item2; // return the ones with equal id\r\n });\r\n });\r\n productListArray &&\r\n productListArray.map((item: ProductSearchResult, index: number) => {\r\n productNameArr.push(item.Name!);\r\n productIdArr.push(item.ItemId!);\r\n productPriceArr.push(item.Price);\r\n });\r\n\r\n // @ts-ignore\r\n if (MsDyn365.isBrowser && 'utag' in window) {\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'product-impression',\r\n event_category: 'ecommerce',\r\n event_action: 'product impression',\r\n enhanced_action: 'product_impression',\r\n event_label: `${pagePath}`,\r\n event_noninteraction: 'true',\r\n product_impression_list_name: `${pagePath}` === '/search' ? 'SRP' : listNameValue,\r\n product_impression_position: productPositionArr,\r\n product_impression_id: productIdArr,\r\n product_impression_name: productNameArr,\r\n product_impression_category: categoryListArr,\r\n product_impression_brand: brandNameArr,\r\n product_impression_variant: productVariantArr,\r\n product_impression_price: productPriceArr\r\n });\r\n }\r\n};\r\n\r\nconst callTeliumOnClick = (categoryID: IFetchedCategoryIds[], product: ProductSearchResult, listName: string | undefined): void => {\r\n const pagePath = getPagePath();\r\n const listNameValue = listName ? `${listName}` : 'Standard PLP';\r\n const productName = product.Name;\r\n const productPositionArr: number[] = [];\r\n const productRecordID = product.RecordId;\r\n const categoryListArr: string[] = [];\r\n const brandNameArr: (string | undefined)[] = [];\r\n const productVariantArr: (string | number)[] = [];\r\n const productId = product.ItemId;\r\n categoryID?.forEach((item, index) => {\r\n if (productRecordID === item.productId) {\r\n productPositionArr.push(index + 1);\r\n categoryListArr.push(item.categoryName!);\r\n brandNameArr.push(item.brand);\r\n productVariantArr.push(item.variantID!);\r\n }\r\n });\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'product-click',\r\n enhanced_action: 'product_click',\r\n event_category: 'ecommerce',\r\n event_action: 'product click',\r\n event_label: `${productId}: ${productName}`,\r\n event_noninteraction: 'false',\r\n product_list_name: `${pagePath}` === '/search' ? 'SRP' : listNameValue,\r\n product_position: productPositionArr,\r\n product_id: [`${productId}`],\r\n product_name: [`${productName}`],\r\n product_category: categoryListArr,\r\n product_brand: brandNameArr,\r\n product_variant: productVariantArr\r\n });\r\n }\r\n};\r\n\r\nconst updateProductsMessages = (\r\n products: ProductSearchResultExtended[],\r\n resultEyebrow: IMFIPromotion[] | null,\r\n targetAudienceGroup: string | undefined\r\n) => {\r\n products.map((product: ProductSearchResultExtended) => {\r\n if (resultEyebrow && resultEyebrow !== undefined) {\r\n let eyebrowMessage: string | undefined = '';\r\n if (resultEyebrow !== undefined) {\r\n const resultEyebrowTemp = resultEyebrow !== undefined ? resultEyebrow.slice() : [];\r\n resultEyebrowTemp.length &&\r\n resultEyebrowTemp.map((item: IMFIPromotion) => {\r\n if (product.ItemId === item.ItemId) {\r\n if (item.EyeBrows && item.EyeBrows.length && item.EyeBrows.length > 0) {\r\n if (targetAudienceGroup) {\r\n for (const eyebrow of item.EyeBrows) {\r\n const targetAudienceGroupValue = eyebrow.Description?.split('|')[2]?.toLowerCase();\r\n if (targetAudienceGroupValue === targetAudienceGroup.toLowerCase()) {\r\n eyebrowMessage = eyebrow.Description?.split('|')[0];\r\n break;\r\n }\r\n }\r\n // If no value configured then show the first EyebrowMessage without audienceGroup\r\n } else {\r\n for (const eyebrow of item.EyeBrows) {\r\n if (eyebrow.Description?.split('|').length === 2) {\r\n eyebrowMessage = eyebrow.Description?.split('|')[0];\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n product.eyebrowMessage = eyebrowMessage;\r\n }\r\n }\r\n });\r\n};\r\n\r\nconst updateCoreDeiveryMessage = (products: ProductSearchResultExtended[],\r\n deliveryByMessages: IMFIATPInventoryEntityPLPEx[] | undefined) => {\r\n deliveryByMessages && deliveryByMessages?.length && products?.length && products.map(item => {\r\n const DistinctProductVariant = item.IsMasterProduct ?\r\n item.AttributeValues?.find(attributeValue => attributeValue.Name === \"EcomLowestPriceVariantRecId\")?.TextValue :\r\n item.RecordId.toString();\r\n const defaultVariantId = item.ExtensionProperties && item.ExtensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantID\"\r\n )?.Value?.LongValue;\r\n const recId = item.IsMasterProduct ? defaultVariantId?.toString() ?? DistinctProductVariant : item.RecordId?.toString();\r\n item.deliveryByMessage = deliveryByMessages?.find(message => message.VariantRecordId === recId)?.deliveryMessage ?? '';\r\n });\r\n};\r\n\r\n// tslint:disable-next-line:max-func-body-length\r\nexport const ProductSearchResultItems: React.FC = ({\r\n products,\r\n context,\r\n imageSettings,\r\n resources,\r\n moduleType,\r\n moduleId,\r\n allowBackNavigation,\r\n telemetryContent,\r\n productBadgeAttribute,\r\n mattressMatcherBanner,\r\n bannerPosition,\r\n mattressMatcherBannerIndex,\r\n targetAudienceGroup,\r\n listName,\r\n currentPromoProducts,\r\n isCategoryPage,\r\n categoryNameFromSlug,\r\n onlyNewProducts,\r\n isRefinersEnabled,\r\n showBvRatings\r\n}) => {\r\n const [resultEyebrow, setResultEyebrow] = React.useState(null);\r\n const [resultCoreDelivery, setResultCoreDelivery] = React.useState(undefined);\r\n const [productIDList, setproductIDList] = React.useState([]);\r\n const [categoryID, setCategoryID] = React.useState([]);\r\n const productsForCallingAPI = onlyNewProducts?.length > 0 ? onlyNewProducts : currentPromoProducts;\r\n React.useEffect(() => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n getProductsCategories(context, productsForCallingAPI, isCategoryPage, categoryNameFromSlug).then(result => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n setCategoryID(uniqBy([...categoryID, ...result], 'productId'));\r\n });\r\n\r\n if (currentPromoProducts?.length) {\r\n callATPDelivery();\r\n }\r\n }, [productsForCallingAPI]);\r\n if (currentPromoProducts?.length) {\r\n const productIdsArray: IMFIItem[] | undefined = [];\r\n // const coreItems: IMFICartLine[] = [];\r\n productsForCallingAPI.map((item: ProductSearchResultExtended) => {\r\n // currentPromoProducts.map((item: IMessages) => {\r\n const DistinctProductVariant = item.IsMasterProduct ?\r\n item.AttributeValues?.find(attributeValue => attributeValue.Name === \"EcomLowestPriceVariantRecId\")?.TextValue :\r\n item.RecordId.toString();\r\n const defaultVariantId = item.ExtensionProperties && item.ExtensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantID\"\r\n )?.Value?.LongValue;\r\n const eyebrowMessageObj: IMFIItem = {\r\n ItemId: item.ItemId,\r\n DistinctProductVariant: defaultVariantId?.toString() ?? DistinctProductVariant\r\n };\r\n productIdsArray.push(eyebrowMessageObj);\r\n\r\n });\r\n const eyebrowMessagePromise = _getEyebrowMessage(productIdsArray, context);\r\n eyebrowMessagePromise\r\n .then(result => {\r\n if (result !== undefined) {\r\n setResultEyebrow(result);\r\n }\r\n })\r\n .catch(e => {\r\n console.log('Error', e);\r\n });\r\n updateProductsMessages(productsForCallingAPI, resultEyebrow, targetAudienceGroup);\r\n resultCoreDelivery && updateCoreDeiveryMessage(productsForCallingAPI, resultCoreDelivery);\r\n }\r\n\r\n const callATPDelivery = () => {\r\n const cartLines: IMFICartLineBatch[] = [];\r\n // const coreItems: IMFICartLine[] = [];\r\n productsForCallingAPI.map((item: ProductSearchResultExtended) => {\r\n // currentPromoProducts.map((item: IMessages) => {\r\n const DistinctProductVariant = item.IsMasterProduct ?\r\n item.AttributeValues?.find(attributeValue => attributeValue.Name === \"EcomLowestPriceVariantRecId\")?.TextValue :\r\n item.RecordId.toString();\r\n const defaultVariantId = item.ExtensionProperties && item.ExtensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantID\"\r\n )?.Value?.LongValue;\r\n const shippingInformationSmall = item.AttributeValues && item.AttributeValues.find(\r\n (attr: AttributeValue) => attr.Name?.trim() === context.app.config.smallParcelAttributeKey\r\n )?.TextValue?.toLowerCase();\r\n const defaultVariantShippingInformation = item.ExtensionProperties && item.ExtensionProperties.find(\r\n (property: CommerceProperty) => property?.Key === \"Unbxd_DefaultVariantShippingInformation\"\r\n )?.Value?.StringValue;\r\n if ((_getProductType(defaultVariantShippingInformation ?? shippingInformationSmall)) === 'Core') {\r\n const recId = item.IsMasterProduct ? defaultVariantId?.toString() ?? DistinctProductVariant : item.RecordId?.toString();\r\n cartLines.push({ ItemId: item.ItemId, Quantity: 1, VariantRecordId: recId });\r\n }\r\n });\r\n if (cartLines?.length) {\r\n void getListOfCoreDeliveryMessage(context.actionContext, cartLines).then(response => {\r\n if (response !== undefined) {\r\n setResultCoreDelivery(response);\r\n }\r\n }).catch(e => {\r\n console.log('Error [getListOfCoreDeliveryMessage]', e);\r\n });\r\n }\r\n };\r\n\r\n const handleProductId = (productID: number): void => {\r\n setproductIDList(prevArray => [...prevArray, productID]);\r\n };\r\n const skipProductsVal = getSkipProductValue(context);\r\n if (productIDList.length > skipProductsVal - 1) {\r\n if (categoryID.length > 0) {\r\n callTelium(listName, products, categoryID, productIDList);\r\n setproductIDList([]);\r\n }\r\n }\r\n // tslint:disable: no-shadowed-variable\r\n const renderProducts = (\r\n context: ICoreContext>,\r\n resources: IMfrmSearchResultContainerResources,\r\n moduleType: string,\r\n moduleId: string,\r\n telemetryContent: ITelemetryContent,\r\n products: ProductSearchResult[],\r\n imageSettings?: IImageSettings,\r\n allowBackNavigation?: boolean,\r\n productBadgeAttribute?: string\r\n ) => {\r\n const [productArray, setProductArray] = React.useState([]);\r\n const checkInvew = (inView: boolean, product: ProductSearchResultExtended) => {\r\n const productID = product.RecordId;\r\n const checkId = productArray.includes(productID);\r\n if (!checkId) {\r\n if (inView) {\r\n setProductArray(prevArray => [...prevArray, productID]);\r\n handleProductId(productID);\r\n }\r\n }\r\n };\r\n return (\r\n
    \r\n {products.map((product: ProductSearchResultExtended, index: number) => (\r\n // tslint:disable-next-line: react-this-binding-issue jsx-no-lambda\r\n callTeliumOnClick(categoryID, product, listName)}\r\n as='div'\r\n rootMargin='0px 0px -200px 0px'\r\n onChange={inView => checkInvew(inView, product)}\r\n key={index}\r\n >\r\n
  • \r\n \r\n \r\n \r\n
  • \r\n \r\n ))}\r\n
\r\n );\r\n };\r\n const shouldShowMattressMatcherBanner =\r\n mattressMatcherBanner !== undefined && mattressMatcherBannerIndex !== undefined && mattressMatcherBannerIndex >= 0;\r\n return (\r\n <>\r\n {bannerPosition !== undefined && bannerPosition >= 0 ? (\r\n <>\r\n {renderProducts(\r\n context,\r\n resources,\r\n moduleType,\r\n moduleId,\r\n telemetryContent,\r\n products.slice(0, bannerPosition),\r\n imageSettings,\r\n allowBackNavigation,\r\n productBadgeAttribute\r\n )}\r\n {shouldShowMattressMatcherBanner ? (\r\n
\r\n {mattressMatcherBanner![mattressMatcherBannerIndex!]}\r\n
\r\n ) : (\r\n <>\r\n )}\r\n {renderProducts(\r\n context,\r\n resources,\r\n moduleType,\r\n moduleId,\r\n telemetryContent,\r\n products.slice(bannerPosition, products.length),\r\n imageSettings,\r\n allowBackNavigation,\r\n productBadgeAttribute\r\n )}\r\n \r\n ) : (\r\n <>\r\n {renderProducts(\r\n context,\r\n resources,\r\n moduleType,\r\n moduleId,\r\n telemetryContent,\r\n products,\r\n imageSettings,\r\n allowBackNavigation,\r\n productBadgeAttribute\r\n )}\r\n \r\n )}\r\n \r\n );\r\n};\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* tslint:disable: no-duplicate-imports */\r\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { IMfrmSearchResultContainerResources } from '../mfrm-search-result-container.props.autogenerated';\r\n\r\ninterface IFeatureSearchResultItem {\r\n product: SimpleProduct | null;\r\n context: ICoreContext;\r\n resources: IMfrmSearchResultContainerResources;\r\n imageSettings?: IImageSettings;\r\n moduleType: string;\r\n moduleId: string;\r\n telemetryContent?: ITelemetryContent;\r\n}\r\n\r\nexport const FeatureSearchResultItem: React.FC = ({\r\n product,\r\n context,\r\n imageSettings,\r\n resources,\r\n telemetryContent\r\n}) => {\r\n if (product === null) {\r\n return null;\r\n }\r\n\r\n const productName = product.Name;\r\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\r\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\r\n const fallbackImage = getFallbackImageUrl(product.ItemId, context.actionContext.requestContext.apiSettings);\r\n\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\r\n\r\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n return (\r\n
\r\n \r\n
\r\n {renderProductPlacementImage(\r\n imageSettings,\r\n context.request.gridSettings,\r\n product.PrimaryImageUrl,\r\n product.Name,\r\n fallbackImage\r\n )}\r\n
\r\n \r\n
\r\n

{resources.featureSimilarLooksTitle}

\r\n {renderProductTitle(product?.Name)}\r\n
\r\n
\r\n );\r\n};\r\n\r\nfunction renderProductPlacementImage(\r\n imageSettings?: IImageSettings,\r\n gridSettings?: IGridSettings,\r\n imageUrl?: string,\r\n altText?: string,\r\n fallbackImage?: string\r\n): 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 ? altText : ''\r\n };\r\n const imageProps = {\r\n gridSettings: gridSettings,\r\n imageSettings: imageSettings,\r\n fallBackSrc: fallbackImage\r\n };\r\n return ;\r\n}\r\n\r\nfunction renderProductTitle(title?: string): JSX.Element | null {\r\n return

{title}

;\r\n}\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport * as React from 'react';\r\ninterface ITitle {\r\n className: string;\r\n text: string;\r\n}\r\n\r\nexport const Title: React.FC = ({ text, className }) => {text} ;\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport * as React from 'react';\r\ninterface ISeparator {\r\n separator: string;\r\n}\r\n\r\nexport const Separator: React.FC = ({ separator }) => {separator} ;\r\n","import { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\n/* tslint:disable: no-duplicate-imports */\r\nimport React from 'react';\r\n\r\nexport interface ISearchResultModalViewProps {\r\n modal: React.ReactElement;\r\n modalHeader: React.ReactNode;\r\n modalFooter: React.ReactElement;\r\n modalBody: React.ReactElement;\r\n}\r\n\r\ninterface IModalToggleProps {\r\n innerRef: React.RefObject | undefined;\r\n id: string;\r\n text: string;\r\n ariaLabel: string;\r\n onClick(): void;\r\n}\r\n\r\nexport interface ISearchResultModalResources {\r\n modalTitle: string;\r\n modalCloseButtonText: string;\r\n}\r\n\r\nexport interface ISearchResultModalProps {\r\n resources: ISearchResultModalResources;\r\n totalItems: number | undefined;\r\n isOpen: boolean;\r\n returnRef: React.RefObject | undefined;\r\n clearAllBtn: React.ReactNode;\r\n onModalToggle(): void;\r\n}\r\n\r\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\r\n const { text, onClick, ariaLabel, innerRef, id } = props;\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\r\n return {\r\n modal: modalNode(props),\r\n modalHeader: modalHeaderNode(props),\r\n modalFooter: modalFooterNode(props),\r\n modalBody: \r\n };\r\n};\r\n\r\nconst modalNode = (props: ISearchResultModalProps) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\r\n return (\r\n <>\r\n \r\n
\r\n
{props.resources.modalTitle}
\r\n
{props.clearAllBtn}
\r\n
\r\n \r\n );\r\n};\r\n\r\nconst generateButtonText = (props: ISearchResultModalProps) => {\r\n const result = (props.totalItems && props.totalItems > 1) || props.totalItems === 0 ? 'Results' : 'Result';\r\n return `See ${props.totalItems} ${result}`;\r\n};\r\n\r\nconst modalFooterNode = (props: ISearchResultModalProps) => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport * as React from 'react';\r\ninterface IErrorMessage {\r\n text?: string;\r\n}\r\n\r\nexport const ErrorMessage: React.FC = ({ text }) => {\r\n return (\r\n \r\n
{text}
\r\n
\r\n );\r\n};\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport { Slider } from '@msdyn365-commerce-modules/utilities';\r\nimport debounce from 'lodash/debounce';\r\nimport { computed } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { formatPrice } from './utilities';\r\n\r\ntype InputType = 'Min' | 'Max';\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\r\n\r\nexport type RangeRefineItemType = 'slider' | 'input';\r\n\r\n/**\r\n * Range refine item properties\r\n */\r\nexport interface IRangeRefineItemProps extends IRefineItemProps {\r\n rangeType: RangeRefineItemType;\r\n minValueSliderThumbAriaLabel?: string;\r\n maxValueSliderThumbAriaLabel?: string;\r\n isPriceRefinerDisabled: boolean;\r\n isCategoryPage: boolean;\r\n}\r\n\r\n/**\r\n * Range refine item state\r\n */\r\nexport interface IRangeRefineItemState extends IRefineItemState {\r\n validationErrorMin: string | undefined;\r\n validationErrorMax: string | undefined;\r\n selectedMin: string | undefined;\r\n selectedMax: string | undefined;\r\n touchedMin: boolean;\r\n touchedMax: boolean;\r\n}\r\n\r\n/**\r\n * RangeRefineItem component (controlled by RefineSubmenu)\r\n */\r\n@observer\r\nexport default class RangeRefineItem extends React.Component {\r\n private _formattedPriceReverseLookup: Map = new Map();\r\n\r\n private minInput: React.RefObject;\r\n private maxInput: React.RefObject;\r\n\r\n @computed get currencyCode(): string {\r\n return this.props.productRefinerValue.UnitText || '';\r\n }\r\n\r\n constructor(props: IRangeRefineItemProps) {\r\n super(props);\r\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\r\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\r\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\r\n this._changeMin = this._changeMin.bind(this);\r\n this._changeMax = this._changeMax.bind(this);\r\n this._finishChangeMin = this._finishChangeMin.bind(this);\r\n this._finishChangeMax = this._finishChangeMax.bind(this);\r\n\r\n this.minInput = React.createRef();\r\n this.maxInput = React.createRef();\r\n\r\n const { selectedRefinementCriterion } = this.props;\r\n const initialMin = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\r\n const initialMax = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\r\n this.state = {\r\n isChecked: false,\r\n validationErrorMin: undefined,\r\n validationErrorMax: undefined,\r\n selectedMin: initialMin,\r\n selectedMax: initialMax,\r\n touchedMin: false,\r\n touchedMax: false\r\n };\r\n }\r\n\r\n public render(): JSX.Element | undefined {\r\n const {\r\n productRefinerValue,\r\n parentProductRefinerHierarchy,\r\n refineItemCommonProps,\r\n isCategoryPage,\r\n isPriceRefinerDisabled\r\n } = this.props;\r\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\r\n refineItemCommonProps.telemetry.warning(\r\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\r\n );\r\n return undefined;\r\n }\r\n const isDisableSlider: boolean = isCategoryPage && isPriceRefinerDisabled;\r\n if (this.props.rangeType === 'input') {\r\n return this._renderInputFields(isDisableSlider);\r\n }\r\n\r\n return this._renderSlider(isDisableSlider);\r\n }\r\n\r\n private _initializeMaxValue(formattedSelectedMax: string | undefined): string | undefined {\r\n const { productRefinerValue } = this.props;\r\n const { touchedMax, validationErrorMax } = this.state;\r\n\r\n const max = this._getFormattedSelectedValue(productRefinerValue.RightValueBoundString, touchedMax, validationErrorMax);\r\n if (formattedSelectedMax) {\r\n return formattedSelectedMax;\r\n }\r\n\r\n if (!formattedSelectedMax && !touchedMax) {\r\n return max;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private _renderInputFields(isDisableSlider: boolean): JSX.Element | undefined {\r\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps, productRefinerValue } = this.props;\r\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\r\n\r\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}')?.replace('{0}', parentProductRefinerHierarchy.KeyName || '');\r\n const formAttrs = {\r\n 'aria-label': rangeAriaLabel,\r\n 'aria-disabled': isDisabled\r\n };\r\n\r\n // To enable price formatting of selected fields, this is the approach:\r\n // initial value: min=0 formatted as price, max=undefined\r\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\r\n // onBlur: validate and format entered value as price\r\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\r\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\r\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\r\n }`;\r\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\r\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\r\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\r\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\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 {validationErrorMin && (\r\n \r\n {validationErrorMin}\r\n \r\n )}\r\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\r\n \r\n {validationErrorMax}\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n private _renderSlider(isDisableSlider: boolean): JSX.Element | undefined {\r\n const { isDisabled, productRefinerValue, parentProductRefinerHierarchy, selectedRefinementCriterion } = this.props;\r\n const min = productRefinerValue.LeftValueBoundString;\r\n const max = productRefinerValue.RightValueBoundString;\r\n const selectedMin =\r\n (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) ||\r\n productRefinerValue.LeftValueBoundString ||\r\n '0';\r\n const selectedMax =\r\n (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) ||\r\n productRefinerValue.RightValueBoundString ||\r\n max;\r\n const sliderId = `slider_${parentProductRefinerHierarchy.RecordId}_${productRefinerValue.RefinerRecordId}`;\r\n const ariaAttributes = {\r\n 'aria-disabled': isDisabled\r\n };\r\n const minPrice = this._formatPrice(min);\r\n const maxPrice = this._formatPrice(max);\r\n const selectedMinPrice = this._formatPrice(selectedMin);\r\n const selectedMaxPrice = this._formatPrice(selectedMax);\r\n return (\r\n \r\n );\r\n }\r\n\r\n private _changeMin(event: React.FocusEvent): void {\r\n this._changeValue(event, 'Min');\r\n }\r\n\r\n private _changeMax(event: React.FocusEvent): void {\r\n this._changeValue(event, 'Max');\r\n }\r\n\r\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\r\n const selectedKey = `selected${inputType}`;\r\n const touchedKey = `touched${inputType}`;\r\n this.setState({\r\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\r\n [touchedKey]: true\r\n });\r\n }\r\n\r\n private _finishChangeMin(event: React.FocusEvent): boolean {\r\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\r\n const selectedMinValueRounded = Math.floor(parseInt(selectedMinValue, 10));\r\n // handles if there's non-number characters being rounded and displaying as NaN\r\n const selectedMin = isNaN(selectedMinValueRounded) ? selectedMinValue : selectedMinValueRounded;\r\n\r\n this.setState({\r\n selectedMin: selectedMin.toString(),\r\n minTouched: false\r\n });\r\n const minInput = Number(selectedMin);\r\n const {\r\n onToggle,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n refineItemCommonProps,\r\n selectedRefinementCriterion\r\n } = this.props;\r\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\r\n\r\n const maxNum = max ? Number(max) : undefined;\r\n\r\n if (isNaN(minInput)) {\r\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\r\n this._focus('Min');\r\n return false;\r\n }\r\n\r\n if (this._validateRange(minInput, maxNum)) {\r\n onToggle({\r\n parentProductRefinerHierarchy: parentProductRefinerHierarchy,\r\n productRefinerValue: productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: minInput,\r\n rangeEnd: maxNum\r\n });\r\n return true;\r\n } else {\r\n this._focus('Min');\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _finishChangeMax(event: React.FocusEvent): boolean {\r\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\r\n const selectedMaxValueRounded = Math.floor(parseInt(selectedMaxValue, 10));\r\n // handles if there's non-number characters being rounded and displaying as NaN\r\n const selectedMax = isNaN(selectedMaxValueRounded) ? selectedMaxValue : selectedMaxValueRounded;\r\n\r\n this.setState({\r\n selectedMax: selectedMax.toString(),\r\n maxTouched: false\r\n });\r\n const maxInput = Number(selectedMax);\r\n const {\r\n onToggle,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n refineItemCommonProps,\r\n selectedRefinementCriterion\r\n } = this.props;\r\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\r\n\r\n const minNum = Number(min);\r\n\r\n if (isNaN(maxInput)) {\r\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\r\n this._focus('Max');\r\n return false;\r\n }\r\n\r\n if (this._validateRange(minNum, maxInput)) {\r\n if (productRefinerValue) {\r\n onToggle({\r\n parentProductRefinerHierarchy: parentProductRefinerHierarchy,\r\n productRefinerValue: productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: minNum,\r\n rangeEnd: maxInput\r\n });\r\n } else {\r\n this._focus('Max');\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _focus(inputType: InputType): void {\r\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\r\n\r\n MsDyn365.isBrowser &&\r\n setTimeout(() => {\r\n if (ref && ref.current) {\r\n ref.current.focus();\r\n }\r\n }, 50);\r\n }\r\n\r\n private _getFormattedSelectedValue(\r\n selected: string | undefined,\r\n touched: boolean,\r\n validationError: string | undefined\r\n ): string | undefined {\r\n if (touched || validationError || selected === undefined) {\r\n return selected;\r\n }\r\n return this._formatPrice(selected);\r\n }\r\n\r\n private _validateRange(min: number, max: number | undefined): boolean {\r\n const { refineItemCommonProps } = this.props;\r\n if (max === undefined) {\r\n return true;\r\n }\r\n\r\n if (min > max) {\r\n this.setState({\r\n validationErrorMin: refineItemCommonProps.validationErrorRange,\r\n validationErrorMax: refineItemCommonProps.validationErrorRange\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _formatPrice(amount: string | undefined): string {\r\n const locale = this.props.refineItemCommonProps.locale;\r\n const result = formatPrice(amount, this.currencyCode, locale, this.props.refineItemCommonProps.telemetry);\r\n\r\n if (amount !== undefined && !this._formattedPriceReverseLookup.has(result)) {\r\n this._formattedPriceReverseLookup.set(result, amount);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private _getInputWithoutFormatting(input: string): string {\r\n // First try to cast raw input to a number\r\n const inputAsNum = Number(input);\r\n if (!isNaN(inputAsNum)) {\r\n return input;\r\n }\r\n\r\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\r\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\r\n return reverseLookupResult || input;\r\n }\r\n\r\n // NOTE: Fix types once Shared Components build pipeline bug fixed\r\n // tslint:disable-next-line:no-any\r\n private _onRangeUpdate(sliderChangeNotification: any): void {\r\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\r\n if (sliderChangeNotification.eventType !== 'mousemove') {\r\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\r\n if (productRefinerValue && sliderChangeNotification) {\r\n onToggle({\r\n parentProductRefinerHierarchy: parentProductRefinerHierarchy,\r\n productRefinerValue: productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: sliderChangeNotification.firstThumbValue,\r\n rangeEnd: sliderChangeNotification.secondThumbValue\r\n });\r\n\r\n this._focusOnSliderThumb(sliderChangeNotification);\r\n }\r\n }\r\n }\r\n\r\n // tslint:disable-next-line\r\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\r\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\r\n if (productRefinerValue && sliderChangeNotification) {\r\n onToggle({\r\n parentProductRefinerHierarchy: parentProductRefinerHierarchy,\r\n productRefinerValue: productRefinerValue,\r\n isSelecting: true,\r\n rangeStart: sliderChangeNotification.firstThumbValue,\r\n rangeEnd: sliderChangeNotification.secondThumbValue\r\n });\r\n\r\n this._focusOnSliderThumb(sliderChangeNotification);\r\n }\r\n }\r\n\r\n // tslint:disable-next-line\r\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\r\n if (MsDyn365.isBrowser && sliderChangeNotification.id) {\r\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\r\n if (!!element) {\r\n setTimeout(() => {\r\n element.focus();\r\n }, 0);\r\n }\r\n }\r\n }\r\n\r\n private _handleRangeTooltipText(tooltip: number): string {\r\n return this._formatPrice(`${tooltip}`);\r\n }\r\n}\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport { format,getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { RatingComponent } from '@msdyn365-commerce/components';\r\nimport MsDyn365, { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\r\nimport * as React from 'react';\r\nimport { getVirtualRefinerNames, IVirtualRefinersConfig, regExSpecialChars } from '../../../Utilities/plp-url-utils';\r\nimport { IRefineItemURLParts } from '../mfrm-search-result-container';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\nimport { IRefineItemCommonProps } from './refine-item.props.common';\r\n\r\n/**\r\n * RefineItem properties\r\n */\r\nexport interface IRefineItemProps {\r\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\r\n productRefinerValue: ProductRefinerValue;\r\n selectedRefinementCriterion: ProductRefinerValue | undefined;\r\n selectedRefinerValues?: ProductRefinerValue[];\r\n refineItemCommonProps: IRefineItemCommonProps;\r\n isDisabled: boolean;\r\n context: ICoreContext>;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n index?: number;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n isMattressesCategory: boolean | undefined;\r\n urlRefinerParts: string[];\r\n urlParts: IRefineItemURLParts;\r\n sortedConfigValues?: IVirtualRefinersConfig[] | undefined;\r\n filteredRefiners?: IProductRefinerHierarchy[] | undefined;\r\n onToggle(notfication: Readonly): void;\r\n urlBuilder(refiner: IRefineItemToggleNotification): string;\r\n singleProductCountAriaLabel?: string;\r\n refineItemAriaLabel?: string;\r\n refineItemsAriaLabel?: string;\r\n isMobileView?: boolean;\r\n}\r\n\r\n/**\r\n * Refine item state\r\n */\r\nexport interface IRefineItemState extends React.ComponentState {\r\n isChecked: boolean;\r\n renderingError?: object;\r\n}\r\n\r\n/**\r\n * Single-select and multi-select refine item component (controlled by RefineSubmenu)\r\n */\r\nexport default class RefineItem extends React.Component {\r\n private anchorType: React.RefObject;\r\n private payLoad: IPayLoad;\r\n\r\n constructor(props: IRefineItemProps) {\r\n super(props);\r\n this._onClick = this._onClick.bind(this);\r\n this.state = {\r\n isChecked: !!this.props.selectedRefinementCriterion\r\n };\r\n this.anchorType = React.createRef();\r\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\r\n }\r\n\r\n // tslint:disable-next-line:max-func-body-length\r\n public render(): JSX.Element | undefined {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n parentProductRefinerHierarchy,\r\n productRefinerValue,\r\n selectedRefinementCriterion,\r\n singleProductCountAriaLabel,\r\n refineItemAriaLabel,\r\n refineItemsAriaLabel,\r\n index,\r\n children,\r\n onToggle,\r\n context,\r\n telemetryContent,\r\n ...attrs\r\n } = this.props;\r\n if (!productRefinerValue) {\r\n refineItemCommonProps.telemetry.warning('[refine-item] Cannot render refineItem without productRefinerValue');\r\n return undefined;\r\n }\r\n if (!productRefinerValue.LeftValueBoundString) {\r\n refineItemCommonProps.telemetry.warning(\r\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\r\n );\r\n }\r\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType?.SingleSelect;\r\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\r\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\r\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\r\n const isChecked = !!selectedRefinementCriterion;\r\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\r\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\r\n const productCount = productRefinerValue.Count || 0;\r\n let refineMenuItemAriaLabel;\r\n if (productCount === 1) {\r\n refineMenuItemAriaLabel = refineItemAriaLabel ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText) : '';\r\n } else {\r\n refineMenuItemAriaLabel =\r\n refineItemsAriaLabel ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount) : '';\r\n }\r\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource?.Rating) {\r\n if (productRefinerValue.LeftValueBoundString) {\r\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\r\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\r\n const refinerRating = parseInt(productRefinerValue.LeftValueBoundString, 10);\r\n const ratingRefiner = this.props.selectedRefinerValues?.find(\r\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\r\n );\r\n const selectedRating = parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\r\n let ratingComponentClass: string = 'ms-rating-component';\r\n if (refinerRating > selectedRating) {\r\n ratingComponentClass = `${ratingComponentClass}__up`;\r\n } else if (refinerRating < selectedRating) {\r\n ratingComponentClass = `${ratingComponentClass}__down`;\r\n } else {\r\n ratingComponentClass = `${ratingComponentClass}__current`;\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\r\n \r\n \r\n \r\n );\r\n } else {\r\n return undefined;\r\n }\r\n } else {\r\n this.payLoad.contentAction.etext =\r\n productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\r\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\r\n return (\r\n
  • \r\n \r\n \r\n {productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString}\r\n {productRefinerValue.Count !== undefined && ` (${productRefinerValue.Count})`}\r\n \r\n \r\n
  • \r\n );\r\n }\r\n }\r\n\r\n private _getIsCategoryPage(): boolean {\r\n const { context } = this.props;\r\n const requestContext = context && context.request;\r\n const pageType =\r\n requestContext.urlTokens.pageType === 'Category' || (requestContext.query && requestContext.query.categoryId)\r\n ? 'Category'\r\n : 'Search';\r\n return pageType?.toLowerCase() === 'search' ? false : true;\r\n }\r\n\r\n private _getRefinerUrl(): string {\r\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion, urlRefinerParts, urlParts, sortedConfigValues, filteredRefiners } = this.props;\r\n const urlSpecialCharsConfig = this.props.context.app.config.canonicalUrlspecialCharIncludeList;\r\n const isCategoryPage: boolean = this._getIsCategoryPage();\r\n if (productRefinerValue && parentProductRefinerHierarchy.KeyName) {\r\n const parentProductRefinerName = parentProductRefinerHierarchy.KeyName.toLowerCase().trim();\r\n const virturalRefinerConfigName = getVirtualRefinerNames(this.props.context.request, this.props.isMattressesCategory);\r\n if (virturalRefinerConfigName.indexOf(parentProductRefinerName) !== -1 && isCategoryPage) {\r\n const refinerParts = [...urlRefinerParts];\r\n const currentRefinerName = productRefinerValue.LeftValueBoundString && productRefinerValue.LeftValueBoundString.toLowerCase().trim().split(' ').join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(urlSpecialCharsConfig), '-');\r\n if (currentRefinerName) {\r\n if (refinerParts.indexOf(currentRefinerName) !== -1) {\r\n const index = refinerParts.indexOf(currentRefinerName);\r\n refinerParts.splice(index, 1);\r\n } else if (currentRefinerName !== '' && refinerParts.indexOf(currentRefinerName) === -1) {\r\n refinerParts.push(currentRefinerName);\r\n }\r\n }\r\n\r\n // setup object with refiner values\r\n const sortedValues: { [key: string]: string[] } = {};\r\n filteredRefiners && filteredRefiners?.forEach((refinerSet) => {\r\n let refinerName = refinerSet.KeyName;\r\n if (refinerName) {\r\n refinerName = refinerName.toLowerCase();\r\n sortedValues[refinerName] = []; // size, brand, price\r\n }\r\n refinerSet.Values.forEach((refiner) => {\r\n refinerParts.forEach((refinerPart) => {\r\n if (refinerName && refiner.LeftValueBoundString &&\r\n (refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(urlSpecialCharsConfig), '-') === refinerPart.toLocaleLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(urlSpecialCharsConfig), '-') === refinerPart.toLocaleLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.toLowerCase().split(' ').join('-'));\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLocaleLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refinerPart);\r\n }\r\n });\r\n });\r\n });\r\n // aplpha sort\r\n // @ts-ignore\r\n for (const sortedValue of Object.keys(sortedValues)) {\r\n sortedValues[sortedValue].length > 0 && sortedValues[sortedValue].sort((a: string, b: string) => {\r\n if (a < b) { return -1; }\r\n if (a > b) { return 1; }\r\n return 0;\r\n });\r\n }\r\n // @ts-ignore\r\n const finalRefiners: string[] = [];\r\n sortedConfigValues && sortedConfigValues.forEach((sortedConfigValue) => {\r\n const sortedRefinerName = sortedConfigValue.refinerName.toLowerCase();\r\n if (sortedValues[sortedRefinerName] !== undefined && sortedValues[sortedRefinerName].length > 0) {\r\n let concatValue: string | string[] = sortedValues[sortedRefinerName];\r\n if (sortedValues[sortedRefinerName].length > 1) {\r\n concatValue = sortedValues[sortedRefinerName].join('|');\r\n } else if (sortedValues[sortedRefinerName].length === 1) {\r\n concatValue = sortedValues[sortedRefinerName][0];\r\n }\r\n // @ts-ignore\r\n finalRefiners.push(concatValue.split(' ').join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(urlSpecialCharsConfig), '-'));\r\n }\r\n });\r\n const queryStr = this.props.context.request?.url?.requestUrl?.search;\r\n return `${urlParts.origin}/${urlParts.categoryPart}${finalRefiners && finalRefiners.length > 0 ? `/${finalRefiners.join('\\/')}` : ''}/${urlParts.categoryId ? urlParts.categoryId : ''}${queryStr || ''}`;\r\n } else if (productRefinerValue) {\r\n return urlBuilder({\r\n parentProductRefinerHierarchy: parentProductRefinerHierarchy,\r\n productRefinerValue: productRefinerValue,\r\n isSelecting: !selectedRefinementCriterion\r\n });\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n\r\n private _onClick = (e: React.MouseEvent): void => {\r\n e.preventDefault();\r\n\r\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\r\n if (productRefinerValue) {\r\n this.props.onToggle({\r\n parentProductRefinerHierarchy: parentProductRefinerHierarchy,\r\n productRefinerValue: productRefinerValue,\r\n isSelecting: !selectedRefinementCriterion\r\n });\r\n\r\n MsDyn365.isBrowser &&\r\n setTimeout(() => {\r\n this.anchorType.current && this.anchorType.current.focus();\r\n }, 0);\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/* tslint:disable: no-duplicate-imports */\r\nimport * as React from 'react';\r\n\r\nimport { Button, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\r\nimport { IVirtualRefinersConfig } from '../../../Utilities/plp-url-utils';\r\nimport { IRefineItemURLParts } from '../mfrm-search-result-container';\r\nimport { DisplayTemplate } from '../mfrm-search-result-container.data';\r\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\r\nimport RefineItem from './refine-item';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\nimport { IRefineItemCommonProps } from './refine-item.props.common';\r\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\r\nimport { ErrorBoundary } from '../../../common/components/error-boundary';\r\n\r\n\r\n/**\r\n * Properties associated with the RefineSubmenu component\r\n */\r\nexport interface IRefineSubmenuProps {\r\n tempRangeTypeTODO: RangeRefineItemType;\r\n minValueSliderThumbAriaLabel?: string;\r\n maxValueSliderThumbAriaLabel?: string;\r\n refinerShowMoreText?: string;\r\n refinerShowLessText?: string;\r\n productRefinerHierarchy: IProductRefinerHierarchy;\r\n selectedRefinerValues: ProductRefinerValue[];\r\n refineItemCommonProps: IRefineItemCommonProps;\r\n isDisabled: boolean;\r\n isExpandedOnInitialLoad: boolean;\r\n context: ICoreContext>;\r\n moduleId: string;\r\n moduleTypeName: string;\r\n /** The telemetry content */\r\n telemetryContent?: ITelemetryContent;\r\n isMattressesCategory: boolean | undefined;\r\n urlRefinerParts: string[];\r\n urlParts: IRefineItemURLParts;\r\n isPriceRefinerDisabled: boolean;\r\n isCategoryPage: boolean;\r\n sortedConfigValues?: IVirtualRefinersConfig[] | undefined;\r\n filteredRefiners?: IProductRefinerHierarchy[] | undefined;\r\n onUpdateRefiners(notfication: Readonly): void;\r\n urlBuilder(refiner: IRefineItemToggleNotification): string;\r\n refinerNumberOfItemsToDisplay(keyName?: string): number | undefined;\r\n singleProductCountAriaLabel?: string;\r\n refineItemAriaLabel?: string;\r\n refineItemsAriaLabel?: string;\r\n isMobile?: boolean;\r\n}\r\n\r\n/**\r\n * Refine submenu state\r\n */\r\nexport interface IRefineSubmenuState extends React.ComponentState {\r\n expanded: boolean;\r\n refineItemsExpanded: boolean;\r\n itemsToShow: number;\r\n}\r\n\r\n/**\r\n *\r\n * The RefineSubmenu component renders the submenu category and child items.\r\n * This computed observes the stateful category hierarchy object.\r\n * @extends {React.PureComponent}\r\n */\r\nclass RefineSubmenu extends React.Component {\r\n constructor(props: IRefineSubmenuProps) {\r\n super(props);\r\n\r\n this._onToggleItem = this._onToggleItem.bind(this);\r\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\r\n\r\n const isExpanded = this.props.isExpandedOnInitialLoad;\r\n\r\n this.state = {\r\n expanded: isExpanded,\r\n refineItemsExpanded: false,\r\n itemsToShow: 6\r\n };\r\n }\r\n\r\n public componentDidMount(): void {\r\n this.setState({ itemsToShow: this._setRefineItemsLimitToDisplay() });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { productRefinerHierarchy, refineItemCommonProps, isPriceRefinerDisabled } = this.props;\r\n if (!productRefinerHierarchy) {\r\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\r\n }\r\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource?.Rating && this.props.context.app.config.hideRating) {\r\n return null;\r\n }\r\n if (productRefinerHierarchy.KeyName === 'Price' && isPriceRefinerDisabled) {\r\n return null;\r\n }\r\n return (\r\n
    \r\n \r\n {productRefinerHierarchy.KeyName}\r\n \r\n {this.state.expanded && (\r\n <>\r\n {this._renderChildItems(productRefinerHierarchy)}\r\n {productRefinerHierarchy.Values.length > this._setRefineItemsLimitToDisplay() ? (\r\n \r\n \r\n {this.state.refineItemsExpanded\r\n ? `${this.props.refinerShowLessText} ${this._pluralizeKeyName(productRefinerHierarchy.KeyName)}`\r\n : `${this.props.refinerShowMoreText} ${this._pluralizeKeyName(productRefinerHierarchy.KeyName)}`}\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 _pluralizeKeyName = (key: string | undefined) => {\r\n switch (key?.trim().slice(-1)) {\r\n case 's':\r\n return key;\r\n case 'y':\r\n return `${key.slice(0, -1)}ies`;\r\n default:\r\n return `${key}s`;\r\n }\r\n };\r\n\r\n private _showMore = () => {\r\n if (!this.state.refineItemsExpanded) {\r\n this.setState({\r\n itemsToShow: this.props.productRefinerHierarchy.Values.length\r\n });\r\n } else {\r\n this.setState({ itemsToShow: this._setRefineItemsLimitToDisplay() });\r\n }\r\n\r\n this.setState({\r\n refineItemsExpanded: !this.state.refineItemsExpanded\r\n });\r\n };\r\n\r\n private _setRefineItemsLimitToDisplay = (): number => {\r\n const { KeyName } = this.props.productRefinerHierarchy;\r\n return this.props.refinerNumberOfItemsToDisplay(KeyName) || 6;\r\n };\r\n\r\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\r\n return this._renderRange(productRefinerHierarchy);\r\n }\r\n return this._renderSingleMultiSelect(productRefinerHierarchy);\r\n }\r\n\r\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n const { isDisabled, refineItemCommonProps, selectedRefinerValues, context,\r\n singleProductCountAriaLabel, refineItemAriaLabel, refineItemsAriaLabel, isMobile } = this.props;\r\n const isSingleSelect =\r\n productRefinerHierarchy.RefinerTypeValue === RefinerType?.SingleSelect &&\r\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\r\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\r\n const refinerValuesList = productRefinerHierarchy.Values || [];\r\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\r\n if (!child) {\r\n refineItemCommonProps.telemetry.warning(\r\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\r\n );\r\n return null;\r\n }\r\n\r\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\r\n if (index < this.state.itemsToShow) {\r\n return (\r\n \r\n \r\n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\r\n )}\r\n refineItemCommonProps={refineItemCommonProps}\r\n onToggle={this._onToggleItem}\r\n urlBuilder={this.props.urlBuilder}\r\n isDisabled={isDisabled}\r\n key={index}\r\n index={index}\r\n context={context}\r\n moduleId={this.props.moduleId}\r\n moduleTypeName={this.props.moduleTypeName}\r\n telemetryContent={this.props.telemetryContent}\r\n isMattressesCategory={this.props.isMattressesCategory}\r\n urlRefinerParts={this.props.urlRefinerParts}\r\n urlParts={this.props.urlParts}\r\n sortedConfigValues={this.props.sortedConfigValues}\r\n filteredRefiners={this.props.filteredRefiners}\r\n refineItemAriaLabel={refineItemAriaLabel}\r\n refineItemsAriaLabel={refineItemsAriaLabel}\r\n singleProductCountAriaLabel={singleProductCountAriaLabel}\r\n isMobileView={isMobile}\r\n />\r\n \r\n );\r\n } else {\r\n return;\r\n }\r\n });\r\n\r\n return (\r\n \r\n {listItems}\r\n \r\n );\r\n }\r\n\r\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\r\n if (\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\r\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\r\n ) {\r\n return 'slider';\r\n }\r\n\r\n return 'input';\r\n }\r\n\r\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\r\n const {\r\n isDisabled,\r\n refineItemCommonProps,\r\n selectedRefinerValues,\r\n context,\r\n minValueSliderThumbAriaLabel,\r\n maxValueSliderThumbAriaLabel\r\n } = this.props;\r\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\r\n const refinerValuesList = productRefinerHierarchy.Values || [];\r\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\r\n if (!child) {\r\n refineItemCommonProps.telemetry.warning(\r\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\r\n );\r\n return null;\r\n }\r\n\r\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\r\n const rangeType = this._getRangeType(productRefinerHierarchy);\r\n const key = selectedRefinementCriterion\r\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\r\n : `not-selected-${index}`;\r\n return (\r\n <>\r\n \r\n
  • \r\n \r\n\r\n
  • \r\n\r\n {rangeType === 'slider' ? (\r\n
  • \r\n \r\n
  • \r\n ) : (\r\n ''\r\n )}\r\n
    \r\n \r\n );\r\n });\r\n return
      {listItems}
    ;\r\n }\r\n\r\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\r\n this.props.onUpdateRefiners(itemToggleNotification);\r\n }\r\n\r\n private _onToggleSubmenu(): void {\r\n this.setState(prevState => ({\r\n expanded: !prevState.expanded\r\n }));\r\n }\r\n}\r\n\r\nexport default RefineSubmenu;\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport { ITelemetry } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\r\nimport { AttributeDataType } from '../mfrm-search-result-container.data';\r\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\r\n/**\r\n * Types of product refiner values\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport const enum ProductRefinerValueDataTypeValue {\r\n /**\r\n * Range slider is used for selections like price\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Range = 1,\r\n\r\n /**\r\n * Range input is a different way to specify ranges and can be expressed with input boxes\r\n * as well as a set of discrete single-select type values\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n RangeInput = 4,\r\n\r\n /**\r\n * This is a discrete list item, either multi-select or single-select\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n List = 5,\r\n\r\n /**\r\n * Boolean types allows only single-select\r\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Boolean = 6\r\n}\r\n\r\n/**\r\n * Types of product refiners\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport const enum ProductRefinerTypeValue {\r\n /**\r\n * Refiner values are single-select\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Single = 0,\r\n\r\n /**\r\n * Refiner values are multi-select\r\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Multi = 1\r\n}\r\n\r\n/**\r\n * ProductRefinerSource enum type.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\nexport const enum ProductRefinerSource {\r\n /**\r\n * The None member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n None = 0,\r\n /**\r\n * The Attribute member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Attribute = 1,\r\n /**\r\n * The Category member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Category = 2,\r\n /**\r\n * The Price member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Price = 3,\r\n /**\r\n * The Rating member.\r\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\r\n * @example\r\n * ```\r\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\r\n * ```\r\n */\r\n Rating = 4\r\n}\r\n\r\n/**\r\n * Checks if the data type value corresponds to a slider.\r\n */\r\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\r\n return dataTypeValue === AttributeDataType?.Currency ||\r\n dataTypeValue === AttributeDataType?.Decimal ||\r\n dataTypeValue === AttributeDataType?.Integer;\r\n}\r\n\r\n/**\r\n * Find the refinement criterion associated with this product refiner value\r\n * @param productRefinerValue product refiner value to match\r\n * @param refinementCriteria selected refinement criteria\r\n */\r\nexport function findMatchingRefinementCriterion(\r\n productRefinerValue: ProductRefinerValue,\r\n refinementCriteria: ProductRefinerValue[]\r\n): ProductRefinerValue | undefined {\r\n // if the value is a range, then match only on data type value; otherwise match on item string\r\n return refinementCriteria.find(\r\n (refinementCriterion: ProductRefinerValue) => isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\r\n );\r\n}\r\n\r\n/**\r\n * Find the refinement criterion associated with this product refiner value\r\n * @param productRefinerValue product refiner value to match\r\n * @param refinementCriteria selected refinement criteria\r\n */\r\nexport function isMatchingRefinementCriterion(\r\n productRefinerValue: ProductRefinerValue,\r\n refinementCriterion: ProductRefinerValue\r\n): boolean {\r\n // if the value is a range, then match only on data type value; otherwise match on item string\r\n return refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\r\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\r\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\r\n (isRangeType(refinementCriterion.DataTypeValue) || refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString);\r\n}\r\n\r\nexport function getUpdatedRefinementCriteria(\r\n itemToggleNotification: IRefineItemToggleNotification,\r\n currentRefinementCriteria: ProductRefinerValue[]): ProductRefinerValue[] {\r\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\r\n let toggledItemFound = false;\r\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\r\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\r\n toggledItemFound = true;\r\n if (itemToggleNotification.isSelecting) {\r\n const next = {\r\n ...selectedCriterion,\r\n LeftValueBoundString: itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}` || selectedCriterion.LeftValueBoundString,\r\n RightValueBoundString: itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}` || selectedCriterion.RightValueBoundString\r\n };\r\n updatedRefinementCriteria.push(next);\r\n\r\n } // else the item is being de-selected, so omit it from the refinement criteria\r\n } else {\r\n // keep existing criterion because it is not in the item toggle notification\r\n updatedRefinementCriteria.push(selectedCriterion);\r\n }\r\n });\r\n\r\n if (!toggledItemFound) {\r\n const next = {\r\n ...itemToggleNotification.productRefinerValue,\r\n LeftValueBoundString: itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}` || itemToggleNotification.productRefinerValue.LeftValueBoundString,\r\n RightValueBoundString: itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}` || itemToggleNotification.productRefinerValue.RightValueBoundString\r\n };\r\n updatedRefinementCriteria.push(next);\r\n\r\n // If single select, then deselect any others in the parent refiner group\r\n if ((itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType?.Text || itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType?.TrueFalse) &&\r\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType?.SingleSelect) {\r\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\r\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\r\n // do nothing\r\n } else {\r\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) => isMatchingRefinementCriterion(child, criterion));\r\n if (matchingIndex > -1) {\r\n updatedRefinementCriteria.splice(matchingIndex, 1);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n return updatedRefinementCriteria;\r\n}\r\n\r\nexport function formatPrice(\r\n amount: string | undefined,\r\n currency: string | undefined,\r\n locale: string | undefined,\r\n telemetry: ITelemetry): string {\r\n if (!amount || !currency) {\r\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\r\n return amount || '';\r\n }\r\n const priceAmount = (amount && Number(amount)) || 0;\r\n let result: string;\r\n\r\n try {\r\n result = new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currencyDisplay: 'symbol',\r\n currency: currency,\r\n minimumFractionDigits: 0\r\n }).format(priceAmount);\r\n } catch (e) {\r\n result = `${priceAmount} ${currency}`;\r\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${e}`);\r\n }\r\n\r\n return result;\r\n}","/* tslint:disable: no-duplicate-imports */\r\nimport { CategoryHierarchy, IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { AsyncResult, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { ISRPBreadcrumbState } from '../../actions/srp-breadcrumb-page.action';\r\nimport { INavigationMenuState } from '../../data-actions/navigation-menu-state';\r\nimport { IFullProductsSearchResultsWithCount, MappedSearchConfiguration } from './actions';\r\nimport { ListPageState } from './list-page-state';\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\nexport interface IMfrmSearchResultContainerData {\r\n products: AsyncResult;\r\n category: AsyncResult;\r\n listPageState: AsyncResult;\r\n categoryHierarchy: AsyncResult;\r\n searchConfiguration: AsyncResult;\r\n refiners: AsyncResult;\r\n featureProduct: AsyncResult;\r\n navMenuState: AsyncResult;\r\n updateBreadcrumbOnSrp: AsyncResult;\r\n seoData: any;\r\n}\r\n\r\n/**\r\n * DisplayTemplate enum type.\r\n */\r\nexport const enum DisplayTemplate {\r\n /**\r\n * The List member.\r\n */\r\n List = 0,\r\n /**\r\n * The Slider member.\r\n */\r\n Slider = 1,\r\n /**\r\n * The SliderWithBars member.\r\n */\r\n SliderWithBars = 2,\r\n /**\r\n * The Range member.\r\n */\r\n Range = 3,\r\n /**\r\n * The TextBox member.\r\n */\r\n TextBox = 4\r\n}\r\n\r\n/**\r\n * AttributeDataType enum type.\r\n */\r\nexport const enum AttributeDataType {\r\n /**\r\n * The None member.\r\n */\r\n None = 0,\r\n /**\r\n * The Currency member.\r\n */\r\n Currency = 1,\r\n /**\r\n * The DateTime member.\r\n */\r\n DateTime = 2,\r\n /**\r\n * The Decimal member.\r\n */\r\n Decimal = 3,\r\n /**\r\n * The Integer member.\r\n */\r\n Integer = 4,\r\n /**\r\n * The Text member.\r\n */\r\n Text = 5,\r\n /**\r\n * The TrueFalse member.\r\n */\r\n TrueFalse = 6,\r\n /**\r\n * The Video member.\r\n */\r\n Video = 40,\r\n /**\r\n * The Image member.\r\n */\r\n Image = 41\r\n}","import MsDyn365 from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\nimport { ILabeledDropdownProps } from './UiLabeledDropdown.props';\r\n\r\nexport interface ILabeledDropdownState {\r\n selectedIndex: number;\r\n isShow: boolean;\r\n indexValue: number;\r\n}\r\n\r\n/**\r\n * Labeled Dropdown component\r\n */\r\nexport default class UiLabeledDropdown extends React.Component {\r\n public static defaultProps: Partial = {\r\n toggleColor: 'link'\r\n };\r\n // VSI Customization - START - 24783\r\n private wrapperRef!: HTMLDivElement | null;\r\n // VSI Customization - END - 24783\r\n\r\n constructor(props: ILabeledDropdownProps) {\r\n super(props);\r\n this._onSelectOption = this._onSelectOption.bind(this);\r\n const selectedKey = this.props.selectedOption.key;\r\n const keys = this.props.dropdownOptions.map(option => option.key);\r\n this.state = { selectedIndex: keys.indexOf(selectedKey), isShow: false, indexValue: 0 };\r\n this.selectSorting = this.selectSorting.bind(this);\r\n this.handleDropDown = this.handleDropDown.bind(this);\r\n // VSI Customization - START - 24783\r\n this.setWrapperRef = this.setWrapperRef.bind(this);\r\n this.handleClickOutside = this.handleClickOutside.bind(this);\r\n // VSI Customization - END - 24783\r\n }\r\n public selectSorting = (values: number): void => {\r\n this._onSelectOption(values);\r\n\r\n this.setState({\r\n indexValue: values\r\n });\r\n };\r\n public handleDropDown = (): void => {\r\n this.setState({ isShow: !this.state.isShow });\r\n };\r\n\r\n // VSI Customization - START - 24783\r\n public componentDidMount(): void {\r\n MsDyn365.isBrowser && document.addEventListener('mousedown', this.handleClickOutside);\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n MsDyn365.isBrowser && document.removeEventListener('mousedown', this.handleClickOutside);\r\n }\r\n\r\n public setWrapperRef = (instance: HTMLDivElement | null): void => {\r\n this.wrapperRef = instance;\r\n };\r\n\r\n public handleClickOutside = (event: Event): void => {\r\n if (this.wrapperRef && !this.wrapperRef.contains(event.target as Node | null)) {\r\n if (this.state.isShow) {\r\n this.setState({ isShow: false });\r\n }\r\n }\r\n };\r\n // VSI Customization - END - 24783\r\n public render(): JSX.Element {\r\n const { labelText, labelClassname, dropdownId, dropdownOptions /*dropdownClassname*/ } = this.props;\r\n\r\n const labelClassNames = classnames('msc-l-dropdown__label', labelClassname);\r\n // OOB Available-Currently not using it.\r\n // const dropdownClassNames = classNames('msc-l-dropdown', dropdownClassname);\r\n const selectedIndex = this._getSelectedIndex();\r\n\r\n return (\r\n \r\n \r\n\r\n {this.state.isShow && (\r\n
      \r\n {dropdownOptions.map((option, index) => {\r\n const values = index;\r\n return (\r\n this.selectSorting(values)}\r\n className={classnames(\r\n 'ms-serch-result-sorting__each-list-item',\r\n selectedIndex === index ? 'ms-serch-result-sorting__bold' : ''\r\n )}\r\n >\r\n {option.value}\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 _getSelectedIndex(): number {\r\n if (this.props.controlledByParent) {\r\n let selectedIndex = -1;\r\n const selectedKey = this.props.selectedOption.key;\r\n for (let i = 0; i < this.props.dropdownOptions.length; i++) {\r\n if (this.props.dropdownOptions[i].key === selectedKey) {\r\n selectedIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n return selectedIndex;\r\n }\r\n\r\n return this.state.selectedIndex;\r\n }\r\n\r\n private _onSelectOption(values: number): void {\r\n const { dropdownOptions, onSelectOption } = this.props;\r\n const index = values;\r\n const selectedOption = dropdownOptions[index];\r\n this.setState({ selectedIndex: index });\r\n onSelectOption({ selectedOption });\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/* tslint:disable: no-duplicate-imports && max-line-length */\r\nimport { ArrayExtensions, getCustomer, GetCustomerInput } from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getTelemetryObject,\r\n ILabeledDropdownOnChangeNotification,\r\n ILabeledDropdownOption,\r\n IModuleProps,\r\n INodeProps,\r\n ITelemetryContent,\r\n UncontrolledPagination,\r\n isMobile,\r\n VariantType\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { CategoryHierarchy as CategoryHierarchyData, IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport {\r\n format,\r\n ProductPrice,\r\n ProductRefinerValue,\r\n ProjectionDomain,\r\n SortColumn,\r\n TextValueTranslation\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport { getActivePricesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n AffiliationLoyaltyTier,\r\n CustomerAffiliation,\r\n ProductSearchResult\r\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\nimport classnames from 'classnames';\r\nimport flatten from 'lodash/flatten';\r\nimport get from 'lodash/get';\r\nimport { computed, observable, reaction, transaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport UiLabeledDropdown from '../../Utilities/labeled-dropdown/ui-labeled-dropdown/UiLabeledDropdown';\r\nimport { IMenuItemData } from '../mfrm-navigation-menu/mfrm-navigation-menu.data';\r\nimport {\r\n buildListPageUrl,\r\n getCollectionProducts,\r\n getCurrentUrl,\r\n GetFullProductsByCollectionInput,\r\n parseQueryParam,\r\n sortOptions\r\n} from './actions';\r\n\r\nimport {\r\n ErrorMessage,\r\n FeatureSearchResultItem,\r\n getUpdatedRefinementCriteria,\r\n IChoiceSummaryClickNotification,\r\n IRefineItemCommonProps,\r\n IRefineItemToggleNotification,\r\n ISearchResultModalViewProps,\r\n isMatchingRefinementCriterion,\r\n isRangeType,\r\n Link,\r\n ModalToggle,\r\n SearchResultModal,\r\n Separator,\r\n Title\r\n} from './components';\r\nimport ChoiceSummary from './components/choice-summary';\r\nimport RefineSubmenu from './components/refine-submenu';\r\nimport { IMfrmSearchResultContainerData } from './mfrm-search-result-container.data';\r\nimport { IMfrmSearchResultContainerProps } from './mfrm-search-result-container.props.autogenerated';\r\nimport { SrpBreadcrumbPageInput } from '../../actions/srp-breadcrumb-page.action';\r\nimport { getSortedVirtualRefinerConfig, getVirtualRefinerNames, regExSpecialChars, removeKeywords } from '../../Utilities/plp-url-utils';\r\nimport getProducts from './actions/get-full-products-by-collection';\r\nimport { ErrorBoundary } from '../../common/components/error-boundary';\r\nexport interface ISearchResultContainerViewProps extends IMfrmSearchResultContainerProps {\r\n products?: React.ReactNode;\r\n className?: string;\r\n SearchResultContainer: IModuleProps;\r\n TitleViewProps: ITitleViewProps;\r\n categoryHierarchy: ICategoryHierarchyViewProps;\r\n pagination?: React.ReactNode;\r\n ProductsContainer: INodeProps;\r\n ProductSectionContainer: INodeProps;\r\n refineMenu: IRefineMenuViewProps;\r\n sortByOptions: ISortByViewProps;\r\n choiceSummary?: React.ReactNode;\r\n clearAllBtn?: React.ReactNode;\r\n modalToggle: React.ReactNode;\r\n searchResultModal: ISearchResultModalViewProps;\r\n isMobile: boolean;\r\n CategoryNavContainer: INodeProps;\r\n RefineAndProductSectionContainer: INodeProps;\r\n errorMessage: React.ReactNode;\r\n FeatureSearchContainer: INodeProps;\r\n similarLookProduct?: React.ReactNode;\r\n productPrices?: ProductPrice[];\r\n showCategoryBanner?: boolean;\r\n categoryBannerInd?: number;\r\n matcherBannerSlotInd?: number;\r\n addedProducts: [];\r\n onlyNewProducts: [];\r\n isMattressesCategory: boolean | undefined;\r\n refinerRedirect: boolean;\r\n isCategoryPage: boolean;\r\n categoryNameFromSlug: string | undefined;\r\n seoDataEntry: object | undefined;\r\n activeRefiners: [];\r\n showProductsLoader: boolean;\r\n itemsPerPageInitialState: number;\r\n getScrolledProducts(): Promise;\r\n}\r\n\r\nexport interface ITitleViewProps {\r\n TitleContainer: INodeProps;\r\n title: ISearchResultTitle;\r\n totalItems?: number;\r\n}\r\n\r\nexport interface IRefineItemURLParts {\r\n origin: string;\r\n categoryPart: string;\r\n categoryId: string | undefined;\r\n}\r\n\r\nexport interface IRefineMenuViewProps {\r\n RefineMenuContainer: INodeProps;\r\n RefinerSectionContainer: INodeProps;\r\n refiners?: React.ReactNode[];\r\n applyBtn?: React.ReactNode[];\r\n refinerLabel: string;\r\n}\r\n\r\nexport interface ICategoryHierarchyViewProps {\r\n categoryHierarchyList?: React.ReactNode[];\r\n categoryHierarchySeparator?: React.ReactNode;\r\n CategoryHierarchyContainer: INodeProps;\r\n}\r\n\r\nexport interface ISortByViewProps {\r\n sortByDropDown?: React.ReactNode;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Title component for search result container\r\n */\r\nexport interface ISearchResultTitle {\r\n searchPageTitle?: React.ReactNode;\r\n titlePrefix?: React.ReactNode;\r\n titleText?: React.ReactNode;\r\n titleCount?: React.ReactNode;\r\n}\r\n\r\nexport interface ISearchResultContainerState {\r\n sortingState: ISortByCollectionState;\r\n modalIsOpen: boolean;\r\n showCategoryBanner: boolean;\r\n categoryBannerIndex: number;\r\n matcherBannerSlotInd: number;\r\n lastBannerID: string;\r\n // TODO: Set proper type\r\n // tslint:disable-next-line:no-any\r\n addedProducts: any;\r\n onlyNewProducts: any;\r\n infiniteScrollPage: number;\r\n scrollHeightPrevValue: number;\r\n totalSkipProductsValue: number;\r\n allSizeRefinerValues: (string | ProductRefinerValue | undefined)[];\r\n allVirtualRefiners: (string | undefined)[];\r\n isPriceRefinerDisabled: boolean;\r\n isRefinerRedirectEnabled: boolean;\r\n showProductsLoader: boolean;\r\n sortedOptions: SortColumn[];\r\n itemsPerPageInitialState: number;\r\n}\r\ninterface ISortByCollectionState {\r\n selectedSortByOption: ILabeledDropdownOption;\r\n pending: boolean;\r\n}\r\n/**\r\n *\r\n * SearchResultContainer component\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nexport default class SearchResultContainer extends React.PureComponent<\r\n IMfrmSearchResultContainerProps,\r\n ISearchResultContainerState\r\n> {\r\n @computed get isMobile(): boolean {\r\n return this._viewport === 'xs' || this._viewport === 'sm';\r\n }\r\n\r\n private sortByDropdownOptions: ILabeledDropdownOption[] = [\r\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\r\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\r\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\r\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc }\r\n ];\r\n private _refineItemCommonProps: IRefineItemCommonProps;\r\n private _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\r\n private _isCustomizedRefiner: boolean =\r\n this.props.context.request.app.config.urlModifications && this.props.context.request.app.config.urlModifications?.length > 0;\r\n @observable\r\n private _viewport: GridSize = 'lg';\r\n private _modalToggleRef: React.RefObject;\r\n private _sortAndFilterContainerRef: React.RefObject;\r\n private telemetryContent: ITelemetryContent;\r\n private productPrices: ProductPrice[];\r\n\r\n private currentNavMenu: IMenuItemData[] = [];\r\n private isMattressesCategory: boolean | undefined;\r\n\r\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\r\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n }\r\n\r\n return nameTranslation && nameTranslation.Text;\r\n }\r\n // tslint:disable-next-line:max-func-body-length\r\n constructor(props: IMfrmSearchResultContainerProps, state: ISearchResultContainerState) {\r\n super(props);\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\r\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._modalToggleRef = React.createRef();\r\n this._sortAndFilterContainerRef = React.createRef();\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this._getCategoryBanner = this._getCategoryBanner.bind(this);\r\n this._updateMattressMatcherBanner = this._updateMattressMatcherBanner.bind(this);\r\n this.productPrices = [];\r\n this.state = {\r\n sortingState: {\r\n pending: false,\r\n selectedSortByOption: this.sortByDropdownOptions[0]\r\n },\r\n modalIsOpen: false,\r\n showCategoryBanner: false,\r\n categoryBannerIndex: -1,\r\n matcherBannerSlotInd: -1,\r\n lastBannerID: '',\r\n addedProducts: [],\r\n onlyNewProducts: [],\r\n infiniteScrollPage: 1,\r\n scrollHeightPrevValue: 0,\r\n totalSkipProductsValue: 0,\r\n allSizeRefinerValues: [],\r\n isPriceRefinerDisabled: false,\r\n allVirtualRefiners: [],\r\n isRefinerRedirectEnabled: false,\r\n sortedOptions: [],\r\n showProductsLoader: true,\r\n itemsPerPageInitialState: props.config.itemsPerPage || 10\r\n };\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.products.then(products => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.listPageState.then(listPageState => {\r\n listPageState.activeProducts = [...products.products];\r\n listPageState.totalProductCount = products.count;\r\n listPageState.activeFilters = [...products.virtualRefiners];\r\n listPageState.activeVirtualFilters = [...products.minusVirtualRefiner];\r\n });\r\n });\r\n\r\n this.isMattressesCategory = this.props?.data.category.result?.ExtensionProperties?.find(\r\n attr => attr.Key === 'SizeRefinementEnable'\r\n )?.Value?.BooleanValue;\r\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\r\n const locale = this.props.context.request.locale;\r\n const telemetry = this.props.telemetry;\r\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\r\n const validationErrorRange = this.props.resources.validationErrorNotRange;\r\n this._refineItemCommonProps = {\r\n telemetry,\r\n locale,\r\n placeholderTextMax,\r\n minLabel,\r\n maxLabel,\r\n rangeNameFormat,\r\n validationErrorNaN,\r\n validationErrorRange\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n if (this.props.context.request.query?.productId) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.featureProduct.then(products => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.listPageState.then(listPageStateFeature => {\r\n listPageStateFeature.featureProduct = products;\r\n });\r\n });\r\n }\r\n this._updateViewport();\r\n }\r\n // VSI Customization - START - 23797\r\n public getPagePath = (): string => {\r\n return MsDyn365.isBrowser\r\n ? window.location.href.split(location.host)[1].includes('?')\r\n ? window.location.href.split(location.host)[1].split('?')[0]\r\n : window.location.href.split(location.host)[1]\r\n : '';\r\n };\r\n public getCategoryName = (): string | undefined => {\r\n const { data, context } = this.props;\r\n let categoryName: string | undefined = '';\r\n if (context && context.request && context.request.query && context.request.query.q) {\r\n categoryName = `'${context.request.query.q}'`;\r\n } else {\r\n categoryName =\r\n (data.category.result &&\r\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\r\n (data.category.result && data.category.result.Name);\r\n }\r\n return categoryName;\r\n };\r\n public getSkipProductValue = (): number => {\r\n let skipProducts: number = 0;\r\n const viewPortCode = this._getViewport();\r\n if (viewPortCode === 'xs' || viewPortCode === 'sm' || viewPortCode === 'md') {\r\n skipProducts = 1;\r\n } else if (viewPortCode === 'lg') {\r\n if (MsDyn365.isBrowser && window.innerWidth) {\r\n if (window.innerWidth >= 1070 && window.innerWidth < 1112) {\r\n skipProducts = 2;\r\n } else {\r\n skipProducts = 3;\r\n }\r\n }\r\n } else if (viewPortCode === 'xl') {\r\n skipProducts = 3;\r\n }\r\n return skipProducts;\r\n };\r\n\r\n // VSI Customization - END - 23797\r\n public componentDidMount(): void {\r\n const extensionProperties = this.props.data.products.result?.products[0].ExtensionProperties;\r\n const redirectUrl = extensionProperties && extensionProperties?.find(obj => obj?.Key === 'RedirectURL')?.Value?.StringValue;\r\n\r\n if (MsDyn365.isBrowser && redirectUrl) {\r\n const url = window.location.href;\r\n if (url !== redirectUrl) {\r\n document.location.href = redirectUrl ? redirectUrl : '';\r\n }\r\n }\r\n // Initalization of list page\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.products.then(products => {\r\n this.setState({\r\n showProductsLoader: false\r\n });\r\n\r\n // Initalization of list page\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.listPageState.then(listPageState => {\r\n if (this._pageType === 'Category') {\r\n listPageState.pageType = 'Category';\r\n } else {\r\n listPageState.pageType = 'Search';\r\n }\r\n\r\n let querySorting: SortColumn[] = [];\r\n\r\n if (this.props.context.request.query && this.props.context.request.query.sorting) {\r\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\r\n }\r\n\r\n listPageState.currentPageNumber =\r\n (this.props.context.request.query && +this.props.context.request.query.skip / (this.props.config.itemsPerPage || 10)) ||\r\n 0;\r\n listPageState.sortingCritera = { Columns: querySorting };\r\n listPageState.pageSize = this.props.config.itemsPerPage || 10;\r\n listPageState.activeProducts = [...products.products];\r\n listPageState.totalProductCount = products.count;\r\n // Todo: will remove as functionality completes 06/06/2021\r\n // VSI Customization 7924 Start\r\n listPageState.activeFilters = [...products.virtualRefiners];\r\n listPageState.activeVirtualFilters = [...products.minusVirtualRefiner];\r\n // VSI Customization 7924 End\r\n // Initialize reaction based on listPageState properties\r\n reaction(\r\n () => {\r\n return [\r\n listPageState.activeFilters && listPageState.activeFilters.length,\r\n listPageState.currentPageNumber,\r\n listPageState.sortingCritera &&\r\n listPageState.sortingCritera.Columns &&\r\n listPageState?.sortingCritera.Columns.length\r\n ];\r\n },\r\n () => {\r\n const input = new GetFullProductsByCollectionInput(\r\n listPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(listPageState.pageSize * (listPageState.currentPageNumber || 0), 0)\r\n },\r\n count: true,\r\n Sorting: listPageState.sortingCritera || {}\r\n },\r\n listPageState.activeFilters || [],\r\n\r\n +(this.props.context.request.urlTokens.itemId || 0),\r\n this.props.context.request.query && this.props.context.request.query.q\r\n ? this.props.context.request.query.q\r\n : this.props.context.request.query?.productId,\r\n this.props &&\r\n this.props.config &&\r\n this.props.config.includeAttributes !== undefined &&\r\n this.props.config.includeAttributes === true\r\n ? true\r\n : false,\r\n this.props.context.request.locale,\r\n this.props.context.request.url.requestUrl.pathname\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n getCollectionProducts(input, this.props.context.actionContext).then(productResults => {\r\n listPageState.activeProducts = productResults.products;\r\n listPageState.totalProductCount = productResults.count;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getActivePrice();\r\n if (\r\n this.props.config.enableAffiliationBasedPricing &&\r\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getActivePrice();\r\n }\r\n });\r\n }\r\n );\r\n });\r\n });\r\n if (this.props.config.enableAffiliationBasedPricing && this.props.context.actionContext.requestContext?.user?.isAuthenticated) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getActivePrice();\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.listPageState.then(listPageState => {\r\n if (listPageState.pageType === 'Search' && this.props.data.products.result?.count === 0) {\r\n this.props.context.actionContext.update(new SrpBreadcrumbPageInput(), { breadcrumbCheck: true });\r\n }\r\n });\r\n // VSI Customization - START - 22023\r\n const validRefiners =\r\n this.props.data.refiners.result &&\r\n this.props.data.refiners.result.filter(refiner => {\r\n return refiner.Values.length > 0;\r\n });\r\n const sizeRefinerArr: (string | undefined | ProductRefinerValue)[] = [];\r\n const sizeRefinerObjArr = validRefiners && validRefiners.filter(refiner => refiner?.KeyName?.toLowerCase() === 'size');\r\n sizeRefinerObjArr && sizeRefinerObjArr?.length > 0\r\n ? sizeRefinerObjArr[0]?.Values?.map(obj => sizeRefinerArr.push(obj?.LeftValueBoundString?.toLowerCase()))\r\n : [];\r\n\r\n const configVirtualRefinerNames = getVirtualRefinerNames(this.props.context.request, this.isMattressesCategory);\r\n const virtualRefinersArr: (string | undefined)[] = [];\r\n configVirtualRefinerNames &&\r\n configVirtualRefinerNames.map((refinerStrName: string) => {\r\n const virtualRefinerObjArr =\r\n validRefiners && validRefiners.filter(refiner => refiner?.KeyName?.toLowerCase() === refinerStrName);\r\n virtualRefinerObjArr?.map(virtualRefiner =>\r\n virtualRefiner.Values?.map(obj => virtualRefinersArr.push(obj?.LeftValueBoundString?.toLowerCase()))\r\n );\r\n });\r\n const currentSortedOption = this._getCurrentlySelectedOption();\r\n const options: SortColumn[] = [this._getSortColumnFromSelectedOption(currentSortedOption || { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc })];\r\n this.setState({\r\n sortedOptions: options,\r\n allSizeRefinerValues: sizeRefinerArr,\r\n allVirtualRefiners: virtualRefinersArr\r\n });\r\n // VSI Customization - END - 22023\r\n }\r\n public componentDidUpdate(\r\n prevProps: IMfrmSearchResultContainerProps,\r\n prevState: ISearchResultContainerState\r\n ): void {\r\n window.onpopstate = () => {\r\n window.location.reload();\r\n };\r\n const menusData =\r\n this.props.data.navMenuState.result?.menuItemData !== undefined ? this.props.data.navMenuState.result?.menuItemData : undefined;\r\n if (this.currentNavMenu === undefined || this.currentNavMenu.length <= 0) {\r\n if (menusData !== undefined) {\r\n this._filterMenuItem(menusData, this.currentNavMenu);\r\n const menuItemData = this.currentNavMenu[0];\r\n if (menuItemData !== undefined) {\r\n if (\r\n menuItemData.mattressMatcherBannerID !== this.state.lastBannerID &&\r\n menuItemData.mattressMatcherBannerID !== undefined &&\r\n menuItemData.mattressMatcherBannerID.length > 0\r\n ) {\r\n this._updateMattressMatcherBannerSlot(menuItemData);\r\n }\r\n if (menuItemData.mattressMatcherBannerID === undefined || menuItemData.mattressMatcherBannerID.length <= 0) {\r\n if (this.state.matcherBannerSlotInd > -1) {\r\n this.setState({ matcherBannerSlotInd: -1, lastBannerID: '' });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (this.state.sortedOptions[0]?.ColumnName !== prevState.sortedOptions[0]?.ColumnName || this.state.sortedOptions[0]?.IsDescending !== prevState.sortedOptions[0]?.IsDescending) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.listPageState.then(listPageState => {\r\n // Initialize reaction based on listPageState properties\r\n const input = new GetFullProductsByCollectionInput(\r\n listPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(listPageState.pageSize * (listPageState.currentPageNumber || 0), 0)\r\n },\r\n count: true,\r\n Sorting: listPageState.sortingCritera || {}\r\n },\r\n listPageState.activeFilters || [],\r\n\r\n +(this.props.context.request.urlTokens.itemId || 0),\r\n this.props.context.request.query && this.props.context.request.query.q\r\n ? this.props.context.request.query.q\r\n : this.props.context.request.query?.productId,\r\n this.props &&\r\n this.props.config &&\r\n this.props.config.includeAttributes !== undefined &&\r\n this.props.config.includeAttributes === true\r\n ? true\r\n : false,\r\n this.props.context.request.locale,\r\n this.props.context.request.url.requestUrl.pathname\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n getCollectionProducts(input, this.props.context.actionContext).then(productResults => {\r\n listPageState.activeProducts = productResults.products;\r\n listPageState.totalProductCount = productResults.count;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getActivePrice();\r\n if (\r\n this.props.config.enableAffiliationBasedPricing &&\r\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getActivePrice();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity\r\n public render(): JSX.Element {\r\n const {\r\n config: {\r\n imageSettings,\r\n className\r\n },\r\n data: {\r\n products: productCollection,\r\n listPageState\r\n },\r\n resources\r\n } = this.props;\r\n const seoDataEntry = this.props.data.seoData?.result;\r\n const activeProducts = listPageState.result?.activeProducts;\r\n const products = !MsDyn365.isBrowser && !ArrayExtensions.hasElements(activeProducts) ? productCollection.result?.products ?? [] : activeProducts ?? [];\r\n const searchProduct = (this.props.data.listPageState.result && this.props.data.listPageState.result.featureProduct) || null;\r\n let errorText = '';\r\n if (!ArrayExtensions.hasElements(products)) {\r\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\r\n }\r\n\r\n const featureComponent = (\r\n \r\n );\r\n const selectedFiltersCount = this.props.data.listPageState.result && this.props.data.listPageState.result.activeFilters?.length;\r\n const categoryNameFromSlug = (this.props?.data?.category?.result?.Name && this.props?.data?.category?.result?.Name) || '';\r\n const isCategoryPage: boolean = this._getIsCategoryPage();\r\n const activeRefiners = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeFilters) || [];\r\n const searchResultContainerViewProps = {\r\n ...this.props,\r\n TitleViewProps: this._getCollectionTitle(),\r\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\r\n refineMenu: this._getRefineMenu(),\r\n className: classnames('ms-search-result-container', className),\r\n SearchResultContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-search-result-container', className)\r\n },\r\n sortByOptions: this.props.data.listPageState.result ? this._getSortingDropDown() : null,\r\n pagination: this._getPagination(),\r\n ProductsContainer: { className: 'ms-search-result-container__Products' },\r\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\r\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\r\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\r\n choiceSummary: this._getChoiceSummary(),\r\n clearAllBtn: this._getChoiceSummary(true, true),\r\n modalToggle: this.props.data.listPageState.result ? (\r\n 0 ? `(${selectedFiltersCount})` : ''}`}\r\n ariaLabel={resources.modalTitle}\r\n innerRef={this._modalToggleRef}\r\n onClick={this._toggleModal}\r\n id='search-result-modal'\r\n />\r\n ) : null,\r\n searchResultModal: this._getSearchResultModal(),\r\n isMobile: this.isMobile,\r\n errorMessage: errorText && ,\r\n showCategoryBanner: this.state.showCategoryBanner,\r\n categoryBannerInd: this.state.categoryBannerIndex,\r\n matcherBannerSlotInd: this.state.matcherBannerSlotInd,\r\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\r\n similarLookProduct: searchProduct ? featureComponent : null,\r\n productPrices: this.productPrices,\r\n getScrolledProducts: this._getProductInfo,\r\n addedProducts: this.state.addedProducts,\r\n onlyNewProducts: this.state.onlyNewProducts,\r\n refinerRedirect: this.state.isRefinerRedirectEnabled,\r\n isCategoryPage: isCategoryPage,\r\n categoryNameFromSlug: categoryNameFromSlug,\r\n seoDataEntry: seoDataEntry,\r\n activeRefiners: activeRefiners,\r\n showProductsLoader: this.state.showProductsLoader,\r\n itemsPerPageInitialState: this.state.itemsPerPageInitialState\r\n };\r\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\r\n }\r\n\r\n private _filterMenuItem = (menuItemList: IMenuItemData[], currentNavigation: IMenuItemData[]) => {\r\n if (menuItemList.length > 0) {\r\n menuItemList.map((item: IMenuItemData) => {\r\n const foundCurrentNavMenu = this._updateMattressMatcherBannerWithUrlOnly(item);\r\n\r\n if (foundCurrentNavMenu && item.mattressMatcherBannerID !== '') {\r\n this.currentNavMenu.push(item);\r\n return item;\r\n } else if (item.subMenu) {\r\n this._filterMenuItem(item.subMenu, currentNavigation);\r\n }\r\n return;\r\n });\r\n }\r\n };\r\n\r\n private _updateMattressMatcherBannerWithUrlOnly = (navMenuItem: IMenuItemData) => {\r\n if (navMenuItem === undefined) {\r\n return false;\r\n }\r\n const destinationURL = navMenuItem.clpLink?.destinationUrl !== undefined ? navMenuItem.clpLink?.destinationUrl : '';\r\n const linkURL = navMenuItem.linkURL !== undefined ? navMenuItem.linkURL : '';\r\n\r\n if ((destinationURL === undefined || destinationURL === '') && (linkURL === undefined || linkURL === '')) {\r\n return false;\r\n }\r\n let toCheckURL = '';\r\n if (linkURL !== '' && destinationURL !== '') {\r\n toCheckURL = destinationURL !== undefined ? destinationURL : '';\r\n } else if (linkURL !== '' && destinationURL === '') {\r\n toCheckURL = linkURL !== undefined ? linkURL : '';\r\n } else if (linkURL === '' && destinationURL !== '') {\r\n toCheckURL = destinationURL !== undefined ? destinationURL : '';\r\n } else {\r\n return false;\r\n }\r\n return this._parseLink(toCheckURL);\r\n };\r\n\r\n private _parseLink = (toCheckURL: string): boolean => {\r\n if (toCheckURL === '/') {\r\n return false;\r\n }\r\n\r\n if (toCheckURL !== '' && toCheckURL.includes(this.props.context.actionContext.requestContext.url.requestUrl.pathname)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n };\r\n private _updateMattressMatcherBannerSlot = (navMenuItem: IMenuItemData) => {\r\n if (navMenuItem !== undefined) {\r\n if (this.props.slots.mattressMatcherBanner && this.props.slots.mattressMatcherBanner.length > 0) {\r\n for (let i = 0; i < this.props.slots.mattressMatcherBanner.length; i++) {\r\n const moduleIds = get(this.props.slots.mattressMatcherBanner[i], 'props.config.moduleId') || '';\r\n if (moduleIds.length > 0) {\r\n const splittedIDs = moduleIds.split(',');\r\n for (let k = 0; k < splittedIDs.length; k++) {\r\n if (splittedIDs[k] === navMenuItem.mattressMatcherBannerID) {\r\n this.setState({ matcherBannerSlotInd: i, lastBannerID: splittedIDs[k] });\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this.setState({ matcherBannerSlotInd: -1, lastBannerID: '' });\r\n return false;\r\n };\r\n\r\n private _updateMattressMatcherBanner = (navMenuItem: IMenuItemData) => {\r\n if (navMenuItem !== undefined) {\r\n if (this.props.slots.mattressMatcherBanner && this.props.slots.mattressMatcherBanner.length > 0) {\r\n for (let i = 0; i < this.props.slots.mattressMatcherBanner.length; i++) {\r\n const bannerIDs = get(this.props.slots.mattressMatcherBanner[i], 'props.config.bannerID') || '';\r\n const moduleIds = get(this.props.slots.mattressMatcherBanner[i], 'props.config.moduleId') || '';\r\n if (bannerIDs.length > 0) {\r\n const splittedIDs = bannerIDs.split(',');\r\n for (let k = 0; k < splittedIDs.length; k++) {\r\n if (splittedIDs[k] === navMenuItem.mattressMatcherBannerID) {\r\n this.setState({ matcherBannerSlotInd: i, lastBannerID: splittedIDs[k] });\r\n return true;\r\n }\r\n }\r\n }\r\n if (moduleIds.length > 0) {\r\n const splittedIDs = moduleIds.split(',');\r\n for (let k = 0; k < splittedIDs.length; k++) {\r\n if (splittedIDs[k] === navMenuItem.mattressMatcherBannerID) {\r\n this.setState({ matcherBannerSlotInd: i, lastBannerID: splittedIDs[k] });\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n private _getCategoryBanner = () => {\r\n let flag = false;\r\n if (this.props.data.navMenuState.result && this.props.slots.categoryBanner[0]) {\r\n const navMenuSelectedMenu = this.props.data.navMenuState.result.selectedNavMenu;\r\n this.props.slots.categoryBanner &&\r\n this.props.slots.categoryBanner.map((item, index) => {\r\n const moduleId = get(item, 'props.config.moduleId') || '';\r\n if (moduleId === navMenuSelectedMenu) {\r\n if (this.state.categoryBannerIndex === 0 && index === 0 && !this.state.showCategoryBanner) {\r\n this.setState({\r\n showCategoryBanner: true\r\n });\r\n flag = true;\r\n }\r\n if (this.state.categoryBannerIndex !== index) {\r\n this.setState({\r\n showCategoryBanner: true,\r\n categoryBannerIndex: index\r\n });\r\n flag = true;\r\n }\r\n return;\r\n }\r\n });\r\n }\r\n if (!flag && this.state.showCategoryBanner && this.state.categoryBannerIndex !== 0) {\r\n this.setState({\r\n showCategoryBanner: false\r\n });\r\n }\r\n };\r\n\r\n private _getActivePrice = async (): Promise => {\r\n let products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n const productRecIds: number[] = [];\r\n\r\n products.length ? products.map(prod => {\r\n if (prod.IsMasterProduct) {\r\n const lowestVariantId = prod?.AttributeValues?.find(attributeValue => attributeValue.Name === \"EcomLowestPriceVariantRecId\")?.TextValue;\r\n productRecIds.push(isNaN(Number(lowestVariantId)) ? Number(prod?.MasterProductId) : Number(lowestVariantId));\r\n } else {\r\n productRecIds.push(Number(prod?.RecordId));\r\n }\r\n }) : [];\r\n const projectDomain: ProjectionDomain = {\r\n ChannelId: this.props.context.request.apiSettings.channelId,\r\n CatalogId: this.props.context.request.apiSettings.catalogId\r\n };\r\n const affliations: AffiliationLoyaltyTier[] = [];\r\n const customerInput = new GetCustomerInput(this.props.context.actionContext.requestContext.apiSettings);\r\n const customer = await getCustomer(customerInput, this.props.context.actionContext);\r\n\r\n if (customer && customer.CustomerAffiliations) {\r\n customer.CustomerAffiliations.forEach((affliation: CustomerAffiliation) => {\r\n const aff: AffiliationLoyaltyTier = { AffiliationId: affliation.RetailAffiliationId, CustomerId: customer.AccountNumber };\r\n affliations.push(aff);\r\n });\r\n }\r\n\r\n await getActivePricesAsync(\r\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\r\n projectDomain,\r\n productRecIds,\r\n new Date(),\r\n null,\r\n affliations,\r\n true\r\n )\r\n .then((activePricesResponse: ProductPrice[]) => {\r\n this.productPrices = activePricesResponse;\r\n products = products.map(prod => {\r\n let prodVariantId: number;\r\n if (prod.IsMasterProduct) {\r\n prodVariantId = Number(prod?.AttributeValues?.find(attributeValue => attributeValue.Name === \"EcomLowestPriceVariantRecId\")?.TextValue);\r\n } else {\r\n prodVariantId = Number(prod?.RecordId);\r\n }\r\n const activePrice = activePricesResponse.find(price => price.ProductId === prodVariantId);\r\n if (activePrice) {\r\n prod.Price = activePrice.CustomerContextualPrice ?? prod.Price;\r\n prod.BasePrice = Math.max(\r\n activePrice.BasePrice || 0,\r\n activePrice.TradeAgreementPrice || 0,\r\n activePrice.AdjustedPrice || 0\r\n );\r\n }\r\n return prod;\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.props.data.listPageState.then(listPageState => {\r\n listPageState.activeProducts = products;\r\n });\r\n })\r\n .catch((error: Error) => {\r\n this.props.context.actionContext.trace(error.message);\r\n this.props.context.actionContext.telemetry.exception(error);\r\n this.props.context.actionContext.telemetry.debug(\r\n `[get Affiliation based price on search result container ]Error executing action`\r\n );\r\n throw new Error('[get Affiliation based price on search result container]Error executing action');\r\n });\r\n };\r\n private _getActivePriceByProducts = async (products: ProductSearchResult[]): Promise => {\r\n const productRecIds: number[] = [];\r\n products.length ? products.map(prod => {\r\n if (prod.IsMasterProduct) {\r\n const lowestVariantId = prod?.AttributeValues?.find(attributeValue => attributeValue.Name === \"EcomLowestPriceVariantRecId\")?.TextValue;\r\n productRecIds.push(isNaN(Number(lowestVariantId)) ? Number(prod?.MasterProductId) : Number(lowestVariantId));\r\n } else {\r\n productRecIds.push(Number(prod?.RecordId));\r\n }\r\n }) : [];\r\n const projectDomain: ProjectionDomain = {\r\n ChannelId: this.props.context.request.apiSettings.channelId,\r\n CatalogId: this.props.context.request.apiSettings.catalogId\r\n };\r\n const affliations: AffiliationLoyaltyTier[] = [];\r\n const customerInput = new GetCustomerInput(this.props.context.actionContext.requestContext.apiSettings);\r\n const customer = await getCustomer(customerInput, this.props.context.actionContext);\r\n\r\n if (customer && customer.CustomerAffiliations) {\r\n customer.CustomerAffiliations.forEach((affliation: CustomerAffiliation) => {\r\n const aff: AffiliationLoyaltyTier = { AffiliationId: affliation.RetailAffiliationId, CustomerId: customer.AccountNumber };\r\n affliations.push(aff);\r\n });\r\n }\r\n\r\n return getActivePricesAsync(\r\n { callerContext: this.props.context.actionContext, queryResultSettings: {} },\r\n projectDomain,\r\n productRecIds,\r\n new Date(),\r\n null,\r\n affliations,\r\n true\r\n )\r\n .then((activePricesResponse: ProductPrice[]) => {\r\n this.productPrices = activePricesResponse;\r\n return products.map(prod => {\r\n const variantId = prod.IsMasterProduct ? Number(prod.AttributeValues?.find(attributeValue => attributeValue.Name === \"EcomLowestPriceVariantRecId\")?.TextValue) : prod.RecordId;\r\n const activePrice = activePricesResponse.find(price => price.ProductId === variantId);\r\n if (activePrice) {\r\n prod.Price = activePrice.CustomerContextualPrice ?? prod.Price;\r\n prod.BasePrice = Math.max(\r\n activePrice.BasePrice || 0,\r\n activePrice.TradeAgreementPrice || 0,\r\n activePrice.AdjustedPrice || 0\r\n );\r\n }\r\n return prod;\r\n });\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n //return products;\r\n })\r\n .catch((error: Error) => {\r\n this.props.context.actionContext.trace(error.message);\r\n this.props.context.actionContext.telemetry.exception(error);\r\n this.props.context.actionContext.telemetry.debug(\r\n `[get Affiliation based price on search result container ]Error executing action`\r\n );\r\n throw new Error('[get Affiliation based price on search result container]Error executing action');\r\n });\r\n };\r\n private _getSearchResultModal = (): ISearchResultModalViewProps => {\r\n const { resources } = this.props;\r\n return SearchResultModal({\r\n resources: {\r\n modalCloseButtonText: resources.modalCloseButtonText,\r\n modalTitle: resources.modalTitle\r\n },\r\n isOpen: this.state.modalIsOpen,\r\n totalItems: this.props.data && this.props.data.listPageState && this.props.data.listPageState.result?.totalProductCount,\r\n returnRef: this._modalToggleRef,\r\n clearAllBtn: this._getChoiceSummary(true),\r\n onModalToggle: this._toggleModal\r\n });\r\n };\r\n\r\n private _getCollectionTitle = (): ITitleViewProps => {\r\n const { data, context, resources } = this.props;\r\n const seoDataEntry = this.props.data.seoData?.result;\r\n const seoState = seoDataEntry && seoDataEntry['SEO State'];\r\n const seoTitle = seoState === 'Active' && seoDataEntry && seoDataEntry['H1 Tag'];\r\n const pageName: string | undefined = context.request.telemetryPageName;\r\n let collectionTitle: string | undefined = '';\r\n if (context && context.request && context.request.query && context.request.query.q && pageName === 'Search') {\r\n collectionTitle = `${context.request.query.q}`;\r\n } else {\r\n collectionTitle =\r\n seoTitle || (data.category.result &&\r\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\r\n (data.category.result && data.category.result.Name);\r\n }\r\n let productCountText = '';\r\n let productCountNumber: number | undefined;\r\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\r\n productCountNumber = data.listPageState.result.totalProductCount;\r\n } else if (data.products && data.products.result) {\r\n productCountNumber = data.products.result.count;\r\n }\r\n\r\n if (productCountNumber && productCountNumber !== 0) {\r\n productCountText =\r\n productCountNumber !== 1\r\n ? format(`${this.props.resources.numberOfProducts} results`, productCountNumber)\r\n : this.props.resources.oneProduct;\r\n } else {\r\n productCountText = format(`${this.props.resources.numberOfProducts} results`, 0);\r\n }\r\n const searchPageTitle =

    {resources.searchPageTitle}

    ;\r\n const titlePrefix = ;\r\n const titleText = collectionTitle && <h1 className='ms-search-result__collection-title-text'>{collectionTitle}</h1>;\r\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\r\n\r\n return {\r\n TitleContainer: { className: 'ms-search-result-container__title' },\r\n title: {\r\n searchPageTitle: searchPageTitle,\r\n titlePrefix: titlePrefix,\r\n titleText: titleText,\r\n titleCount: titleCount\r\n }\r\n };\r\n };\r\n\r\n private _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\r\n const { data } = this.props;\r\n const categoryHierarchy = data.categoryHierarchy.result;\r\n const categoryLinks =\r\n categoryHierarchy &&\r\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\r\n return (\r\n <Link\r\n key={index}\r\n text={value.Name}\r\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\r\n href={value.Url}\r\n />\r\n );\r\n });\r\n const categoryLinkSeparator = <Separator separator='/' />;\r\n\r\n return {\r\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\r\n categoryHierarchyList: categoryLinks,\r\n categoryHierarchySeparator: categoryLinkSeparator\r\n };\r\n };\r\n\r\n private _getSortingDropDown = (): ISortByViewProps => {\r\n const { resources } = this.props;\r\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\r\n const dropdown = (\r\n <UiLabeledDropdown\r\n labelClassname='reviews-list-sort-by'\r\n labelText={resources.sortByDropdownLabel}\r\n dropdownId='categorySortByDropdown'\r\n dropdownClassname='reviews-list-dropdown'\r\n toggleColor='link'\r\n dropdownOptions={this.sortByDropdownOptions}\r\n selectedOption={activeDropdown}\r\n onSelectOption={this._updateSortByDropdown}\r\n ref={this._sortAndFilterContainerRef}\r\n />\r\n );\r\n return {\r\n sortByDropDown: dropdown\r\n };\r\n };\r\n\r\n private _getProductInfo = async () => {\r\n const { data } = this.props;\r\n const listPageState = data && data.listPageState && data.listPageState.result;\r\n\r\n // @ts-ignore\r\n const input = new GetFullProductsByCollectionInput(\r\n listPageState!.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(listPageState!.pageSize * (this.state.infiniteScrollPage || 0), 0)\r\n },\r\n count: true,\r\n Sorting: listPageState?.sortingCritera || {}\r\n },\r\n listPageState?.activeFilters || [],\r\n +(this.props.context.request.urlTokens.itemId || 0),\r\n this.props.context.request.query && this.props.context.request.query.q\r\n ? this.props.context.request.query.q\r\n : this.props.context.request.query?.productId,\r\n this.props &&\r\n this.props.config &&\r\n this.props.config.includeAttributes !== undefined &&\r\n this.props.config.includeAttributes === true\r\n ? true\r\n : false,\r\n this.props.context.request.locale\r\n );\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n getProducts(input, this.props.context.actionContext).then(actionResponse => {\r\n if (actionResponse.products.length) {\r\n const currentProducts = (data.listPageState.result && data.listPageState.result.activeProducts) || [];\r\n const returnedProducts = actionResponse.products.filter(product => typeof product === 'object');\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._getActivePriceByProducts(returnedProducts);\r\n const infiniteProducts = this.state.addedProducts.length\r\n ? this.state.addedProducts.concat(returnedProducts)\r\n : currentProducts.concat(returnedProducts);\r\n this.setState({ addedProducts: infiniteProducts, onlyNewProducts: returnedProducts });\r\n this.setState({ infiniteScrollPage: this.state.infiniteScrollPage + 1 });\r\n }\r\n });\r\n };\r\n\r\n private _getPagination = (): React.ReactNode => {\r\n const { config, context, data, resources } = this.props;\r\n const listPageState = data && data.listPageState && data.listPageState.result;\r\n const fullUrl = getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 10;\r\n const skipCount =\r\n listPageState && listPageState.currentPageNumber !== null\r\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\r\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\r\n const totalItems = (listPageState && listPageState.totalProductCount) || 0;\r\n const previousText = resources.flipperPrevious;\r\n const nextText = resources.flipperNext;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n return (\r\n <UncontrolledPagination\r\n className='ms-search-result-container__pagination'\r\n role='navigation'\r\n aria-label={resources.paginationAriaLabel}\r\n url={fullUrl.href}\r\n qsp={'skip'}\r\n items={totalItems}\r\n itemsPerPage={itemsPerPage}\r\n startingItem={skipCount}\r\n previousText={\r\n <div className='msc-pagination__prev'>\r\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\r\n <span className='prev-text'>{previousText}</span>\r\n </div>\r\n }\r\n nextText={\r\n <div className='msc-pagination__next'>\r\n <span className='next-text'>{nextText}</span>\r\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\r\n </div>\r\n }\r\n previousAriaLabel={previousText}\r\n nextAriaLabel={nextText}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n );\r\n };\r\n\r\n // tslint:disable: max-func-body-length cyclomatic-complexity\r\n private _getRefineMenu = (): IRefineMenuViewProps => {\r\n const { data, context, config, resources } = this.props;\r\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\r\n const validRefiners =\r\n data.refiners.result &&\r\n data.refiners.result.filter(refiner => {\r\n return refiner.Values.length > 0;\r\n });\r\n let sizeRefinerArr: (string | undefined)[] = [];\r\n validRefiners &&\r\n validRefiners.map(refiner => {\r\n if (refiner && refiner?.KeyName?.toLowerCase() === 'size') {\r\n sizeRefinerArr = refiner?.Values?.map(obj => obj?.LeftValueBoundString?.toLowerCase());\r\n }\r\n });\r\n let isPriceRefinerHide = false;\r\n const isAnySizeSelectedArr = this.props?.data?.listPageState?.result?.activeFilters?.filter(obj =>\r\n sizeRefinerArr.includes(obj?.LeftValueBoundString?.toLowerCase())\r\n );\r\n if (isAnySizeSelectedArr && isAnySizeSelectedArr?.length > 0) {\r\n isPriceRefinerHide = true;\r\n }\r\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n const defaultOpenRefinersArray: string[] = [];\r\n const selectedRefinersParentName: string[] = [];\r\n\r\n activeRefiners &&\r\n activeRefiners.length > 0 &&\r\n activeRefiners.map((selectedRefiner: ProductRefinerValue) => {\r\n const obj = {\r\n key: this._getKeyForRefinerValue(selectedRefiner),\r\n parentName: this._getParentKeyForRefinerValue(selectedRefiner)\r\n };\r\n selectedRefinersParentName.push(obj.parentName.trim().toLowerCase());\r\n });\r\n config.defaultOpenRefinements?.map(refiner => {\r\n // @ts-ignore\r\n defaultOpenRefinersArray.push(refiner.refiner.trim().toLowerCase());\r\n });\r\n const determineExpanded = (product: IProductRefinerHierarchy) => {\r\n const refinerNamesForInitialOpen = selectedRefinersParentName.concat(...defaultOpenRefinersArray);\r\n return product.KeyName && refinerNamesForInitialOpen?.includes(product.KeyName.trim().toLowerCase()) ? true : false;\r\n };\r\n\r\n // VSI Customization - START - 22023\r\n // get attribute value to show or hide Price refinement\r\n const isSizeRefinementBooleanValue = this.isMattressesCategory ? true : false;\r\n // VSI Customization - START - 23629\r\n const refinementExcludeListString = this.props.config.refinementExcludeList;\r\n const refinementExcludeListArr = refinementExcludeListString?.split(',');\r\n const refinementExcludeListNorm = refinementExcludeListArr?.map(refinerName => refinerName.trim().toLowerCase());\r\n // VSI Customization - END - 23629\r\n\r\n // VSI Customization - Start 7924\r\n const requestContext = context && context.request;\r\n // get category slug\r\n let slug = (this.props.data.category.result && this.props.data.category.result.Slug) || '';\r\n let slugArray: string[];\r\n let pathArray: string[];\r\n let refinerParts: string[] = [];\r\n let urlPartsObject: IRefineItemURLParts;\r\n const isSizeRefinement = this.props?.data.category.result?.ExtensionProperties?.find(attr => attr.Key === 'SizeRefinementEnable')\r\n ?.Value?.BooleanValue;\r\n const configVirtualRefinerNames = getVirtualRefinerNames(this.props.context.request, isSizeRefinement);\r\n const filteredRefiners =\r\n this.props.data.refiners.result &&\r\n this.props.data.refiners.result.filter(refiner => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\r\n const sortedConfigValues = getSortedVirtualRefinerConfig(this.props.context.request, this.isMattressesCategory);\r\n if (sortedConfigValues && slug) {\r\n const params = MsDyn365.isBrowser && window.location;\r\n const origin = params && params.origin === 'https://localhost:4000' ? params.origin : requestContext.url.requestUrl.origin;\r\n slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, this.props.context.request);\r\n // FIX reset slug to without keywords\r\n slug = slugArray.join('/');\r\n\r\n // path of URL\r\n let path = this.props.context.request.url.requestUrl.pathname.toLowerCase();\r\n\r\n // remove category id {categoryid}.c\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n\r\n if (categoryId) {\r\n path = path?.replace(`/${categoryId}`, '');\r\n }\r\n // remove category slug\r\n // FIX remove keywords from path\r\n pathArray = removeKeywords(path.split('/').splice(1), this.props.context.request);\r\n path = pathArray.join('/');\r\n const removedCategorySlug = path.split(slug).splice(1)[0];\r\n\r\n if (removedCategorySlug !== '') {\r\n refinerParts = decodeURIComponent(removedCategorySlug).split('/');\r\n }\r\n\r\n if (refinerParts && refinerParts.length > 0 && slugArray && slugArray.length > 0) {\r\n // remove duplicates if any from the first url part\r\n slugArray.forEach(_slug => {\r\n refinerParts.forEach(refinerPart => {\r\n const index = slugArray.indexOf(refinerPart);\r\n if (index !== -1) {\r\n slugArray.splice(index, 1);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // break final refiners so array contains single values instead of pipe sign values\r\n const finalRefinerParts: string[] = [];\r\n refinerParts.forEach(refinerPart => {\r\n refinerPart.split('|').map(item => finalRefinerParts.push(item));\r\n });\r\n\r\n refinerParts = finalRefinerParts && flatten(finalRefinerParts);\r\n refinerParts = refinerParts.filter(refiner => {\r\n return refiner.length > 0;\r\n });\r\n\r\n urlPartsObject = {\r\n origin,\r\n categoryPart: slugArray.join('/'),\r\n categoryId\r\n };\r\n }\r\n // VSI Customization - End 7924\r\n const subMenus =\r\n validRefiners &&\r\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\r\n // VSI Customization - START - 23629\r\n const excludedElement = refinementExcludeListNorm?.find(\r\n refinerName => productRefinerHierarchy?.KeyName?.trim().toLowerCase() === refinerName\r\n );\r\n if (excludedElement) {\r\n return undefined;\r\n }\r\n // VSI Customization - END - 23629\r\n\r\n return (\r\n <ErrorBoundary telemetry={context.telemetry} key={index}>\r\n <RefineSubmenu\r\n productRefinerHierarchy={productRefinerHierarchy}\r\n selectedRefinerValues={activeRefiners}\r\n refineItemCommonProps={this._refineItemCommonProps}\r\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\r\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\r\n refinerShowMoreText={this.props.resources.refinerShowMoreText}\r\n refinerShowLessText={this.props.resources.refinerShowLessText}\r\n key={index}\r\n onUpdateRefiners={this._onUpdateRefiners}\r\n urlBuilder={this._buildRefinerUrl}\r\n isDisabled={false}\r\n isExpandedOnInitialLoad={determineExpanded(productRefinerHierarchy)}\r\n tempRangeTypeTODO={tempRangeTypeTODO}\r\n context={context}\r\n moduleId={this.props.id}\r\n moduleTypeName={this.props.typeName}\r\n telemetryContent={this.telemetryContent}\r\n refinerNumberOfItemsToDisplay={this._getRefinerLimitToDisplay}\r\n isMattressesCategory={this.isMattressesCategory}\r\n urlRefinerParts={refinerParts}\r\n urlParts={urlPartsObject}\r\n sortedConfigValues={sortedConfigValues}\r\n filteredRefiners={filteredRefiners}\r\n isPriceRefinerDisabled={isPriceRefinerHide && isSizeRefinementBooleanValue}\r\n isCategoryPage={this._getIsCategoryPage()}\r\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\r\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\r\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\r\n isMobile={this.isMobile}\r\n />\r\n </ErrorBoundary>\r\n );\r\n });\r\n\r\n return {\r\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\r\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\r\n refiners: subMenus,\r\n refinerLabel: resources.mfrmRefinerLabel\r\n };\r\n };\r\n private _getRefinerLimitToDisplay = (keyName: string): number | undefined => {\r\n // this function will filter name of refiner to get its manual added value to limit No of items\r\n return this.props.config.defaultOpenRefinements?.filter(refiner =>\r\n keyName === 'Size' ? refiner.refinerNumberOfItemsToDisplay : undefined\r\n )[0]?.refinerNumberOfItemsToDisplay;\r\n };\r\n private _getChoiceSummary = (clearAllModal: boolean = false, clearAllBtn: boolean = false): React.ReactNode => {\r\n const { resources, data, telemetry } = this.props;\r\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n return (\r\n <ErrorBoundary telemetry={telemetry}>\r\n <ChoiceSummary\r\n classNames='ms-choice-summary-by-category'\r\n clearAllText={resources.clearAllText}\r\n label={resources.choiceSummaryLabel}\r\n selectedChoices={selectedRefiners}\r\n clearAllModal={clearAllModal}\r\n // @ts-ignore: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\r\n refinerHierarchy={data.refiners.result}\r\n choiceFormat={resources.choiceFormat}\r\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\r\n telemetry={telemetry}\r\n onChoiceClicked={this._onChoiceClicked}\r\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\r\n customUrlBuilder={this._customBuildRefinerUrlForChoiceSummary}\r\n choiceAriaLabel={resources.choiceAriaLabel}\r\n telemetryContent={this.telemetryContent}\r\n clearAllBtn={clearAllBtn}\r\n closeAriaLabel={resources.closeAriaLabel}\r\n />\r\n </ErrorBoundary>\r\n );\r\n };\r\n private _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\r\n const {\r\n context: {\r\n request: requestContext,\r\n actionContext\r\n }\r\n } = this.props;\r\n // @ts-ignore\r\n if (MsDyn365.isBrowser && utag) {\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'PLP-sort-action',\r\n event_category: 'PLP Sort Action',\r\n event_action: 'PLP Sort Applied',\r\n event_label: `${notification.selectedOption.value}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n this.setState({ addedProducts: [], onlyNewProducts: [], infiniteScrollPage: 1 });\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''\r\n } could not be found`;\r\n this.props.telemetry.warning(error);\r\n return;\r\n }\r\n MsDyn365.isBrowser &&\r\n window.history.pushState(\r\n {},\r\n '',\r\n buildListPageUrl(\r\n getCurrentUrl(this.props.context.request),\r\n undefined,\r\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\r\n undefined\r\n )\r\n );\r\n const options: SortColumn[] = [this._getSortColumnFromSelectedOption(notification.selectedOption)];\r\n this.setState({\r\n sortedOptions: options\r\n });\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.sortingCritera = {\r\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\r\n };\r\n });\r\n };\r\n\r\n private _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\r\n const { data } = this.props;\r\n if (!data.searchConfiguration.result) {\r\n return {};\r\n }\r\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\r\n return searchConfiguration.key === option.key;\r\n });\r\n if (mappedConfiguration) {\r\n return mappedConfiguration.sortColumn;\r\n }\r\n return {};\r\n };\r\n private _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\r\n const { data } = this.props;\r\n const sortCriteria = data.listPageState.result && data.listPageState.result.sortingCritera;\r\n\r\n const activeSortColumn =\r\n (sortCriteria && sortCriteria.Columns && sortCriteria.Columns[0]) ||\r\n (parseQueryParam<SortColumn[]>('sorting', this.props.context.request) || [])[0];\r\n if (activeSortColumn && data.searchConfiguration.result) {\r\n const activeMappedConfig = data.searchConfiguration.result.find(mappedSearchConfig => {\r\n return (\r\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\r\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\r\n );\r\n });\r\n if (activeMappedConfig) {\r\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\r\n }\r\n }\r\n return;\r\n };\r\n\r\n // tslint:disable: cyclomatic-complexity\r\n // tslint:disable: max-func-body-length\r\n private _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\r\n const {\r\n context: {\r\n request: requestContext,\r\n actionContext\r\n }\r\n } = this.props;\r\n const isCategoryPage: boolean = this._getIsCategoryPage();\r\n if (this._isCustomizedRefiner && isCategoryPage) {\r\n this.setState({ isRefinerRedirectEnabled: true });\r\n }\r\n // @ts-ignore\r\n if (!this.isMobile && utag) {\r\n const { LeftValueBoundLocalizedString, LeftValueBoundString } = itemToggleNotification?.productRefinerValue;\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'PLP-filter-action',\r\n event_category: 'PLP Filter Action',\r\n event_action: itemToggleNotification?.parentProductRefinerHierarchy.KeyName,\r\n event_label: LeftValueBoundLocalizedString ? LeftValueBoundLocalizedString : LeftValueBoundString,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n const error = `Refine menu cannot refine search criteria: ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''\r\n } could not be found`;\r\n this.props.telemetry.warning(error);\r\n return;\r\n }\r\n this.setState({ addedProducts: [], onlyNewProducts: [], infiniteScrollPage: 1 });\r\n let currentRefinement = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeFilters) || [];\r\n if (this._isCustomizedRefiner && isCategoryPage) {\r\n currentRefinement = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeVirtualFilters) || [];\r\n }\r\n let updatedRefinementCriteria = getUpdatedRefinementCriteria(itemToggleNotification, currentRefinement);\r\n // VSI Customization - START - 22023\r\n if (isCategoryPage) {\r\n const isAnySizeSelectedArr = updatedRefinementCriteria.filter(obj =>\r\n this.state.allSizeRefinerValues.includes(obj?.LeftValueBoundString?.toLowerCase())\r\n );\r\n if (isAnySizeSelectedArr && isAnySizeSelectedArr?.length > 0) {\r\n this.setState({ isPriceRefinerDisabled: true });\r\n updatedRefinementCriteria = this._removePriceAndVirtualRefiner(updatedRefinementCriteria);\r\n } else {\r\n this.setState({ isPriceRefinerDisabled: false });\r\n }\r\n }\r\n // VSI Customization - END - 22023\r\n // PLP-URL\r\n const isSizeRefinement = this.props?.data.category.result?.ExtensionProperties?.find(attr => attr.Key === 'SizeRefinementEnable')\r\n ?.Value?.BooleanValue;\r\n const availableRefiners = getVirtualRefinerNames(this.props.context.request, isSizeRefinement);\r\n if (!isCategoryPage) {\r\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\r\n } else if (itemToggleNotification.parentProductRefinerHierarchy.KeyName && availableRefiners.includes(itemToggleNotification.parentProductRefinerHierarchy.KeyName.toLowerCase()) === false) {\r\n this._isCustomizedRefiner ?\r\n window.location.href = buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria) :\r\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\r\n } else {\r\n // url builder\r\n const configVirtualRefinerNames = getVirtualRefinerNames(this.props.context.request, isSizeRefinement);\r\n const filteredRefiners = this.props.data.refiners.result && this.props.data.refiners.result.filter((refiner) => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\r\n // get category slug\r\n let slug = (this.props.data.category.result && this.props.data.category.result.Slug) || '';\r\n let slugArray: string[];\r\n let pathArray: string[];\r\n const sortedConfigValues = getSortedVirtualRefinerConfig(this.props.context.request, isSizeRefinement);\r\n if (sortedConfigValues && slug) {\r\n const params = MsDyn365.isBrowser && window.location;\r\n const origin = params && params.origin === 'https://localhost:4000' ? params.origin : requestContext.url.requestUrl.origin;\r\n slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, this.props.context.request);\r\n // FIX reset slug to without keywords\r\n slug = slugArray.join('/');\r\n\r\n // path of URL\r\n let path = this.props.context.request.url.requestUrl.pathname.toLowerCase();\r\n\r\n // remove category id {categoryid}.c\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n\r\n if (categoryId) {\r\n path = path?.replace(`/${categoryId}`, '');\r\n }\r\n // remove category slug\r\n pathArray = removeKeywords(path.split('\\/').splice(1), this.props.context.request);\r\n path = pathArray.join('\\/');\r\n const removedCategorySlug = path.split(slug).splice(1)[0];\r\n let refinerParts: string[] = [];\r\n if (removedCategorySlug !== '') {\r\n refinerParts = decodeURIComponent(removedCategorySlug).split('/');\r\n }\r\n\r\n if (refinerParts && refinerParts.length > 0 && slugArray && slugArray.length > 0) {\r\n // remove duplicates if any from the first url part\r\n slugArray.forEach(_slug => {\r\n refinerParts.forEach(refinerPart => {\r\n const index = slugArray.indexOf(refinerPart);\r\n if (index !== -1) {\r\n slugArray.splice(index, 1);\r\n }\r\n });\r\n });\r\n }\r\n // insert current refiner\r\n itemToggleNotification.isSelecting &&\r\n refinerParts.push(itemToggleNotification.productRefinerValue.LeftValueBoundString!.toLowerCase());\r\n // break final refiners so array contains single values instead of pipe sign values\r\n const finalRefinerParts: string[] = [];\r\n refinerParts.forEach(refinerPart => {\r\n refinerPart.split('|').map(item => finalRefinerParts.push(item.includes('-') ? item : item.split('-').join(' ')));\r\n });\r\n\r\n refinerParts = finalRefinerParts && flatten(finalRefinerParts);\r\n if (itemToggleNotification.isSelecting === false) {\r\n const index = refinerParts.indexOf(itemToggleNotification.productRefinerValue.LeftValueBoundString!.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-'));\r\n if (index !== -1) {\r\n refinerParts.splice(index, 1);\r\n }\r\n }\r\n\r\n // setup object with refiner values\r\n const sortedValues: { [key: string]: string[] } = {};\r\n filteredRefiners?.forEach(refinerSet => {\r\n let refinerName = refinerSet.KeyName;\r\n if (refinerName) {\r\n refinerName = refinerName.toLowerCase();\r\n sortedValues[refinerName] = []; // size, brand, price\r\n }\r\n refinerSet.Values.forEach((refiner) => {\r\n refinerParts.forEach((refinerPart) => {\r\n if (refinerName && refiner.LeftValueBoundString &&\r\n (refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLocaleLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLocaleLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.toLowerCase().split(' ').join('-'));\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLocaleLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refinerPart);\r\n }\r\n });\r\n });\r\n });\r\n // alpha sort\r\n // @ts-ignore\r\n for (const sortedValue of Object.keys(sortedValues)) {\r\n sortedValues[sortedValue].length > 0 &&\r\n sortedValues[sortedValue].sort((a: string, b: string) => {\r\n if (a < b) {\r\n return -1;\r\n }\r\n if (a > b) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n // @ts-ignore\r\n const finalRefiners: string[] = [];\r\n sortedConfigValues.forEach(sortedConfigValue => {\r\n const sortedRefinerName = sortedConfigValue.refinerName.toLowerCase();\r\n if (sortedValues[sortedRefinerName] !== undefined && sortedValues[sortedRefinerName].length > 0) {\r\n let concatValue: string | string[] = sortedValues[sortedRefinerName];\r\n if (sortedValues[sortedRefinerName].length > 1) {\r\n concatValue = sortedValues[sortedRefinerName].join('|');\r\n } else if (sortedValues[sortedRefinerName].length === 1) {\r\n concatValue = sortedValues[sortedRefinerName][0];\r\n }\r\n // @ts-ignore\r\n finalRefiners.push(concatValue.split(' ').join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-'));\r\n }\r\n });\r\n\r\n // @ts-ignore\r\n const finalURL = `${origin}/${slugArray.join('/')}${finalRefiners && finalRefiners.length > 0 ? `/${finalRefiners.join('/')}` : ''\r\n }${categoryId ? `/${categoryId}` : ''}${params ? params.search : ''}`; // todo: will remove after complete functionality\r\n window.location.href = finalURL.trim();\r\n }\r\n }\r\n\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\r\n });\r\n };\r\n\r\n private _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\r\n if (this.props.data.listPageState.result) {\r\n const newRefinementCriteria = getUpdatedRefinementCriteria(\r\n itemToggleNotification,\r\n (this._isCustomizedRefiner && this.props.data.listPageState.result\r\n ? this.props.data.listPageState.result?.activeVirtualFilters\r\n : this.props.data.listPageState.result?.activeFilters) || []\r\n );\r\n\r\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\r\n } else {\r\n this.props.telemetry.warning(`[buildRefinerQueryString]List Page State Not available, unable to build refiner URL`);\r\n return '';\r\n }\r\n };\r\n\r\n private _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\r\n this.setState({ addedProducts: [], onlyNewProducts: [], infiniteScrollPage: 1 });\r\n const { data, telemetry, context } = this.props;\r\n const requestContext = context && context.request;\r\n const isCustomizeRefiner = requestContext.app.config.urlModifications && requestContext.app.config.urlModifications.length > 0;\r\n const isCategoryPage: boolean = this._getIsCategoryPage();\r\n if (isCustomizeRefiner && isCategoryPage) {\r\n this.setState({ isRefinerRedirectEnabled: true });\r\n }\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\r\n return;\r\n }\r\n let currentRefinementCriteria = this.props.data.listPageState.result && this.props.data.listPageState.result.activeFilters || [];\r\n if (this._isCustomizedRefiner && isCategoryPage) {\r\n currentRefinementCriteria =\r\n (this.props.data.listPageState.result && this.props.data.listPageState.result.activeVirtualFilters) || [];\r\n }\r\n\r\n if (!notification.clearAll) {\r\n const selectedChoice = notification.choiceClicked;\r\n if (!selectedChoice) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\r\n return;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\r\n );\r\n // VSI Customization - START - 22023\r\n\r\n if (isCategoryPage) {\r\n const isAnySizeSelectedArr = currentRefinementCriteria?.filter((obj: ProductRefinerValue) =>\r\n this.state.allSizeRefinerValues.includes(obj?.LeftValueBoundString?.toLowerCase())\r\n );\r\n if (isAnySizeSelectedArr && isAnySizeSelectedArr?.length > 0) {\r\n this.setState({ isPriceRefinerDisabled: true });\r\n currentRefinementCriteria = this._removePriceAndVirtualRefiner(currentRefinementCriteria);\r\n } else {\r\n this.setState({ isPriceRefinerDisabled: false });\r\n }\r\n }\r\n\r\n // VSI Customization - END - 22023\r\n } else {\r\n currentRefinementCriteria = [];\r\n // @ts-ignore\r\n if (MsDyn365.isBrowser && utag) {\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'PLP-filter-action',\r\n event_category: 'PLP Filter Action',\r\n event_action: 'Clear All Filters Click',\r\n event_label: 'Clear All Filters',\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n // set focus to sort and filter\r\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\r\n const dropdownElement = MsDyn365.isBrowser && dropdownElementId && document.getElementById(dropdownElementId);\r\n MsDyn365.isBrowser &&\r\n setTimeout(() => {\r\n dropdownElement && dropdownElement.focus();\r\n }, 50);\r\n }\r\n // VSI Customization - START - 22023\r\n if (notification.clearAll) {\r\n this.setState({ isPriceRefinerDisabled: false });\r\n }\r\n // VSI Customization - END - 22023\r\n const virtualRefinersRecordId: number[] = [];\r\n const isSizeRefinement: boolean | undefined = this.props?.data.category.result?.ExtensionProperties?.find(attr => attr.Key === 'SizeRefinementEnable')?.Value\r\n ?.BooleanValue;\r\n const availableRefiners = getVirtualRefinerNames(this.props.context.request, isSizeRefinement);\r\n this.props.data.refiners.result &&\r\n this.props.data.refiners.result.filter(refiner => {\r\n if (availableRefiners.includes(refiner.KeyName?.toLowerCase() as string)) {\r\n virtualRefinersRecordId.push(refiner.RecordId!);\r\n }\r\n });\r\n\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n if (!this._isCustomizedRefiner && notification?.choiceClicked?.DataTypeValue === 1) {\r\n const listPageUrl = buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n if (!notification.clearAll && virtualRefinersRecordId && virtualRefinersRecordId.length >= 1) {\r\n // window.location.href = listPageUrl.trim();\r\n } else {\r\n MsDyn365.isBrowser && window.history.pushState({}, '', listPageUrl);\r\n }\r\n } else if (\r\n notification.clearAll ||\r\n (notification.choiceClicked &&\r\n notification.choiceClicked?.RefinerRecordId &&\r\n virtualRefinersRecordId.includes(notification.choiceClicked.RefinerRecordId) === false)\r\n ) {\r\n const listPageUrl = buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n if (\r\n isCustomizeRefiner &&\r\n isCategoryPage &&\r\n !notification.clearAll &&\r\n virtualRefinersRecordId &&\r\n virtualRefinersRecordId.length >= 1\r\n ) {\r\n window.location.href = listPageUrl.trim();\r\n } else {\r\n MsDyn365.isBrowser && window.history.pushState({}, '', listPageUrl);\r\n }\r\n // below code is to clear virtual refiners if defined in config\r\n if (\r\n isCustomizeRefiner &&\r\n isCategoryPage &&\r\n notification.clearAll &&\r\n virtualRefinersRecordId &&\r\n virtualRefinersRecordId.length >= 1\r\n ) {\r\n // get category slug\r\n let slug = (this.props.data.category.result && this.props.data.category.result.Slug) || '';\r\n let slugArray: string[];\r\n const params = MsDyn365.isBrowser && window.location;\r\n const origin = params && params.origin === 'https://localhost:4000' ? params.origin : requestContext.url.requestUrl.origin;\r\n slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, this.props.context.request);\r\n slug = slugArray.join('/');\r\n data.listPageState.result.currentPageNumber = 0;\r\n data.listPageState.result.activeFilters = currentRefinementCriteria;\r\n const finalURL = `${origin}/${slugArray.join('/')}${categoryId ? `/${categoryId}` : ''}`;\r\n window.location.href = finalURL.trim();\r\n }\r\n } else if (isCustomizeRefiner && isCategoryPage && availableRefiners.includes(notification.parentKeyName.toLowerCase()) === true) {\r\n // url builder\r\n const configVirtualRefinerNames = getVirtualRefinerNames(this.props.context.request, isSizeRefinement);\r\n const filteredRefiners =\r\n this.props.data.refiners.result &&\r\n this.props.data.refiners.result.filter(refiner => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\r\n\r\n // get category slug\r\n let slug = (this.props.data.category.result && this.props.data.category.result.Slug) || '';\r\n let slugArray: string[];\r\n let pathArray: string[];\r\n const sortedConfigValues = getSortedVirtualRefinerConfig(this.props.context.request, isSizeRefinement);\r\n if (sortedConfigValues && slug) {\r\n const params = MsDyn365.isBrowser && window.location;\r\n const origin = params && params.origin === 'https://localhost:4000' ? params.origin : requestContext.url.requestUrl.origin;\r\n slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, this.props.context.request);\r\n slug = slugArray.join('/');\r\n\r\n // path of URL\r\n let path = this.props.context.request.url.requestUrl.pathname.toLowerCase();\r\n\r\n // remove category id {categoryid}.c\r\n if (categoryId) {\r\n path = path?.replace(`/${categoryId}`, '');\r\n }\r\n // remove category slug\r\n pathArray = removeKeywords(path.split('\\/').splice(1), this.props.context.request);\r\n path = pathArray.join('\\/');\r\n const removedCategorySlug = path.split(slug).splice(1)[0];\r\n let refinerParts: string[] = [];\r\n if (removedCategorySlug !== '') {\r\n refinerParts = decodeURIComponent(removedCategorySlug).split('/');\r\n }\r\n\r\n if (refinerParts && refinerParts.length > 0 && slugArray && slugArray.length > 0) {\r\n // remove duplicates if any from the first url part\r\n slugArray.forEach(_slug => {\r\n refinerParts.forEach(refinerPart => {\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const index = slugArray.indexOf(refinerPart);\r\n if (index !== -1) {\r\n slugArray.splice(index, 1);\r\n }\r\n });\r\n });\r\n }\r\n // insert current refiner\r\n // break final refiners so array contains single values instead of pipe sign values\r\n const finalRefinerParts: string[] = [];\r\n refinerParts.forEach(refinerPart => {\r\n refinerPart.split('|').map(item => finalRefinerParts.push(item.includes('-') ? item : item.split('-').join(' ')));\r\n // finalRefinerParts.push(refinerPart.split('|'));\r\n });\r\n\r\n refinerParts = finalRefinerParts && flatten(finalRefinerParts);\r\n const index = refinerParts.indexOf(notification.choiceClicked!.LeftValueBoundString!.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-'));\r\n if (index !== -1) {\r\n refinerParts.splice(index, 1);\r\n }\r\n // setup object with refiner values\r\n const sortedValues: { [key: string]: string[] } = {};\r\n filteredRefiners?.forEach(refinerSet => {\r\n let refinerName = refinerSet.KeyName;\r\n if (refinerName) {\r\n refinerName = refinerName.toLowerCase();\r\n sortedValues[refinerName] = []; // size, brand, price\r\n }\r\n refinerSet.Values.forEach((refiner) => {\r\n refinerParts.forEach((refinerPart) => {\r\n if (refinerName && refiner.LeftValueBoundString &&\r\n (refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.toLowerCase().split(' ').join('-'));\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refinerPart);\r\n }\r\n });\r\n });\r\n });\r\n // alpha sort\r\n // @ts-ignore\r\n for (const sortedValue of Object.keys(sortedValues)) {\r\n sortedValues[sortedValue].length > 0 &&\r\n sortedValues[sortedValue].sort((a: string, b: string) => {\r\n if (a < b) {\r\n return -1;\r\n }\r\n if (a > b) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n // @ts-ignore\r\n const finalRefiners: string[] = [];\r\n sortedConfigValues.forEach(sortedConfigValue => {\r\n const sortedRefinerName = sortedConfigValue.refinerName.toLowerCase();\r\n if (sortedValues[sortedRefinerName] !== undefined && sortedValues[sortedRefinerName].length > 0) {\r\n let concatValue: string | string[] = sortedValues[sortedRefinerName];\r\n if (sortedValues[sortedRefinerName].length > 1) {\r\n concatValue = sortedValues[sortedRefinerName].join('|');\r\n } else if (sortedValues[sortedRefinerName].length === 1) {\r\n concatValue = sortedValues[sortedRefinerName][0];\r\n }\r\n // @ts-ignore\r\n finalRefiners.push(concatValue.split(' ').join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-'));\r\n }\r\n });\r\n data.listPageState.result.currentPageNumber = 0;\r\n data.listPageState.result.activeFilters = currentRefinementCriteria;\r\n const finalURL = `${origin}/${slugArray.join('/')}${finalRefiners && finalRefiners.length > 0 ? `/${finalRefiners.join('/')}` : ''\r\n }${categoryId ? `/${categoryId}` : ''}${params ? params.search : ''}`;\r\n window.location.href = finalURL.trim();\r\n }\r\n }\r\n\r\n if (notification.parentKeyName.toLowerCase() !== 'price' && MsDyn365.isBrowser) {\r\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\r\n }\r\n data.listPageState.result.currentPageNumber = 0;\r\n data.listPageState.result.activeFilters = currentRefinementCriteria;\r\n if (MsDyn365.isBrowser && notification.parentKeyName.toLowerCase() === 'price' && isCategoryPage) {\r\n this._isCustomizedRefiner\r\n ? (window.location.href = buildListPageUrl(fullUrl, currentRefinementCriteria))\r\n : window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\r\n }\r\n };\r\n\r\n private _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\r\n const { data, telemetry } = this.props;\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\r\n return fullUrl.href;\r\n }\r\n\r\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (!isClearAll) {\r\n if (!selectedRefiner) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\r\n return fullUrl.href;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\r\n );\r\n } else {\r\n currentRefinementCriteria = [];\r\n }\r\n\r\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n };\r\n\r\n private _customBuildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\r\n const { telemetry, context } = this.props;\r\n const requestContext = context && context.request;\r\n const isCustomizeRefiner = requestContext.app.config.urlModifications && requestContext.app.config.urlModifications.length > 0;\r\n const isCategoryPage: boolean = this._getIsCategoryPage();\r\n\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n let currentRefinementCriteria = this.props.data.listPageState.result && this.props.data.listPageState.result.activeFilters || [];\r\n if (this._isCustomizedRefiner && isCategoryPage) {\r\n currentRefinementCriteria = this.props.data.listPageState.result && this.props.data.listPageState.result.activeVirtualFilters || [];\r\n }\r\n if (!currentRefinementCriteria) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\r\n return fullUrl.href;\r\n }\r\n\r\n if (!isClearAll) {\r\n const selectedChoice = selectedRefiner;\r\n if (!selectedChoice) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\r\n return fullUrl.href;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\r\n );\r\n\r\n } else {\r\n currentRefinementCriteria = [];\r\n }\r\n\r\n const virtualRefinersRecordId: number[] = [];\r\n const isSizeRefinement: boolean | undefined = this.props?.data.category.result?.ExtensionProperties?.find((attr) => attr.Key === 'SizeRefinementEnable')\r\n ?.Value?.BooleanValue;\r\n const availableRefiners = getVirtualRefinerNames(this.props.context.request, isSizeRefinement);\r\n this.props.data.refiners.result && this.props.data.refiners.result.filter((refiner) => {\r\n if (availableRefiners.includes(refiner.KeyName?.toLowerCase() as string)) {\r\n virtualRefinersRecordId.push(refiner.RecordId!);\r\n }\r\n\r\n });\r\n\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n if (!this._isCustomizedRefiner) {\r\n const listPageUrl = buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n if (!isClearAll && virtualRefinersRecordId && virtualRefinersRecordId.length >= 1) {\r\n // window.location.href = listPageUrl.trim();\r\n } else {\r\n return listPageUrl;\r\n }\r\n }\r\n // below code is to clear virtual refiners if defined in config\r\n if (isCustomizeRefiner && isCategoryPage && isClearAll && virtualRefinersRecordId && virtualRefinersRecordId.length >= 1) {\r\n // get category slug\r\n let slug = this.props.data.category.result && this.props.data.category.result.Slug || '';\r\n let slugArray: string[];\r\n const params = MsDyn365.isBrowser && window.location;\r\n const origin = (params && params.origin === 'https://localhost:4000') ? params.origin : requestContext.url.requestUrl.origin;\r\n slugArray = slug.split('\\/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, this.props.context.request);\r\n slug = slugArray.join('/');\r\n const finalURL = `${origin}/${slugArray.join('\\/')}${categoryId ? `/${categoryId}` : ''}`;\r\n return finalURL.trim();\r\n } else if (isCustomizeRefiner && isCategoryPage && availableRefiners.includes(this._getParentKeyForRefinerValue(selectedRefiner).toLowerCase()) === true) {\r\n // url builder\r\n const configVirtualRefinerNames = getVirtualRefinerNames(this.props.context.request, isSizeRefinement);\r\n const filteredRefiners = this.props.data.refiners.result && this.props.data.refiners.result.filter((refiner) => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\r\n\r\n // get category slug\r\n let slug = this.props.data.category.result && this.props.data.category.result.Slug || '';\r\n let slugArray: string[];\r\n let pathArray: string[];\r\n const sortedConfigValues = getSortedVirtualRefinerConfig(this.props.context.request, isSizeRefinement);\r\n if (sortedConfigValues && slug) {\r\n const params = MsDyn365.isBrowser && window.location;\r\n const origin = (params && params.origin === 'https://localhost:4000') ? params.origin : requestContext.url.requestUrl.origin;\r\n slugArray = slug.split('\\/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, this.props.context.request);\r\n slug = slugArray.join('/');\r\n\r\n // path of URL\r\n let path = this.props.context.request.url.requestUrl.pathname.toLowerCase();\r\n\r\n // remove category id {categoryid}.c\r\n if (categoryId) {\r\n path = path?.replace(`/${categoryId}`, '');\r\n }\r\n // remove category slug\r\n pathArray = removeKeywords(path.split('\\/').splice(1), this.props.context.request);\r\n path = pathArray.join('\\/');\r\n const removedCategorySlug = path.split(slug).splice(1)[0];\r\n let refinerParts: string[] = [];\r\n if (removedCategorySlug !== '') {\r\n refinerParts = decodeURIComponent(removedCategorySlug).split('\\/');\r\n }\r\n\r\n if (refinerParts && refinerParts.length > 0 && slugArray && slugArray.length > 0) {\r\n // remove duplicates if any from the first url part\r\n slugArray.forEach((_slug) => {\r\n refinerParts.forEach((refinerPart) => {\r\n // tslint:disable-next-line: no-shadowed-variable\r\n const index = slugArray.indexOf(refinerPart);\r\n if (index !== -1) {\r\n slugArray.splice(index, 1);\r\n }\r\n });\r\n });\r\n }\r\n // insert current refiner\r\n // break final refiners so array contains single values instead of pipe sign values\r\n const finalRefinerParts: string[] = [];\r\n refinerParts.forEach(refinerPart => {\r\n refinerPart.split('|').map(item => finalRefinerParts.push(item.includes('-') ? item : item.split('-').join(' ')));\r\n // finalRefinerParts.push(refinerPart.split('|'));\r\n });\r\n\r\n refinerParts = finalRefinerParts && flatten(finalRefinerParts);\r\n const index = refinerParts.indexOf(selectedRefiner.LeftValueBoundString!.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-'));\r\n if (index !== -1) {\r\n refinerParts.splice(index, 1);\r\n }\r\n // setup object with refiner values\r\n const sortedValues: { [key: string]: string[] } = {};\r\n filteredRefiners?.forEach((refinerSet) => {\r\n let refinerName = refinerSet.KeyName;\r\n if (refinerName) {\r\n refinerName = refinerName.toLowerCase();\r\n sortedValues[refinerName] = []; // size, brand, price\r\n }\r\n refinerSet.Values.forEach((refiner) => {\r\n refinerParts.forEach((refinerPart) => {\r\n if (refinerName && refiner.LeftValueBoundString &&\r\n (refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString.toLowerCase().split(' ').join('-'));\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refinerPart);\r\n }\r\n });\r\n });\r\n });\r\n // alpha sort\r\n // @ts-ignore\r\n for (const sortedValue of Object.keys(sortedValues)) {\r\n sortedValues[sortedValue].length > 0 && sortedValues[sortedValue].sort((a: string, b: string) => {\r\n if (a < b) { return -1; }\r\n if (a > b) { return 1; }\r\n return 0;\r\n });\r\n }\r\n\r\n // @ts-ignore\r\n const finalRefiners: string[] = [];\r\n sortedConfigValues.forEach((sortedConfigValue) => {\r\n const sortedRefinerName = sortedConfigValue.refinerName.toLowerCase();\r\n if (sortedValues[sortedRefinerName] !== undefined && sortedValues[sortedRefinerName].length > 0) {\r\n let concatValue: string | string[] = sortedValues[sortedRefinerName];\r\n if (sortedValues[sortedRefinerName].length > 1) {\r\n concatValue = sortedValues[sortedRefinerName].join('|');\r\n } else if (sortedValues[sortedRefinerName].length === 1) {\r\n concatValue = sortedValues[sortedRefinerName][0];\r\n }\r\n // @ts-ignore\r\n finalRefiners.push(concatValue.split(' ').join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-'));\r\n }\r\n });\r\n const finalURL = `${origin}/${slugArray.join('\\/')}${finalRefiners && finalRefiners.length > 0 ? `/${finalRefiners.join('\\/')}` : ''}${categoryId ? `/${categoryId}` : ''}${params ? params.search : fullUrl && fullUrl.search ? fullUrl.search : ''}`;\r\n return finalURL.trim();\r\n }\r\n\r\n }\r\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n };\r\n\r\n private _getViewport(): GridSize {\r\n if (MsDyn365.isBrowser) {\r\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\r\n }\r\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\r\n }\r\n\r\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\r\n if (!amount || !currency) {\r\n this.props.telemetry.trace('[choice-summary] could not format price');\r\n return amount || '';\r\n }\r\n const priceAmount = (amount && Number(amount)) || 0;\r\n const locale = get(this.props, 'context.request.locale', 'en-US');\r\n let result: string;\r\n\r\n try {\r\n result = new Intl.NumberFormat(locale, {\r\n style: 'currency',\r\n currencyDisplay: 'symbol',\r\n currency: currency,\r\n minimumFractionDigits: 0\r\n }).format(priceAmount);\r\n } catch (e) {\r\n result = `${priceAmount} ${currency} `;\r\n this.props.telemetry.warning(`Failed to format price for ${result}: ${e} `);\r\n }\r\n return result;\r\n }\r\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue): string {\r\n const { choiceFormat, choiceRangeValueFormat } = this.props.resources;\r\n const refinerHierarchy = this.props.data.refiners.result;\r\n const { telemetry } = this.props;\r\n const overallFormat = choiceFormat || '{1}';\r\n const rangeFormat = choiceRangeValueFormat;\r\n let refinerName = '';\r\n if (refinerHierarchy && refinerHierarchy.find) {\r\n const parent = refinerHierarchy.find(\r\n (hierarchy: IProductRefinerHierarchy) =>\r\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\r\n );\r\n if (!parent) {\r\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\r\n } else {\r\n refinerName = parent.KeyName || '';\r\n }\r\n }\r\n\r\n let refinerValueName: string;\r\n if (isRangeType(productRefinerValue.DataTypeValue)) {\r\n refinerValueName = rangeFormat\r\n ?.replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\r\n ?.replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\r\n } else {\r\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\r\n }\r\n\r\n return overallFormat?.replace('{0}', refinerName)?.replace('{1}', refinerValueName);\r\n }\r\n private _getParentKeyForRefinerValue(productRefinerValue: ProductRefinerValue): string {\r\n const { telemetry } = this.props;\r\n const refinerHierarchy = this.props.data.refiners.result;\r\n let refinerName = '';\r\n if (refinerHierarchy && refinerHierarchy.find) {\r\n const parent = refinerHierarchy.find(\r\n (hierarchy: IProductRefinerHierarchy) =>\r\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\r\n );\r\n if (!parent) {\r\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\r\n } else {\r\n refinerName = parent.KeyName || '';\r\n }\r\n }\r\n\r\n return refinerName;\r\n }\r\n\r\n private _toggleModal(): void {\r\n const filterCategoriesArr: string[] = [];\r\n const filterItemsArr: string[] = [];\r\n const selectedChoices = this.props.data.listPageState.result && this.props.data.listPageState.result.activeFilters;\r\n selectedChoices &&\r\n selectedChoices.length > 0 &&\r\n selectedChoices.map((selectedRefiner: ProductRefinerValue) => {\r\n const obj = {\r\n key: this._getKeyForRefinerValue(selectedRefiner),\r\n parentName: this._getParentKeyForRefinerValue(selectedRefiner)\r\n };\r\n filterCategoriesArr.push(obj.parentName);\r\n filterItemsArr.push(obj.key);\r\n });\r\n const uniqueFilterCategories = [...new Set(filterCategoriesArr)];\r\n const filterCategories = uniqueFilterCategories.join('|');\r\n const filterItems = filterItemsArr.join('|');\r\n // @ts-ignore\r\n if (MsDyn365.isBrowser && utag && this.state.modalIsOpen) {\r\n // @ts-ignore\r\n // tslint:disable-next-line: object-literal-key-quotes\r\n utag.link({\r\n event: 'PLP-filter-action',\r\n event_category: 'PLP Filter Action',\r\n event_action: `${filterCategories} `,\r\n event_label: `${filterItems} `,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n this.setState({\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n }\r\n\r\n private _updateViewport(): void {\r\n this._viewport = this._getViewport();\r\n if (this.state.modalIsOpen && !this.isMobile) {\r\n this._toggleModal();\r\n }\r\n }\r\n\r\n private _getIsCategoryPage(): boolean {\r\n const { context } = this.props;\r\n const requestContext = context && context.request;\r\n const pageType =\r\n requestContext.urlTokens.pageType === 'Category' || (requestContext.query && requestContext.query.categoryId)\r\n ? 'Category'\r\n : 'Search';\r\n return pageType?.toLowerCase() === 'search' ? false : true;\r\n }\r\n\r\n private _removePriceAndVirtualRefiner(currentRefinementCriteria: ProductRefinerValue[]): ProductRefinerValue[] {\r\n const activeRefiners = currentRefinementCriteria;\r\n const priceRefiner = activeRefiners?.find(refiner => refiner.DataTypeValue === 1);\r\n if (priceRefiner) {\r\n currentRefinementCriteria = activeRefiners?.filter(\r\n selectedCriterion => !isMatchingRefinementCriterion(priceRefiner, selectedCriterion)\r\n );\r\n }\r\n let withoutVirtualRefiners = [...currentRefinementCriteria];\r\n if (this._isCustomizedRefiner) {\r\n const allVirtualRefinersValue = currentRefinementCriteria.filter(obj =>\r\n this.state.allVirtualRefiners.includes(obj?.LeftValueBoundString?.toLowerCase())\r\n );\r\n let updatedRefinersArr = [...currentRefinementCriteria];\r\n allVirtualRefinersValue.map(refinerValue => {\r\n const selectedObj = currentRefinementCriteria?.find(\r\n refiner => refiner.LeftValueBoundString?.toLowerCase() === refinerValue.LeftValueBoundString?.toLowerCase()\r\n );\r\n if (selectedObj) {\r\n withoutVirtualRefiners = updatedRefinersArr?.filter(\r\n selectedCriterion => !isMatchingRefinementCriterion(selectedObj, selectedCriterion)\r\n );\r\n }\r\n updatedRefinersArr = [...withoutVirtualRefiners];\r\n });\r\n if (MsDyn365.isBrowser) {\r\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), withoutVirtualRefiners));\r\n }\r\n }\r\n return withoutVirtualRefiners;\r\n }\r\n\r\n}\r\n","import { RichText, RichTextComponent } from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\ninterface IErrorMessage {\r\n errorMsg?: RichText | string;\r\n}\r\n\r\nexport const ErrorMessage: React.FC<IErrorMessage> = ({ errorMsg }) => {\r\n return <RichTextComponent text={errorMsg} className='ms-search-result-container__no-results-message' />;\r\n};\r\n","import * as React from 'react';\r\nimport getHtmlParserValue from '../../Utilities/get-html-parser-value';\r\nimport InfiniteScroll from 'react-infinite-scroll-component';\r\nimport { ISearchResultModalViewProps } from './components';\r\nimport { ErrorBoundary } from '../../common/components/error-boundary';\r\nimport {\r\n ICategoryHierarchyViewProps,\r\n IRefineMenuViewProps,\r\n ISearchResultContainerViewProps,\r\n ISortByViewProps,\r\n ITitleViewProps\r\n} from './mfrm-search-result-container';\r\n\r\nimport { getTelemetryObject, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\n// VSI Customization - Start\r\nimport MsDyn365, { getRichTextHtml, HtmlHeadInclude, RichText, Text } from '@msdyn365-commerce/core';\r\nimport classnames from 'classnames';\r\nimport get from 'lodash/get';\r\nimport { ErrorMessage as MFRMErrorMessage } from '../../themes/mattressfirm/custom-components/error-message';\r\nimport { ProductSearchResultItems } from './components';\r\nimport { IMfrmSearchResultContainerResources } from './mfrm-search-result-container.props.autogenerated';\r\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport CustomSkeleton from '../../themes/mattressfirm/custom-components/CustomSkeleton';\r\n// tslint:disable-next-line: cyclomatic-complexity max-func-body-length max-line-length\r\nconst MfrmSearchResultContainerView: React.FC<ISearchResultContainerViewProps> = (props) => {\r\n const {\r\n SearchResultContainer,\r\n pagination,\r\n ProductsContainer,\r\n ProductSectionContainer,\r\n choiceSummary,\r\n clearAllBtn,\r\n isMobile,\r\n modalToggle,\r\n searchResultModal,\r\n TitleViewProps,\r\n refineMenu,\r\n categoryHierarchy,\r\n sortByOptions,\r\n CategoryNavContainer,\r\n RefineAndProductSectionContainer,\r\n FeatureSearchContainer,\r\n similarLookProduct,\r\n slots,\r\n resources,\r\n context,\r\n config: { searchTips },\r\n refinerRedirect,\r\n seoDataEntry\r\n } = props;\r\n const pageType: string | undefined = context.request.urlTokens.pageType;\r\n const pageName: string | undefined = context.request.telemetryPageName;\r\n let mfrmProducts = (props?.data?.listPageState?.result && props?.data?.listPageState?.result?.activeProducts) || [];\r\n if (mfrmProducts?.length === 1 && mfrmProducts[0]?.ItemId === '' && mfrmProducts[0]?.RecordId === 0) {\r\n mfrmProducts = [];\r\n }\r\n let errorText: RichText | String = '';\r\n const categoryPage = pageType === 'Category';\r\n if (!mfrmProducts || mfrmProducts.length === 0) {\r\n errorText = categoryPage ? resources.resultCategoryNotFoundText : searchTips || resources.resultSearchNotFoundText;\r\n }\r\n\r\n const categorySEOTitle = props.data.category.result?.ExtensionProperties?.find((attr) => attr.Key === 'CategorySEOTitle')?.Value\r\n ?.StringValue;\r\n const categorySEODescription = props.data.category.result?.ExtensionProperties?.find((attr) => attr.Key === 'CategorySEODescription')\r\n ?.Value?.StringValue;\r\n\r\n const tagsArr = _getSEOMetaTags(props);\r\n // VSI Customization - Ends\r\n if (isMobile) {\r\n return (\r\n <ErrorBoundary telemetry={props.telemetry}>\r\n <Module\r\n {...SearchResultContainer}\r\n className={classnames('ms-search-result-container', errorText ? 'ms-search-result-container__no-search-result' : '')}\r\n >\r\n <HtmlHeadInclude>\r\n {tagsArr.map(\r\n (tag, index) =>\r\n tag?.content && <meta name={tag?.name} content={tag?.content} key={index} /*property={tag?.property}*/ />\r\n )}\r\n </HtmlHeadInclude>\r\n {!errorText || categoryPage ? (\r\n <Node className='ms-search-result-container__search-results'>\r\n <Node className='ms-search-result-container__results'>\r\n {renderTitle(mfrmProducts, TitleViewProps, errorText, resources, pageName)}\r\n </Node>\r\n </Node>\r\n ) : (\r\n false\r\n )}\r\n {!errorText && renderCategoryHierarchy(categoryHierarchy)}\r\n {!errorText || categoryPage ? modalToggle : false}\r\n {!errorText || categoryPage ? choiceSummary : false}\r\n {!errorText || categoryPage ? createSearchResultModal(searchResultModal, refineMenu, sortByOptions, refinerRedirect) : false}\r\n {!errorText && <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>}\r\n <Node className={errorText && !categoryPage ? 'ms-search-result-container__no-search-result-section' : ''}>\r\n <Node\r\n className={\r\n categoryPage && errorText\r\n ? 'ms-search-result-container__category-error'\r\n : !categoryPage && errorText\r\n ? 'ms-search-result-container__nsrp-error'\r\n : ''\r\n }\r\n >\r\n {errorText && (\r\n <div className='ms-search-result-container__error'>\r\n {renderErrorMessage(TitleViewProps, errorText, resources, categoryPage)}\r\n <MFRMErrorMessage errorMsg={errorText} />\r\n </div>\r\n )}\r\n {errorText && categoryPage && <div className='ms-search-result-container__clear-all'>{clearAllBtn}</div>}\r\n {errorText && !categoryPage && (\r\n <Node className='ms-search-result-container__help-block'>\r\n {slots && slots.nsrpNeedAssistance && slots.nsrpNeedAssistance[0]}\r\n </Node>\r\n )}\r\n </Node>\r\n </Node>\r\n <Node\r\n {...ProductsContainer}\r\n className={\r\n errorText ? 'ms-search-result-container__no-search-result-container' : 'ms-search-result-container__Products'\r\n }\r\n >\r\n {/* VSI Customization - Start - NSRP Container Slot content rendering */}\r\n {errorText &&\r\n slots &&\r\n slots.nsrpContainer &&\r\n slots.nsrpContainer.map((children: React.ReactNode) => {\r\n return children;\r\n })}\r\n {/* VSI Customization - End */}\r\n {!errorText && _renderProductSearchResultItems(props)}\r\n </Node>\r\n <div className='hidden'>{pagination}</div>\r\n {/* VSI Customization - start */}\r\n {_categorySeoCopy(categorySEOTitle, categorySEODescription, seoDataEntry)}\r\n {/* VSI Customization - End */}\r\n </Module>\r\n </ErrorBoundary>\r\n );\r\n }\r\n return (\r\n <ErrorBoundary telemetry={props.telemetry}>\r\n <Module\r\n {...SearchResultContainer}\r\n className={errorText ? 'ms-search-result-container__no-search-result' : 'ms-search-result-container'}\r\n >\r\n <HtmlHeadInclude>\r\n {tagsArr.map(\r\n (tag, index) =>\r\n tag?.content && <meta name={tag?.name} content={tag?.content} key={index} />\r\n )}\r\n </HtmlHeadInclude>\r\n {!errorText || categoryPage ? (\r\n <Node className='ms-search-result-container__search-results'>\r\n <Node className='ms-search-result-container__results'>\r\n {TitleViewProps && renderTitle(mfrmProducts, TitleViewProps, errorText, resources, pageName)}\r\n </Node>\r\n {sortByOptions && renderSort(sortByOptions)}\r\n </Node>\r\n ) : (\r\n false\r\n )}\r\n {!errorText || categoryPage ? (\r\n <Node className='ms-search-result-container__choice-summary-container'>{choiceSummary}</Node>\r\n ) : (\r\n false\r\n )}\r\n {!errorText ? <Node {...CategoryNavContainer}>{categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}</Node> : false}\r\n <Node\r\n {...RefineAndProductSectionContainer}\r\n className={\r\n !errorText || categoryPage\r\n ? 'ms-search-result-container__refine-product-section'\r\n : errorText && !categoryPage\r\n ? 'ms-search-result-container__no-search-result-section'\r\n : ''\r\n }\r\n >\r\n {refinerLoader(refinerRedirect)}\r\n {!errorText || categoryPage ? refineMenu && renderRefiner(refineMenu) : false}\r\n <Node {...ProductSectionContainer} className={'ms-search-result-container__product-section'}>\r\n <Node\r\n className={\r\n categoryPage && errorText\r\n ? 'ms-search-result-container__category-error'\r\n : !categoryPage && errorText\r\n ? 'ms-search-result-container__nsrp-error'\r\n : ''\r\n }\r\n >\r\n <Node\r\n className={\r\n categoryPage && errorText\r\n ? 'ms-search-result-container__category-error-container'\r\n : !categoryPage && errorText\r\n ? 'ms-search-result-container__nsrp-error-container'\r\n : ''\r\n }\r\n >\r\n {errorText && (\r\n <div className='ms-search-result-container__error'>\r\n {renderErrorMessage(TitleViewProps, errorText, resources, categoryPage)}\r\n <MFRMErrorMessage errorMsg={errorText} />\r\n </div>\r\n )}\r\n {errorText && categoryPage && <div className='ms-search-result-container__clear-all'>{clearAllBtn}</div>}\r\n {errorText && !categoryPage && (\r\n <Node className='ms-search-result-container__help-block'>\r\n {slots && slots.nsrpNeedAssistance && slots.nsrpNeedAssistance[0]}\r\n </Node>\r\n )}\r\n </Node>\r\n </Node>\r\n {!errorText && <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>}\r\n <Node\r\n {...ProductsContainer}\r\n className={\r\n errorText ? 'ms-search-result-container__no-search-result-container' : 'ms-search-result-container__Products'\r\n }\r\n >\r\n {/* VSI Customization for Classes - End */}\r\n {/* Commenting out following code as it causes duplicate mattress matcher container */}\r\n {/* VSI Customization - Start - NSRP Container Slot content rendering */}\r\n {errorText &&\r\n slots &&\r\n slots.nsrpContainer &&\r\n slots.nsrpContainer.map((children: React.ReactNode) => {\r\n return children;\r\n })}\r\n {/* VSI Customization - End */}\r\n {/* {products} */}\r\n {!errorText && _renderProductSearchResultItems(props)}\r\n </Node>\r\n <div className='hidden'>{pagination}</div>\r\n </Node>\r\n </Node>\r\n {/* VSI Customization - start */}\r\n {_categorySeoCopy(categorySEOTitle, categorySEODescription, seoDataEntry)}\r\n {/* VSI Customization - end */}\r\n </Module>\r\n </ErrorBoundary>\r\n );\r\n};\r\n// this will add title and description and description to above footer\r\nconst _categorySeoCopy = (categorySEOTitle?: string, categorySEODescription?: string, seoDataEntry?: object | undefined): JSX.Element | null => {\r\n const seoState = seoDataEntry && seoDataEntry['SEO State'];\r\n const title = seoState === 'Active' ? seoDataEntry && seoDataEntry['H1 Tag'] : categorySEOTitle;\r\n const description = seoState === 'Active' ? seoDataEntry && seoDataEntry['Seo Overview Copy'] : categorySEODescription;\r\n\r\n return title && description ? (\r\n <div className='ms-search-result__seo'>\r\n <Text tag='h2' text={getHtmlParserValue(title)} />\r\n <div className='ms-search-result__seo-text'>\r\n <span className='ms-search-result__seo-text-description' dangerouslySetInnerHTML={{ __html: description }} />\r\n </div>\r\n </div>\r\n ) : null;\r\n};\r\n\r\n{\r\n /* VSI Customization - START - 6432 */\r\n}\r\nconst _getSEOMetaTags = (props: ISearchResultContainerViewProps) => {\r\n const { activeRefiners, seoDataEntry } = props;\r\n const isActiveRefiner = activeRefiners?.length! > 0 || false;\r\n const seoState = seoDataEntry && seoDataEntry['SEO State'];\r\n const seoMetaTags = isActiveRefiner && seoState === 'Active' ? seoDataEntry && seoDataEntry['Meta Keywords'] : undefined;\r\n const categoryPageKeywords = seoMetaTags || _getSEOMetaTagValue(props, 'CategoryPageKeywords');\r\n const categoryPageKeywordsParser = getHtmlParserValue(categoryPageKeywords);\r\n return [\r\n { content: categoryPageKeywordsParser, name: 'keywords' }\r\n ];\r\n};\r\n\r\nconst _getSEOMetaTagValue = (props: ISearchResultContainerViewProps, keyValue: string) => {\r\n return props?.data.category.result?.ExtensionProperties?.find((attr) => attr.Key === keyValue)?.Value?.StringValue;\r\n};\r\n\r\n\r\n{\r\n /* VSI Customization - END - 6432 */\r\n}\r\n\r\nconst _renderProductSearchResultItems = (props: ISearchResultContainerViewProps): JSX.Element | null => {\r\n try {\r\n const {\r\n addedProducts,\r\n onlyNewProducts,\r\n resources,\r\n config: { imageSettings, allowBackNavigation },\r\n isCategoryPage,\r\n categoryNameFromSlug,\r\n showProductsLoader,\r\n itemsPerPageInitialState\r\n } = props;\r\n const breadCrumbType = props.context.app.config.breadcrumbType;\r\n const allowBack = allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\r\n\r\n let newProducts = MsDyn365.isBrowser && get(props.data.listPageState.result, 'activeProducts') || [];\r\n let showLoader = true;\r\n\r\n if (addedProducts.length) {\r\n newProducts = addedProducts;\r\n }\r\n\r\n if (props.data.listPageState.result?.totalProductCount === addedProducts.length || newProducts.length === 0 || newProducts.length < 24) {\r\n showLoader = false;\r\n }\r\n\r\n const mattressMatcherBannerIndex = (props.matcherBannerSlotInd !== undefined && props.matcherBannerSlotInd !== -1) ? props.matcherBannerSlotInd : 0;\r\n const telemetryContent: ITelemetryContent = getTelemetryObject(\r\n props.context.request.telemetryPageName!,\r\n props.friendlyName,\r\n props.telemetry\r\n );\r\n const listName = props.config?.productImpressionListName;\r\n const isRefinersEnabled = props.data.listPageState.result?.activeFilters && props.data.listPageState.result?.activeFilters.length > 0 || false;\r\n return (\r\n <>\r\n {showProductsLoader ? _renderImageLoader(showProductsLoader, itemsPerPageInitialState, props, mattressMatcherBannerIndex) : <InfiniteScroll\r\n dataLength={newProducts.length}\r\n next={props.getScrolledProducts}\r\n hasMore={showLoader}\r\n scrollThreshold={0.5}\r\n loader={\r\n <div className='ms-infinite-scroll__search-in-progress'>\r\n <div className={classnames('msc-waiting', 'msc-waiting-circular')} />\r\n </div>\r\n }\r\n >\r\n <ErrorBoundary telemetry={props.telemetry}>\r\n <ProductSearchResultItems\r\n products={newProducts}\r\n context={props.context}\r\n imageSettings={imageSettings}\r\n resources={resources}\r\n moduleType={props.typeName}\r\n moduleId={props.id}\r\n allowBackNavigation={allowBack}\r\n telemetryContent={telemetryContent}\r\n // @ts-ignore\r\n productBadgeAttribute={props.app.config.productBadgeAttribute}\r\n mattressMatcherBanner={props.slots.mattressMatcherBanner}\r\n mattressMatcherBannerIndex={mattressMatcherBannerIndex}\r\n bannerPosition={props.config.showBannerPosition}\r\n targetAudienceGroup={props.config.targetAudienceGroup}\r\n listName={listName}\r\n currentPromoProducts={newProducts}\r\n isCategoryPage={isCategoryPage}\r\n categoryNameFromSlug={categoryNameFromSlug}\r\n onlyNewProducts={onlyNewProducts}\r\n isRefinersEnabled={isRefinersEnabled}\r\n showBvRatings={props.config.showBVRatings}\r\n />\r\n </ErrorBoundary>\r\n </InfiniteScroll>\r\n }\r\n </>\r\n );\r\n } catch (error) {\r\n return null;\r\n }\r\n};\r\n\r\nconst createSearchResultModal = (\r\n modalProps: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps,\r\n refinerRedirect: boolean\r\n): JSX.Element => {\r\n return React.cloneElement(\r\n modalProps.modal,\r\n {},\r\n modalProps.modalHeader,\r\n refinerLoader(refinerRedirect),\r\n createModalBody(modalProps, refineMenu, sortByDropDown),\r\n modalProps.modalFooter\r\n );\r\n};\r\n\r\nconst createModalBody = (\r\n props: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps\r\n): JSX.Element | null => {\r\n if (sortByDropDown) {\r\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown), renderRefiner(refineMenu));\r\n }\r\n return null;\r\n};\r\n\r\nconst _renderImageLoader = (isRefinerLoading: boolean, totalSkeletonItems: number, props: ISearchResultContainerViewProps, mattressMatcherBannerIndex?: number): JSX.Element | null => {\r\n if (isRefinerLoading) {\r\n let banner = null;\r\n const shouldShowMattressMatcherBanner = props.slots.mattressMatcherBanner !== undefined;\r\n if (props.config.showBannerPosition !== undefined && props.config.showBannerPosition >= 0) {\r\n banner = (<div className='ms-content-block mfrm-category-banner mfrm-mm-banner-global'>\r\n <CustomSkeleton className='skeleton-dimensions__banner' type='image' />\r\n </div>);\r\n }\r\n const skeletonItemsBeforeBanner = new Array(props.config.showBannerPosition).fill(null);\r\n const skeletonItemsAfterBanner = new Array(totalSkeletonItems - (props.config.showBannerPosition ? props.config.showBannerPosition : 0)).fill(null);\r\n return (\r\n <div className='ms-search-result-container__Products'>\r\n <ul className='list-unstyled'>\r\n {skeletonItemsBeforeBanner.map((_, idx) =>\r\n (<div className='skeleton-dimensions' key={idx}>\r\n <div className='skeleton-dimensions__product'>\r\n <CustomSkeleton type=\"image\" className='skeleton-dimensions__image' />\r\n <div className=\"msc-product__details\">\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__eyebrow' />\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__ratings' />\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__title' />\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__delivery' />\r\n </div>\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__financing' />\r\n </div>\r\n </div>))}\r\n </ul>\r\n {shouldShowMattressMatcherBanner ? banner : null}\r\n <ul className='list-unstyled'>\r\n {skeletonItemsAfterBanner.map((_, idx) =>\r\n (<div className='skeleton-dimensions' key={idx}>\r\n <div className='skeleton-dimensions__product'>\r\n <CustomSkeleton type=\"image\" className='skeleton-dimensions__image' />\r\n <div className=\"msc-product__details\">\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__eyebrow' />\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__ratings' />\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__title' />\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__delivery' />\r\n </div>\r\n <CustomSkeleton type=\"text\" className='skeleton-dimensions__financing' />\r\n </div>\r\n </div>))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n return null;\r\n};\r\nconst refinerLoader = (isRefinerLoading: boolean): JSX.Element | null => {\r\n if (isRefinerLoading) {\r\n return (\r\n <Node className='ms-search-result-container__screen-loader'>\r\n <Node className='msc-waiting msc-waiting-circular' />\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\r\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\r\n if (refiners) {\r\n return (\r\n <Node {...RefinerSectionContainer}>\r\n <Node {...RefineMenuContainer}>\r\n <Node className='ms-refine-submenu__title'>{props.refinerLabel}</Node>\r\n {refiners.map((submenu, index) => (\r\n <React.Fragment key={index}>{submenu}</React.Fragment>\r\n ))}\r\n </Node>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst renderSort = (props: ISortByViewProps): JSX.Element | null => {\r\n const { sortByDropDown } = props;\r\n if (sortByDropDown) {\r\n return <div>{sortByDropDown}</div>;\r\n }\r\n return null;\r\n};\r\n\r\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\r\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\r\n if (categoryHierarchyList) {\r\n return (\r\n <Node {...CategoryHierarchyContainer}>\r\n {categoryHierarchyList.map((category, index) => (\r\n <React.Fragment key={index}>\r\n {category}\r\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\r\n </React.Fragment>\r\n ))}\r\n </Node>\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n// VSI Customization - Start\r\nconst renderTitle = (\r\n activeProducts: ProductSearchResult[],\r\n titleProps: ITitleViewProps,\r\n errorMsg: RichText | string,\r\n resources: IMfrmSearchResultContainerResources,\r\n pageName: string | undefined\r\n): JSX.Element | null => {\r\n const { title, TitleContainer } = titleProps;\r\n const extProperties = activeProducts.length > 0 && activeProducts[0]?.ExtensionProperties || [];\r\n const fallBackQueryResult = extProperties?.find(obj => obj.Key === 'FallbackQuery')?.Value?.StringValue;\r\n const originalBackQueryResult = extProperties?.find(obj => obj.Key === 'OrignalQuery')?.Value?.StringValue;\r\n if (title) {\r\n // tslint:disable: react-no-dangerous-html\r\n return (\r\n <Node {...TitleContainer}>\r\n {\r\n <>\r\n {fallBackQueryResult === '' && pageName === 'Search' && <>\r\n {title.searchPageTitle} <span className='ms-search-result__result-text'>{title.titleCount}</span> <div> {title.titlePrefix} “{title.titleText}” </div>\r\n </>}\r\n {fallBackQueryResult !== '' && pageName === 'Search' && <>\r\n <div className='ms-search-result__incorrect'> You searched for <span className='ms-search-result__incorrect-result'>‘{originalBackQueryResult}’ </span>\r\n <span className='ms-search-result__result-text'>{title.titleCount}</span> </div>\r\n <div className='ms-search-result__correct'> Showing results for <span className='ms-search-result__correct-result'>‘{fallBackQueryResult}’</span> </div>\r\n </>}\r\n {pageName !== 'Search' && <> {title.titleText} <span className='ms-search-result__result-text'>{title.titleCount}</span> </>}\r\n </>\r\n }\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst renderErrorMessage = (\r\n props: ITitleViewProps,\r\n errorMsg: RichText | string,\r\n resources: IMfrmSearchResultContainerResources,\r\n categoryPage: boolean\r\n): JSX.Element | null => {\r\n const { title } = props;\r\n const collectionText: string = (get(title.titleText, 'props.children') || '')?.replace(/['']+/g, '');\r\n const nsrText = resources.mfrmSearchText?.replace('{query}', collectionText)?.replace(/‘[^']*’/g, '<span>$&</span>');\r\n const noResultsText = resources.mfrmNoResultsText?.replace('{query}', collectionText)?.replace(/‘[^']*’/g, '<span>$&</span>');\r\n const errorText = categoryPage ? noResultsText : nsrText;\r\n\r\n return (\r\n <Node className='ms-search-result-container__error-container'>\r\n {errorMsg ? (\r\n <p className='ms-search-result-container__error-message' dangerouslySetInnerHTML={getRichTextHtml(errorText)} />\r\n ) : (\r\n ''\r\n )}\r\n </Node>\r\n );\r\n};\r\n// VSI Customization - End\r\n\r\nexport default MfrmSearchResultContainerView;\r\n","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['mfrm-search-result-container'] = {\n c: () => require('partner/modules/mfrm-search-result-container/mfrm-search-result-container.tsx'),\n $type: 'containerModule',\n da: [{name:'category', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category', runOn: 0},{name:'categoryHierarchy', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy', runOn: 0},{name:'featureProduct', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'listPageState', path:'modules/mfrm-search-result-container/list-page-state', runOn: 0},{name:'navMenuState', path:'data-actions/navigation-menu-state-data-action', runOn: 0},{name:'products', path:'modules/mfrm-search-result-container/actions/get-full-products-by-collection', runOn: 0},{name:'refiners', path:'modules/mfrm-search-result-container/actions/get-refiners-for-collection', runOn: 0},{name:'searchConfiguration', path:'modules/mfrm-search-result-container/actions/get-mapped-search-configuration', runOn: 0},{name:'seoData', path:'data-actions/get-seo-data.action', runOn: 0},{name:'updateBreadcrumbOnSrp', path:'actions/srp-breadcrumb-page.action', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-search-result-container',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-search-result-container'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-current-category-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'actions/srp-breadcrumb-page.action';\n let dataAction = require('partner/actions/srp-breadcrumb-page.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/get-seo-data.action';\n let dataAction = require('partner/data-actions/get-seo-data.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'data-actions/navigation-menu-state-data-action';\n let dataAction = require('partner/data-actions/navigation-menu-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-search-result-container/actions/get-full-products-by-collection';\n let dataAction = require('partner/modules/mfrm-search-result-container/actions/get-full-products-by-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-search-result-container/actions/get-mapped-search-configuration';\n let dataAction = require('partner/modules/mfrm-search-result-container/actions/get-mapped-search-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-search-result-container/actions/get-refiners-for-collection';\n let dataAction = require('partner/modules/mfrm-search-result-container/actions/get-refiners-for-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/mfrm-search-result-container/list-page-state';\n let dataAction = require('partner/modules/mfrm-search-result-container/list-page-state');\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['__local__|__local__|modules|mfrm-search-result-container|mfrm-search-result-container'] = {\n c: () => require('partner/modules/mfrm-search-result-container/mfrm-search-result-container.view.tsx'),\n cn: '__local__-__local__-mfrm-search-result-container'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["async","ctx","cartLines","zipCode","_data$ATPInventoryPLP","data","fetchCoreDeliveryListAction","FetchCoreDeliveryListInput","ATPInventoryPLPData","map","deliveryItem","i","deliveryMessage","Available","undefined","ATPQuantity","parseInt","date","Date","today","dayjs","now","format","deliveryDate","SlotDate","setDate","getDate","requestContext","app","config","defaultDeliveryMessage","_objectSpread","value","parsedValue","parsedArr","ReactHtmlParser","length","toString","getPagePath","MsDyn365","isBrowser","window","location","href","split","host","includes","SrpBreadcrumbPageInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","Msdyn365","action","input","breadcrumbCheck","id","args","GetSeoDataInput","seoDataUrl","super","shouldCacheOutput","cacheObjectType","cacheKey","getSeoDataUrl","this","jsonUrl","res","filteredUrlPath","filteredURL","seoData","inputData","NavMenuStateInput","navMenuStateAction","isMenuHasParent","isMobileMenuCollapsed","selectedNavMenu","menuItemData","createObservableDataAction","sortOptions","sortByOptionRelevanceDesc","sortByOptionRatingAsc","sortByOptionRatingDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","MappedSearchInput","apiSettings","buildCacheKey","getMappedSearchConfiguration","getSearchConfigurationAsync","callerContext","then","searchConfiguration","ProductSortColumns","sortColumn","key","ColumnName","toUpperCase","IsDescending","telemetry","warning","filter","Boolean","createInput","ChoiceSummary","React","props","_this","closeButtonGlyph","_onClick","e","preventDefault","stopPropagation","target","currentTarget","clearAll","getAttribute","indexOf","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","parentKeyName","_onClickKeyName","keyName","arguments","payLoad","getPayloadObject","telemetryContent","selectedChoices","_getKeyForRefinerValue","parentKey","_getParentKeyForRefinerValue","render","clearAllText","label","classNames","choiceAriaLabel","clearAllModal","closeAriaLabel","items","selectedRefinersMap","contentAction","etext","clearAllAttributes","getTelemetryAttributes","className","classnames","item","index","attribute","Object","assign","customUrlBuilder","onClick","role","aria-label","clearAllBtn","productRefinerValue","_overallFormat$replac","choiceFormat","choiceRangeValueFormat","refinerHierarchy","overallFormat","rangeFormat","refinerValueName","refinerName","find","parent","hierarchy","Values","isMatchingRefinementCriterion","KeyName","_rangeFormat$replace","isRangeType","DataTypeValue","replace","_formatPrice","LeftValueBoundString","UnitText","RightValueBoundString","LeftValueBoundLocalizedString","amount","currency","trace","priceAmount","Number","locale","get","result","Intl","NumberFormat","style","currencyDisplay","minimumFractionDigits","selected","innerText","trim","__decorate","computed","observer","Link","_ref","text","ariaLabel","getViewport","context","request","device","Type","innerWidth","gridSettings","xs","w","sm","md","lg","ProductSearchResultItems","products","imageSettings","resources","moduleType","moduleId","allowBackNavigation","productBadgeAttribute","mattressMatcherBanner","bannerPosition","mattressMatcherBannerIndex","targetAudienceGroup","listName","currentPromoProducts","isCategoryPage","categoryNameFromSlug","onlyNewProducts","isRefinersEnabled","showBvRatings","resultEyebrow","setResultEyebrow","resultCoreDelivery","setResultCoreDelivery","productIDList","setproductIDList","categoryID","setCategoryID","productsForCallingAPI","catName","productIds","catalogId","actionContext","productPricesIter","prodId","RecordId","push","productsCategories","getProductsCategoryPathsAction","GetCategoryPathsInput","categoryIds","productCategoriesIter","CategoryPath","catPathSegments","Segments","catId","CategoryId","CategoryName","collectionProductAttributes","AttributeValues","variantId","configVendorNamePlp","brandBackofficeAttributePlp","configVendorNamePdp","brandBackofficeAttributePdp","brandName","getBrandNameCheck","eProps","ExtensionProperties","ePropsIter","Key","_eProps$ePropsIter$Va","Value","StringValue","productId","ProductId","categoryId","categoryName","brand","variantID","getProductsCategories","uniqBy","callATPDelivery","productIdsArray","_item$AttributeValues2","_item$ExtensionProper2","_defaultVariantId$toS2","DistinctProductVariant","IsMasterProduct","attributeValue","Name","TextValue","defaultVariantId","property","LongValue","eyebrowMessageObj","ItemId","_getEyebrowMessage","catch","console","log","updateProductsMessages","product","eyebrowMessage","resultEyebrowTemp","slice","EyeBrows","eyebrow","_eyebrow$Description","Description","toLowerCase","_eyebrow$Description2","_eyebrow$Description3","_eyebrow$Description4","updateCoreDeiveryMessage","deliveryByMessages","_item$AttributeValues","_item$ExtensionProper","_defaultVariantId$toS","_item$RecordId","_deliveryByMessages$f","_deliveryByMessages$f2","recId","deliveryByMessage","message","VariantRecordId","_item$AttributeValues3","_item$ExtensionProper3","_item$AttributeValues4","_item$ExtensionProper4","shippingInformationSmall","attr","_attr$Name","smallParcelAttributeKey","defaultVariantShippingInformation","_getProductType","_defaultVariantId$toS3","_item$RecordId2","Quantity","getListOfCoreDeliveryMessage","response","skipProductsVal","skipProducts","viewPortCode","getSkipProductValue","callTelium","listNameValue","pagePath","categoryListArray","item1","some","item2","categoryListArr","brandNameArr","productVariantArr","productNameArr","productIdArr","productPositionArr","productPriceArr","productListArray","productID","Price","utag","link","event","event_category","event_action","enhanced_action","event_label","event_noninteraction","product_impression_list_name","product_impression_position","product_impression_id","product_impression_name","product_impression_category","product_impression_brand","product_impression_variant","product_impression_price","renderProducts","productArray","setProductArray","checkInvew","inView","prevArray","handleProductId","InView","callTeliumOnClick","productName","productRecordID","forEach","product_list_name","product_position","product_id","product_name","product_category","product_brand","product_variant","as","rootMargin","onChange","ErrorBoundary","ProductComponent","freePriceText","BasePrice","priceFree","originalPriceText","currentPriceText","ratingAriaLabel","allowBack","typeName","badgeAttribute","shouldShowMattressMatcherBanner","FeatureSearchResultItem","productRecordId","productUrl","getProductPageUrlSync","fallbackImage","getFallbackImageUrl","onTelemetryClick","imageUrl","altText","img","src","imageProps","fallBackSrc","Image","loadFailureBehavior","renderProductPlacementImage","PrimaryImageUrl","featureSimilarLooksTitle","title","Title","Separator","separator","ModalToggle","innerRef","ref","SearchResultModal","modal","modalNode","modalHeader","modalHeaderNode","modalFooter","modalFooterNode","modalBody","ModalBody","Modal","autoFocus","applicationNode","returnFocusRef","returnRef","isOpen","toggle","onModalToggle","zIndex","ModalHeader","modalTitle","ModalFooter","Button","modalCloseButtonText","totalItems","generateButtonText","ErrorMessage","RangeRefineItem","_formattedPriceReverseLookup","Map","_onRangeUpdate","bind","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","selectedRefinementCriterion","initialMin","initialMax","state","isChecked","validationErrorMin","validationErrorMax","selectedMin","selectedMax","touchedMin","touchedMax","parentProductRefinerHierarchy","refineItemCommonProps","isPriceRefinerDisabled","isDisableSlider","rangeType","_renderInputFields","_renderSlider","_initializeMaxValue","formattedSelectedMax","max","_getFormattedSelectedValue","isDisabled","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","minLabel","onFocus","onBlur","disabled","maxLabel","placeholder","placeholderTextMax","min","sliderId","RefinerRecordId","ariaAttributes","minPrice","maxPrice","selectedMinPrice","selectedMaxPrice","Slider","inForm","step","orientation","labels","labelId","labelString","labelPositioning","showLabels","showTooltip","sliderThumbs","minValueSliderThumbAriaLabel","currencyCode","ariaValueText","maxValueSliderThumbAriaLabel","onChangeEnd","debounce","handleTooltipText","_changeValue","inputType","selectedKey","touchedKey","setState","_getInputWithoutFormatting","selectedMinValue","selectedMinValueRounded","Math","floor","isNaN","minTouched","onToggle","maxNum","validationErrorNaN","_focus","_validateRange","isSelecting","rangeStart","rangeEnd","selectedMaxValue","selectedMaxValueRounded","maxTouched","minNum","setTimeout","current","focus","touched","validationError","validationErrorRange","formatPrice","has","set","inputAsNum","sliderChangeNotification","eventType","firstThumbValue","secondThumbValue","_focusOnSliderThumb","element","document","getElementById","tooltip","RefineItem","anchorType","_this$props","singleProductCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","children","attrs","_objectWithoutProperties","_excluded","JSON","stringify","isSingleSelect","RefinerTypeValue","RefinerType","SingleSelect","itemTypeClassName","productText","productCount","Count","refineMenuItemAriaLabel","SourceValue","ProductRefinerSource","Rating","_productRefinerValue$2","_getRefinerUrl","tabIndex","_this$props$selectedR","_productRefinerValue$","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","ratingComponentClass","isMobileView","RatingComponent","avgRating","ratingCount","hideCount","readOnly","moduleTypeName","_getIsCategoryPage","pageType","urlTokens","query","urlBuilder","urlRefinerParts","urlParts","sortedConfigValues","filteredRefiners","urlSpecialCharsConfig","canonicalUrlspecialCharIncludeList","parentProductRefinerName","getVirtualRefinerNames","isMattressesCategory","_productRefinerValue$3","_this$props$context$r","refinerParts","currentRefinerName","join","regExSpecialChars","splice","sortedValues","refinerSet","refiner","refinerPart","_refiner$LeftValueBou","_refiner$LeftValueBou2","toLocaleLowerCase","sortedValue","keys","sort","a","b","finalRefiners","sortedConfigValue","sortedRefinerName","_concatValue$split$jo","concatValue","queryStr","url","requestUrl","search","origin","categoryPart","RefineSubmenu","_pluralizeKeyName","_showMore","refineItemsExpanded","itemsToShow","_setRefineItemsLimitToDisplay","productRefinerHierarchy","refinerNumberOfItemsToDisplay","_onToggleItem","_onToggleSubmenu","isExpanded","isExpandedOnInitialLoad","expanded","componentDidMount","error","hideRating","_renderChildItems","onKeyPress","refinerShowLessText","refinerShowMoreText","_renderRange","_renderSingleMultiSelect","isMobile","refinerValuesList","listItems","child","findMatchingRefinementCriterion","selectedValue","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","SliderWithBars","submenuClassNamePrefix","itemToggleNotification","onUpdateRefiners","prevState","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","dataTypeValue","AttributeDataType","Currency","Decimal","Integer","refinementCriteria","refinementCriterion","RefinerSourceValue","getUpdatedRefinementCriteria","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","next","Text","TrueFalse","matchingIndex","findIndex","criterion","UiLabeledDropdown","selectSorting","values","_onSelectOption","indexValue","handleDropDown","isShow","setWrapperRef","instance","wrapperRef","handleClickOutside","contains","selectedOption","dropdownOptions","option","selectedIndex","addEventListener","componentWillUnmount","removeEventListener","labelText","labelClassname","dropdownId","labelClassNames","_getSelectedIndex","htmlFor","controlledByParent","onSelectOption","defaultProps","toggleColor","SearchResultContainer","SearchResultContainer_1","_props$context$reques","_this$props6","_this$props$context$r3","sortByDropdownOptions","_pageType","_isCustomizedRefiner","urlModifications","_viewport","currentNavMenu","getCategoryName","q","category","getFriendlyName","NameTranslations","_getViewport","_filterMenuItem","menuItemList","currentNavigation","_updateMattressMatcherBannerWithUrlOnly","mattressMatcherBannerID","subMenu","navMenuItem","_navMenuItem$clpLink","_navMenuItem$clpLink2","destinationURL","clpLink","destinationUrl","linkURL","toCheckURL","_parseLink","pathname","_updateMattressMatcherBannerSlot","slots","moduleIds","splittedIDs","k","matcherBannerSlotInd","lastBannerID","_updateMattressMatcherBanner","bannerIDs","_getCategoryBanner","flag","navMenuState","categoryBanner","navMenuSelectedMenu","categoryBannerIndex","showCategoryBanner","_getActivePrice","listPageState","activeProducts","productRecIds","prod","_prod$AttributeValues","lowestVariantId","MasterProductId","projectDomain","ChannelId","channelId","CatalogId","affliations","customerInput","GetCustomerInput","customer","getCustomer","CustomerAffiliations","affliation","aff","AffiliationId","RetailAffiliationId","CustomerId","AccountNumber","getActivePricesAsync","queryResultSettings","activePricesResponse","productPrices","prodVariantId","_prod$AttributeValues2","activePrice","price","_activePrice$Customer","CustomerContextualPrice","TradeAgreementPrice","AdjustedPrice","exception","debug","Error","_getActivePriceByProducts","_prod$AttributeValues3","_prod$AttributeValues4","_activePrice$Customer2","_getSearchResultModal","_this$props$data$list","modalIsOpen","totalProductCount","_modalToggleRef","_getChoiceSummary","_toggleModal","_getCollectionTitle","_this$props$data$seoD","seoDataEntry","seoTitle","pageName","telemetryPageName","collectionTitle","productCountNumber","productCountText","count","numberOfProducts","oneProduct","TitleContainer","searchPageTitle","titlePrefix","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","tag","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","sortByDropDown","sortByDropdownLabel","dropdownClassname","_updateSortByDropdown","_sortAndFilterContainerRef","_getProductInfo","_this$props$context$r2","GetFullProductsByCollectionInput","Paging","Top","itemsPerPage","Skip","pageSize","infiniteScrollPage","Sorting","sortingCritera","activeFilters","itemId","includeAttributes","getProducts","actionResponse","currentProducts","returnedProducts","infiniteProducts","addedProducts","concat","_getPagination","fullUrl","getCurrentUrl","skipCount","currentPageNumber","skip","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","previousAriaLabel","nextAriaLabel","_getRefineMenu","_config$defaultOpenRe","_this$props2","tempRangeTypeTODO","inputRange","validRefiners","refiners","sizeRefinerArr","_refiner$KeyName","_refiner$Values","obj","_obj$LeftValueBoundSt","isPriceRefinerHide","isAnySizeSelectedArr","_obj$LeftValueBoundSt2","activeRefiners","defaultOpenRefinersArray","selectedRefinersParentName","parentName","defaultOpenRefinements","determineExpanded","refinerNamesForInitialOpen","isSizeRefinementBooleanValue","refinementExcludeListString","refinementExcludeList","refinementExcludeListArr","refinementExcludeListNorm","slugArray","pathArray","urlPartsObject","slug","Slug","isSizeRefinement","BooleanValue","configVirtualRefinerNames","getSortedVirtualRefinerConfig","params","removeKeywords","path","categoryIdToken","recordId","_path","removedCategorySlug","decodeURIComponent","_slug","finalRefinerParts","flatten","RefineMenuContainer","RefinerSectionContainer","_productRefinerHierar","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","_getRefinerLimitToDisplay","refinerLabel","mfrmRefinerLabel","_this$props$config$de","selectedRefiners","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_customBuildRefinerUrlForChoiceSummary","notification","history","pushState","buildListPageUrl","_getSortColumnFromSelectedOption","options","sortedOptions","transaction","Columns","mappedConfiguration","sortCriteria","activeSortColumn","parseQueryParam","activeMappedConfig","mappedSearchConfig","dropdownOption","_this$props3","isRefinerRedirectEnabled","currentRefinement","activeVirtualFilters","_obj$LeftValueBoundSt3","allSizeRefinerValues","_removePriceAndVirtualRefiner","availableRefiners","_path2","_itemToggleNotificati","finalURL","_this$props$data$list2","_this$props$data$list3","newRefinementCriteria","_this$props4","_notification$choiceC","_notification$choiceC2","isCustomizeRefiner","dropdownElementId","dropdownElement","selectedChoice","_currentRefinementCri","_obj$LeftValueBoundSt4","virtualRefinersRecordId","_refiner$KeyName2","listPageUrl","_notification$choiceC3","_path3","_refiner$LeftValueBou3","_refiner$LeftValueBou4","_concatValue$split$jo2","isClearAll","_this$props5","_refiner$KeyName3","_selectedRefiner$Left","_path4","_refiner$LeftValueBou5","_refiner$LeftValueBou6","_concatValue$split$jo3","_updateViewport","pending","scrollHeightPrevValue","totalSkipProductsValue","allVirtualRefiners","showProductsLoader","itemsPerPageInitialState","virtualRefiners","minusVirtualRefiner","validationErrorNotNumber","validationErrorNotRange","getTelemetryObject","friendlyName","featureProduct","listPageStateFeature","nameTranslations","nameTranslation","ArrayExtensions","hasElements","Language","_this$props$data$prod","_extensionProperties$","_this$props$context$a2","_sizeRefinerObjArr$","extensionProperties","redirectUrl","querySorting","sorting","parse","reaction","_this$props$context$r4","getCollectionProducts","productResults","_this$props$context$a","enableAffiliationBasedPricing","user","isAuthenticated","_this$props$data$prod2","update","sizeRefinerObjArr","_refiner$KeyName4","_obj$LeftValueBoundSt5","virtualRefinersArr","refinerStrName","virtualRefinerObjArr","_refiner$KeyName5","virtualRefiner","_virtualRefiner$Value","_obj$LeftValueBoundSt6","currentSortedOption","componentDidUpdate","prevProps","_this$props$data$navM","_this$props$data$navM2","_this$state$sortedOpt","_prevState$sortedOpti","_this$state$sortedOpt2","_prevState$sortedOpti2","onpopstate","reload","menusData","_this$props$context$r5","_this$props$context$a3","_this$props$data$seoD2","_listPageState$result","_productCollection$re","_productCollection$re2","_this$props$data$list4","_this$props7","_this$props8","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","featureComponent","selectedFiltersCount","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","moduleProps","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","searchResultModal","errorMessage","categoryBannerInd","FeatureSearchContainer","similarLookProduct","getScrolledProducts","refinerRedirect","renderView","variant","VariantType","Browser","Viewport","filterCategoriesArr","filterItemsArr","filterCategories","Set","filterItems","priceRefiner","withoutVirtualRefiners","allVirtualRefinersValue","_obj$LeftValueBoundSt7","updatedRefinersArr","refinerValue","_currentRefinementCri2","selectedObj","_refiner$LeftValueBou7","_refinerValue$LeftVal","_updatedRefinersArr","observable","errorMsg","RichTextComponent","_categorySeoCopy","categorySEOTitle","categorySEODescription","seoState","description","getHtmlParserValue","dangerouslySetInnerHTML","__html","_getSEOMetaTags","isActiveRefiner","categoryPageKeywords","_getSEOMetaTagValue","content","name","keyValue","_props$data$category$3","_renderProductSearchResultItems","_props$data$listPageS","_props$config","_props$data$listPageS2","_props$data$listPageS3","breadCrumbType","breadcrumbType","newProducts","showLoader","productImpressionListName","_renderImageLoader","InfiniteScroll","dataLength","hasMore","scrollThreshold","loader","showBannerPosition","showBVRatings","createSearchResultModal","modalProps","refinerLoader","createModalBody","renderSort","renderRefiner","isRefinerLoading","totalSkeletonItems","banner","CustomSkeleton","type","skeletonItemsBeforeBanner","Array","fill","skeletonItemsAfterBanner","_","idx","Node","submenu","renderCategoryHierarchy","renderTitle","titleProps","_activeProducts$","_extProperties$find","_extProperties$find2","extProperties","fallBackQueryResult","originalBackQueryResult","renderErrorMessage","categoryPage","_resources$mfrmSearch","_resources$mfrmNoResu","collectionText","nsrText","mfrmSearchText","noResultsText","mfrmNoResultsText","getRichTextHtml","_props$data","_props$data2","_mfrmProducts","_mfrmProducts$","_mfrmProducts$2","_props$data$category$","_props$data$category$2","searchTips","mfrmProducts","tagsArr","Module","HtmlHeadInclude","MFRMErrorMessage","nsrpNeedAssistance","nsrpContainer","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","require","$type","da","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}