{"version":3,"file":"static/js/e580657ec97bae60b41f.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/actions/get-category-list.action.ts?3eec","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/base-collection-action.ts?b97d","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-full-products-by-collection.ts?a9e5","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-inventory-refiners.ts?d9ee","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-mapped-search-configuration.ts?6e69","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-product-refiner-hierarchy.ts?6258","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/get-refiners-for-collection.ts?3c59","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/actions/url-utils.ts?4658","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/list-page-state.ts?b1f9","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/utilities.ts?8bea","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/choice-summary.tsx?6a2f","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/error-message.tsx?4674","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/feature-search-result-item.tsx?1d7b","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/link.tsx?7dca","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/modal.tsx?784e","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/telemetryHelper.ts?a0bd","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/IncrementalQuantity.tsx?448f","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/product-collection-qty.tsx?626d","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/product-search-result-items.tsx?cb8c","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/range-refine-item.tsx?5c74","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-item.tsx?6e95","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/refine-submenu.tsx?095c","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/separator.tsx?38b9","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/components/title.tsx?c1cb","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.props.autogenerated.ts?d341","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.tsx?0acf","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.view.tsx?b226","webpack://Msdyn365.Commerce.Online/./src/themes/localy-theme/views/search-result-container.view.tsx?9502","webpack://Msdyn365.Commerce.Online/./lib/search-result-container/module-registration.js?8625","webpack://Msdyn365.Commerce.Online/./src/modules/fabrikam/views/search-result-container.view.tsx?89df","webpack://Msdyn365.Commerce.Online/./src/modules/search-result-container/search-result-container.view.tsx?b779","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/product.component.tsx?fd23","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/search-result-container.view.tsx?6e86","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { Category, retailAction } from '@msdyn365-commerce/retail-proxy';\nimport { createGetCategoriesInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CategoriesDataActions.g';\n\n/**\n * Get Org Unit Configuration Data Action\n */\nexport default createObservableDataAction({\n action: >retailAction,\n input: (context: ICreateActionContext) => {\n return createGetCategoriesInput({ Paging: { Top: 0 } }, context.requestContext.apiSettings.channelId);\n }\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { CacheType, getCatalogId, IActionInput, IAny, ICommerceApiSettings, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport {\n convertToString,\n ChannelInventoryConfiguration,\n IQueryResultSettings,\n ProductRefinerValue,\n SortColumn\n} from '@msdyn365-commerce/retail-proxy';\nimport { generateCacheKey, QueryResultSettingsProxy } from '@msdyn365-commerce-modules/retail-actions';\nimport { toJS } from 'mobx';\n\nimport { hydrateRefinersFromUrl } from './url-utils';\n\n/**\n * Export listPageType.\n */\nexport type listPageType = 'Category' | 'Search' | 'Unknown';\n\n/**\n * Get include attributes from config.\n * @param inputData - ICreateActionContext.\n * @returns Boolean.\n */\nfunction getIncludeAttributes(inputData: ICreateActionContext, IGeneric>): boolean {\n if (inputData && inputData.config && inputData.config.includeAttributes !== undefined && inputData.config.includeAttributes === true) {\n return true;\n }\n return false;\n}\n\n/**\n * Get updateRefinerPanel from config.\n * @param inputData - ICreateActionContext.\n * @returns Boolean.\n */\nfunction getUpdateRefinerPanel(inputData: ICreateActionContext, IGeneric>): boolean {\n return !!inputData.config?.updateRefinerPanel;\n}\n\n/**\n * BaseCollection Action Input.\n */\nexport class BaseCollectionInput implements IActionInput {\n public pageType: listPageType;\n\n public category: number | undefined;\n\n public searchText: string | undefined;\n\n public refiners: ProductRefinerValue[];\n\n public queryResultSettings: IQueryResultSettings;\n\n public apiSettings: ICommerceApiSettings;\n\n public includeAttributes: boolean | undefined;\n\n public locale?: string;\n\n public isUpdateRefinerPanel?: boolean;\n\n public catalogId?: number;\n\n public channelInventoryConfiguration?: ChannelInventoryConfiguration;\n\n public inventoryRefiner?: IProductRefinerHierarchy;\n\n public constructor(\n pageType: listPageType,\n apiSettings: ICommerceApiSettings,\n queryResultSettings: IQueryResultSettings,\n refiners: ProductRefinerValue[],\n category: number | undefined,\n searchText: string | undefined,\n includeAttributes: boolean | undefined,\n isUpdateRefinerPanel?: boolean | undefined,\n locale?: string,\n catalogId?: number,\n channelInventoryConfiguration?: ChannelInventoryConfiguration,\n inventoryRefiner?: IProductRefinerHierarchy\n ) {\n this.pageType = pageType;\n this.apiSettings = apiSettings;\n this.category = category;\n this.searchText = searchText;\n this.queryResultSettings = queryResultSettings;\n this.refiners = refiners;\n this.includeAttributes = includeAttributes;\n this.isUpdateRefinerPanel = isUpdateRefinerPanel;\n this.locale = locale;\n this.catalogId = catalogId ?? 0;\n this.channelInventoryConfiguration = channelInventoryConfiguration;\n this.inventoryRefiner = inventoryRefiner;\n }\n\n public getCacheKey = () => {\n const queryResultSettings = {\n ...this.queryResultSettings.Paging,\n ...toJS(this.queryResultSettings.Sorting)\n };\n\n const cacheKey = generateCacheKey(\n this.apiSettings,\n { key: 'PageType', value: this.pageType },\n { key: 'Category', value: this.category },\n { key: 'SearchText', value: this.searchText },\n { key: 'CatalogId', value: this.catalogId },\n {\n key: 'Refiners',\n value: this.refiners.map(\n refiner =>\n `RefinerRecordId:${refiner.RefinerRecordId}-LeftValueBoundString:${refiner.LeftValueBoundString ||\n ''}-RightValueBoundString:${refiner.RightValueBoundString || ''}`\n )\n },\n { key: 'QueryResultSettings', value: convertToString(queryResultSettings) },\n { key: 'Locale', value: this.locale }\n );\n return cacheKey;\n };\n\n public getCacheObjectType = () => 'CollectionActionResult';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n// TODO: Create a data model here or import one to capture the response of the action\nexport interface IGetFullProductsByCollectionData {\n text: string;\n}\n\nexport type CollectionClassConstructor = new (\n pageType: listPageType,\n apiSettings: ICommerceApiSettings,\n queryResultSettings: IQueryResultSettings,\n refiners: ProductRefinerValue[],\n category: number | undefined,\n searchText: string | undefined,\n includeAttributes: boolean | undefined,\n isUpdateRefinerPanel?: boolean | undefined,\n locale?: string,\n catalogId?: number,\n channelInventoryConfiguration?: ChannelInventoryConfiguration,\n inventoryRefiner?: IProductRefinerHierarchy\n) => BaseCollectionInput;\n\n/**\n * TODO: Use this function to create the input required to make the action call.\n * @param args\n * @param inputClassConstuctor\n */\nexport const createBaseCollectionInput = (\n args: ICreateActionContext,\n inputClassConstuctor: CollectionClassConstructor\n): BaseCollectionInput => {\n const pageType =\n args.requestContext.urlTokens.pageType === 'Category' || (args.requestContext.query && args.requestContext.query.categoryId)\n ? 'Category'\n : 'Search';\n\n const queryResultSettings = QueryResultSettingsProxy.fromInputData(args).QueryResultSettings;\n const queryRefiners = hydrateRefinersFromUrl(args.requestContext);\n const includeAttributes = getIncludeAttributes(args);\n const isUpdateRefinerPanel = getUpdateRefinerPanel(args);\n const catalogId = getCatalogId(args.requestContext);\n\n if (args.requestContext.query && args.requestContext.query.sorting) {\n queryResultSettings.Sorting = { Columns: JSON.parse(decodeURIComponent(args.requestContext.query.sorting)) };\n }\n\n const oos = addOOS();\n console.log('', oos);\n\n queryRefiners.push(oos[0]);\n console.log('always comes here', queryRefiners);\n\n if (pageType === 'Category') {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n +(args.requestContext.urlTokens.itemId || (args.requestContext.query && args.requestContext.query.categoryId) || 0),\n undefined,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.q) {\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n undefined,\n args.requestContext.query.q,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n } else if (pageType === 'Search' && args.requestContext.query && args.requestContext.query.recommendation) {\n let searchText = '';\n if (args.requestContext.query.productId) {\n searchText = JSON.stringify({\n ProductId: args.requestContext.query.productId,\n Recommendation: args.requestContext.query.recommendation\n });\n } else {\n searchText = JSON.stringify({ Recommendation: args.requestContext.query.recommendation });\n }\n return new inputClassConstuctor(\n pageType,\n args.requestContext.apiSettings,\n queryResultSettings,\n queryRefiners,\n undefined,\n searchText,\n includeAttributes,\n isUpdateRefinerPanel,\n args.requestContext.locale,\n catalogId\n );\n }\n\n function addOOS(): ProductRefinerValue[] {\n const compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n ];\n const compressedRefinerArray = [{ 0: 5, 1: 'Available', 2: 5637150588, 3: 1, 4: 'Available', 5: '' }];\n return compressedRefinerArray.map(compressedRefiner => {\n try {\n const parsedRefiner: ProductRefinerValue = {};\n compressedRefinerKeys.forEach((refinerKey: string | number, index: string | number) => {\n // eslint-disable-next-line security/detect-object-injection\n parsedRefiner[refinerKey] = compressedRefiner[index];\n });\n return parsedRefiner;\n } catch {\n return undefined;\n }\n });\n }\n throw new Error('[getFullProductsForCollection]Unable to create input');\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport {\n AsyncResult,\n ChannelInventoryConfiguration,\n ProductRefinerValue,\n ProductSearchCriteria,\n ProductSearchResult\n} from '@msdyn365-commerce/retail-proxy';\nimport { searchByCriteriaAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\nimport { getInventoryConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { ArrayExtensions, generateProductImageUrl, InventoryLevels } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\nimport getInventoryRefinerAction, { InventoryInStockRefinerValueInput } from './get-inventory-refiners';\n\n/**\n * GetFullProductsByCollection Action Input.\n */\nexport class GetFullProductsByCollectionInput extends BaseCollectionInput implements IActionInput {\n /**\n * The cache object type.\n * @returns The cache object type.\n */\n public getCacheObjectType = (): string => 'FullProductSearchResult';\n\n /**\n * The data cache type.\n * @returns The data cache type.\n */\n public dataCacheType = (): CacheType => {\n if (\n this.pageType !== 'Category' ||\n (this.refiners && this.refiners.length > 0) ||\n (this.queryResultSettings &&\n this.queryResultSettings.Sorting &&\n this.queryResultSettings.Sorting.Columns &&\n this.queryResultSettings.Sorting.Columns.length > 0)\n ) {\n return 'request';\n }\n return 'application';\n };\n}\n\n/**\n * This setting defines inventory filtering options.\n */\nexport enum ProductListInventoryFilteringOptions {\n /**\n * Filter out all products out of stock.\n */\n HideOOS = 'hideOOS',\n\n /**\n * Sort products by availability, OOS goes last.\n */\n SortOOS = 'sortOOS',\n\n /**\n * No filtering selected.\n */\n Default = 'default'\n}\n\n/**\n * The full product search result with count interface.\n */\nexport interface IFullProductsSearchResultsWithCount {\n products: ProductSearchResult[];\n count: number;\n channelInventoryConfigurationId?: number;\n inventoryAwareSortableAttributeId?: number;\n}\n\n/**\n * CreateInput function which creates and actionInput used to fetch products for a list page.\n * @param args - The API arguments.\n * @returns IActionInput - The action input.\n */\nconst createInput = (args: ICreateActionContext<{ itemsPerPage: number; includedAttributes: boolean | undefined }>): IActionInput => {\n const input = createBaseCollectionInput(args, GetFullProductsByCollectionInput);\n\n // Set Top\n if (input.queryResultSettings.Paging && args.config) {\n input.queryResultSettings.Paging.Top = args.config.itemsPerPage || 1;\n }\n\n // Set Skip\n if (input.queryResultSettings.Paging && args.requestContext.query && args.requestContext.query.skip) {\n input.queryResultSettings.Paging.Skip = +args.requestContext.query.skip;\n }\n\n input.queryResultSettings.count = true;\n\n return input;\n};\n\n/**\n * Returns inventory in stock refiner value.\n * @param input - The inventory refiner input.\n * @param context - The request context.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @returns Refiners.\n */\nasync function getInventoryInStockRefinerValueAsync(\n input: GetFullProductsByCollectionInput,\n context: IActionContext,\n channelInventoryConfiguration: ChannelInventoryConfiguration\n): Promise {\n let inventoryRefiner = input.inventoryRefiner;\n // For hydrate, the inventory refiner is not added on input parameter, need to query the inventory refiner\n // For reaction in browser, the inventory refiner is added in componentDidMount of search-result-container\n if (!inventoryRefiner) {\n const refinerInput = new InventoryInStockRefinerValueInput(input, channelInventoryConfiguration.InventoryProductAttributeRecordId);\n inventoryRefiner = await getInventoryRefinerAction(refinerInput, context);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- inventoryRefiner may be null\n return (\n inventoryRefiner?.Values.find(\n value =>\n value.LeftValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText &&\n value.RightValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\n ) ?? null\n );\n}\n\n/**\n * Returns list of products based on inventory information.\n * @param productSearchResults - The products.\n * @param context - The context.\n * @param metadataCount - The metadata count.\n * @param channelInventoryConfiguration - The channel inventory configuration.\n * @returns List of product based on the inventory information.\n */\nexport async function returnProducts(\n productSearchResults: ProductSearchResult[],\n context: IActionContext,\n metadataCount: number | undefined,\n channelInventoryConfiguration?: ChannelInventoryConfiguration\n): Promise {\n const defaultProductCount: number = 0;\n\n const productSearchResultsWithImages = productSearchResults.map(productSearchResult => {\n const newImageUrl = generateProductImageUrl(productSearchResult, context.requestContext.apiSettings);\n\n if (newImageUrl) {\n productSearchResult.PrimaryImageUrl = newImageUrl;\n }\n\n return productSearchResult;\n });\n\n // If inventory level is threshold or inventory check is disabled then return the list of products without the inventory configuration\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n if (\n context.requestContext.app.config.inventoryLevel === InventoryLevels.threshold ||\n context.requestContext.app.config.enableStockCheck === false\n ) {\n return {\n products: productSearchResultsWithImages,\n count: metadataCount ?? defaultProductCount\n };\n }\n\n const mappedProducts = productSearchResultsWithImages.map(productSearchResult => {\n if (ArrayExtensions.hasElements(productSearchResult.AttributeValues)) {\n for (const element of productSearchResult.AttributeValues) {\n if (\n channelInventoryConfiguration &&\n element.RecordId !== undefined &&\n element.RecordId === channelInventoryConfiguration.InventoryProductAttributeRecordId &&\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- read config file.\n context.requestContext.app.config.inventoryRanges !== 'all' &&\n element.TextValue !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\n ) {\n // If same RecordId then it means that is the Inventory attribute\n // Based on the inventory range (and filtering options), the inventory label will be displayed\n // If Inventory range is 'All' then in stock and out of stock labels are shown, else only OOS\n // if the text value is different that the channelInventoryConfiguration.InventoryOutOfStockAttributeValueText then is in stock\n element.TextValue = '';\n }\n }\n }\n\n return productSearchResult;\n });\n\n return {\n products: mappedProducts,\n count: metadataCount ?? defaultProductCount,\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check config.\n channelInventoryConfigurationId: channelInventoryConfiguration\n ? channelInventoryConfiguration.InventoryProductAttributeRecordId\n : undefined,\n inventoryAwareSortableAttributeId: channelInventoryConfiguration\n ? channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId\n : undefined\n };\n}\n\n/**\n * Action function to fetch products for a list page.\n * @param input - The input.\n * @param context - The context.\n * @returns IFullProductsSearchResultsWithCount - The full product search result with count.\n */\n// eslint-disable-next-line complexity -- ignore the complexity.\nasync function action(input: GetFullProductsByCollectionInput, context: IActionContext): Promise {\n let promise: AsyncResult;\n let channelInventoryConfigurationPromise: AsyncResult;\n let searchProductId;\n const searchCriteriaInput: ProductSearchCriteria = {};\n searchCriteriaInput.Context = { ChannelId: context.requestContext.apiSettings.channelId, CatalogId: input.catalogId };\n searchCriteriaInput.Refinement = input.refiners;\n searchCriteriaInput.IncludeAttributes = input.includeAttributes;\n searchCriteriaInput.SkipVariantExpansion = true;\n const defaultNumber: number = 0;\n console.log(' input.refiners : ', input.refiners);\n\n if (input.channelInventoryConfiguration) {\n channelInventoryConfigurationPromise = AsyncResult.resolve(input.channelInventoryConfiguration);\n } else {\n channelInventoryConfigurationPromise = getInventoryConfigurationAsync({ callerContext: context });\n }\n const channelInventoryConfiguration = await channelInventoryConfigurationPromise;\n\n if (context.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const inventoryInStockRefinerValue = await getInventoryInStockRefinerValueAsync(input, context, channelInventoryConfiguration);\n\n const isInventoryInStockRefinerValueExist = searchCriteriaInput.Refinement.some(\n refiner => refiner.RefinerRecordId === inventoryInStockRefinerValue?.RefinerRecordId\n );\n if (!isInventoryInStockRefinerValueExist && inventoryInStockRefinerValue) {\n searchCriteriaInput.Refinement.push(inventoryInStockRefinerValue);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (\n context.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.SortOOS &&\n channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId\n ) {\n input.queryResultSettings.Sorting = input.queryResultSettings.Sorting ?? {};\n input.queryResultSettings.Sorting.Columns = input.queryResultSettings.Sorting.Columns ?? [];\n const sortColumnName = `Attr_${channelInventoryConfiguration.ProductAvailabilitySortableAttributeRecordId}`;\n const isSortAttributeExist = input.queryResultSettings.Sorting.Columns.some(column => column.ColumnName === sortColumnName);\n if (!isSortAttributeExist) {\n input.queryResultSettings.Sorting.Columns.push({\n ColumnName: sortColumnName,\n IsDescending: true\n });\n }\n }\n\n if (input.pageType === 'Category' || context.requestContext.query?.categoryId) {\n if (input.category) {\n searchCriteriaInput.CategoryIds = [input.category || defaultNumber];\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n } else {\n throw new Error('[GetFullProductsForCollection]Category Page Detected, but no global categoryId found');\n }\n } else if (input.searchText && context.requestContext.query?.q) {\n searchCriteriaInput.SearchCondition = input.searchText;\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n } else if (input.searchText && context.requestContext.query && context.requestContext.query.recommendation) {\n const searchObject = JSON.parse(input.searchText);\n if (context.requestContext.query.productId) {\n searchProductId = Number(searchObject.ProductId);\n }\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else if (\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Existing code\n !searchObject.Recommendation\n ) {\n throw new Error('Failed to retrieve the Recommendation.');\n } else {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Existing code\n searchCriteriaInput.RecommendationListId = searchObject.Recommendation;\n if (searchProductId) {\n searchCriteriaInput.Ids = [searchProductId || defaultNumber];\n }\n promise = searchByCriteriaAsync(\n {\n callerContext: context,\n queryResultSettings: input.queryResultSettings\n },\n searchCriteriaInput\n );\n }\n } else {\n throw new Error('[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found');\n }\n\n const productSearchResults = await promise;\n return returnProducts(productSearchResults, context, promise.metadata.count, channelInventoryConfiguration);\n}\n\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-full-products-by-collection',\n action: action as IAction,\n input: createInput\n});\n\nexport default actionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { CacheType, createObservableDataAction, IAction, IActionContext, IActionInput } from '@msdyn365-commerce/core';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { BaseCollectionInput } from './base-collection-action';\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\n\n/**\n * InventoryInStockRefinerValue Input action.\n */\nexport class InventoryInStockRefinerValueInput extends BaseCollectionInput implements IActionInput {\n public inventoryProductAttributeRecordId: number;\n\n public constructor(input: BaseCollectionInput, inventoryProductAttributeRecordId: number = 0) {\n super(\n input.pageType,\n input.apiSettings,\n {\n count: true\n },\n\n // Parameter - refiners\n [],\n\n // Parameter - category\n undefined,\n\n // Parameter - searchText\n '',\n\n // Parameter - includeAttributes\n false,\n\n // Parameter - isUpdateRefinerPanel\n false,\n\n // Parameter - locale\n undefined,\n input.catalogId,\n input.channelInventoryConfiguration,\n input.inventoryRefiner\n );\n\n this.inventoryProductAttributeRecordId =\n inventoryProductAttributeRecordId || input.channelInventoryConfiguration?.InventoryProductAttributeRecordId || 0;\n }\n\n /**\n * GetCacheKey.\n * @returns - Returns string.\n */\n public getCacheKey = (): string => buildCacheKey('RefinerList', this.apiSettings);\n\n /**\n * GetCacheObjectType.\n * @returns - Returns string.\n */\n public getCacheObjectType = (): string => 'RefinerList';\n\n /**\n * DataCacheType.\n * @returns - CacheType string.\n */\n public dataCacheType = (): CacheType => 'application';\n}\n\n/**\n * Action method returns inventory in stock refiners.\n * @param input - InventoryInStockRefinerValueInput.\n * @param context - IActionContext.\n * @returns - Promise.\n */\nasync function action(input: InventoryInStockRefinerValueInput, context: IActionContext): Promise {\n const refiners = await getProductRefinerHierarchy(\n {\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n }\n },\n input.queryResultSettings,\n context\n );\n\n // InventoryProductAttributeRecordId may be 0, and recId of default refiner Category/Price/Rating is always 0 by design. In this case, we should not return refiner\n // Why recId of default refiner Category/Price/Rating is 0: see GetChannelProductRefiners.sql\n return (\n (input.channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiners.find(refiner => refiner.RecordId === input.channelInventoryConfiguration?.InventoryProductAttributeRecordId)) ||\n // keep legacy logic to avoid break existing customers usage from this file\n (input.inventoryProductAttributeRecordId !== 0 &&\n refiners.find(refiner => refiner.RecordId === input.inventoryProductAttributeRecordId)) ||\n null\n );\n}\n\n/**\n * Action.\n * @param id - Id.\n * @param action - Action.\n * @returns - Results.\n */\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-inventory-refiners',\n action: action as IAction\n});\n\nexport default actionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { SortColumn } from '@msdyn365-commerce/retail-proxy';\nimport { getSearchConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport { buildCacheKey } from '@msdyn365-commerce-modules/retail-actions';\n\n// TODO: import from commerce entities when available\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name change will require many modifications\ninterface SearchConfiguration {\n ProductSortColumns?: SortColumn[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Name change will require many modifications\nexport interface MappedSearchConfiguration {\n key: string;\n sortColumn: SortColumn;\n}\n\nexport const sortOptions = {\n sortByOptionRelevanceDesc: 'Ranking-Desc',\n sortByOptionRatingAsc: 'AverageRating-Asc',\n sortByOptionRatingDesc: 'AverageRating-Desc',\n sortByOptionNameAsc: 'Name-Asc',\n sortByOptionNameDesc: 'Name-Desc',\n sortByOptionPriceAsc: 'Price-Asc',\n sortByOptionPriceDesc: 'Price-Desc',\n sortByOptionBestSelling: 'BestSelling',\n sortByOptionNewScore: 'NewScore',\n sortByOptionTrendingScore: 'TrendingScore'\n};\n\n/**\n * ActionInput class for the get-mapped-search-configuration Data Action.\n */\nexport class MappedSearchInput implements IActionInput {\n private readonly apiSettings: ICommerceApiSettings;\n\n constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n public getCacheKey = () => buildCacheKey('MappedSearchInput', this.apiSettings);\n\n public getCacheObjectType = () => 'MappedSearchInput';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Get a mapped search configuration that is easy to use for sorting.\n * @param input\n * @param ctx\n */\nexport async function getMappedSearchConfiguration(input: MappedSearchInput, ctx: IActionContext): Promise {\n return getSearchConfigurationAsync({ callerContext: ctx }).then((searchConfiguration: SearchConfiguration) => {\n return (searchConfiguration.ProductSortColumns || [])\n .map((sortColumn: SortColumn) => {\n let key = '';\n if (sortColumn.ColumnName) {\n switch (sortColumn.ColumnName.toUpperCase()) {\n case 'NAME':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionNameDesc : sortOptions.sortByOptionNameAsc;\n break;\n case 'PRICE':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionPriceDesc : sortOptions.sortByOptionPriceAsc;\n break;\n case 'AVERAGERATING':\n key = sortColumn.IsDescending ? sortOptions.sortByOptionRatingDesc : sortOptions.sortByOptionRatingAsc;\n break;\n case 'RANKING':\n key = sortOptions.sortByOptionRelevanceDesc;\n break;\n case 'BESTSELLINGSCORE':\n key = sortOptions.sortByOptionBestSelling;\n break;\n case 'NEWSCORE':\n key = sortOptions.sortByOptionNewScore;\n break;\n case 'TRENDINGSCORE':\n key = sortOptions.sortByOptionTrendingScore;\n break;\n default:\n }\n } else {\n ctx.telemetry.warning('[get-mapped-search-configuration] unknown search option');\n }\n if (key) {\n return {\n key,\n sortColumn\n };\n }\n return undefined;\n })\n .filter(Boolean);\n });\n}\n\nexport const createInput = (inputData: ICreateActionContext>): IActionInput => {\n return new MappedSearchInput(inputData.requestContext.apiSettings);\n};\n\nexport const getMappedSearchConfigurationDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-mapped-search-configuration',\n action: >getMappedSearchConfiguration,\n input: createInput\n});\n\nexport default getMappedSearchConfigurationDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { IQueryResultSettings, ProductRefiner, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\n/**\n * Uses Bulk refiner API to get refiners and child refiner values.\n * @param searchCriteria Product search criteria.\n * @param maxItems Max items.\n * @param queryResultSettings\n * @param ctx Action context.\n */\nexport async function getProductRefinerHierarchy(\n searchCriteria: ProductSearchCriteria,\n queryResultSettings: IQueryResultSettings,\n ctx: IActionContext\n): Promise {\n return getProductSearchRefinersAsync({ callerContext: ctx, queryResultSettings }, searchCriteria).then(\n (productRefiners: ProductRefiner[]) => {\n if (!productRefiners) {\n ctx.trace('[getRefinersByCriteriaAction] returned no refiners');\n return [];\n }\n\n const result = (productRefiners || []).map((productRefiner: ProductRefiner) => productRefiner);\n\n if (result.length === 0) {\n ctx.trace('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\n return [];\n }\n\n return result;\n }\n );\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { createObservableDataAction, IAction, IActionContext, IActionInput, ICreateActionContext } from '@msdyn365-commerce/core';\nimport { AsyncResult, ChannelInventoryConfiguration, ProductRefinerValue, ProductSearchCriteria } from '@msdyn365-commerce/retail-proxy';\nimport { getInventoryConfigurationAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\n\nimport { BaseCollectionInput, createBaseCollectionInput } from './base-collection-action';\nimport { getProductRefinerHierarchy } from './get-product-refiner-hierarchy';\nimport { getInventoryRefinerAction, InventoryInStockRefinerValueInput, ProductListInventoryFilteringOptions } from '.';\n\n/**\n * Default Category/Product Id Values.\n */\nenum DefaultValues {\n defaultCategoryIdValue = 0,\n defaultProductIdValue = 0\n}\n\n/**\n * Refiners-by-Collection Input action.\n */\nexport class RefinersByCollectionInput extends BaseCollectionInput implements IActionInput {\n public getCacheObjectType = () => 'ProductRefiner';\n\n public dataCacheType = () => {\n if (\n this.pageType !== 'Category' ||\n (this.refiners && this.refiners.length > 0) ||\n (this.queryResultSettings &&\n this.queryResultSettings.Sorting &&\n this.queryResultSettings.Sorting.Columns &&\n this.queryResultSettings.Sorting.Columns.length > 0)\n ) {\n return 'request';\n }\n return 'application';\n };\n}\n\n/**\n * Create input method which creates an ActionInput for fetching list page refiners.\n * @param args\n */\nconst createInput = (args: ICreateActionContext): IActionInput => {\n return createBaseCollectionInput(args, RefinersByCollectionInput);\n};\n\n/**\n * Returns inventory in stock refiner value.\n * @param input - The inventory refiner input.\n * @param context - The request context.\n * @param channelInventoryConfiguration - The channelInventoryConfiguration.\n * @returns Refiners.\n */\nasync function getInventoryInStockRefinerValueAsync(\n input: RefinersByCollectionInput,\n context: IActionContext,\n channelInventoryConfiguration: ChannelInventoryConfiguration\n): Promise {\n let inventoryRefiner = input.inventoryRefiner;\n // For hydrate, the inventory refiner is not added on input parameter, need to query the inventory refiner\n // For reaction in browser, the inventory refiner is added in componentDidMount of search-result-container\n if (!inventoryRefiner) {\n const refinerInput = new InventoryInStockRefinerValueInput(input, channelInventoryConfiguration.InventoryProductAttributeRecordId);\n inventoryRefiner = await getInventoryRefinerAction(refinerInput, context);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- inventoryRefiner may be null\n return (\n inventoryRefiner?.Values.find(\n value =>\n value.LeftValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText &&\n value.RightValueBoundString !== channelInventoryConfiguration.InventoryOutOfStockAttributeValueText\n ) ?? null\n );\n}\n\n/**\n * Action method which fetches refiners for the given list page.\n * @param input\n * @param context\n */\nasync function action(input: RefinersByCollectionInput, context: IActionContext): Promise {\n let searchProductId;\n const refiners: ProductRefinerValue[] = input.refiners || [];\n\n if (context.requestContext.app.config?.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n let channelInventoryConfigurationPromise: AsyncResult;\n if (input.channelInventoryConfiguration) {\n channelInventoryConfigurationPromise = AsyncResult.resolve(input.channelInventoryConfiguration);\n } else {\n channelInventoryConfigurationPromise = getInventoryConfigurationAsync({ callerContext: context });\n }\n const channelInventoryConfiguration = await channelInventoryConfigurationPromise;\n const inventoryInStockRefinerValue = await getInventoryInStockRefinerValueAsync(input, context, channelInventoryConfiguration);\n\n const isInventoryInStockRefinerValueExist = refiners.some(\n refiner => refiner.RefinerRecordId === inventoryInStockRefinerValue?.RefinerRecordId\n );\n if (!isInventoryInStockRefinerValueExist && inventoryInStockRefinerValue) {\n refiners.push(inventoryInStockRefinerValue);\n }\n }\n\n if (input.pageType === 'Category') {\n if (input.category) {\n return getProductRefinerHierarchy(\n {\n CategoryIds: [input.category || DefaultValues.defaultCategoryIdValue],\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n },\n Refinement: input.isUpdateRefinerPanel ? refiners : []\n },\n input.queryResultSettings,\n context\n );\n }\n throw new Error('[GetRefinersForCollection]Category Page Detected, but no global categoryId found');\n } else {\n if (input.searchText && context.requestContext.query && context.requestContext.query.q) {\n return getProductRefinerHierarchy(\n {\n SearchCondition: input.searchText,\n Context: {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n },\n Refinement: input.isUpdateRefinerPanel ? refiners : []\n },\n input.queryResultSettings,\n context\n );\n }\n if (input.searchText && context.requestContext.query && context.requestContext.query.recommendation) {\n const searchObject = JSON.parse(input.searchText);\n if (context.requestContext.query.productId) {\n searchProductId = Number(searchObject.ProductId);\n }\n if (Number.isNaN(searchProductId)) {\n throw new Error('Failed to cast search product id into a number.');\n } else if (!searchObject.Recommendation) {\n throw new Error('Failed to retrieve the Recommendation.');\n } else {\n const searchCriteriaInput: ProductSearchCriteria = {};\n searchCriteriaInput.Context = {\n ChannelId: input.apiSettings.channelId,\n CatalogId: input.catalogId\n };\n searchCriteriaInput.Refinement = input.isUpdateRefinerPanel ? refiners : [];\n searchCriteriaInput.RecommendationListId = searchObject.Recommendation;\n if (searchProductId) {\n searchCriteriaInput.Ids = [searchProductId || DefaultValues.defaultProductIdValue];\n }\n return getProductRefinerHierarchy(searchCriteriaInput, input.queryResultSettings, context);\n }\n } else {\n throw new Error('[GetFullProductsForCollection]Search Page Detected, but no q= or productId= query parameter found');\n }\n }\n}\n\nexport const actionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/search-result-container/get-refiners-for-collection',\n action: >action,\n input: createInput\n});\n\nexport default actionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport MsDyn365, { IRequestContext } from '@msdyn365-commerce/core';\nimport { ProductRefinerValue, SortColumn } from '@msdyn365-commerce/retail-proxy';\n\n/**\n * Refiner Compression:\n * Refiners contains a non-trivial amount of data that is required to successfully make\n * a refiner-based API call. To allow for deep-linking of refiners in the URL, refiner data\n * must be compressed so that URL max length is not exceeded. Refiners will be compressed into\n * the following array style index-based format:\n * [DataTypeValue, LeftValueBoundString, RefinerRecordId, RefinerSourceValue, RightValueBoundString, UnitText].\n */\nconst compressedRefinerKeys = [\n 'DataTypeValue',\n 'LeftValueBoundString',\n 'RefinerRecordId',\n 'RefinerSourceValue',\n 'RightValueBoundString',\n 'UnitText'\n];\n\n/**\n * Hydrates compressed refiner data from URL.\n * @param fullUrl The full URL of the page.\n * @param requestContext\n */\nexport const hydrateRefinersFromUrl = (requestContext: IRequestContext): ProductRefinerValue[] => {\n const compressedRefinerArray = parseQueryParam<(string | number)[][]>('refiners', requestContext);\n if (!compressedRefinerArray || compressedRefinerArray.length === 0) {\n return [];\n }\n\n return compressedRefinerArray\n .map(compressedRefiner => {\n try {\n const parsedRefiner: ProductRefinerValue = {};\n compressedRefinerKeys.forEach((refinerKey, index) => {\n parsedRefiner[refinerKey] = compressedRefiner[index];\n });\n return parsedRefiner;\n } catch {\n return undefined;\n }\n })\n .filter(Boolean);\n};\n\n/**\n * Compressed a list of refiners for use in URLs.\n * @param refiners The uncompressed refiners.\n */\nexport const compressRefiners = (refiners: ProductRefinerValue[]) => {\n const compressedRefiners: (string | number)[][] = [];\n\n refiners.forEach(refiner => {\n const compressedRefiner: (string | number)[] = [];\n compressedRefinerKeys.forEach(refinerKey => {\n compressedRefiner.push(refiner[refinerKey]);\n });\n compressedRefiners.push(compressedRefiner);\n });\n\n return compressedRefiners;\n};\n\n/**\n * Method which creates a URL contiaining serialized active refiners.\n * @param fullUrl The Current URL of the page.\n * @param refiners The refiners which should be added to the URL.\n * @param sortingColumns\n * @param skipCount\n */\nexport const buildListPageUrl = (fullUrl: URL, refiners?: ProductRefinerValue[], sortingColumns?: SortColumn[], skipCount?: number) => {\n // Refiner Change flow\n if (refiners !== undefined) {\n if (refiners.length === 0) {\n fullUrl.searchParams.delete('refiners');\n } else {\n const sortedRefiners = refiners.sort((first, second) =>\n first.RefinerRecordId && second.RefinerRecordId && first.RefinerRecordId > second.RefinerRecordId ? 1 : -1\n );\n fullUrl.searchParams.set('refiners', JSON.stringify(compressRefiners(sortedRefiners)));\n }\n\n // Adding or removing a refiner means we want to always load page 1\n fullUrl.searchParams.delete('skip');\n return fullUrl.href;\n }\n\n if (sortingColumns !== undefined) {\n if (sortingColumns.length === 0) {\n fullUrl.searchParams.delete('sorting');\n } else {\n fullUrl.searchParams.set('sorting', JSON.stringify(sortingColumns));\n }\n\n // Changing the sort means always load page 1\n fullUrl.searchParams.delete('skip');\n return fullUrl.href;\n }\n\n if (skipCount) {\n fullUrl.searchParams.set('skip', skipCount.toString());\n }\n\n return fullUrl.href;\n};\n\n/**\n * Parses a query param from the query object of the request context.\n * @param key The query parameter key.\n * @param requestContext The request context.\n */\nexport const parseQueryParam = (key: string, requestContext: IRequestContext): T | null => {\n if (requestContext.query && requestContext.query[key]) {\n return JSON.parse(decodeURIComponent(requestContext.query[key]));\n }\n return null;\n};\n\n/**\n * Gets the current URL of the page from the request context.\n * @param requestContext The request context.\n */\nexport const getCurrentUrl = (requestContext: IRequestContext): URL => {\n if (MsDyn365.isBrowser) {\n return new URL(window.location.href);\n }\n\n // NOTE: Typing on requestURL is incorrect\n if (requestContext.url.requestUrl.href) {\n return new URL(requestContext.url.requestUrl.href);\n }\n return new URL((requestContext.url.requestUrl));\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { ProductPrice, ProductRefinerValue, ProductSearchResult, SimpleProduct, SortingInfo } from '@msdyn365-commerce/retail-proxy';\nimport { observable } from 'mobx';\n\nimport { listPageType } from './actions';\n\n/**\n * ListPageState class.\n */\nexport class ListPageState {\n @observable public activeFilters: ProductRefinerValue[] | null = null;\n\n @observable public activeProducts: ProductSearchResult[] = [];\n\n @observable public sortingCritera: SortingInfo | null = null;\n\n @observable public currentPageNumber: number | null = null;\n\n @observable public refiners: IProductRefinerHierarchy[] | null = null;\n\n @observable public totalProductCount: number | undefined;\n\n @observable public pageSize: number = 10;\n\n @observable public pageType: listPageType = 'Unknown';\n\n @observable public featureProduct: SimpleProduct | null = null;\n\n @observable public productPrices: ProductPrice[] | undefined = [];\n}\n\n/**\n * ListPageStateInput - action input.\n */\nexport class ListPageStateInput implements IActionInput {\n public getCacheKey = () => 'ListPageState';\n\n public getCacheObjectType = () => 'ListPageState';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\nexport async function listPageStateAction(input: ListPageStateInput, ctx: IActionContext): Promise {\n return new ListPageState();\n}\n\n/**\n * Create new input for create action.\n * @param inputData\n */\nexport const createListPageInput = (inputData: ICreateActionContext>): IActionInput => {\n return new ListPageStateInput();\n};\n\n/**\n * ListPageState - create action.\n */\nexport default createObservableDataAction({\n action: >listPageStateAction,\n input: createListPageInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { ITelemetry } from '@msdyn365-commerce/core';\nimport { AttributeDataType, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\n\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * Types of product refiner values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerValueDataTypeValue {\n /**\n * Range slider is used for selections like price.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Range = 1,\n\n /**\n * Range input is a different way to specify ranges and can be expressed with input boxes\n * as well as a set of discrete single-select type values.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n RangeInput = 4,\n\n /**\n * This is a discrete list item, either multi-select or single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n List = 5,\n\n /**\n * Boolean types allows only single-select.\n * @deprecated This will be removed soon. Please, use `AttributeDataType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { AttributeDataType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Boolean = 6\n}\n\n/**\n * Types of product refiners.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerTypeValue {\n /**\n * Refiner values are single-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Single = 0,\n\n /**\n * Refiner values are multi-select.\n * @deprecated This will be removed soon. Please, use `RefinerType` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { RefinerType } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Multi = 1\n}\n\n/**\n * ProductRefinerSource enum type.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\nexport enum ProductRefinerSource {\n /**\n * The None member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n None = 0,\n\n /**\n * The Attribute member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Attribute = 1,\n\n /**\n * The Category member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Category = 2,\n\n /**\n * The Price member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Price = 3,\n\n /**\n * The Rating member.\n * @deprecated This will be removed soon. Please, use `ProductRefinerSource` from `@msdyn365-commerce/retail-proxy` instead.\n * @example\n * ```\n * import { ProductRefinerSource } from `@msdyn365-commerce/retail-proxy`;\n * ```\n */\n Rating = 4\n}\n\n/**\n * Checks if the data type value corresponds to a slider.\n * @param dataTypeValue\n */\nexport function isRangeType(dataTypeValue: number | undefined): boolean {\n return (\n dataTypeValue === AttributeDataType.Currency ||\n dataTypeValue === AttributeDataType.Decimal ||\n dataTypeValue === AttributeDataType.Integer\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n */\nexport function findMatchingRefinementCriterion(\n productRefinerValue: ProductRefinerValue,\n refinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue | undefined {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return refinementCriteria.find((refinementCriterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(productRefinerValue, refinementCriterion)\n );\n}\n\n/**\n * Find the refinement criterion associated with this product refiner value.\n * @param productRefinerValue Product refiner value to match.\n * @param refinementCriteria Selected refinement criteria.\n * @param refinementCriterion\n */\nexport function isMatchingRefinementCriterion(productRefinerValue: ProductRefinerValue, refinementCriterion: ProductRefinerValue): boolean {\n // If the value is a range, then match only on data type value; otherwise match on item string\n return (\n refinementCriterion.RefinerRecordId === productRefinerValue.RefinerRecordId &&\n refinementCriterion.RefinerSourceValue === productRefinerValue.RefinerSourceValue &&\n refinementCriterion.DataTypeValue === productRefinerValue.DataTypeValue &&\n (isRangeType(refinementCriterion.DataTypeValue) ||\n refinementCriterion.LeftValueBoundString === productRefinerValue.LeftValueBoundString)\n );\n}\n\nexport function getUpdatedRefinementCriteria(\n itemToggleNotification: IRefineItemToggleNotification,\n currentRefinementCriteria: ProductRefinerValue[]\n): ProductRefinerValue[] {\n const updatedRefinementCriteria: ProductRefinerValue[] = [];\n let toggledItemFound = false;\n currentRefinementCriteria.forEach((selectedCriterion: ProductRefinerValue) => {\n if (isMatchingRefinementCriterion(itemToggleNotification.productRefinerValue, selectedCriterion)) {\n toggledItemFound = true;\n if (itemToggleNotification.isSelecting) {\n const next = {\n ...selectedCriterion,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n selectedCriterion.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n selectedCriterion.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n } // Else the item is being de-selected, so omit it from the refinement criteria\n } else {\n // Keep existing criterion because it is not in the item toggle notification\n updatedRefinementCriteria.push(selectedCriterion);\n }\n });\n\n if (!toggledItemFound) {\n const next = {\n ...itemToggleNotification.productRefinerValue,\n LeftValueBoundString:\n (itemToggleNotification.rangeStart !== undefined && `${itemToggleNotification.rangeStart}`) ||\n itemToggleNotification.productRefinerValue.LeftValueBoundString,\n RightValueBoundString:\n (itemToggleNotification.rangeEnd !== undefined && `${itemToggleNotification.rangeEnd}`) ||\n itemToggleNotification.productRefinerValue.RightValueBoundString\n };\n updatedRefinementCriteria.push(next);\n\n // If single select, then deselect any others in the parent refiner group\n if (\n (itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.Text ||\n itemToggleNotification.productRefinerValue.DataTypeValue === AttributeDataType.TrueFalse) &&\n itemToggleNotification.parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect\n ) {\n itemToggleNotification.parentProductRefinerHierarchy.Values.forEach((child: ProductRefinerValue) => {\n if (child.RefinerRecordId === next.RefinerRecordId && child.LeftValueBoundString === next.LeftValueBoundString) {\n // Do nothing\n } else {\n const matchingIndex = updatedRefinementCriteria.findIndex((criterion: ProductRefinerValue) =>\n isMatchingRefinementCriterion(child, criterion)\n );\n if (matchingIndex > -1) {\n updatedRefinementCriteria.splice(matchingIndex, 1);\n }\n }\n });\n }\n }\n\n return updatedRefinementCriteria;\n}\n\nexport function formatPrice(\n amount: string | undefined,\n currency: string | undefined,\n locale: string | undefined,\n telemetry: ITelemetry\n): string {\n if (!amount || !currency) {\n telemetry.trace(`[refine-menu.utilities.formatPrice] could not format price for ${amount} ${currency}`);\n return amount || '';\n }\n const priceAmount = (amount && Number(amount)) || 0;\n let result: string;\n\n try {\n result = new Intl.NumberFormat(locale, {\n style: 'currency',\n currencyDisplay: 'symbol',\n currency,\n minimumFractionDigits: 0\n }).format(priceAmount);\n } catch (error) {\n result = `${priceAmount} ${currency}`;\n telemetry.warning(`[refine-menu.utilities.formatPrice] Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ProductListInventoryFilteringOptions } from '../actions';\nimport { IChoiceSummaryProps } from './choice-summary.props';\nimport { isMatchingRefinementCriterion, isRangeType } from './utilities';\n\ninterface IRefinerMap {\n key: string;\n value: ProductRefinerValue;\n}\n\n/**\n * ChoiceSummary component.\n */\n@observer\nexport default class ChoiceSummary extends React.PureComponent {\n private readonly closeButtonGlyph: string = 'msi-close-btn';\n\n private readonly payLoad: IPayLoad;\n\n @computed get selectedRefinersMap(): IRefinerMap[] {\n let { selectedChoices } = this.props;\n const { channelInventoryConfigurationId, refinerHierarchy } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n if (this.props.context?.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n selectedChoices = selectedChoices.filter(choice => {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, choice))\n );\n return parent && parent.RecordId !== channelInventoryConfigurationId;\n });\n }\n return selectedChoices.map((selectedRefiner: ProductRefinerValue, index) => {\n return {\n key: this._getKeyForRefinerValue(selectedRefiner, index.toString()),\n value: selectedRefiner\n } as IRefinerMap;\n });\n }\n\n constructor(props: Readonly) {\n super(props);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public render(): JSX.Element {\n const { clearAllText, label, classNames, choiceAriaLabel, closeAriaLabel } = this.props;\n const items = this.selectedRefinersMap;\n this.payLoad.contentAction.etext = clearAllText;\n const clearAllAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n return (\n
\n {items.length > 0 && label && {label}}\n
    \n {items.map((item: IRefinerMap) => {\n this.payLoad.contentAction.etext = item.key;\n const attribute = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n\n return (\n
  • \n \n {item.value.LeftValueBoundString && item.value.LeftValueBoundLocalizedString === ''\n ? item.value.LeftValueBoundString\n : (item.value.LeftValueBoundLocalizedString ||\n item.value.LeftValueBoundLocalizedString === undefined) &&\n item.value.RefinerRecordId === 0\n ? item.key\n : item.value.LeftValueBoundString}\n \n \n
  • \n );\n })}\n
\n {items.length > 0 && clearAllText && (\n \n {clearAllText}\n \n )}\n
\n );\n }\n\n private _getKeyForRefinerValue(productRefinerValue: ProductRefinerValue, index: string): string {\n const { choiceFormat, choiceRangeValueFormat, refinerHierarchy, telemetry, refinerValues } = this.props;\n const overallFormat = choiceFormat || '{1}';\n const rangeFormat = choiceRangeValueFormat;\n let refinerName = '';\n if (refinerHierarchy && refinerHierarchy.find) {\n const parent = refinerHierarchy.find(\n (hierarchy: IProductRefinerHierarchy) =>\n !!hierarchy.Values.find((value: ProductRefinerValue) => isMatchingRefinementCriterion(value, productRefinerValue))\n );\n\n if (!parent) {\n telemetry.warning('[choice-summary] could not find parent of selected refiner value');\n } else {\n refinerName = parent.KeyName || '';\n }\n }\n\n let refinerValueName: string;\n if (isRangeType(productRefinerValue.DataTypeValue)) {\n refinerValueName = rangeFormat\n .replace('{0}', this._formatPrice(productRefinerValue.LeftValueBoundString, productRefinerValue.UnitText))\n .replace('{1}', this._formatPrice(productRefinerValue.RightValueBoundString, productRefinerValue.UnitText));\n } else if (productRefinerValue.RefinerRecordId === 0) {\n const filterValue = refinerValues?.Values.find(\n refiner => refiner.LeftValueBoundString === productRefinerValue.LeftValueBoundString\n );\n refinerValueName = (filterValue ? filterValue.LeftValueBoundLocalizedString : productRefinerValue.LeftValueBoundString) || '';\n } else {\n refinerValueName = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n }\n\n if (refinerName === 'Rating' || refinerName === 'Price') {\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n }\n // if (refinerName === 'Price') {\n // return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}`);\n // }\n return overallFormat.replace('{0}', refinerName).replace('{1}', `${refinerValueName}_${refinerName}_${index}`);\n }\n\n private _formatPrice(amount: string | undefined, currency: string | undefined): string {\n if (!amount || !currency) {\n this.props.telemetry.trace('[choice-summary] could not format price');\n return amount || '';\n }\n let result = amount;\n\n try {\n result = this.props.context!.cultureFormatter.formatCurrency(Number(amount), currency);\n } catch (error) {\n this.props.telemetry.warning(`Failed to format price for ${result}: ${error}`);\n }\n\n return result;\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n e.stopPropagation();\n\n const target = e.currentTarget as HTMLElement;\n const clearAll = target.getAttribute('class')!.includes('choice-summary__clear-all');\n const selectedRefiner = clearAll ? undefined : this._getSelectedRefinerChoice(target);\n\n if (this.props.onChoiceClicked) {\n this.props.onChoiceClicked({\n clearAll,\n itemClicked: target,\n choiceClicked: selectedRefiner,\n nextItemToFocus: target.nextSibling as HTMLElement\n });\n }\n };\n\n private _getSelectedRefinerChoice(itemClicked: HTMLElement): ProductRefinerValue | undefined {\n const result = this.selectedRefinersMap.find(selected => itemClicked.id === selected.key);\n return (result && result.value) || undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface IErrorMessage {\n text?: string;\n}\n\nexport const ErrorMessage: React.FC = ({ text }) => {\n return (\n <>\n
\n \n \n \n \n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n \n \n\n \n \n\n \n \n \n \n \n\n {/*
{text}
*/}\n
No products found
\n
\n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { ICoreContext, IGridSettings, IImageData, IImageSettings, Image, IRequestContext } from '@msdyn365-commerce/core';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getFallbackImageUrl, getProductPageUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\n\n// Import { IComponent, IComponentProps, ICoreContext, IGridSettings, IImageData, IImageSettings, Image, msdyn365Commerce } from '@msdyn365-commerce/core';\n\ninterface IFeatureSearchResultItem {\n product: SimpleProduct | null;\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n telemetryContent?: ITelemetryContent;\n recommendation?: string;\n}\n\nexport const FeatureSearchResultItem: React.FC = ({\n product,\n context,\n imageSettings,\n resources,\n telemetryContent,\n recommendation\n}) => {\n if (product === null) {\n return null;\n }\n\n const productName = product.Name;\n const productRecordId = product && product.RecordId ? product.RecordId : 0;\n const productUrl = getProductPageUrlSync(product.Name || '', productRecordId, context && context.actionContext, undefined);\n const fallbackImage = getFallbackImageUrl(\n product.ItemId,\n context.actionContext.requestContext.apiSettings,\n context.request.app?.config?.OmniChannelMedia\n );\n const heading =\n recommendation && recommendation === 'descriptions' ? resources.featureSimilarDescriptionTitle : resources.featureSimilarLooksTitle;\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, productName!, productRecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n return (\n
\n \n
\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n product.PrimaryImageUrl,\n product.Name,\n fallbackImage,\n context.actionContext.requestContext\n )}\n
\n \n
\n

{heading}

\n {renderProductTitle(product?.Name)}\n
\n
\n );\n};\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n altText?: string,\n fallbackImage?: string,\n context?: IRequestContext\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : ''\n };\n const imageProps = {\n gridSettings,\n imageSettings,\n fallBackSrc: fallbackImage\n };\n return ;\n}\n\nfunction renderProductTitle(title?: string): JSX.Element | null {\n return

{title}

;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface ILink {\n className?: string;\n text?: string;\n href?: string;\n ariaLabel?: string;\n}\n\nexport const Link: React.FC = ({ text, className, href, ariaLabel }) => (\n \n {' '}\n {text}{' '}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Button, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ISearchResultModalViewProps {\n modal: React.ReactElement;\n modalHeader: React.ReactElement;\n modalFooter: React.ReactElement;\n modalBody: React.ReactElement;\n}\n\ninterface IModalToggleProps {\n innerRef: React.RefObject | undefined;\n id: string;\n text: string;\n ariaLabel: string;\n onClick(): void;\n}\n\nexport interface ISearchResultModalResources {\n modalTitle: string;\n modalCloseButtonText: string;\n}\n\nexport interface ISearchResultModalProps {\n resources: ISearchResultModalResources;\n isOpen: boolean;\n returnRef: React.RefObject | undefined;\n onModalToggle(): void;\n}\n\nexport const ModalToggle: React.FC = (props: IModalToggleProps) => {\n const { /*text,*/ onClick /*, ariaLabel, innerRef, id*/ } = props;\n return (\n <>\n
\n
\n
\n \n \n \n
Filter
\n
\n
\n {/*
\n
\n \n \n \n \n
Sort By
\n
\n
*/}\n {/* */}\n
\n \n );\n};\n\nexport const SearchResultModal = (props: ISearchResultModalProps): ISearchResultModalViewProps => {\n return {\n modal: modalNode(props),\n modalHeader: modalHeaderNode(props),\n modalFooter: modalFooterNode(props),\n modalBody: \n };\n};\n\nconst modalNode = (props: ISearchResultModalProps) => {\n return (\n \n );\n};\n\nconst modalHeaderNode = (props: ISearchResultModalProps) => {\n return {props.resources.modalTitle};\n};\n\nconst modalFooterNode = (props: ISearchResultModalProps) => {\n return (\n \n \n \n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IDictionary, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\n\nexport interface IContentAction {\n pgname: string;\n mname: string;\n etext?: string;\n recid?: string;\n etype?: string;\n}\n\nexport interface IPayLoad {\n contentCategory: string;\n contentAction: IContentAction;\n}\n\nexport interface ITelemetryContent {\n pageName: string;\n moduleName: string;\n telemetry?: ITelemetry;\n}\n\nexport enum TelemetryConstant {\n ShopSimliarLooks = 'shop similar looks',\n ShopSimliarDescription = 'shop similar description',\n PickupInStore = 'pick up in store',\n PreferredStore = 'set as preferred store',\n RemovePreferredStore = 'remove preferred store',\n IncrementQuantity = 'Increment quantity',\n DecrementQuantity = 'Decrement quantity',\n Checkout = 'Checkout',\n GuestCheckout = 'Guest checkout',\n BackToShopping = 'Back to shopping',\n ApplyPromoCode = 'Apply promo code',\n ViewMore = 'View more',\n OrderDetails = 'Order details',\n AvailablePoints = 'Available points',\n ExpiringPoints = 'Expiring points',\n AddUser = 'Add user',\n BuyItAgain = 'Buy it again',\n ContactNumber = 'ContactNumber',\n CheckoutChange = 'Change',\n Save = 'Save',\n SaveContinue = 'Save and Continue',\n Cancel = 'Cancel',\n DeliveryOptions = 'Delivery options',\n CheckoutTermsAndConditions = 'Checkout terms and conditions',\n ExpandAll = 'Expand all',\n CollapseAll = 'Collapse all',\n Expand = 'Expand',\n Collapse = 'Collapse',\n SignIn = 'Sign in',\n SignUp = 'Sign up',\n SignOut = 'Sign out',\n SwitchCustomer = 'Switch Customer',\n LoyaltyDetailLink = 'Loyalty detail ink',\n LoyaltyTermsLink = 'Loyalty terms link',\n LoyaltyTermsCancel = 'Loyalty terms cancel',\n LoyaltyTermsSubmit = 'Loyalty terms submit',\n LoyaltyTermsAgree = 'Loyalty terms agree',\n RemoveCartItem = 'Remove cart item',\n EditCart = 'Edit cart',\n BackToTop = 'Back to top',\n Logo = 'Logo',\n NavIcon = 'Navigation icon',\n ViewBagAndCheckout = 'View bag and checkout',\n ContinueShopping = 'Continue shopping',\n AddOrderTemplateToCart = 'Add order template to cart',\n PromoBannerClose = 'Close promo banner',\n WriteReview = 'Write Review',\n Next = 'Next',\n Previous = 'Previous',\n SubmitReview = 'Submit review',\n SuccessButton = 'Success',\n SearchStore = 'Search store',\n ShowAllStore = 'Show all store',\n ToggleMapView = 'Toggle map view',\n PrivacyPolicy = 'Privacy policy',\n ViewShoppingBag = 'View shopping bag',\n MyProfile = 'My profile',\n seeDetails = 'See Details'\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param pageName\n * @param {string} moduleName - Module Name.\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n * @param telemetry\n */\nexport function getTelemetryObject(pageName: string, moduleName: string, telemetry: ITelemetry): ITelemetryContent {\n const telemetryContent: ITelemetryContent = { pageName, moduleName, telemetry };\n return telemetryContent;\n}\n\n/**\n * Returns the payload Object.\n * @param {string} contentCategory - Content Category.\n * @param {IModule} props - Module props.\n * @param {string} moduleName - Module Name.\n * @param eventType\n * @param telemetryContent\n * @param {string} etext - Etext Name.\n * @param {string} recid - Recid Name.\n */\nexport function getPayloadObject(eventType: string, telemetryContent: ITelemetryContent, etext: string, recid?: string): IPayLoad {\n const pageName = telemetryContent && telemetryContent.pageName ? telemetryContent.pageName : '';\n const moduleName = telemetryContent && telemetryContent.moduleName ? telemetryContent.moduleName : '';\n const payload: IPayLoad = {\n contentCategory: eventType,\n contentAction: {\n pgname: pageName,\n mname: moduleName,\n etext,\n recid,\n etype: eventType\n }\n };\n return payload;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param telemetryContent\n * @param {IPayLoad} payLoad - Pay Load.\n */\nexport function getTelemetryAttributes(telemetryContent: ITelemetryContent, payLoad: IPayLoad): IDictionary | undefined {\n const contentData = payLoad.contentAction.recid ? payLoad.contentAction.recid : payLoad.contentAction.etext;\n const attributes: IDictionary | undefined =\n telemetryContent &&\n telemetryContent.telemetry &&\n telemetryContent.telemetry.setTelemetryAttribute &&\n telemetryContent.telemetry.setTelemetryAttribute(contentData!, payLoad.contentAction);\n return attributes;\n}\n\n/**\n * Returns the telemetry Attributes.\n * @param {IModule} props - Module Props.\n * @param {IPayLoad} payLoad - Pay Load.\n */\n\nexport const onTelemetryClick = (telemetryContent: ITelemetryContent, payLoad: IPayLoad, linkText: string) => () => {\n payLoad.contentAction.etext = linkText;\n if (telemetryContent && telemetryContent.telemetry) {\n telemetryContent.telemetry.logEvent(TelemetryEvent.Custom, payLoad);\n }\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContext } from '@msdyn365-commerce/core';\nimport { debounce } from 'lodash';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, TelemetryConstant } from './telemetryHelper';\nimport { IIncrementalQuantityProps } from './IncrementalQuantityProps';\n/**\n * IIncrementalQuantityState interface.\n */\ninterface IIncrementalQuantityState {\n currentInput: number;\n isUpdating: boolean;\n}\n\n/**\n * Quantity Component - This component is used to add or remove quantity.\n */\n@observer\nexport default class IncrementalQuantity extends React.PureComponent {\n public static defaultProps: Partial = {\n min: 1,\n decrementGlyphClass: 'fas fa-minus',\n incrementGlyphClass: 'fas fa-plus'\n };\n private readonly _minValue: number;\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly payLoad: IPayLoad;\n\n public static getDerivedStateFromProps(\n props: Readonly,\n state: IIncrementalQuantityState\n ): IIncrementalQuantityState {\n const nextState = { ...state };\n\n if (props.disabled && !state.isUpdating) {\n nextState.isUpdating = true;\n }\n\n if (!props.disabled && state.isUpdating) {\n nextState.currentInput = props.currentCount ?? 1;\n nextState.isUpdating = false;\n }\n return nextState;\n }\n constructor(props: IIncrementalQuantityProps) {\n super(props);\n this.state = { currentInput: props.currentCount ?? 1, isUpdating: false };\n this._onIncrement = this._onIncrement.bind(this);\n this._onDecrement = this._onDecrement.bind(this);\n this._removeITem = this._removeITem.bind(this);\n this._handleChange = this._handleChange.bind(this);\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n this._minValue = this.props.min ?? IncrementalQuantity.defaultProps.min!;\n }\n public render(): JSX.Element {\n const { min, max } = this.props;\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\n //const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\n const removeClassName: string = `fas fa-trash quantity__controls-glyph`;\n const decrementDisabled = this.state.currentInput <= (min ?? 1) || this.props.isGiftCard;\n const incrementDisabled = this.state.currentInput >= max || this.props.isGiftCard;\n const currentValue = this.state.currentInput;\n this.payLoad.contentAction.etext = TelemetryConstant.DecrementQuantity;\n const decrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.IncrementQuantity;\n const incrementAttributes = getTelemetryAttributes(this.props.telemetryContent!, this.payLoad);\n const ariaLablelText = `${this.props.inputQuantityAriaLabel ?? ''} ${this.state.currentInput}`;\n let extraClassDecrement = '';\n // @ts-ignore\n let iconClassName = glyphMinusClassName;\n if (decrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassDecrement = 'disabled';\n iconClassName = removeClassName;\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassDecrement = 'transition';\n iconClassName = removeClassName;\n }\n let extraClassIncrement = '';\n if (incrementDisabled) {\n // The quantity has reached its boundaries (max or min)\n extraClassIncrement = 'disabled';\n } else if (this.props.disabled) {\n // This.props.disabled shows if the state is not succeded yet\n extraClassIncrement = 'transition';\n }\n console.log(this.state.currentInput);\n let button = '';\n if (this.state.currentInput === 1) {\n // @ts-ignore\n } else {\n // @ts-ignore\n button = (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n return (\n <>\n {button}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n\n /**\n * It checks if its in mobile view or not.\n * @returns Boolean.\n */\n private readonly isMobileView = (): boolean => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Added gridsetting values.\n const context = {\n gridSettings: {\n xs: { w: 767 },\n sm: { w: 991 },\n md: { w: 1199 },\n lg: { w: 1599 },\n xl: { w: 1600 }\n }\n } as IRequestContext;\n\n const isMobileCheck = isMobile({ variant: VariantType.Browser, context });\n return isMobileCheck === 'xs' || isMobileCheck === 'sm';\n };\n\n private async _onIncrement(): Promise {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n\n if (currQuantity < this.props.max) {\n invokeCallback = true;\n updatedQuantity = currQuantity + 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this.props.max;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (await this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _removeITem(): void {\n this.setState({ currentInput: -1 });\n }\n\n private async _onDecrement(): Promise {\n let invokeCallback = false;\n const currQuantity = this.state.currentInput;\n let updatedQuantity: number;\n console.log(currQuantity);\n\n if (currQuantity >= this._minValue) {\n invokeCallback = true;\n updatedQuantity = currQuantity - 1;\n } else {\n invokeCallback = false;\n updatedQuantity = this._minValue;\n }\n\n if (invokeCallback && this.props.onChange) {\n if (await this.props.onChange(updatedQuantity)) {\n this.setState({ currentInput: updatedQuantity });\n }\n }\n }\n\n private _handleChange(e: React.ChangeEvent): void {\n let currentValue = Number.parseInt(e.target.value, 10);\n if (Number.isNaN(currentValue)) {\n this.setState({ currentInput: currentValue });\n return;\n }\n currentValue = Math.min(this.props.max, Math.max(this._minValue, currentValue));\n this.setState({ currentInput: currentValue });\n debounce(() => {\n // Due of usage debouncer, we may ignore onChange return value\n this.props.onChange && this.props.onChange(this.state.currentInput);\n\n const inputElement =\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\n if (inputElement) {\n inputElement.setAttribute('aria-valuenow', this.state.currentInput.toString());\n inputElement.setAttribute('value', this.state.currentInput.toString());\n }\n }, 1000)();\n }\n\n /**\n * Validates min and updates.\n */\n private readonly _validateMin = (): void => {\n if (Number.isNaN(this.state.currentInput)) {\n this.setState({ currentInput: this._minValue });\n } else {\n const currentValue = Math.min(this.props.max, Math.max(this._minValue, this.state.currentInput));\n if (currentValue !== this.state.currentInput) {\n this.setState({ currentInput: currentValue });\n }\n }\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\n\nimport { Node } from '@msdyn365-commerce-modules/utilities';\nimport IncrementalQuantity from './IncrementalQuantity';\nimport { IGridSettings, IImageSettings, IComponentProps } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, ObjectExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport {\n ProductAvailableQuantity,\n ProductDimension,\n SimpleProduct,\n ProductsDataActions,\n ProductSearchCriteria,\n ProductType,\n ProductPrice\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { OrderDetailsProduct } from '@msdyn365-commerce/components';\nimport { ICartActionResult, getCartState } from '@msdyn365-commerce/global-state';\n//import { IProductCollectionData } from './product-collection.data';\n\nexport interface IAddToCartResources {\n goToCartText: string;\n continueShoppingText: string;\n closeNotificationLabel: string;\n headerItemOneText: string;\n headerItemFormatText: string;\n headerLinesFormatText?: string;\n headerMessageText: string;\n freePriceText: string;\n originalPriceText: string;\n currentPriceText: string;\n addedQuantityText: string;\n buyAgainNotificationTitle?: string;\n buyAgainNotificationCloseAriaLabel?: string;\n validationErrorMessage?: string;\n oneErrorText?: string;\n multiErrorsText?: string;\n}\nexport interface IAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice } | undefined> {\n context: any;\n className?: string;\n product: any;\n outOfStockText?: string;\n disabled?: boolean;\n quantity?: number;\n navigationUrl?: string;\n productAvailability?: ProductAvailableQuantity;\n getSelectedProduct?: Promise;\n isNavigationToCartPageDisabled?: boolean;\n shouldSkipSiteSettings?: boolean;\n addToCartArialLabel?: string;\n products?: {\n productId: number;\n quantity: number;\n catalogId?: number;\n }[];\n orderDetailsProducts?: OrderDetailsProduct[];\n hasAvailableProducts?: boolean;\n imageSettings?: IImageSettings;\n gridSettings?: IGridSettings;\n\n isLoading?: boolean;\n isUpdatingDimension?: boolean;\n isLoadingDeliveryOptions?: boolean;\n isUpdatingDeliveryOptions?: boolean;\n isAddServiceItemToCart?: boolean;\n isAddEmailDeliveryItemToCart?: boolean;\n isPriceKeyedIn?: boolean;\n customPriceAmount?: number;\n isOrderQuantityLimitsFeatureEnabled?: boolean;\n\n dialogStrings?: IAddToCartResources;\n\n telemetryContent?: ITelemetryContent;\n\n catalogId?: number;\n cartData?: any;\n\n isCustomPriceSelected?: boolean;\n maximumKeyInPrice?: number;\n minimumKeyInPrice?: number;\n defaultMaximumKeyInPrice?: number;\n defaultMinimumKeyInPrice?: number;\n isProductQuantityLoading?: boolean;\n\n onAdd?(result: ICartActionResult): void;\n onError?(result: IAddToCartFailureResult): void;\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\n}\nexport declare type ICartActionFailureReason =\n | 'EMPTYINPUT'\n | 'MISSINGDIMENSION'\n | 'OUTOFSTOCK'\n | 'CARTACTIONFAILED'\n | 'INVALIDCUSTOMAMOUNT';\nexport interface IAddToCartFailureResult {\n failureReason: ICartActionFailureReason;\n\n stockLeft?: number;\n cartActionResult?: ICartActionResult;\n missingDimensions?: ProductDimension[];\n}\nexport interface IProductCollectionState {\n currentProductqQty?: any;\n}\n//const defaultQuantity = 1;\n\nclass ProductCollectionQty extends React.PureComponent {\n constructor(props: IAddToCartComponentProps) {\n super(props);\n this.state = {\n currentProductqQty: ''\n };\n }\n public removeITem = () => {\n void getCartState(this.props.context.actionContext).then((result: any): boolean => {\n const recordId = this.props.product.ItemId;\n void this.removeItemFromCart(this.props, recordId);\n this.setState({ currentProductqQty: -1 });\n return false;\n });\n };\n public removeItemFromCart = async (props: IAddToCartComponentProps, LineID: any): Promise => {\n const cartState = await getCartState(props.context.actionContext);\n const productInfow = await this.getAddToCartInputFromProps(props);\n const cartLinesData = cartState.cart.CartLines;\n const findData = cartLinesData?.find(cartLinesData => cartLinesData.ItemId === productInfow[0].product.ItemId);\n const input = {\n cartLineIds: [findData?.LineId!]\n };\n await cartState.removeCartLines(input);\n };\n public getAddToCartInputFromProps = async (props: IAddToCartComponentProps) => {\n const defaultQuantity = 1;\n const products = props.orderDetailsProducts?.filter(product => !ObjectExtensions.isNullOrUndefined(product.simpleProduct));\n const input = products?.map(product => {\n return {\n product: product.simpleProduct!,\n count: ObjectExtensions.isNullOrUndefined(product.salesLine.Quantity) ? defaultQuantity : product.salesLine.Quantity,\n catalogId: product.salesLine.CatalogId\n };\n });\n\n if (ArrayExtensions.hasElements(input)) {\n return input;\n }\n\n if (ArrayExtensions.hasElements(props.products)) {\n const actionContext = props.context.actionContext;\n const apiSettings = actionContext.requestContext.apiSettings;\n\n const catalogId = props.catalogId;\n const searchCriteriaInput: ProductSearchCriteria = {\n Context: {\n ChannelId: apiSettings.channelId,\n CatalogId: catalogId\n },\n IncludeAttributes: false,\n Ids: props.products.map(product => product.productId)\n };\n\n const searchResult = await ProductsDataActions.searchByCriteriaAsync({ callerContext: actionContext }, searchCriteriaInput);\n const productSearchResultsWithImages = searchResult.map(productSearchResult => {\n const newProductSearchResult = { ...productSearchResult };\n const newImageUrl = ' generateProductImageUrl(newProductSearchResult, apiSettings);';\n\n if (newImageUrl) {\n newProductSearchResult.PrimaryImageUrl = newImageUrl;\n }\n\n return newProductSearchResult;\n });\n\n return props.products.map(item => {\n const productData = productSearchResultsWithImages.find(product => product.RecordId === item.productId);\n let simpleProduct: SimpleProduct;\n if (productData) {\n simpleProduct = {\n ...productData,\n ProductTypeValue: ProductType.Variant,\n AdjustedPrice: productData.Price,\n BasePrice: productData.BasePrice ?? productData.Price\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Cast to simple product since only record id is available.\n simpleProduct = {\n RecordId: item.productId\n } as SimpleProduct;\n }\n\n return {\n product: simpleProduct,\n count: item.quantity,\n catalogId: item.catalogId\n };\n });\n }\n\n if (props.data?.product) {\n return [\n {\n product: props.data.product,\n count: props.quantity ?? defaultQuantity,\n catalogId: props.catalogId\n }\n ];\n }\n\n return [];\n };\n public onChangeHandler = async (newValue: number): Promise => {\n if (newValue === -1) {\n this.removeITem();\n }\n const productID = this.props.data?.product.RecordId;\n let totalAvailableQuantity = 3;\n if (productID) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const axios = require('axios');\n const data = JSON.stringify({\n searchCriteria: {\n ProductIds: [productID],\n QuantityUnitTypeValue: 2,\n DefaultWarehouseOnly: true\n }\n });\n\n const config = {\n method: 'post',\n maxBodyLength: Infinity,\n // url: 'https://scudisf0ajx86631475-rs.su.retail.dynamics.com/Commerce/Products/GetEstimatedAvailability?api-version=7.3',\n url: 'https://scuh5bsct3g80746264-rs.su.retail.dynamics.com/Commerce/Products/GetEstimatedAvailability?api-version=7.3',\n headers: {\n accept: 'application/json',\n 'accept-language': 'en-US',\n 'cache-control': 'no-cache',\n 'content-type': 'application/json',\n oun: '00000001'\n },\n data: data\n };\n\n await axios\n .request(config)\n .then((response: { data: any }) => {\n if (\n response.data?.ProductWarehouseInventoryAvailabilities &&\n response.data?.ProductWarehouseInventoryAvailabilities.length > 0\n ) {\n const respObject = response.data?.ProductWarehouseInventoryAvailabilities.filter((item: any) => {\n return item.ProductId === productID;\n });\n if (respObject && respObject.length > 0) {\n totalAvailableQuantity = Math.floor((Number(respObject[0]?.PhysicalAvailable) * 80) / 100);\n }\n }\n })\n .catch((error: any) => {\n console.log(error);\n });\n }\n console.log('this nowwww respObject : ', newValue, '===', totalAvailableQuantity);\n\n if (newValue > totalAvailableQuantity) {\n return false;\n }\n const cartState = getCartState(this.props.context.actionContext).then((result: any): boolean => {\n const recordId = this.props.product.ItemId;\n const cartLinesData = result._cart.CartLines;\n const findData = cartLinesData.find((cartLinesData: { ItemId: any }) => cartLinesData.ItemId === recordId);\n this.setState({ currentProductqQty: newValue });\n if (findData === undefined) {\n // console.log(findData.Quantity);\n void this.addOneItemToCart(this.props);\n return true;\n }\n if (!result.isEmpty) {\n void this.updateCartId(this.props, findData.Quantity, newValue);\n return true;\n } else {\n void this.addOneItemToCart(this.props);\n //return true;\n }\n return false;\n });\n console.log(cartState);\n\n return true;\n };\n public updateCartId = async (props: IAddToCartComponentProps, oldQty: any, newQty: any): Promise => {\n const cartState = await getCartState(props.context.actionContext);\n const productInfow = await this.getAddToCartInputFromProps(props);\n const cartLinesData = cartState.cart.CartLines;\n const findData = cartLinesData?.find(cartLinesData => cartLinesData.ItemId === productInfow[0].product.ItemId);\n const addToCartResult = await cartState.updateCartLineQuantity({\n cartLineId: findData?.LineId || '',\n newQuantity: newQty\n });\n console.log(addToCartResult);\n };\n /**\n * Add one item to cart when it is not buy again.\n * @param props -- The props.\n * @param setDisabled -- The set disable call back.\n * @param openModal -- The open modal call back.\n */\n public addOneItemToCart = async (props: IAddToCartComponentProps): Promise => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\n const addToCartInput = await this.getAddToCartInputFromProps(props);\n const product = addToCartInput[0].product;\n const quantity = addToCartInput[0].count;\n\n const cartState = await getCartState(props.context.actionContext);\n const addToCartResult = await cartState.addProductToCart({\n product,\n count: quantity,\n availableQuantity: props.productAvailability?.AvailableQuantity,\n additionalProperties: { orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- read config file.\n enableStockCheck: props.context.app.config.enableStockCheck,\n isPriceKeyedIn: props.isPriceKeyedIn,\n customPrice: props.isPriceKeyedIn ? props.customPriceAmount : undefined,\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart,\n shouldSkipSiteSettings: props.shouldSkipSiteSettings,\n catalogId: addToCartInput[0].catalogId\n });\n\n if (addToCartResult.status === 'SUCCESS') {\n console.log('its success');\n }\n };\n public _getCartStatusUpdate = (props: IAddToCartComponentProps, recordId: number): number => {\n const cartLinesData = props.cartData;\n if (cartLinesData.length !== 0) {\n const findData = cartLinesData.find((cartLinesData: { ItemId: any }) => cartLinesData.ItemId === recordId);\n if (findData) {\n return findData.Quantity;\n }\n }\n\n return 0;\n //return findData?.Quantity || 0;\n };\n public _SingleAddToCart = () => {\n void this.addOneItemToCart(this.props);\n this.setState({ currentProductqQty: 1 });\n return true;\n };\n\n public render(): JSX.Element | null {\n var getQty = this._getCartStatusUpdate(this.props, this.props.product.ItemId);\n //this.setState({ currentProductqQty: getQty });\n var button = null;\n var buttonAddtoCart = null;\n if (this.state.currentProductqQty === -1) {\n getQty = 0;\n }\n //this.setState({ currentProductqQty: getQty });\n if (\n getQty === 0 &&\n (this.state.currentProductqQty === 0 || this.state.currentProductqQty === '' || this.state.currentProductqQty === -1)\n ) {\n getQty = 0;\n // this.setState({ currentProductqQty: 0 });\n buttonAddtoCart = (\n \n );\n return {buttonAddtoCart};\n }\n if (getQty === 1 && this.state.currentProductqQty === '') {\n button = (\n \n );\n }\n if (this.state.currentProductqQty === 1) {\n button = (\n \n );\n }\n return (\n \n \n {button}\n \n \n \n );\n }\n}\nexport default ProductCollectionQty;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport { IPriceComponentResources, ProductComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultContainerResources } from '../search-result-container.props.autogenerated';\nimport ProductCollectionQty from './product-collection-qty';\n\ninterface IProductSearchResultItems {\n products: ProductSearchResult[];\n context: ICoreContext;\n resources: ISearchResultContainerResources;\n imageSettings?: IImageSettings;\n moduleType: string;\n moduleId: string;\n allowBackNavigation?: boolean;\n telemetryContent: ITelemetryContent;\n quickviewSlot?: {} | null | undefined;\n productComparisonButton?: {} | null | undefined;\n channelInventoryConfigurationId?: number;\n isPriceMinMaxEnabled?: boolean;\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n}\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nexport function getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\nexport const ProductSearchResultItems: React.FC = ({\n products,\n context,\n imageSettings,\n resources,\n moduleType,\n moduleId,\n allowBackNavigation,\n telemetryContent,\n quickviewSlot,\n productComparisonButton,\n channelInventoryConfigurationId,\n isPriceMinMaxEnabled,\n productsDimensionAvailabilities\n}) => {\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n return (\n
    \n {products.map((product: ProductSearchResult, index: number) => {\n // Sounrced from region\n // let sourcedFromText = '';\n // if (product.AttributeValues && product.AttributeValues.length > 0) {\n // const filteredSpec = product.AttributeValues.filter(sp => {\n // return sp.Name && sp?.Name === 'Sourced Region';\n // });\n // sourcedFromText = filteredSpec && filteredSpec.length > 0 && filteredSpec[0].TextValue ? filteredSpec[0].TextValue : '';\n // }\n return (\n
  • \n {/* {sourcedFromText &&
    From {sourcedFromText}
    } */}\n \n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n \n
  • \n );\n })}\n
\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { ISliderLabel, ISliderThumbProps, Slider } from '@msdyn365-commerce-modules/utilities';\nimport debounce from 'lodash/debounce';\nimport { computed } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { IRefineItemProps, IRefineItemState } from './refine-item';\n\ntype InputType = 'Min' | 'Max';\n\nexport type RangeRefineItemType = 'slider' | 'input';\n\n/**\n * Range refine item properties.\n */\nexport interface IRangeRefineItemProps extends IRefineItemProps {\n rangeType: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n sliderKey?: string;\n}\n\n/**\n * Range refine item state.\n */\nexport interface IRangeRefineItemState extends IRefineItemState {\n validationErrorMin: string | undefined;\n validationErrorMax: string | undefined;\n selectedMin: string | undefined;\n selectedMax: string | undefined;\n touchedMin: boolean;\n touchedMax: boolean;\n sliderId: string;\n minValue: string | undefined;\n maxValue: string | undefined;\n labels: ISliderLabel[];\n sliderThumbs: ISliderThumbProps[];\n}\n\n/**\n * RangeRefineItem component (controlled by RefineSubmenu).\n */\n@observer\nexport default class RangeRefineItem extends React.Component {\n private readonly _formattedPriceReverseLookup: Map = new Map();\n\n private readonly minInput: React.RefObject;\n\n private readonly maxInput: React.RefObject;\n\n @computed get currencyCode(): string {\n return this.props.productRefinerValue.UnitText || '';\n }\n\n public constructor(props: IRangeRefineItemProps) {\n super(props);\n this._onRangeUpdate = this._onRangeUpdate.bind(this);\n this._onRangeUpdateEnd = this._onRangeUpdateEnd.bind(this);\n this._handleRangeTooltipText = this._handleRangeTooltipText.bind(this);\n this._changeMin = this._changeMin.bind(this);\n this._changeMax = this._changeMax.bind(this);\n this._finishChangeMin = this._finishChangeMin.bind(this);\n this._finishChangeMax = this._finishChangeMax.bind(this);\n\n this.minInput = React.createRef();\n this.maxInput = React.createRef();\n\n const { selectedRefinementCriterion } = this.props;\n const initialMin = selectedRefinementCriterion?.LeftValueBoundString ?? '0';\n const initialMax = selectedRefinementCriterion?.RightValueBoundString;\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.state = {\n isChecked: false,\n validationErrorMin: undefined,\n validationErrorMax: undefined,\n selectedMin: initialMin,\n selectedMax: initialMax,\n touchedMin: false,\n touchedMax: false,\n sliderId,\n minValue,\n maxValue,\n labels,\n sliderThumbs\n };\n }\n\n public shouldComponentUpdate(nextProps: IRangeRefineItemProps, nextState: IRangeRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public componentDidUpdate(previousProps: IRangeRefineItemProps): void {\n if (previousProps !== this.props) {\n this.updateSliderProps();\n }\n }\n\n public render(): JSX.Element | undefined {\n const { productRefinerValue, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerValue || !parentProductRefinerHierarchy) {\n refineItemCommonProps.telemetry.error(\n 'Cannot render refine value range without productRefinerValue and parentProductRefinerHierarchy'\n );\n return undefined;\n }\n\n if (this.props.rangeType === 'input') {\n return this._renderInputFields();\n }\n\n return this._renderSlider();\n }\n\n /**\n * Function to update slider props.\n */\n private updateSliderProps(): void {\n const sliderId = `slider_${String(this.props.parentProductRefinerHierarchy.RecordId)}_${String(\n this.props.productRefinerValue.RefinerRecordId\n )}`;\n const minValue = this.props.productRefinerValue.LeftValueBoundString;\n const maxValue = this.props.productRefinerValue.RightValueBoundString;\n const minPrice = this._formatPrice(minValue);\n const maxPrice = this._formatPrice(maxValue);\n const labels: ISliderLabel[] = this.getLabels(sliderId, minPrice, maxPrice);\n const selectedMin =\n this.props.selectedRefinementCriterion?.LeftValueBoundString ?? this.props.productRefinerValue.LeftValueBoundString ?? '0';\n const selectedMax =\n this.props.selectedRefinementCriterion?.RightValueBoundString ??\n this.props.productRefinerValue.RightValueBoundString ??\n maxValue;\n const selectedMinPrice = this._formatPrice(selectedMin);\n const selectedMaxPrice = this._formatPrice(selectedMax);\n const sliderKeyString = this.props.sliderKey ? `_${String(this.props.sliderKey)}` : '';\n const sliderThumbs: ISliderThumbProps[] = this.getSliderThumbs(\n sliderId,\n sliderKeyString,\n selectedMin,\n selectedMinPrice,\n selectedMax,\n selectedMaxPrice,\n maxPrice\n );\n this.setState({ sliderId, minValue, maxValue, labels, sliderThumbs });\n }\n\n /**\n * Function to create the labels for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param minPrice - Slider min value.\n * @param maxPrice - Slider max value.\n * @returns Array labels.\n */\n private readonly getLabels = (sliderId: string, minPrice: string, maxPrice: string): ISliderLabel[] => {\n return [\n {\n labelId: `${sliderId}_start`,\n labelString: `${minPrice}`,\n labelPositioning: 'start'\n },\n {\n labelId: `${sliderId}_end`,\n labelString: `${maxPrice}`,\n labelPositioning: 'end'\n }\n ];\n };\n\n /**\n * Function to create the slider thumbs for slider.\n * @param sliderId - Slider element id for the DOM.\n * @param sliderKey - Unique key for slider.\n * @param selectedMin - Slider selected min value.\n * @param selectedMinPrice - Slider selected min price.\n * @param selectedMax - Slider selected max value.\n * @param selectedMaxPrice - Slider selected max price..\n * @param maxPrice - Slider max price..\n * @returns Slider Thumb Props.\n */\n private readonly getSliderThumbs = (\n sliderId: string,\n sliderKey: string,\n selectedMin: string,\n selectedMinPrice: string,\n selectedMax: string | undefined,\n selectedMaxPrice: string,\n maxPrice: string\n ): ISliderThumbProps[] => {\n const sliderThumbDefaultValue = 0;\n return [\n {\n id: `${sliderId}${sliderKey}_slider_thumb_start`,\n value: (selectedMin && Number(selectedMin)) || sliderThumbDefaultValue,\n ariaLabel: `${this.props.minValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMinPrice}`\n },\n {\n id: `${sliderId}${sliderKey}_slider_thumb_end`,\n value: Number(selectedMax) || Number(maxPrice),\n ariaLabel: `${this.props.maxValueSliderThumbAriaLabel ?? ''} ${this.currencyCode}`,\n ariaValueText: `${selectedMaxPrice}`\n }\n ];\n };\n\n private _renderInputFields(): JSX.Element | undefined {\n const { isDisabled, parentProductRefinerHierarchy, refineItemCommonProps } = this.props;\n const { selectedMin, selectedMax, touchedMin, touchedMax, validationErrorMin, validationErrorMax } = this.state;\n\n const rangeAriaLabel = (refineItemCommonProps.rangeNameFormat || '{0}').replace('{0}', parentProductRefinerHierarchy.KeyName || '');\n const formAttrs = {\n 'aria-label': rangeAriaLabel,\n 'aria-disabled': isDisabled\n };\n\n // To enable price formatting of selected fields, this is the approach:\n // initial value: min=0 formatted as price, max=undefined\n // onFocus/onChange: convert to number (unformat) and mark as touched to indicate value is being edited\n // onBlur: validate and format entered value as price\n const minInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-min ${\n validationErrorMin ? 'refine-submenu__input-range--error' : ''\n }`;\n const maxInputClassName = `ms-refine-submenu__input-range refine-submenu__input-range-max ${\n validationErrorMax ? 'refine-submenu__input-range--error' : ''\n }`;\n const minLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-min';\n const maxLabelClassName = 'ms-refine-submenu__input-range-label refine-submenu__input-range-label-max';\n const formattedSelectedMin = this._getFormattedSelectedValue(selectedMin, touchedMin, validationErrorMin);\n const formattedSelectedMax = this._getFormattedSelectedValue(selectedMax, touchedMax, validationErrorMax);\n return (\n
\n \n \n {validationErrorMin && (\n \n {validationErrorMin}\n \n )}\n {validationErrorMax && validationErrorMin !== validationErrorMax && (\n \n {validationErrorMax}\n \n )}\n
\n );\n }\n\n private _renderSlider(): JSX.Element | undefined {\n const { isDisabled, sliderKey } = this.props;\n const ariaAttributes = {\n 'aria-disabled': isDisabled\n };\n\n return (\n \n );\n }\n\n private _changeMin(event: React.FocusEvent): void {\n this._changeValue(event, 'Min');\n }\n\n private _changeMax(event: React.FocusEvent): void {\n this._changeValue(event, 'Max');\n }\n\n private _changeValue(event: React.FocusEvent, inputType: InputType): void {\n const selectedKey = `selected${inputType}`;\n const touchedKey = `touched${inputType}`;\n this.setState({\n [selectedKey]: this._getInputWithoutFormatting(event.currentTarget.value),\n [touchedKey]: true\n });\n }\n\n private _finishChangeMin(event: React.FocusEvent): boolean {\n const selectedMinValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMin: selectedMinValue,\n minTouched: false\n });\n const minInput = Number(selectedMinValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const max = (selectedRefinementCriterion && selectedRefinementCriterion.RightValueBoundString) || undefined;\n\n const maxNum = max ? Number(max) : undefined;\n\n if (isNaN(minInput)) {\n this.setState({ validationErrorMin: refineItemCommonProps.validationErrorNaN });\n this._focus('Min');\n return false;\n }\n\n if (this._validateRange(minInput, maxNum)) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minInput,\n rangeEnd: maxNum\n });\n return true;\n }\n this._focus('Min');\n\n return false;\n }\n\n private _finishChangeMax(event: React.FocusEvent): boolean {\n const selectedMaxValue = this._getInputWithoutFormatting(event.currentTarget.value);\n this.setState({\n selectedMax: selectedMaxValue,\n maxTouched: false\n });\n const maxInput = Number(selectedMaxValue);\n const {\n onToggle,\n parentProductRefinerHierarchy,\n productRefinerValue,\n refineItemCommonProps,\n selectedRefinementCriterion\n } = this.props;\n const min = (selectedRefinementCriterion && selectedRefinementCriterion.LeftValueBoundString) || '0';\n\n const minNum = Number(min);\n\n if (isNaN(maxInput)) {\n this.setState({ validationErrorMax: refineItemCommonProps.validationErrorNaN });\n this._focus('Max');\n return false;\n }\n\n if (this._validateRange(minNum, maxInput)) {\n if (productRefinerValue) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: minNum,\n rangeEnd: maxInput\n });\n } else {\n this._focus('Max');\n }\n return true;\n }\n\n return false;\n }\n\n private _focus(inputType: InputType): void {\n const ref = inputType === 'Max' ? this.maxInput : this.minInput;\n\n setTimeout(() => {\n if (ref && ref.current) {\n ref.current.focus();\n }\n }, 50);\n }\n\n private _getFormattedSelectedValue(\n selected: string | undefined,\n touched: boolean,\n validationError: string | undefined\n ): string | undefined {\n if (touched || validationError || selected === undefined) {\n return selected;\n }\n return this._formatPrice(selected);\n }\n\n private _validateRange(min: number, max: number | undefined): boolean {\n const { refineItemCommonProps } = this.props;\n if (max === undefined) {\n return true;\n }\n\n if (min > max) {\n this.setState({\n validationErrorMin: refineItemCommonProps.validationErrorRange,\n validationErrorMax: refineItemCommonProps.validationErrorRange\n });\n return false;\n }\n\n return true;\n }\n\n private _formatPrice(amount: string | undefined): string {\n if (this.props.productRefinerValue.RefinerRecordId === 0) {\n const result = this.props.context.cultureFormatter.formatCurrency(Number(amount), this.currencyCode);\n return result;\n }\n return amount || '';\n }\n\n private _getInputWithoutFormatting(input: string): string {\n // First try to cast raw input to a number\n const inputAsNum = Number(input);\n if (!isNaN(inputAsNum)) {\n return input;\n }\n\n // Otherwise try a reverse lookup and fall back to the raw input if all else fails\n const reverseLookupResult = this._formattedPriceReverseLookup.get(input);\n return reverseLookupResult || input;\n }\n\n // NOTE: Fix types once Shared Components build pipeline bug fixed\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdate(sliderChangeNotification: any): void {\n // Need to filter out mousemove events as these cause errors after the menu updates and slider re-renders\n if (sliderChangeNotification.eventType !== 'mousemove') {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _onRangeUpdateEnd(sliderChangeNotification: any): void {\n const { onToggle, parentProductRefinerHierarchy, productRefinerValue } = this.props;\n if (productRefinerValue && sliderChangeNotification) {\n onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: true,\n rangeStart: sliderChangeNotification.firstThumbValue,\n rangeEnd: sliderChangeNotification.secondThumbValue\n });\n\n this._focusOnSliderThumb(sliderChangeNotification);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _focusOnSliderThumb(sliderChangeNotification: any): void {\n if (sliderChangeNotification.id) {\n const element = document.getElementById(`${sliderChangeNotification.id}range`);\n if (element) {\n setTimeout(() => {\n element.focus();\n }, 0);\n }\n }\n }\n\n private _handleRangeTooltipText(tooltip: number): string {\n return this._formatPrice(`${tooltip}`);\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { RatingComponent, SwatchComponent } from '@msdyn365-commerce/components';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { checkIfShouldDisplayAsSwatch, DimensionTypes, IDimensionsApp, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { format, getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\n\n/**\n * RefineItem properties.\n */\nexport interface IRefineItemProps {\n parentProductRefinerHierarchy: IProductRefinerHierarchy;\n productRefinerValue: ProductRefinerValue;\n selectedRefinementCriterion: ProductRefinerValue | undefined;\n selectedRefinerValues?: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n index?: number;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobileView?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onToggle(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine item state.\n */\nexport interface IRefineItemState extends React.ComponentState {\n isChecked: boolean;\n renderingError?: object;\n}\n\n/**\n * Single-select and multi-select refine item component (controlled by RefineSubmenu).\n */\nexport default class RefineItem extends React.Component {\n private readonly anchorType: React.RefObject;\n\n private readonly payLoad: IPayLoad;\n\n public constructor(props: IRefineItemProps) {\n super(props);\n this._onClick = this._onClick.bind(this);\n this.state = {\n isChecked: !!this.props.selectedRefinementCriterion\n };\n this.anchorType = React.createRef();\n this.payLoad = getPayloadObject('click', this.props.telemetryContent!, '');\n }\n\n public shouldComponentUpdate(nextProps: IRefineItemProps, nextState: IRefineItemState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | undefined {\n const {\n isDisabled,\n refineItemCommonProps,\n parentProductRefinerHierarchy,\n productRefinerValue,\n selectedRefinementCriterion,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n index,\n children,\n onToggle,\n context,\n telemetryContent,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n ...attrs\n } = this.props;\n if (!productRefinerValue) {\n refineItemCommonProps.telemetry.error('[refine-item] Cannot render refineItem without productRefinerValue');\n return undefined;\n }\n if (!productRefinerValue.LeftValueBoundString) {\n refineItemCommonProps.telemetry.warning(\n `[refine-item] RefineItem without LeftValueBoundString: ${JSON.stringify(productRefinerValue)}`\n );\n }\n const isSingleSelect = parentProductRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect;\n let itemTypeClassName = isSingleSelect ? 'single-select' : 'multi-select';\n itemTypeClassName = `ms-refine-submenu-item ${itemTypeClassName}`;\n const inputType = isSingleSelect ? 'radio' : 'checkbox';\n const isChecked = !!selectedRefinementCriterion;\n itemTypeClassName = isChecked ? `${itemTypeClassName}-checked` : itemTypeClassName;\n if (parentProductRefinerHierarchy.SourceValue === ProductRefinerSource.Rating) {\n return this._renderRating(\n productRefinerValue,\n parentProductRefinerHierarchy,\n isChecked,\n context,\n index,\n telemetryContent,\n productCountAriaLabel,\n singleProductCountAriaLabel\n );\n }\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString ?? productRefinerValue.LeftValueBoundString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productText = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const productCount = productRefinerValue.Count || 0;\n let refineMenuItemAriaLabel;\n if (productCount === 1) {\n refineMenuItemAriaLabel = refineItemAriaLabel\n ? format(refineItemAriaLabel, parentProductRefinerHierarchy.KeyName, productText)\n : '';\n } else {\n refineMenuItemAriaLabel = refineItemsAriaLabel\n ? format(refineItemsAriaLabel, parentProductRefinerHierarchy.KeyName, productText, productCount)\n : '';\n }\n\n const dimensionType = (this.props.parentProductRefinerHierarchy.KeyName?.toLocaleLowerCase() ?? '') as DimensionTypes;\n const shouldDisplayAsSwatch = this._getShouldDisplayAsSwatch(dimensionType);\n\n let className = 'ms-refine-submenu-item';\n if (shouldDisplayAsSwatch) {\n className = classnames(className, `ms-refine-submenu-item__dimension__${dimensionType}`);\n }\n\n // If the swatch has no color or image specified, it should be displayed as text.\n // We don't use swatch logic to display the number of the results found together with the text.\n const hasColor = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchColorHexCode);\n const hasImage = !StringExtensions.isNullOrWhitespace(productRefinerValue.SwatchImageUrl);\n const hasContentSwatch = hasColor || hasImage;\n\n return (\n
  • \n \n {hasContentSwatch && shouldDisplayAsSwatch && this._renderSwatch(dimensionType)}\n \n \n
  • \n );\n }\n\n private _getShouldDisplayAsSwatch(dimensionType: DimensionTypes) {\n const shouldDisplayAsSwatch = checkIfShouldDisplayAsSwatch(dimensionType, this.props.context as ICoreContext);\n return shouldDisplayAsSwatch;\n }\n\n private _renderSwatch(dimensionType: DimensionTypes): JSX.Element | null {\n const productRefinerValue = this.props.productRefinerValue;\n\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const text = productRefinerValue.LeftValueBoundLocalizedString || productRefinerValue.LeftValueBoundString || '';\n const swatchItems = [\n {\n itemId: `${productRefinerValue.RefinerRecordId ?? ''}-${dimensionType}-${text}`,\n value: text,\n dimensionType,\n colorHexCode: productRefinerValue.SwatchColorHexCode,\n imageUrl: productRefinerValue.SwatchImageUrl\n }\n ];\n\n return (\n \n );\n }\n\n private _getRefinerUrl(): string {\n const { urlBuilder, parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n\n if (productRefinerValue) {\n return urlBuilder({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n }\n\n return '';\n }\n\n private readonly _onClick = (e: React.MouseEvent): void => {\n e.preventDefault();\n\n const { parentProductRefinerHierarchy, productRefinerValue, selectedRefinementCriterion } = this.props;\n if (productRefinerValue) {\n this.props.onToggle({\n parentProductRefinerHierarchy,\n productRefinerValue,\n isSelecting: !selectedRefinementCriterion\n });\n\n setTimeout(() => {\n this.anchorType.current && this.anchorType.current.focus();\n }, 0);\n }\n };\n\n private _renderRating(\n productRefinerValue: ProductRefinerValue,\n parentProductRefinerHierarchy: IProductRefinerHierarchy,\n isChecked: boolean,\n context: ICoreContext,\n index?: number,\n telemetryContent?: ITelemetryContent,\n ratingUserCountAriaLabel?: string,\n ratingSingleUserCountAriaLabel?: string\n ): JSX.Element | undefined {\n if (productRefinerValue.LeftValueBoundString) {\n this.payLoad.contentAction.etext = productRefinerValue.LeftValueBoundLocalizedString;\n const attribute = getTelemetryAttributes(telemetryContent!, this.payLoad);\n const refinerRating = Number.parseInt(productRefinerValue.LeftValueBoundString, 10);\n const ratingRefiner = this.props.selectedRefinerValues?.find(\n value => value.DataTypeValue === productRefinerValue.DataTypeValue\n );\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- Replace with actual value for empty string.\n const selectedRating = Number.parseInt(ratingRefiner?.LeftValueBoundString || '0', 10);\n const defaultChkProductCount = 1;\n let ratingComponentClass: string = 'ms-rating-component';\n if (refinerRating > selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__up`;\n } else if (refinerRating < selectedRating) {\n ratingComponentClass = `${ratingComponentClass}__down`;\n } else {\n ratingComponentClass = `${ratingComponentClass}__current`;\n }\n const productCountAriaLabelValue =\n productRefinerValue.Count !== undefined && productRefinerValue.Count === defaultChkProductCount\n ? ratingSingleUserCountAriaLabel && format(ratingSingleUserCountAriaLabel, productRefinerValue.Count)\n : ratingUserCountAriaLabel && format(ratingUserCountAriaLabel, productRefinerValue.Count);\n return (\n \n \n \n \n {productRefinerValue.Count !== undefined && `(${productRefinerValue.Count})`}\n \n \n \n );\n }\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport { DisplayTemplate, ProductRefinerSource, ProductRefinerValue, RefinerType } from '@msdyn365-commerce/retail-proxy';\nimport { Button, Collapse, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport RangeRefineItem, { RangeRefineItemType } from './range-refine-item';\nimport RefineItem from './refine-item';\nimport { IRefineItemCommonProps } from './refine-item.props.common';\nimport { IRefineItemToggleNotification } from './refine-item-toggle-notification';\nimport { findMatchingRefinementCriterion, isRangeType } from './utilities';\n\n/**\n * Properties associated with the RefineSubmenu component.\n */\nexport interface IRefineSubmenuProps {\n tempRangeTypeTODO: RangeRefineItemType;\n minValueSliderThumbAriaLabel?: string;\n maxValueSliderThumbAriaLabel?: string;\n productRefinerHierarchy: IProductRefinerHierarchy;\n selectedRefinerValues: ProductRefinerValue[];\n refineItemCommonProps: IRefineItemCommonProps;\n isDisabled: boolean;\n isExpandedOnInitialLoad: boolean;\n context: ICoreContext>;\n moduleId: string;\n moduleTypeName: string;\n productCountAriaLabel?: string;\n singleProductCountAriaLabel?: string;\n refineItemAriaLabel?: string;\n refineItemsAriaLabel?: string;\n isMobile?: boolean;\n\n /**\n * The telemetry content\n */\n telemetryContent?: ITelemetryContent;\n onUpdateRefiners(notfication: Readonly): void;\n urlBuilder(refiner: IRefineItemToggleNotification): string;\n}\n\n/**\n * Refine submenu state.\n */\nexport interface IRefineSubmenuState extends React.ComponentState {\n expanded: boolean;\n}\n\n/**\n *\n * The RefineSubmenu component renders the submenu category and child items.\n * This computed observes the stateful category hierarchy object.\n * @extends {React.PureComponent}\n */\nclass RefineSubmenu extends React.Component {\n constructor(props: IRefineSubmenuProps) {\n super(props);\n\n this._onToggleItem = this._onToggleItem.bind(this);\n this._onToggleSubmenu = this._onToggleSubmenu.bind(this);\n\n // const isExpanded = this.props.isExpandedOnInitialLoad;\n const isExpanded = false;\n\n // If (this.props.productRefinerHierarchy.DataTypeValue === ProductRefinerValueDataTypeValue.Range) {\n // isExpanded = true;\n // }\n\n this.state = {\n expanded: isExpanded\n };\n }\n\n public shouldComponentUpdate(nextProps: IRefineSubmenuProps, nextState: IRefineSubmenuState): boolean {\n if (this.state === nextState && this.props === nextProps) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const { productRefinerHierarchy, refineItemCommonProps } = this.props;\n\n if (!productRefinerHierarchy) {\n refineItemCommonProps.telemetry.error('Cannot render submenu without refiner hierarchy data');\n }\n\n if (productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating && this.props.context.app.config.hideRating) {\n return null;\n }\n\n const className = classnames(\n 'ms-refine-submenu',\n 'list-group',\n productRefinerHierarchy.KeyName // Deprecated because of the localization issues. Leaving for backward compatibility reasons.\n );\n\n return (\n
    \n \n {productRefinerHierarchy.KeyName}\n \n \n {this._renderChildItems(productRefinerHierarchy)}\n \n
    \n );\n }\n\n private _renderChildItems(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n if (isRangeType(productRefinerHierarchy.DataTypeValue)) {\n return this._renderRange(productRefinerHierarchy);\n }\n return this._renderSingleMultiSelect(productRefinerHierarchy);\n }\n\n private _renderSingleMultiSelect(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n productCountAriaLabel,\n singleProductCountAriaLabel,\n refineItemAriaLabel,\n refineItemsAriaLabel,\n isMobile\n } = this.props;\n const isSingleSelect =\n productRefinerHierarchy.RefinerTypeValue === RefinerType.SingleSelect &&\n productRefinerHierarchy.SourceValue === ProductRefinerSource.Rating;\n const role = isSingleSelect ? { role: 'listbox' } : undefined;\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `[refine-submenu] Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n return (\n \n refinerValuesList.find(value => value.RefinerRecordId === selectedValue.RefinerRecordId)\n )}\n refineItemCommonProps={refineItemCommonProps}\n onToggle={this._onToggleItem}\n urlBuilder={this.props.urlBuilder}\n isDisabled={isDisabled}\n key={index}\n index={index}\n context={context}\n moduleId={this.props.moduleId}\n moduleTypeName={this.props.moduleTypeName}\n telemetryContent={this.props.telemetryContent}\n productCountAriaLabel={productCountAriaLabel}\n refineItemAriaLabel={refineItemAriaLabel}\n refineItemsAriaLabel={refineItemsAriaLabel}\n singleProductCountAriaLabel={singleProductCountAriaLabel}\n isMobileView={isMobile}\n />\n );\n });\n return (\n \n {listItems}\n \n );\n }\n\n private _getRangeType(productRefinerHierarchy: IProductRefinerHierarchy): 'input' | 'slider' {\n if (\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Range ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.Slider ||\n productRefinerHierarchy.DisplayTemplateValue === DisplayTemplate.SliderWithBars\n ) {\n return 'slider';\n }\n return 'input';\n }\n\n private _renderRange(productRefinerHierarchy: IProductRefinerHierarchy): JSX.Element | null {\n const {\n isDisabled,\n refineItemCommonProps,\n selectedRefinerValues,\n context,\n minValueSliderThumbAriaLabel,\n maxValueSliderThumbAriaLabel\n } = this.props;\n const submenuClassNamePrefix = 'ms-refine-submenu__item list-group-item refine-submenu__item';\n const refinerValuesList = productRefinerHierarchy.Values || [];\n const listItems = refinerValuesList.map((child: ProductRefinerValue, index: number) => {\n if (!child) {\n refineItemCommonProps.telemetry.error(\n `Could not render refine item for refiner ${productRefinerHierarchy.RecordId} (${productRefinerHierarchy.KeyName})`\n );\n return null;\n }\n\n const selectedRefinementCriterion = findMatchingRefinementCriterion(child, selectedRefinerValues);\n\n const rangeType = this._getRangeType(productRefinerHierarchy);\n const key = selectedRefinementCriterion\n ? `${selectedRefinementCriterion.LeftValueBoundString}-${selectedRefinementCriterion.RightValueBoundString}`\n : `not-selected-${index}`;\n return (\n
  • \n \n
  • \n );\n });\n return
      {listItems}
    ;\n }\n\n private _onToggleItem(itemToggleNotification: IRefineItemToggleNotification): void {\n this.props.onUpdateRefiners(itemToggleNotification);\n }\n\n private _onToggleSubmenu(): void {\n this.setState(prevState => ({\n expanded: !prevState.expanded\n }));\n }\n}\n\nexport default RefineSubmenu;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface ISeparator {\n separator: string;\n}\n\nexport const Separator: React.FC = ({ separator }) => (\n \n {` `}\n {separator}\n {` `}\n \n);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport * as React from 'react';\n\ninterface ITitle {\n className: string;\n text: string;\n}\n\nexport const Title: React.FC = ({ text, className }) => (\n \n {` `}\n {text}\n {` `}\n \n);\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * ISearchResultContainer containerModule Interface Properties\r\n * THIS FILE IS AUTO-GENERATED - MANUAL MODIFICATIONS WILL BE LOST\r\n */\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport * as React from 'react';\r\n\r\nexport const enum expandRefinersCount {\r\n all = 'all',\r\n one = 'one',\r\n two = 'two',\r\n three = 'three',\r\n four = 'four'\r\n}\r\n\r\nexport interface ISearchResultContainerConfig extends Msdyn365.IModuleConfig {\r\n itemsPerPage?: number;\r\n allowBackNavigation?: boolean;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n expandRefinersCount?: expandRefinersCount;\r\n disableHierarchy?: boolean;\r\n includeAttributes?: boolean;\r\n enableAffiliationBasedPricing?: boolean;\r\n updateRefinerPanel?: boolean;\r\n className?: string;\r\n clientRender?: boolean;\r\n}\r\n\r\nexport interface ISearchResultContainerResources {\r\n noResultsForRefinersText: string;\r\n resultCategoryNotFoundText: string;\r\n resultSearchNotFoundText: string;\r\n paginationAriaLabel: string;\r\n priceFree: string;\r\n priceRangeSeparator: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n ratingAriaLabel: string;\r\n flipperNext: string;\r\n flipperPrevious: string;\r\n searchTextPrefix: string;\r\n numberOfProducts: string;\r\n oneProduct: string;\r\n categoryLinkAriaLabel: string;\r\n sortByDropdownLabel: string;\r\n sortByOptionNameAsc: string;\r\n sortByOptionNameDesc: string;\r\n sortByOptionPriceAsc: string;\r\n sortByOptionPriceDesc: string;\r\n sortByOptionRatingDesc: string;\r\n sortByOptionBestSelling: string;\r\n sortByOptionNewScore: string;\r\n sortByOptionTrendingScore: string;\r\n sortByOptionRelevanceDesc: string;\r\n placeholderTextMax: string;\r\n minLabel: string;\r\n maxLabel: string;\r\n rangeNameFormat: string;\r\n validationErrorNotNumber: string;\r\n validationErrorNotRange: string;\r\n clearAllText: string;\r\n choiceSummaryLabel: string;\r\n choiceFormat: string;\r\n choiceRangeValueFormat: string;\r\n choiceAriaLabel: string;\r\n closeAriaLabel: string;\r\n modalTitle: string;\r\n modalCloseButtonText: string;\r\n minValueSliderThumbAriaLabel: string;\r\n maxValueSliderThumbAriaLabel: string;\r\n featureSimilarLooksTitle: string;\r\n featureSimilarDescriptionTitle: string;\r\n productCountAriaLabel: string;\r\n singleProductCountAriaLabel: string;\r\n swatchItemAriaLabel: string;\r\n refineItemsAriaLabel: string;\r\n refineItemAriaLabel: string;\r\n}\r\n\r\nexport interface ISearchResultContainerProps extends Msdyn365.IModule {\r\n resources: ISearchResultContainerResources;\r\n config: ISearchResultContainerConfig;\r\n slots: {\r\n quickview: React.ReactNode[];\r\n productComparisonButton: React.ReactNode[];\r\n };\r\n}\r\n","/* eslint-disable security/detect-object-injection */\n/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n CategoryHierarchy as CategoryHierarchyData,\n IProductRefinerHierarchy,\n IProductsDimensionsAvailabilities\n} from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\nimport {\n ChannelInventoryConfiguration,\n format,\n ProductPrice,\n ProductRefinerValue,\n SortColumn,\n StoreOperationsDataActions,\n TextValueTranslation\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n DimensionAvailabilitiesForProductSearchResultInput,\n DimensionTypes,\n DimensionSwatchDisplayTypes,\n getDimensionAvailabilitiesForProductSearchResultAction,\n getPriceForProductSearchResult,\n IDimensionsApp,\n PriceForProductSearchResultInput\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n getTelemetryObject,\n ILabeledDropdownOnChangeNotification,\n ILabeledDropdownOption,\n IModuleProps,\n INodeProps,\n isMobile,\n ITelemetryContent,\n LabeledDropdown,\n UncontrolledPagination,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable, reaction, transaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n BaseCollectionInput,\n buildListPageUrl,\n getCollectionProducts,\n getCollectionRefinersAction,\n getCurrentUrl,\n GetFullProductsByCollectionInput,\n getInventoryRefinerAction,\n IFullProductsSearchResultsWithCount,\n InventoryInStockRefinerValueInput,\n parseQueryParam,\n ProductListInventoryFilteringOptions,\n RefinersByCollectionInput,\n sortOptions\n} from './actions';\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\nimport {\n ErrorMessage,\n FeatureSearchResultItem,\n getUpdatedRefinementCriteria,\n IChoiceSummaryClickNotification,\n IRefineItemCommonProps,\n IRefineItemToggleNotification,\n ISearchResultModalViewProps,\n isMatchingRefinementCriterion,\n Link,\n ModalToggle,\n ProductSearchResultItems,\n SearchResultModal,\n Separator,\n Title\n} from './components';\nimport ChoiceSummary from './components/choice-summary';\nimport RefineSubmenu from './components/refine-submenu';\nimport { ListPageState } from './list-page-state';\nimport { ISearchResultContainerData } from './search-result-container.data';\nimport { expandRefinersCount, ISearchResultContainerProps } from './search-result-container.props.autogenerated';\nimport Slider from 'react-slick';\n\nexport interface ISearchResultContainerViewProps extends ISearchResultContainerProps {\n products?: React.ReactNode;\n className?: string;\n SearchResultContainer: IModuleProps;\n TitleViewProps: ITitleViewProps;\n categoryHierarchy: ICategoryHierarchyViewProps;\n pagination?: React.ReactNode;\n ProductsContainer: INodeProps;\n ProductSectionContainer: INodeProps;\n refineMenu: IRefineMenuViewProps;\n sortByOptions: ISortByViewProps;\n choiceSummary?: React.ReactNode;\n modalToggle: React.ReactNode;\n searchResultModal: ISearchResultModalViewProps;\n isMobile: boolean;\n CategoryNavContainer: INodeProps;\n RefineAndProductSectionContainer: INodeProps;\n errorMessage: React.ReactNode;\n FeatureSearchContainer: INodeProps;\n similarLookProduct?: React.ReactNode;\n productPrices?: ProductPrice[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n categoriesCarousal?: React.ReactNode;\n isBrandPage: boolean;\n isCategoryPage: boolean;\n pageType: string;\n}\n\nexport interface ITitleViewProps {\n TitleContainer: INodeProps;\n title: ISearchResultTitle;\n isCategoryPage: boolean;\n pageType: string;\n}\n\nexport interface IRefineMenuViewProps {\n RefineMenuContainer: INodeProps;\n RefinerSectionContainer: INodeProps;\n refiners?: React.ReactNode[];\n}\n\nexport interface ICategoryHierarchyViewProps {\n categoryHierarchyList?: React.ReactNode[];\n categoryHierarchySeparator?: React.ReactNode;\n CategoryHierarchyContainer: INodeProps;\n}\n\nexport interface ISortByViewProps {\n SortingContainer: INodeProps;\n sortByDropDown?: React.ReactNode;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Title component for search result container.\n */\nexport interface ISearchResultTitle {\n titlePrefix?: React.ReactNode;\n titleText?: React.ReactNode;\n titleCount?: React.ReactNode;\n}\n\nexport interface ISearchResultContainerState {\n sortingState: ISortByCollectionState;\n modalIsOpen: boolean;\n refiners: IProductRefinerHierarchy[];\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\n}\n\ninterface ISortByCollectionState {\n selectedSortByOption: ILabeledDropdownOption;\n pending: boolean;\n}\n\n/**\n *\n * SearchResultContainer component.\n * @extends {React.PureComponent>}\n */\n@observer\nexport default class SearchResultContainer extends React.PureComponent<\n ISearchResultContainerProps,\n ISearchResultContainerState\n> {\n @computed get isMobile(): boolean {\n return this._viewport === 'xs' || this._viewport === 'sm';\n }\n\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\n ];\n\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\n\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\n\n @observable\n private _viewport: GridSize = 'lg';\n\n private readonly _modalToggleRef: React.RefObject;\n\n private readonly _sortAndFilterContainerRef: React.RefObject;\n\n private expandrefinerCount: number | undefined = 0;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly productPrices: ProductPrice[];\n\n private readonly defaultPageNumber = 0;\n\n private readonly localyOnlineRecordId = 5637144702;\n\n private readonly allBrandsRecordId = 5637144824;\n\n private readonly allOfferSRecordId = 5637144701;\n\n private readonly catalogId = getCatalogId(this.props.context.request);\n\n private isListPageStateUpdated: boolean = false;\n\n private _isMounted: boolean = false;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation?.Text;\n }\n\n public constructor(props: ISearchResultContainerProps, state: ISearchResultContainerState) {\n super(props);\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\n this._modalToggleRef = React.createRef();\n this._sortAndFilterContainerRef = React.createRef();\n this._toggleModal = this._toggleModal.bind(this);\n this._updateViewport = this._updateViewport.bind(this);\n this.productPrices = [];\n this.state = {\n sortingState: {\n pending: false,\n selectedSortByOption: this.sortByDropdownOptions[0]\n },\n modalIsOpen: false,\n refiners: [],\n channelInventoryConfiguration: undefined\n };\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\n\n const locale = this.props.context.request.locale;\n const telemetry = this.props.telemetry;\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\n const validationErrorRange = this.props.resources.validationErrorNotRange;\n this._refineItemCommonProps = {\n telemetry,\n locale,\n placeholderTextMax,\n minLabel,\n maxLabel,\n rangeNameFormat,\n validationErrorNaN,\n validationErrorRange\n };\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this._updateViewport();\n }\n public async componentDidMount(): Promise {\n this._isMounted = true;\n if (MsDyn365.isBrowser && window.addEventListener) {\n window.addEventListener('resize', this._updateViewport);\n this._updateViewport();\n }\n\n const listPageState = await this.props.data.listPageState;\n const products = await this.props.data.products;\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\n callerContext: this.props.context.actionContext\n });\n if (this._isMounted) {\n this.setState({ channelInventoryConfiguration });\n }\n // Push inventory in stock refiner when productListInventoryDisplay is hide oos\n const inventoryRefiner = await this._getInventoryRefiner(listPageState, channelInventoryConfiguration);\n\n this._updateListPageState(listPageState, products);\n\n // Initialize reaction based on listPageState properties\n reaction(\n () => {\n return [\n listPageState.activeFilters?.length,\n listPageState.currentPageNumber,\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\n ];\n },\n async () => {\n const newListPageState = await this.props.data.listPageState;\n const input = new GetFullProductsByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n\n // eslint-disable-next-line max-len -- existing code\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : JSON.stringify({\n ProductId: this.props.context.request.query?.productId,\n Recommendation: this.props.context.request.query?.recommendation\n }),\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\n !!this.props?.config?.includeAttributes,\n this.props.config.updateRefinerPanel,\n this.props.context.request.locale,\n this.catalogId,\n channelInventoryConfiguration,\n inventoryRefiner\n );\n\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\n newListPageState.totalProductCount = productResults.count;\n newListPageState.activeProducts = productResults.products;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\n if (\n this.props.config.enableAffiliationBasedPricing &&\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n\n const context = this.props.context as ICoreContext;\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\n if (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\n this.props.config.includeAttributes\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities of dimensions data without blocking the UI.\n this._getProductsDimensionsAvailabilities();\n }\n\n if (this.props.config.updateRefinerPanel) {\n const refinerInput = new RefinersByCollectionInput(\n newListPageState.pageType,\n this.props.context.request.apiSettings,\n {\n Paging: {\n Top: this.props.config.itemsPerPage,\n Skip: Math.max(\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\n this.defaultPageNumber\n )\n },\n count: true,\n Sorting: newListPageState.sortingCritera ?? {}\n },\n newListPageState.activeFilters ?? [],\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\n +(this.props.context.request.urlTokens.recordId || 0),\n this.props.context.request.query?.q\n ? this.props.context.request.query.q\n : this.props.context.request.query?.productId,\n false,\n this.props.config.updateRefinerPanel,\n undefined,\n this.catalogId,\n channelInventoryConfiguration,\n inventoryRefiner\n );\n\n const refiners = await getCollectionRefinersAction(refinerInput, this.props.context.actionContext);\n this.setState({ refiners });\n }\n }\n );\n\n if (\n this.props.config.enableAffiliationBasedPricing &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Condition required.\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\n ) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\n this._getActivePrice();\n }\n }\n\n public componentWillUnmount(): void {\n this._isMounted = false;\n if (MsDyn365.isBrowser && window.removeEventListener) {\n window.removeEventListener('resize', this._updateViewport);\n }\n }\n\n public render(): JSX.Element {\n const {\n config: { imageSettings, className },\n resources,\n data: { listPageState, products: productCollection, featureProduct }\n } = this.props;\n\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\n this._updateListPageState(listPageState.result, productCollection.result);\n this.isListPageStateUpdated = true;\n }\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\n let errorText = '';\n if (!ArrayExtensions.hasElements(products)) {\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\n }\n const productsComponent = this._getProducts();\n const featureComponent = (\n \n );\n\n let pageType = 'search';\n if (this.props.data.category.result?.ParentCategory === this.allBrandsRecordId) {\n pageType = 'brand';\n } else if (this.props.data.category.result?.ParentCategory === this.localyOnlineRecordId) {\n pageType = 'parent-category';\n } else if (this.props.data.category.result && this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId) {\n pageType = 'category';\n }\n const searchResultContainerViewProps = {\n ...this.props,\n products: productsComponent,\n TitleViewProps: this._getCollectionTitle(pageType),\n categoryHierarchy: !this.props.config.disableHierarchy && this._getCategoryHierarchy(),\n refineMenu: this._getRefineMenu(),\n className: classnames('ms-search-result-container', className),\n SearchResultContainer: {\n moduleProps: this.props,\n className: classnames('ms-search-result-container', className)\n },\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : null,\n pagination: this._getPagination(),\n ProductsContainer: { className: 'ms-search-result-container__Products' },\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\n // CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\n choiceSummary: this._getChoiceSummary(),\n modalToggle:\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\n \n ) : null,\n searchResultModal: this._getSearchResultModal(),\n isMobile: this.isMobile,\n errorMessage: errorText && ,\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\n similarLookProduct: searchProduct ? featureComponent : null,\n productPrices: this.productPrices,\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities,\n categoriesCarousal: this.renderCategoriesCarousal(),\n isCategoryPage:\n this.props.data.category.result && this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId\n ? true\n : false,\n isBrandPage: this.props.data.category.result?.ParentCategory === this.allBrandsRecordId,\n pageType\n };\n return this.props.renderView(searchResultContainerViewProps) as React.ReactElement;\n }\n\n private renderCategoriesCarousal = (): React.ReactNode => {\n const base_image_url = 'https://images-eu-prod.cms.commerce.dynamics.com/cms/api/vnnhvggtsx/imageFileData/'; //process.env.MSDyn365Commerce_CMSIMAGEBASEURL;\n const parentCategory =\n this.props.data.categories?.result &&\n this.props.data.categories.result.filter(cat => cat.RecordId === this.props.data.category.result?.ParentCategory);\n\n let parentCategoryUrl =\n parentCategory?.[0]?.Name &&\n `/${parentCategory?.[0]?.Name.replace(/\\s+/g, '-').toLowerCase()}/${parentCategory?.[0]?.RecordId}.c`;\n\n let parentCategoryImgUrl =\n parentCategory?.[0]?.Images &&\n parentCategory?.[0].Images?.[0].Uri &&\n `${parentCategory?.[0].Images?.[0].Uri.replace(/\\s+/g, '-').toLowerCase()}`;\n\n let sameLevelCategories =\n this.props.data.categories?.result &&\n this.props.data.categories.result.filter(cat => cat.ParentCategory === this.props.data.category.result?.ParentCategory);\n\n let parentCategoryName = parentCategory?.[0]?.Name;\n // If parentCategory is localyOnline\n if (\n this.props.data.category.result?.ParentCategory === this.localyOnlineRecordId ||\n this.props.data.category.result?.ParentCategory === this.allOfferSRecordId\n ) {\n parentCategoryUrl =\n this.props.data.category?.result?.[0]?.Name &&\n `/${this.props.data.category?.result?.[0]?.Name.replace(/\\s+/g, '-').toLowerCase()}/${\n this.props.data.category?.result?.[0]?.RecordId\n }.c`;\n\n parentCategoryImgUrl =\n this.props.data.category?.result?.Images &&\n this.props.data.category?.result?.Images?.[0].Uri &&\n `${this.props.data.category?.result?.Images?.[0].Uri.replace(/\\s+/g, '-').toLowerCase()}`;\n\n parentCategoryName = this.props.data.category?.result?.Name;\n\n sameLevelCategories =\n this.props.data.categories?.result &&\n this.props.data.categories.result.filter(cat => cat.ParentCategory === this.props.data.category.result?.RecordId);\n }\n const sliderNumber = 6;\n // if (sameLevelCategories?.length && sameLevelCategories?.length >= 6) {\n // sliderNumber = 6;\n // }\n var settings = {\n dots: false,\n infinite: false,\n speed: 500,\n slidesToShow: sliderNumber,\n slidesToScroll: 1,\n arrows: true,\n responsive: [\n {\n breakpoint: 1400,\n settings: {\n slidesToShow: 6\n }\n },\n {\n breakpoint: 1200,\n settings: {\n slidesToShow: 6\n }\n },\n {\n breakpoint: 1024,\n settings: {\n slidesToShow: 5\n }\n },\n {\n breakpoint: 600,\n settings: {\n slidesToShow: 3\n }\n },\n {\n breakpoint: 480,\n settings: {\n slidesToShow: 2\n }\n }\n // You can unslick at a given breakpoint now by adding:\n // settings: \"unslick\"\n // instead of a settings object\n ]\n };\n if (sameLevelCategories && sameLevelCategories.length > 0) {\n const indexToMove = sameLevelCategories.findIndex(obj => this.props.data.category.result?.RecordId === obj.RecordId);\n\n if (indexToMove !== -1) {\n const [movedObject] = sameLevelCategories.splice(indexToMove, 1); // Remove the object at indexToMove\n sameLevelCategories.unshift(movedObject); // Add it to the beginning of the array\n }\n }\n if (\n this.props.data.category.result &&\n this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId &&\n this.props.data.category.result?.RecordId !== this.localyOnlineRecordId &&\n sameLevelCategories\n ) {\n return (\n <>\n
    {parentCategoryName}
    \n \n \n \n

    \n View all\n

    \n \n
    \n \n {sameLevelCategories.map((card, index) => {\n const categoryUrl = card?.Name && `/${card.Name.replace(/\\s+/g, '-').toLowerCase()}/${card.RecordId}.c`;\n return (\n \n \n

    {card.Name?.replace(/-/g, ' ')}

    \n \n
    \n \n );\n })}\n
    \n \n );\n } else {\n return <>;\n }\n };\n\n /**\n * Update the list page state with initial data.\n * @param listPageState -- List page State.\n * @param products -- Products.\n */\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\n let querySorting: SortColumn[] = [];\n const defaultPageNumber: number = 10;\n\n if (this._pageType === 'Category') {\n listPageState.pageType = 'Category';\n } else {\n listPageState.pageType = 'Search';\n }\n\n if (this.props.context.request.query?.sorting) {\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\n }\n\n listPageState.currentPageNumber =\n (this.props.context.request.query &&\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\n 0;\n listPageState.sortingCritera = { Columns: querySorting };\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\n listPageState.activeProducts = products.products;\n listPageState.totalProductCount = products.count;\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\n if (this.props.context.request.query?.productId) {\n const featureProduct = this.props.data.featureProduct.result;\n if (featureProduct) {\n listPageState.featureProduct = featureProduct;\n }\n }\n };\n\n /**\n * Get products dimension availabilities.\n * @returns Void.\n */\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\n new DimensionAvailabilitiesForProductSearchResultInput(\n productsList,\n this.props.context as ICoreContext,\n DimensionSwatchDisplayTypes.productCard\n ),\n this.props.context.actionContext\n );\n\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\n this.setState({ productsDimensionAvailabilities });\n }\n };\n\n /**\n * Get the active price for the products.\n */\n private readonly _getActivePrice = async (): Promise => {\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\n const products = await getPriceForProductSearchResult(\n new PriceForProductSearchResultInput(productsList),\n this.props.context.actionContext\n );\n\n const listPageState = await this.props.data.listPageState;\n listPageState.activeProducts = products;\n };\n\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\n const { resources } = this.props;\n return SearchResultModal({\n resources: {\n modalCloseButtonText: resources.modalCloseButtonText,\n modalTitle: resources.modalTitle\n },\n isOpen: this.state.modalIsOpen,\n returnRef: this._modalToggleRef,\n onModalToggle: this._toggleModal\n });\n };\n\n private readonly _getCollectionTitle = (pageType: string): ITitleViewProps => {\n const { data, context, resources } = this.props;\n\n let collectionTitle: string | undefined = '';\n if (context && context.request && context.request.query && context.request.query.q) {\n collectionTitle = `\"${context.request.query.q}\"`;\n } else {\n collectionTitle =\n (data.category.result &&\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\n (data.category.result && data.category.result.Name) ||\n this.props.context.request.query?.title ||\n '';\n }\n let productCountText = '';\n let productCountNumber: number | undefined;\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\n productCountNumber = data.listPageState.result.totalProductCount;\n } else if (data.products && data.products.result) {\n productCountNumber = data.products.result.count;\n }\n\n if (productCountNumber && productCountNumber !== 0) {\n productCountText =\n productCountNumber !== 1\n ? format(this.props.resources.numberOfProducts, productCountNumber)\n : this.props.resources.oneProduct;\n } else {\n productCountText = format(this.props.resources.numberOfProducts, 0);\n }\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\n const titlePrefix = ;\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\n\n return {\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\n title: {\n titlePrefix,\n titleText,\n titleCount\n },\n isCategoryPage: this.props.data.category.result ? true : false,\n pageType: pageType\n };\n };\n\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\n const { data } = this.props;\n const categoryHierarchy = data.categoryHierarchy.result;\n const categoryLinks =\n categoryHierarchy &&\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\n return (\n <Link\n key={index}\n text={value.Name}\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\n href={value.Url}\n />\n );\n });\n const categoryLinkSeparator = <Separator separator='/' />;\n\n return {\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\n categoryHierarchyList: categoryLinks,\n categoryHierarchySeparator: categoryLinkSeparator\n };\n };\n\n private readonly _getSortingDropDown = (): ISortByViewProps => {\n const { resources } = this.props;\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\n let dropdownOptions = this._getAllSortByOptions();\n const sortOptionsBlackList = ['AverageRating-Desc', 'BestSelling', 'NewScore', 'TrendingScore'];\n if (this.props.context.app.config.hideRating) {\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\n }\n // Remove blacklisted sort options\n dropdownOptions = dropdownOptions.filter(dropdownOption => !sortOptionsBlackList.includes(dropdownOption.key));\n\n const dropdown = (\n <>\n <div className='sort-filter-parent'>\n <LabeledDropdown\n labelClassname='reviews-list-sort-by'\n labelText={resources.sortByDropdownLabel}\n dropdownId='categorySortByDropdown'\n dropdownClassname='reviews-list-dropdown'\n toggleColor='link'\n dropdownOptions={dropdownOptions}\n selectedOption={activeDropdown}\n onSelectOption={this._updateSortByDropdown}\n ref={this._sortAndFilterContainerRef}\n />\n <svg width='6' height='4' viewBox='0 0 6 4' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M3.56565 3.74758C3.26725 4.08414 2.73275 4.08414 2.43435 3.74758L0.184084 1.20944C-0.235608 0.736054 0.108641 -5.47465e-08 0.749732 0L5.25027 3.84327e-07C5.89136 4.39073e-07 6.23561 0.736055 5.81592 1.20944L3.56565 3.74758Z'\n fill='black'\n />\n </svg>\n </div>\n </>\n );\n return {\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\n sortByDropDown: dropdown\n };\n };\n\n private readonly _getPagination = (): React.ReactNode => {\n const { config, context, data, resources } = this.props;\n const listPageState = data.listPageState.result;\n const fullUrl = getCurrentUrl(context.request);\n const itemsPerPage = config.itemsPerPage || 10;\n // eslint-disable-next-line max-len -- existing code\n const skipCount = listPageState?.currentPageNumber\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\n const totalItems = listPageState?.totalProductCount || 0;\n const previousText = resources.flipperPrevious;\n const nextText = resources.flipperNext;\n\n if (totalItems <= itemsPerPage) {\n return null;\n }\n return (\n <UncontrolledPagination\n className='ms-search-result-container__pagination'\n role='navigation'\n aria-label={resources.paginationAriaLabel}\n url={fullUrl.href}\n qsp='skip'\n items={totalItems}\n itemsPerPage={itemsPerPage}\n startingItem={skipCount}\n previousText={this._renderPrev(previousText)}\n nextText={this._renderNext(nextText)}\n previousAriaLabel={previousText}\n nextAriaLabel={nextText}\n telemetryContent={this.telemetryContent}\n />\n );\n };\n\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\n const { data, context, config } = this.props;\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\n const validRefiners =\n this.props.config.updateRefinerPanel && ArrayExtensions.hasElements(this.state.refiners)\n ? this.state.refiners.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n })\n : data.refiners.result &&\n data.refiners.result.filter(refiner => {\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\n });\n\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\n const expandedRefiners = this.expandrefinerCount;\n let pageType = 'search';\n if (this.props.data.category.result?.ParentCategory === this.allBrandsRecordId) {\n pageType = 'brand';\n } else if (this.props.data.category.result && this.props.data.category.result?.ParentCategory !== this.allBrandsRecordId) {\n pageType = 'category';\n }\n const brandFilterBlackList = ['Brand', 'Rating', 'Sourced From', 'hideOOS'];\n const categoryFilterBlackList = ['Category', 'Rating', 'Sourced From', 'hideOOS'];\n const otherFilterBlackList = ['Sourced From', 'hideOOS'];\n const subMenus =\n validRefiners &&\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\n if (pageType === 'brand') {\n if (productRefinerHierarchy.KeyName && brandFilterBlackList.includes(productRefinerHierarchy.KeyName)) {\n return null;\n } else {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n }\n } else if (pageType === 'category') {\n if (productRefinerHierarchy.KeyName && categoryFilterBlackList.includes(productRefinerHierarchy.KeyName)) {\n return null;\n } else {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n }\n } else {\n if (productRefinerHierarchy.KeyName && otherFilterBlackList.includes(productRefinerHierarchy.KeyName)) {\n return null;\n } else {\n return (\n <RefineSubmenu\n productRefinerHierarchy={productRefinerHierarchy}\n selectedRefinerValues={activeRefiners}\n refineItemCommonProps={this._refineItemCommonProps}\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\n key={index}\n onUpdateRefiners={this._onUpdateRefiners}\n urlBuilder={this._buildRefinerUrl}\n isDisabled={false}\n isExpandedOnInitialLoad={!!(expandedRefiners && expandedRefiners > index)}\n tempRangeTypeTODO={tempRangeTypeTODO}\n context={context}\n moduleId={this.props.id}\n moduleTypeName={this.props.typeName}\n telemetryContent={this.telemetryContent}\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\n isMobile={this.isMobile}\n />\n );\n }\n }\n });\n\n return {\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\n refiners: subMenus\n };\n };\n\n /**\n * Should hide from refiners.\n * @param refiner - The refiner.\n * @returns ShouldHideFromRefiners.\n */\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\n const { channelInventoryConfiguration } = this.state;\n const isInventorySortableAttribute =\n (this.props.data.products.result?.inventoryAwareSortableAttributeId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId) ||\n (channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId);\n\n const isInventoryProductAttribute =\n (this.props.data.products.result?.channelInventoryConfigurationId !== 0 &&\n refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId) ||\n (channelInventoryConfiguration?.InventoryProductAttributeRecordId !== 0 &&\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId);\n\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\n return (\n isInventorySortableAttribute ||\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\n isInventoryProductAttribute)\n );\n };\n\n /**\n * Get inventory refiners.\n * @param listPageState The listPageState\n * @returns inventory refiner.\n */\n private readonly _getInventoryRefiner = async (\n listPageState: ListPageState,\n channelInventoryConfiguration: ChannelInventoryConfiguration\n ): Promise<IProductRefinerHierarchy | undefined> => {\n if (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS) {\n const baseCollectionInput = new BaseCollectionInput(\n listPageState.pageType,\n this.props.context.request.apiSettings,\n {\n count: true\n },\n\n // Parameter - refiners\n [],\n\n // Parameter - category\n undefined,\n\n // Parameter - searchText\n '',\n\n // Parameter - includeAttributes\n false,\n\n // Parameter - isUpdateRefinerPanel\n false,\n\n // Parameter - locale\n undefined,\n this.catalogId,\n channelInventoryConfiguration\n );\n const inventoryInStockRefinerValueInput = new InventoryInStockRefinerValueInput(\n baseCollectionInput,\n channelInventoryConfiguration?.InventoryProductAttributeRecordId\n );\n return getInventoryRefinerAction(inventoryInStockRefinerValueInput, this.props.context.actionContext);\n }\n return Promise.resolve(undefined);\n };\n\n private readonly _getChoiceSummary = (): React.ReactNode => {\n const { resources, data, telemetry } = this.props;\n const { channelInventoryConfiguration } = this.state;\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\n return (\n <ChoiceSummary\n classNames='ms-choice-summary-by-category'\n clearAllText={resources.clearAllText}\n label={resources.choiceSummaryLabel}\n closeAriaLabel={resources.closeAriaLabel}\n selectedChoices={selectedRefiners}\n // @ts-expect-error: NOTE Type-unsafe line below, null refinersByCategoryHierarchy case not handled\n refinerHierarchy={data.refiners.result}\n choiceFormat={resources.choiceFormat}\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\n telemetry={telemetry}\n onChoiceClicked={this._onChoiceClicked}\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\n choiceAriaLabel={resources.choiceAriaLabel}\n telemetryContent={this.telemetryContent}\n context={this.props.context}\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\n refinerValues={refinerValueName}\n />\n );\n };\n\n /**\n * Get Active products.\n * @returns - JSX Elements.\n */\n private readonly _getProducts = (): JSX.Element => {\n const {\n config: { imageSettings }\n // ,allowBackNavigation: shouldAllowBackNavigation\n } = this.props;\n const { resources } = this.props;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\n // const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\n const shouldAllowBack = false;\n //shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\n const quickviewSlot = this.props.slots?.quickview?.[0];\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\n ? this.props.slots.productComparisonButton[0]\n : null;\n\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n return (\n <ProductSearchResultItems\n products={products}\n context={this.props.context}\n imageSettings={imageSettings}\n resources={resources}\n moduleType={this.props.typeName}\n moduleId={this.props.id}\n allowBackNavigation={shouldAllowBack}\n telemetryContent={this.telemetryContent}\n quickviewSlot={quickviewSlot}\n productComparisonButton={productComparisonButton}\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\n />\n );\n };\n\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n // eslint-disable-next-line max-len -- existing code\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\n !actionContext ? 'actionContext ' : ''\n } could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n window.history.pushState(\n {},\n '',\n buildListPageUrl(\n getCurrentUrl(this.props.context.request),\n undefined,\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\n undefined\n )\n );\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.sortingCritera = {\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\n };\n });\n };\n\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\n const { data } = this.props;\n\n if (!data.searchConfiguration.result) {\n return {};\n }\n\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\n return searchConfiguration.key === option.key;\n });\n\n if (mappedConfiguration) {\n return mappedConfiguration.sortColumn;\n }\n\n return {};\n };\n\n /**\n * Retrieves current sort criteria.\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\n */\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\n return sortCriteria!.Columns[0];\n }\n\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\n if (ArrayExtensions.hasElements(queryColumns)) {\n return queryColumns[0];\n }\n\n return undefined;\n };\n\n /**\n * Retrieves dropdown options.\n * @returns All dropdown options.\n */\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!searchConfiguration) {\n return [];\n }\n\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\n );\n\n return ArrayExtensions.validValues(mappedSearchConfiguration);\n };\n\n /**\n * Retrieves current selected dropdown option based on the sort criteria.\n * @returns Current dropdown option.\n */\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\n const activeSortColumn = this._getSortCriteriaColumn();\n\n const searchConfiguration = this.props.data.searchConfiguration.result;\n\n if (!activeSortColumn || !searchConfiguration) {\n return undefined;\n }\n\n const activeMappedConfig = searchConfiguration.find(\n mappedSearchConfig =>\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\n );\n if (!activeMappedConfig) {\n return undefined;\n }\n\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\n };\n\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\n const {\n context: { request: requestContext, actionContext }\n } = this.props;\n\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\n const error = `Refine menu cannot refine search criteria: \n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\n this.props.telemetry.warning(error);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result?.activeFilters || []\n );\n\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\n transaction(() => {\n this.props.data.listPageState.result!.currentPageNumber = 0;\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\n });\n };\n\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\n if (this.props.data.listPageState.result) {\n const newRefinementCriteria = getUpdatedRefinementCriteria(\n itemToggleNotification,\n this.props.data.listPageState.result.activeFilters || []\n );\n\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\n }\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\n return '';\n };\n\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\n const { data, telemetry } = this.props;\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\n return;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!notification.clearAll) {\n const selectedChoice = notification.choiceClicked;\n if (!selectedChoice) {\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\n return;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n\n // Set focus to sort and filter\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\n setTimeout(() => {\n dropdownElement && dropdownElement.focus();\n }, 50);\n }\n\n const fullUrl = getCurrentUrl(this.props.context.request);\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\n data.listPageState.result.currentPageNumber = 0;\n data.listPageState.result.activeFilters = currentRefinementCriteria;\n };\n\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\n const { data, telemetry } = this.props;\n const fullUrl = getCurrentUrl(this.props.context.request);\n\n if (!data.listPageState.result) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\n return fullUrl.href;\n }\n\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\n\n if (!isClearAll) {\n if (!selectedRefiner) {\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\n return fullUrl.href;\n }\n currentRefinementCriteria = currentRefinementCriteria.filter(\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\n );\n } else {\n currentRefinementCriteria = [];\n }\n\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\n };\n\n private _getViewport(): GridSize {\n if (MsDyn365.isBrowser) {\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\n }\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\n }\n\n private _toggleModal(): void {\n this.setState({\n modalIsOpen: !this.state.modalIsOpen\n });\n }\n\n private _updateViewport(): void {\n this._viewport = this._getViewport();\n\n if (this.state.modalIsOpen && !this.isMobile) {\n this._toggleModal();\n }\n }\n\n private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\n switch (refinerCount) {\n case expandRefinersCount.all:\n this.expandrefinerCount = validRefiners;\n break;\n case expandRefinersCount.one:\n this.expandrefinerCount = 1;\n break;\n case expandRefinersCount.two:\n this.expandrefinerCount = 2;\n break;\n case expandRefinersCount.three:\n this.expandrefinerCount = 3;\n break;\n case expandRefinersCount.four:\n this.expandrefinerCount = 4;\n break;\n default:\n this.expandrefinerCount = 0;\n }\n };\n\n /**\n * Renders a Pagination previous text.\n * @param paginationPreviousText - Pagination previous text from resources.\n * @returns Previous text and flipper icon.\n */\n private readonly _renderPrev = (paginationPreviousText: string) => {\n return (\n <div className='msc-pagination__prev'>\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\n <span className='prev-text'>{paginationPreviousText}</span>\n </div>\n );\n };\n\n /**\n * Renders a Pagination next text.\n * @param paginationNextText - Pagination next text from resources.\n * @returns Next text and flipper icon.\n */\n private readonly _renderNext = (paginationNextText: string) => {\n return (\n <div className='msc-pagination__next'>\n <span className='next-text'>{paginationNextText}</span>\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\n </div>\n );\n };\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\n/*import { ISearchResultModalViewProps } from './components';*/\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n //isMobile,\n //modalToggle,\n //searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n //categoriesCarousal\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n /* if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {categoriesCarousal}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }*/\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu, isRecoSearchPage, sortByOptions)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\n/*const createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};*/\n\n/*const createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderRefiner(refineMenu, isRecoSearchPage, sortByDropDown));\n }\n return null;\n};*/\n\nconst renderRefiner = (\n props: IRefineMenuViewProps,\n isRecoSearchPage: string | undefined,\n sortByOptions: ISortByViewProps | undefined\n): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\n/* eslint-disable no-duplicate-imports */\nimport {\n // ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n // ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport {\n ISearchResultContainerViewProps, ITitleViewProps\n} from '../../../modules/search-result-container/search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n //categoryHierarchy,\n sortByOptions,\n // CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct,\n categoriesCarousal\n } = props;\n\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <>\n <div className=\"col-12 custom-category-slider\">\n {categoriesCarousal}\n </div>\n <div className=\"col-12 custom-search\">\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Module {...SearchResultContainer}>\n {/* {categoryHierarchy && <Node {...CategoryNavContainer}>{renderCategoryHierarchy(categoryHierarchy)}</Node>} */}\n <Node {...RefineAndProductSectionContainer}>\n <Node {...ProductSectionContainer}>\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <div className='ms-search-result-wrapper-title-choice-summary'>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n </div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n </div>\n </>\n );\n }\n return (\n <>\n <div className=\"col-12 custom-category-slider\">\n {categoriesCarousal}\n </div>\n <div className=\"col-12 custom-search\">\n <Module {...SearchResultContainer}>\n {/* {categoryHierarchy && <Node {...CategoryNavContainer}>{renderCategoryHierarchy(categoryHierarchy)}</Node>} */}\n\n {errorMessage? <div className='no-products-head'> {TitleViewProps && renderTitle(TitleViewProps)}{errorMessage}</div>: <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <div className='ms-search-result-wrapper-title-choice-summary'>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n </div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n <Node {...ProductsContainer}>\n {products}\n </Node>\n {pagination}\n </Node>\n </Node> }\n\n\n\n\n\n </Module>\n </div>\n </>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\n/*const renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};*/\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer, isCategoryPage, pageType } = props;\n\n if (title) {\n return (\n <Node {...TitleContainer}>\n {pageType === 'parent-category' ? (\n <h2>\n <span className=\"ms-search-result__collection-title-text\"> All Products </span>\n </h2>\n ) :(\n <h2>\n {!isCategoryPage && title.titlePrefix}\n {title.titleText}\n {!isCategoryPage &&\n <>\n ({title.titleCount})\n </>}\n </h2>\n )}\n\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\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['search-result-container'] = {\n c: () => require('partner/modules/search-result-container/search-result-container.tsx'),\n $type: 'containerModule',\n da: [{name:'categories', path:'actions/get-category-list.action', runOn: 0},{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:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'listPageState', path:'modules/search-result-container/list-page-state', runOn: 0},{name:'products', path:'modules/search-result-container/actions/get-full-products-by-collection', runOn: 0},{name:'refiners', path:'modules/search-result-container/actions/get-refiners-for-collection', runOn: 0},{name:'searchConfiguration', path:'modules/search-result-container/actions/get-mapped-search-configuration', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'search-result-container',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/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-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\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/get-category-list.action';\n let dataAction = require('partner/actions/get-category-list.action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/actions/get-full-products-by-collection';\n let dataAction = require('partner/modules/search-result-container/actions/get-full-products-by-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/actions/get-mapped-search-configuration';\n let dataAction = require('partner/modules/search-result-container/actions/get-mapped-search-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/actions/get-refiners-for-collection';\n let dataAction = require('partner/modules/search-result-container/actions/get-refiners-for-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/search-result-container/list-page-state';\n let dataAction = require('partner/modules/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|search-result-container|search-result-container'] = {\n c: () => require('partner/modules/search-result-container/search-result-container.view.tsx'),\n cn: '__local__-__local__-search-result-container'\n };\nviewDictionary['__local__|__local__|themes|localy-theme|views|search-result-container'] = {\n c: () => require('partner/themes/localy-theme/views/search-result-container.view.tsx'),\n cn: '__local__-__local__-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|search-result-container'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/search-result-container.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-modules|search-result-container|modules|search-result-container|search-result-container'] = {\n c: () => require('@msdyn365-commerce-modules/search-result-container/dist/lib/modules/search-result-container/search-result-container.view.js'),\n cn: '@msdyn365-commerce-modules-search-result-container-search-result-container'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|search-result-container'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/search-result-container.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-search-result-container'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n {categoryHierarchy && <Node {...CategoryNavContainer}>{renderCategoryHierarchy(categoryHierarchy)}</Node>}\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <div className='ms-search-result-wrapper-title-choice-summary'>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n </div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}({title.titleCount})\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ISearchResultModalViewProps } from './components';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from './search-result-container';\n\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps> = props => {\n const {\n SearchResultContainer,\n products,\n pagination,\n ProductsContainer,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n errorMessage,\n FeatureSearchContainer,\n similarLookProduct\n } = props;\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {choiceSummary}\n {modalToggle}\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n <Node {...RefineAndProductSectionContainer}>\n {refineMenu && renderRefiner(refineMenu)}\n <Node {...ProductSectionContainer}>\n {TitleViewProps && renderTitle(TitleViewProps)}\n {choiceSummary}\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...ProductsContainer}>\n {errorMessage}\n {products}\n </Node>\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefiner(refineMenu));\n }\n return null;\n};\n\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList && categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h2>\n {title.titlePrefix}\n {title.titleText}\n </h2>\n </Node>\n );\n }\n return null;\n};\n\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <h5>{title.titleCount}</h5>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport {\n IPriceComponentResources,\n ISwatchItem,\n PriceComponent,\n ProductComponentSwatchComponent,\n RatingComponent\n} from '@msdyn365-commerce/components';\nimport {\n getCatalogId,\n IAny,\n IComponent,\n IComponentProps,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageData,\n IImageSettings,\n Image,\n msdyn365Commerce\n} from '@msdyn365-commerce/core';\nimport { AttributeSwatch, AttributeValue, ProductDimension, ProductPrice, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n convertDimensionTypeToProductDimensionType,\n Dictionary,\n DimensionTypes,\n generateImageUrl,\n getProductPageUrlSync,\n IDimensionsApp,\n StringExtensions,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n format,\n getPayloadObject,\n getTelemetryAttributes,\n ITelemetryContent,\n onTelemetryClick\n} from '@msdyn365-commerce-modules/utilities';\nimport React, { useState } from 'react';\n\nexport interface IProductComponentProps extends IComponentProps<{ product?: ProductSearchResult }> {\n className?: string;\n imageSettings?: IImageSettings;\n savingsText?: string;\n freePriceText?: string;\n originalPriceText?: string;\n currentPriceText?: string;\n ratingAriaLabel?: string;\n ratingCountAriaLabel?: string;\n allowBack?: boolean;\n telemetryContent?: ITelemetryContent;\n quickViewButton?: React.ReactNode;\n productComparisonButton?: React.ReactNode;\n isEnabledProductDescription?: boolean;\n isPriceMinMaxEnabled?: boolean;\n priceResources?: IPriceComponentResources;\n inventoryLabel?: string;\n dimensionAvailabilities?: IProductsDimensionsAvailabilities[];\n swatchItemAriaLabel?: string;\n}\n\nexport interface IProductComponent extends IComponent<IProductComponentProps> {}\n\nconst PriceComponentActions = {};\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param productData - Product card to be rendered.\n * @returns The default color swatch selected if any.\n */\nfunction getDefaultSwatchSelected(coreContext: ICoreContext, productData?: ProductSearchResult): AttributeSwatch | null {\n if (!productData || !productData.AttributeValues) {\n return null;\n }\n\n const siteContext = coreContext as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n const attributeSwatches = productData.AttributeValues.find(\n attributeValue => attributeValue.KeyName?.toLocaleLowerCase() === dimensionToPreSelectInProductCard\n )?.Swatches;\n\n if (!ArrayExtensions.hasElements(attributeSwatches)) {\n return null;\n }\n\n const defaultSwatch = attributeSwatches.find(item => item.IsDefault === true) ?? attributeSwatches[0];\n return defaultSwatch;\n}\n\n/**\n * Gets the product image from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductImageUrlFromDefaultSwatch(coreContext: ICoreContext, productData?: ProductSearchResult): string | undefined {\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\n const swatchProductImageUrls = defaultSwatch?.ProductImageUrls;\n if (!ArrayExtensions.hasElements(swatchProductImageUrls)) {\n return productData?.PrimaryImageUrl;\n }\n\n return generateImageUrl(swatchProductImageUrls[0], coreContext.request.apiSettings);\n}\n\n/**\n * Updates the product url link to product details page.\n * @param productDetailsPageUrl - Product page url.\n * @param coreContext - Context of the module using the component.\n * @param queryString - Querystring to be added to the URL.\n * @returns The update product page url.\n */\nfunction updateProductUrl(productDetailsPageUrl: string, coreContext: ICoreContext, queryString: string): string {\n const sourceUrl = new URL(productDetailsPageUrl, coreContext.request.apiSettings.baseUrl);\n if (sourceUrl.search) {\n sourceUrl.search += `&${queryString}`;\n } else {\n sourceUrl.search += queryString;\n }\n\n const updatedUrl = new URL(sourceUrl.href);\n return updatedUrl.pathname + sourceUrl.search;\n}\n\n/**\n * Gets the react node for product unit of measure display.\n * @param unitOfMeasure - DefaultUnitOfMeasure property from product.\n * @returns The node representing markup for unit of measure component.\n */\nfunction renderProductUnitOfMeasure(unitOfMeasure?: string): JSX.Element | null {\n if (!unitOfMeasure) {\n return null;\n }\n return (\n <div className='msc-product__unit-of-measure'>\n <span>{unitOfMeasure}</span>\n </div>\n );\n}\n\n/**\n * Gets the react node for product availability.\n * @param inventoryAvailabilityLabel - The product information.\n * @returns The node representing markup for product availability.\n */\nfunction renderProductAvailability(inventoryAvailabilityLabel: string | undefined): JSX.Element | null {\n if (!inventoryAvailabilityLabel || inventoryAvailabilityLabel === '') {\n return null;\n }\n\n return (\n <div className='msc-product__availability'>\n <span>{inventoryAvailabilityLabel}</span>\n </div>\n );\n}\n\n/**\n * Renders product comparison button similar to the quick view button.\n * @param productComparisonButton - React element of the button.\n * @param product - Current product info.\n * @param catalogId - Current catalog.\n * @returns React element for the specific product.\n */\nfunction renderProductComparisonButton(\n productComparisonButton: React.ReactNode,\n product: ProductSearchResult,\n catalogId: number\n): JSX.Element | undefined {\n validateCatalogId(catalogId);\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\n}\n\n/**\n * Gets the product page url from the default swatch selected.\n * @param coreContext - Context of the module using the component.\n * @param productUrl - Product page url for the product card.\n * @param productData - Product card to be rendered.\n * @returns The product card image url.\n */\nfunction getProductPageUrlFromDefaultSwatch(\n coreContext: ICoreContext,\n productUrl: string,\n productData?: ProductSearchResult\n): string | undefined {\n const defaultSwatch = getDefaultSwatchSelected(coreContext, productData);\n if (!defaultSwatch?.SwatchValue) {\n return productUrl;\n }\n\n const siteContext = coreContext as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n const queryStringEncoded = encodeURIComponent(defaultSwatch.SwatchValue);\n const queryString = `${dimensionToPreSelectInProductCard}=${queryStringEncoded}`;\n return updateProductUrl(productUrl, coreContext, queryString);\n}\n\nconst ProductCard: React.FC<IProductComponentProps> = ({\n data,\n context,\n imageSettings,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n ratingAriaLabel,\n ratingCountAriaLabel,\n allowBack,\n typeName,\n id,\n telemetryContent,\n quickViewButton,\n productComparisonButton,\n isEnabledProductDescription,\n isPriceMinMaxEnabled,\n priceResources,\n inventoryLabel,\n dimensionAvailabilities,\n swatchItemAriaLabel\n}) => {\n const product = data.product;\n\n let productUrl = getProductPageUrlSync(product?.Name ?? '', product?.RecordId ?? Number.MIN_VALUE, context.actionContext, undefined);\n if (allowBack) {\n productUrl = updateProductUrl(productUrl, context, 'back=true');\n }\n const productImageUrlFromSwatch = getProductImageUrlFromDefaultSwatch(context, product) ?? product?.PrimaryImageUrl;\n const productPageUrlFromSwatch = getProductPageUrlFromDefaultSwatch(context, productUrl, product) ?? productUrl;\n const [productPageUrl, setProductPageUrl] = useState<string>(productPageUrlFromSwatch);\n const [productImageUrl, setProductImageUrl] = useState<string | undefined>(productImageUrlFromSwatch);\n React.useEffect(() => {\n setProductPageUrl(productPageUrlFromSwatch);\n setProductImageUrl(productImageUrlFromSwatch);\n }, [productUrl, productPageUrlFromSwatch, productImageUrlFromSwatch]);\n const [selectedSwatchItems] = useState(new Dictionary<DimensionTypes, ISwatchItem>());\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access -- app context is generic\n const enableStockCheck = context.app.config.enableStockCheck;\n\n const siteContext = context as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n\n /**\n * Updates the product page and Image url based on swatch selected.\n * @param coreContext - Context of the caller.\n * @param swatchItem - Dimension swatch selected.\n */\n const updatePageAndImageUrl = React.useCallback(\n (coreContext: ICoreContext, swatchItem: ISwatchItem) => {\n const dimensionType = swatchItem.dimensionType;\n selectedSwatchItems.setValue(dimensionType, swatchItem);\n if (StringExtensions.isNullOrWhitespace(swatchItem.value)) {\n return;\n }\n const queryString = `${dimensionType}=${swatchItem.value}`;\n let productPageUrlWithSwatch = '';\n if (productPageUrl.includes(dimensionType)) {\n const newUrl = new URL(productPageUrl, coreContext.request.apiSettings.baseUrl);\n newUrl.searchParams.delete(dimensionType);\n productPageUrlWithSwatch = updateProductUrl(newUrl.toString(), context, queryString);\n } else {\n productPageUrlWithSwatch = updateProductUrl(productPageUrl, context, queryString);\n }\n setProductPageUrl(productPageUrlWithSwatch);\n if (dimensionType === dimensionToPreSelectInProductCard) {\n const swatchProductImageUrl = ArrayExtensions.hasElements(swatchItem.productImageUrls)\n ? swatchItem.productImageUrls[0]\n : undefined;\n const newImageUrl = generateImageUrl(swatchProductImageUrl, coreContext.request.apiSettings);\n setProductImageUrl(newImageUrl);\n }\n },\n [selectedSwatchItems, context, productPageUrl]\n );\n\n if (!product) {\n return null;\n }\n\n /**\n * Checks if rendering the particular dimensions is allowed for product card.\n * @param dimensionType - Dimension to be displayed.\n * @returns Updates the state with new product page url.\n */\n function shouldDisplayDimension(dimensionType: string): boolean {\n const dimensionsContext = context as ICoreContext<IDimensionsApp>;\n const dimensionsToDisplayOnProductCard = dimensionsContext.app.config.dimensionsInProductCard;\n return (\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\n dimensionsToDisplayOnProductCard.includes(dimensionType.toLocaleLowerCase() as DimensionTypes)\n );\n }\n\n /**\n * Gets the react node for product dimension as swatch.\n * @param attributeValues - Attribute value property from product.\n * @returns The node representing markup for unit of measure component.\n */\n function renderProductDimensions(attributeValues?: AttributeValue[]): JSX.Element | null {\n if (!attributeValues) {\n return null;\n }\n\n return (\n <div className='msc-product__dimensions'>\n {attributeValues.map((item: AttributeValue) => {\n const dimensionTypeValue = item.KeyName?.toLocaleLowerCase() ?? '';\n if (!shouldDisplayDimension(dimensionTypeValue)) {\n return null;\n }\n\n const siteContext = context as ICoreContext<IDimensionsApp>;\n const dimensionToPreSelectInProductCard = siteContext.app.config.dimensionToPreSelectInProductCard;\n const dimensionType = dimensionTypeValue as DimensionTypes;\n const swatches =\n item.Swatches?.map<ISwatchItem>(swatchItem => {\n return {\n itemId: `${item.RecordId ?? ''}-${dimensionTypeValue}-${swatchItem.SwatchValue ?? ''}`,\n value: swatchItem.SwatchValue ?? '',\n dimensionType,\n colorHexCode: swatchItem.SwatchColorHexCode,\n imageUrl: swatchItem.SwatchImageUrl,\n productImageUrls: swatchItem.ProductImageUrls,\n isDefault: swatchItem.IsDefault,\n swatchItemAriaLabel: swatchItemAriaLabel ? format(swatchItemAriaLabel, dimensionType) : '',\n isDisabled:\n enableStockCheck &&\n dimensionAvailabilities?.find(\n dimensionAvailability => dimensionAvailability.value === (swatchItem.SwatchValue ?? '')\n )?.isDisabled\n };\n }) ?? [];\n if (\n dimensionType === dimensionToPreSelectInProductCard &&\n ArrayExtensions.hasElements(swatches) &&\n !swatches.some(swatch => swatch.isDefault)\n ) {\n swatches[0].isDefault = true;\n }\n return (\n <ProductComponentSwatchComponent\n context={context}\n swatches={swatches}\n onSelectDimension={updatePageAndImageUrl}\n key={item.RecordId}\n />\n );\n })}\n </div>\n );\n }\n\n function renderQuickView(quickview: React.ReactNode, item?: number): JSX.Element | undefined {\n if (quickview === null) {\n return undefined;\n }\n const selectedDimensions: ProductDimension[] = selectedSwatchItems.getValues().map<ProductDimension>(swatches => {\n return {\n DimensionTypeValue: convertDimensionTypeToProductDimensionType(swatches.dimensionType),\n DimensionValue: {\n RecordId: 0,\n Value: swatches.value\n }\n };\n });\n return React.cloneElement(quickview as React.ReactElement, { selectedProductId: item, selectedDimensions });\n }\n\n // Construct telemetry attribute to render\n const payLoad = getPayloadObject('click', telemetryContent!, '', product.RecordId.toString());\n\n const attribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- -- Do not need type check for appsettings\n const isUnitOfMeasureEnabled = context.app.config && context.app.config.unitOfMeasureDisplayType === 'buyboxAndBrowse';\n\n return (\n <>\n {isEnabledProductDescription ? (\n <a\n href={productPageUrl}\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.Name!)}\n aria-label={renderLabel(\n product.Name,\n context.cultureFormatter.formatCurrency(product.Price),\n product.AverageRating,\n ratingAriaLabel,\n product.TotalRatings,\n ratingCountAriaLabel\n )}\n className='msc-product'\n {...attribute}\n >\n <div className='msc-product__image__description'>\n <div className='msc-product__image'>\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.PrimaryImageUrl,\n product.Name,\n context\n )}\n </div>\n <div className='msc-product__title_description'>\n <h5 className='msc-product__title__text'>{product.Name}</h5>\n {renderPrice(\n context,\n typeName,\n id,\n product.BasePrice,\n product.Price,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText,\n isPriceMinMaxEnabled,\n priceResources\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\n {renderDescription(product.Description)}\n </div>\n </div>\n </a>\n ) : (\n <a\n href={productPageUrl}\n onClick={onTelemetryClick(telemetryContent!, payLoad, product.Name!)}\n aria-label={renderLabel(\n product.Name,\n context.cultureFormatter.formatCurrency(product.Price),\n product.AverageRating,\n ratingAriaLabel\n )}\n className='msc-product'\n {...attribute}\n >\n <div className='msc-product__image'>\n {renderProductPlacementImage(\n imageSettings,\n context.request.gridSettings,\n productImageUrl,\n product.PrimaryImageUrl,\n product.Name,\n context\n )}\n </div>\n <div className='msc-product__details'>\n <h5 className='msc-product__title'>{product.Name}</h5>\n {renderPrice(\n context,\n typeName,\n id,\n product.BasePrice,\n product.Price,\n savingsText,\n freePriceText,\n originalPriceText,\n currentPriceText\n )}\n {isUnitOfMeasureEnabled && renderProductUnitOfMeasure(product.DefaultUnitOfMeasure)}\n </div>\n </a>\n )}\n {renderProductDimensions(product.AttributeValues)}\n {!context.app.config.hideRating &&\n renderRating(context, typeName, id, product.AverageRating, product.TotalRatings, ratingAriaLabel, ratingCountAriaLabel)}\n {renderProductAvailability(inventoryLabel)}\n {quickViewButton && renderQuickView(quickViewButton, product.RecordId)}\n {productComparisonButton && renderProductComparisonButton(productComparisonButton, product, getCatalogId(context.request))}\n </>\n );\n};\n\nfunction renderLabel(\n name?: string,\n price?: string,\n rating?: number,\n ratingAriaLabelText?: string,\n reviewCount?: number,\n ratingCountAriaLabelText?: string\n): string {\n const reviewCountArialableText = getReviewAriaLabel(reviewCount, ratingCountAriaLabelText ?? '');\n return `${name ?? ''} ${price ?? ''} ${getRatingAriaLabel(rating, ratingAriaLabelText)}${\n reviewCountArialableText ? ` ${reviewCountArialableText}` : ''\n }`;\n}\n\nfunction renderDescription(description?: string): JSX.Element | null {\n return <p className='msc-product__text'>{description}</p>;\n}\n\nfunction getRatingAriaLabel(rating?: number, ratingAriaLabel?: string): string {\n if (rating && ratingAriaLabel) {\n const roundedRating = rating.toFixed(2);\n return format(ratingAriaLabel || '', roundedRating, '5');\n }\n return '';\n}\n\nfunction getReviewAriaLabel(reviewCount?: number, ratingCountAriaLabelText?: string): string {\n if (reviewCount && ratingCountAriaLabelText) {\n return format(ratingCountAriaLabelText || '', reviewCount);\n }\n return '';\n}\n\nfunction renderRating(\n coreContext: ICoreContext,\n moduleTypeName: string,\n moduleId: string,\n avgRating?: number,\n totalRatings?: number,\n ariaLabel?: string,\n ratingCountAriaLabel?: string\n): JSX.Element | null {\n if (!avgRating) {\n return null;\n }\n\n const numberRatings = totalRatings?.toString() || undefined;\n const ratingAriaLabelText = getRatingAriaLabel(avgRating, ariaLabel);\n const ratingCountAriaLabelText = getReviewAriaLabel(Number(numberRatings), ratingCountAriaLabel);\n\n return (\n <RatingComponent\n context={coreContext}\n id={moduleId}\n typeName={moduleTypeName}\n avgRating={avgRating}\n ratingCount={numberRatings}\n readOnly\n ariaLabel={ratingAriaLabelText}\n ratingCountAriaLabel={ratingCountAriaLabelText}\n data={{}}\n />\n );\n}\n\nfunction renderPrice(\n context: ICoreContext,\n typeName: string,\n id: string,\n basePrice?: number,\n adjustedPrice?: number,\n savingsText?: string,\n freePriceText?: string,\n originalPriceText?: string,\n currentPriceText?: string,\n isPriceMinMaxEnabled?: boolean,\n priceResources?: IPriceComponentResources\n): JSX.Element | null {\n const price: ProductPrice = {\n BasePrice: basePrice,\n AdjustedPrice: adjustedPrice,\n CustomerContextualPrice: adjustedPrice\n };\n\n return (\n <PriceComponent\n context={context}\n id={id}\n typeName={typeName}\n data={{ price }}\n savingsText={savingsText}\n freePriceText={freePriceText}\n originalPriceText={originalPriceText}\n isPriceMinMaxEnabled={isPriceMinMaxEnabled}\n priceResources={priceResources}\n />\n );\n}\n\nfunction renderProductPlacementImage(\n imageSettings?: IImageSettings,\n gridSettings?: IGridSettings,\n imageUrl?: string,\n fallbackImageUrl?: string,\n altText?: string,\n context?: ICoreContext<IGeneric<IAny>>\n): JSX.Element | null {\n if (!imageUrl || !gridSettings || !imageSettings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment -- Site level config can be of any type.\n const contextConfig = context?.app.config?.placeholderImageName;\n const emptyPlaceHolderImage = contextConfig as string;\n let fallbackImageSource = fallbackImageUrl;\n if (emptyPlaceHolderImage && fallbackImageUrl) {\n fallbackImageSource = `${fallbackImageUrl},${emptyPlaceHolderImage}`;\n }\n const img: IImageData = {\n src: imageUrl,\n altText: altText ? altText : '',\n fallBackSrc: fallbackImageSource\n };\n const imageProps = {\n gridSettings,\n imageSettings\n };\n imageProps.imageSettings.cropFocalRegion = true;\n return (\n <Image\n requestContext={context?.actionContext.requestContext}\n {...img}\n {...imageProps}\n loadFailureBehavior='empty'\n bypassHideOnFailure\n />\n );\n}\n\nexport const ProductComponent: React.FunctionComponent<IProductComponentProps> = msdyn365Commerce.createComponentOverride<\n IProductComponent\n>('Product', { component: ProductCard, ...PriceComponentActions });\n\nexport default ProductComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n ICategoryHierarchyViewProps,\n IRefineMenuViewProps,\n ISearchResultContainerViewProps,\n ISearchResultModalViewProps,\n ISortByViewProps,\n ITitleViewProps\n} from '@msdyn365-commerce-modules/search-result-container';\nimport { Button, getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport React, { MouseEventHandler, useEffect, useState } from 'react';\n\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\nimport {\n ISearchResultContainerProps,\n ISearchResultContainerResources\n} from '../definition-extensions/search-result-container.ext.props.autogenerated';\nimport { ProductComponent } from './components/product.component';\n\n/**\n * DescriptionInterval.\n */\nenum DescriptionInterval {\n productDescriptionInterval = 14,\n productDescriptionIntervalRemainder0 = 0,\n productDescriptionIntervalRemainder9 = 9\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProductCards = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n return <Node {...props.ProductsContainer}>{props.products}</Node>;\n};\n\n/**\n * Returns the product inventory label.\n * @param channelInventoryConfigurationId - The channel configuration Id.\n * @param product - The product.\n * @returns The inventory label.\n */\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\n return undefined;\n }\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\n if (inventoryAttribute) {\n return inventoryAttribute.TextValue;\n }\n return undefined;\n}\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @param product - The product item data.\n * @param index - The index of each product item.\n * @param isEnabledProductDescription - The flag for showing Product desription tile.\n * @returns The JSX Element.\n */\nconst renderProductCardsDescription = (\n props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>,\n product: ProductSearchResult,\n index: number,\n isEnabledProductDescription?: boolean\n): JSX.Element | null => {\n const { config, context, resources, productsDimensionAvailabilities } = props;\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n const breadCrumbType = props.context.app.config.breadcrumbType;\n const isAllowBack = props.config.allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\n const classname = isEnabledProductDescription\n ? 'ms-product-search-result__item product__description'\n : 'ms-product-search-result__item';\n const quickviewslot = ArrayExtensions.hasElements(props.slots.quickview) ? props.slots.quickview[0] : undefined;\n const channelInventoryConfigurationId = props.data.products.result?.channelInventoryConfigurationId;\n const isPriceMinMaxFeatureState = props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n );\n const priceResources: IPriceComponentResources = {\n priceRangeSeparator: resources.priceRangeSeparator\n };\n\n const productComparisonButton = ArrayExtensions.hasElements(props.slots.productComparisonButton)\n ? props.slots.productComparisonButton[0]\n : null;\n\n return (\n <li className={classname} key={index}>\n <ProductComponent\n context={context}\n telemetryContent={telemetryContent}\n imageSettings={config.imageSettings}\n freePriceText={resources.priceFree}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n ratingAriaLabel={resources.ratingAriaLabel}\n allowBack={isAllowBack}\n id={props.id}\n key={product.RecordId}\n typeName={props.typeName}\n data={{ product }}\n quickViewButton={quickviewslot}\n productComparisonButton={productComparisonButton}\n isEnabledProductDescription={isEnabledProductDescription}\n inventoryLabel={getInventoryLabel(channelInventoryConfigurationId, product)}\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\n priceResources={priceResources}\n swatchItemAriaLabel={resources.swatchItemAriaLabel}\n dimensionAvailabilities={productsDimensionAvailabilities?.find(\n (dimensionAvailability: IProductsDimensionsAvailabilities[]) =>\n ArrayExtensions.hasElements(dimensionAvailability) &&\n dimensionAvailability[0].masterProductId === product.MasterProductId\n )}\n />\n </li>\n );\n};\n\n/**\n * Render Clear button for mobile viewport.\n * @param props - The view props.\n * @returns The JSX Element.\n */\nconst renderProducts = (props: ISearchResultContainerViewProps & ISearchResultContainerProps<{}>): JSX.Element | null => {\n const products = props.data.listPageState.result?.activeProducts;\n if (!products || !ArrayExtensions.hasElements(products)) {\n return null;\n }\n const productDescriptionInterval: number = DescriptionInterval.productDescriptionInterval;\n const productDescriptionIntervalRemainder0: number = DescriptionInterval.productDescriptionIntervalRemainder0;\n const productDescriptionIntervalRemainder9: number = DescriptionInterval.productDescriptionIntervalRemainder9;\n return (\n <Node {...props.ProductsContainer}>\n {props.errorMessage}\n <ul className='list-unstyled'>\n {products.map((product: ProductSearchResult, index: number) =>\n index % productDescriptionInterval === productDescriptionIntervalRemainder0 ||\n index % productDescriptionInterval === productDescriptionIntervalRemainder9\n ? renderProductCardsDescription(props, product, index, true)\n : renderProductCardsDescription(props, product, index, false)\n )}\n </ul>\n </Node>\n );\n};\n\n/**\n * Render Title Count.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return <Node {...TitleContainer}>{title.titleCount}</Node>;\n }\n return null;\n};\n\n/**\n * Render Category Hierarchy.\n * @param props - The category hierarchy view props.\n * @returns The JSX Element.\n */\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\n if (categoryHierarchyList) {\n return (\n <Node {...CategoryHierarchyContainer}>\n {categoryHierarchyList.map((category, index) => (\n <React.Fragment key={index}>\n {category}\n {categoryHierarchyList[index + 1] && categoryHierarchySeparator}\n </React.Fragment>\n ))}\n </Node>\n );\n }\n\n return null;\n};\n\n/**\n * Function to make filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nexport const configureStickyFilter = (isMobile: boolean, isStickyHeader: boolean): void => {\n // Get heights of cookie and promotion banners\n const defaultValue = 0;\n const defaultOffset = 28;\n const headerContainer: HTMLElement | null = document.querySelector('.ms-header');\n\n const headerHeight: number | undefined = headerContainer?.offsetHeight;\n const containerHeight: number = headerHeight ?? defaultOffset;\n const bannerHeights = isStickyHeader ? defaultValue : containerHeight;\n const headerElement = document.querySelector('header .lock-opaque');\n const defaultContainer = document.querySelector('header .default-container');\n const refinerElement = isMobile ? document.querySelector('.msc-sort-filter-wrapper') : document.querySelector('.ms-refiner-heading');\n if (refinerElement && headerElement && defaultContainer) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-Filter');\n refinerElement.setAttribute('style', `top: ${defaultContainer.clientHeight}px`);\n } else {\n refinerElement.classList.remove('lock-Filter');\n }\n } else if (refinerElement) {\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\n refinerElement.classList.add('lock-top');\n } else {\n refinerElement.classList.remove('lock-top');\n refinerElement.classList.remove('lock-Filter');\n refinerElement.removeAttribute('style');\n }\n }\n};\n\n/**\n * Function to setup filter sticky.\n * @param isMobile - The boolean prop.\n * @param isStickyHeader - The boolean prop.\n */\nfunction stickyFilterSetup(isMobile: boolean, isStickyHeader: boolean): void {\n window.addEventListener('scroll', () => {\n configureStickyFilter(isMobile, isStickyHeader);\n });\n configureStickyFilter(isMobile, isStickyHeader);\n}\n\n/**\n * Function to make filter sticky.\n * @param refinerRefernce - Ref prop for filter.\n * @param toggle - Toggle function for filter menu.\n */\nfunction useOutsideClick(refinerRefernce: React.RefObject<HTMLElement>, toggle: (event: Event) => void) {\n React.useEffect(() => {\n /**\n * Function to make filter sticky.\n * @param event - Event prop for filter.\n */\n function handleClickOutside(event: Event) {\n const element = document.querySelector('.ms-refine-filter__toggle_collapsed');\n if (refinerRefernce.current && !refinerRefernce.current.contains(event.target as Node) && !element) {\n toggle(event);\n }\n }\n if (MsDyn365.isBrowser) {\n document.addEventListener('click', handleClickOutside);\n }\n return () => {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('click', handleClickOutside);\n }\n };\n }, [refinerRefernce, toggle]);\n}\n\n/**\n * Render the category page items.\n * @param props - The view props.\n * @returns The search Result container module view.\n */\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps & ISearchResultContainerProps<{}>> = props => {\n const {\n SearchResultContainer,\n pagination,\n ProductSectionContainer,\n choiceSummary,\n isMobile,\n modalToggle,\n searchResultModal,\n TitleViewProps,\n refineMenu,\n categoryHierarchy,\n sortByOptions,\n CategoryNavContainer,\n RefineAndProductSectionContainer,\n FeatureSearchContainer,\n similarLookProduct,\n errorMessage,\n resources\n } = props;\n useEffect(() => {\n if (props.config.useStickyFilter && MsDyn365.isBrowser) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app context is generic\n stickyFilterSetup(props.isMobile, props.context.app.config.enableStickyHeader as boolean);\n }\n }, [props]);\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n const toggle = () => {\n setIsExpanded(!isExpanded);\n };\n const wrapperRefiner = React.useRef(null);\n useOutsideClick(wrapperRefiner, toggle);\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\n if (isMobile) {\n return (\n <Module {...SearchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...CategoryNavContainer}>\n {renderCategoryHierarchy(categoryHierarchy)}\n {renderTitle(TitleViewProps)}\n {renderTitleCount(TitleViewProps)}\n </Node>\n )}\n {choiceSummary}\n <Node className='msc-sort-filter-wrapper'>{modalToggle}</Node>\n {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Module>\n );\n }\n return (\n <Module {...SearchResultContainer}>\n {similarLookProduct ? null : (\n <Node {...CategoryNavContainer}>\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\n {TitleViewProps && renderTitle(TitleViewProps)}\n {TitleViewProps && renderTitleCount(TitleViewProps)}\n </Node>\n )}\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\n <Node {...RefineAndProductSectionContainer}>\n <Node ref={wrapperRefiner} className='ms-refiner-heading'>\n <Node className='ms-refiner-heading_title'>\n <Button\n className={isExpanded ? 'ms-refine-filter__toggle_expanded' : 'ms-refine-filter__toggle_collapsed'}\n aria-label='Filter'\n onClick={toggle}\n aria-expanded={isExpanded}\n tabIndex={0}\n >\n {resources.filterText}\n </Button>\n <div className='ms-search-result-wrapper-title-choice-summary'>{choiceSummary}</div>\n <div className='ms-search-result-wrapper-sort-by-category'>\n {sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\n </div>\n </Node>\n {refineMenu && isExpanded && renderRefiner(refineMenu)}\n <Node className='ms-refine__footer'>\n {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}\n </Node>\n </Node>\n\n <Node {...ProductSectionContainer}>\n {errorMessage}\n {props.config.enableProdutDescription ? renderProducts(props) : renderProductCards(props)}\n {pagination}\n </Node>\n </Node>\n </Module>\n );\n};\n\n/**\n * Render Search result Modal.\n * @param modalProps - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createSearchResultModal = (\n modalProps: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element => {\n return React.cloneElement(\n modalProps.modal,\n {},\n modalProps.modalHeader,\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\n modalProps.modalFooter\n );\n};\n\n/**\n * Render Refiner Mobile.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render Search result Body.\n * @param props - The Search Result Modal view props.\n * @param refineMenu - The Refine Menu view props.\n * @param sortByDropDown - The Sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst createModalBody = (\n props: ISearchResultModalViewProps,\n refineMenu: IRefineMenuViewProps,\n sortByDropDown: ISortByViewProps,\n isRecoSearchPage?: string\n): JSX.Element | null => {\n if (sortByDropDown) {\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\n }\n return null;\n};\n\n/**\n * Render Refiner.\n * @param props - The Refine Menu view props.\n * @returns The JSX Element.\n */\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\n if (refiners) {\n return (\n <Node {...RefinerSectionContainer}>\n <Node {...RefineMenuContainer}>\n {refiners.map((submenu, index) => (\n <React.Fragment key={index}>{submenu}</React.Fragment>\n ))}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render Refiner Footer.\n * @param props - The Refine Menu view props.\n * @param handler - The Refine menu toggle function.\n * @param resources - Resources to get the done text and aria label.\n * @returns The JSX Element.\n */\nconst renderRefinerFooter = (\n props: IRefineMenuViewProps,\n handler: MouseEventHandler,\n resources: ISearchResultContainerResources\n): JSX.Element | null => {\n const { refiners } = props;\n if (refiners) {\n return (\n <Node className='ms-refine__footer__done'>\n <Node tag='button' className='ms-refine-filter-done' aria-label={resources.doneAriaLabel} tabIndex={0} onClick={handler}>\n {resources.doneText}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\n/**\n * Render sort by drop down.\n * @param props - The sort by view props.\n * @param isRecoSearchPage - The recomandation search page flag.\n * @returns The JSX Element.\n */\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\n const { SortingContainer, sortByDropDown } = props;\n if (sortByDropDown && !isRecoSearchPage) {\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\n }\n return null;\n};\n\n/**\n * Render Title.\n * @param props - The title view props.\n * @returns The JSX Element.\n */\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\n const { title, TitleContainer } = props;\n if (title) {\n return (\n <Node {...TitleContainer}>\n <Node tag='h1' className=''>\n {title.titlePrefix}\n {title.titleText}\n </Node>\n </Node>\n );\n }\n return null;\n};\n\nexport default SearchResultContainerView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["createObservableDataAction","action","retailAction","input","context","createGetCategoriesInput","Paging","Top","requestContext","apiSettings","channelId","BaseCollectionInput","constructor","pageType","queryResultSettings","refiners","category","searchText","includeAttributes","isUpdateRefinerPanel","locale","catalogId","channelInventoryConfiguration","inventoryRefiner","getCacheKey","_objectSpread","this","toJS","Sorting","generateCacheKey","key","value","map","refiner","RefinerRecordId","LeftValueBoundString","RightValueBoundString","convertToString","getCacheObjectType","dataCacheType","createBaseCollectionInput","args","inputClassConstuctor","urlTokens","query","categoryId","QueryResultSettingsProxy","fromInputData","QueryResultSettings","queryRefiners","hydrateRefinersFromUrl","inputData","config","undefined","_inputData$config","updateRefinerPanel","getUpdateRefinerPanel","getCatalogId","sorting","Columns","JSON","parse","decodeURIComponent","oos","compressedRefinerKeys","0","1","2","3","4","5","compressedRefiner","parsedRefiner","forEach","refinerKey","index","_unused","addOOS","console","log","push","itemId","q","recommendation","productId","stringify","ProductId","Recommendation","Error","ProductListInventoryFilteringOptions","GetFullProductsByCollectionInput","length","async","returnProducts","productSearchResults","metadataCount","productSearchResultsWithImages","productSearchResult","newImageUrl","generateProductImageUrl","PrimaryImageUrl","app","inventoryLevel","InventoryLevels","threshold","enableStockCheck","products","count","ArrayExtensions","hasElements","AttributeValues","element","RecordId","InventoryProductAttributeRecordId","inventoryRanges","TextValue","InventoryOutOfStockAttributeValueText","channelInventoryConfigurationId","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","actionDataAction","id","_context$requestConte","_context$requestConte2","_context$requestConte3","_context$requestConte4","promise","channelInventoryConfigurationPromise","searchProductId","searchCriteriaInput","Context","ChannelId","CatalogId","Refinement","IncludeAttributes","SkipVariantExpansion","AsyncResult","resolve","getInventoryConfigurationAsync","callerContext","productListInventoryDisplay","HideOOS","inventoryInStockRefinerValue","_inventoryRefiner$Val","_inventoryRefiner","refinerInput","InventoryInStockRefinerValueInput","getInventoryRefinerAction","Values","find","getInventoryInStockRefinerValueAsync","some","SortOOS","_input$queryResultSet","_input$queryResultSet2","sortColumnName","column","ColumnName","IsDescending","CategoryIds","searchByCriteriaAsync","SearchCondition","searchObject","Number","isNaN","RecommendationListId","Ids","metadata","itemsPerPage","skip","Skip","_input$channelInvento","inventoryProductAttributeRecordId","arguments","super","buildCacheKey","_input$channelInvento2","getProductRefinerHierarchy","_input$channelInvento3","sortOptions","sortByOptionRelevanceDesc","sortByOptionRatingAsc","sortByOptionRatingDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","MappedSearchInput","getMappedSearchConfiguration","ctx","getSearchConfigurationAsync","then","searchConfiguration","ProductSortColumns","sortColumn","toUpperCase","telemetry","warning","filter","Boolean","createInput","getMappedSearchConfigurationDataAction","searchCriteria","getProductSearchRefinersAsync","productRefiners","trace","result","productRefiner","DefaultValues","RefinersByCollectionInput","defaultCategoryIdValue","defaultProductIdValue","compressedRefinerArray","parseQueryParam","buildListPageUrl","fullUrl","sortingColumns","skipCount","searchParams","delete","sortedRefiners","sort","first","second","set","compressedRefiners","compressRefiners","href","toString","getCurrentUrl","MsDyn365","isBrowser","URL","window","location","url","requestUrl","ListPageState","activeFilters","activeProducts","sortingCritera","currentPageNumber","pageSize","featureProduct","productPrices","__decorate","observable","ListPageStateInput","listPageStateAction","createListPageInput","ProductRefinerValueDataTypeValue","ProductRefinerTypeValue","ProductRefinerSource","isRangeType","dataTypeValue","AttributeDataType","Currency","Decimal","Integer","findMatchingRefinementCriterion","productRefinerValue","refinementCriteria","refinementCriterion","isMatchingRefinementCriterion","RefinerSourceValue","DataTypeValue","getUpdatedRefinementCriteria","itemToggleNotification","currentRefinementCriteria","updatedRefinementCriteria","toggledItemFound","selectedCriterion","isSelecting","next","rangeStart","rangeEnd","Text","TrueFalse","parentProductRefinerHierarchy","RefinerTypeValue","RefinerType","SingleSelect","child","matchingIndex","findIndex","criterion","splice","ChoiceSummary","React","props","closeButtonGlyph","_onClick","e","preventDefault","stopPropagation","target","currentTarget","clearAll","getAttribute","includes","selectedRefiner","_getSelectedRefinerChoice","onChoiceClicked","itemClicked","choiceClicked","nextItemToFocus","nextSibling","payLoad","getPayloadObject","telemetryContent","_this$props$context","selectedChoices","refinerHierarchy","choice","parent","hierarchy","_getKeyForRefinerValue","render","clearAllText","label","classNames","choiceAriaLabel","closeAriaLabel","items","selectedRefinersMap","contentAction","etext","clearAllAttributes","getTelemetryAttributes","className","classnames","item","attribute","Object","assign","urlBuilder","onClick","role","LeftValueBoundLocalizedString","choiceFormat","choiceRangeValueFormat","refinerValues","overallFormat","rangeFormat","refinerValueName","refinerName","KeyName","replace","_formatPrice","UnitText","filterValue","amount","currency","cultureFormatter","formatCurrency","error","selected","computed","observer","ErrorMessage","_ref","text","xmlns","width","height","viewBox","fill","clipPath","cx","cy","r","d","stroke","strokeWidth","x1","y1","x2","y2","gradientUnits","stopColor","offset","FeatureSearchResultItem","_context$request$app","product","imageSettings","resources","productName","Name","productRecordId","productUrl","getProductPageUrlSync","actionContext","fallbackImage","getFallbackImageUrl","ItemId","request","OmniChannelMedia","heading","featureSimilarDescriptionTitle","featureSimilarLooksTitle","onTelemetryClick","gridSettings","imageUrl","altText","img","src","imageProps","fallBackSrc","Image","loadFailureBehavior","renderProductPlacementImage","title","Link","ariaLabel","ModalToggle","modalNode","Modal","autoFocus","applicationNode","returnFocusRef","returnRef","isOpen","toggle","onModalToggle","zIndex","modalHeaderNode","ModalHeader","modalTitle","modalFooterNode","ModalFooter","Button","TelemetryConstant","contentData","recid","setTelemetryAttribute","IncrementalQuantity","IncrementalQuantity_1","_props$currentCount","_this$props$min","eventType","inputRef","isMobileView","isMobileCheck","isMobile","variant","VariantType","Browser","xs","w","sm","md","lg","xl","_validateMin","state","currentInput","setState","_minValue","currentValue","Math","min","max","currentCount","isUpdating","_onIncrement","bind","_onDecrement","_removeITem","_handleChange","contentCategory","pgname","pageName","mname","moduleName","etype","defaultProps","nextState","_props$currentCount2","disabled","_this$props$inputQuan","_this$props$inputQuan2","glyphMinusClassName","decrementGlyphClass","removeClassName","decrementDisabled","isGiftCard","incrementDisabled","DecrementQuantity","decrementAttributes","IncrementQuantity","incrementAttributes","ariaLablelText","inputQuantityAriaLabel","extraClassDecrement","iconClassName","extraClassIncrement","button","decrementButtonAriaLabel","color","transform","type","pattern","onChange","onBlur","ref","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","parseInt","_debounce","inputElement","current","HTMLInputElement","setAttribute","incrementGlyphClass","ProductCollectionQty","removeITem","getCartState","recordId","removeItemFromCart","currentProductqQty","LineID","cartState","productInfow","getAddToCartInputFromProps","cartLinesData","cart","CartLines","findData","cartLineIds","LineId","removeCartLines","_props$orderDetailsPr","_props$data","orderDetailsProducts","ObjectExtensions","isNullOrUndefined","simpleProduct","salesLine","Quantity","ProductsDataActions","newProductSearchResult","productData","_productData$BasePric","ProductTypeValue","ProductType","Variant","AdjustedPrice","Price","BasePrice","quantity","_props$quantity","data","onChangeHandler","_this$props$data","newValue","productID","totalAvailableQuantity","axios","require","method","maxBodyLength","Infinity","headers","accept","oun","ProductIds","QuantityUnitTypeValue","DefaultWarehouseOnly","response","_response$data","_response$data2","ProductWarehouseInventoryAvailabilities","_response$data3","respObject","_respObject$","floor","PhysicalAvailable","catch","_cart","addOneItemToCart","isEmpty","updateCartId","oldQty","newQty","addToCartResult","updateCartLineQuantity","cartLineId","newQuantity","_props$productAvailab","addToCartInput","addProductToCart","availableQuantity","productAvailability","AvailableQuantity","additionalProperties","orderQuantityLimitsFeatureIsEnabled","isOrderQuantityLimitsFeatureEnabled","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","shouldSkipSiteSettings","status","_getCartStatusUpdate","cartData","_SingleAddToCart","getQty","buttonAddtoCart","strokeLinecap","strokeLinejoin","Node","minQuantityText","maxQuantityText","getInventoryLabel","inventoryAttribute","ProductSearchResultItems","moduleType","moduleId","allowBackNavigation","quickviewSlot","productComparisonButton","isPriceMinMaxEnabled","productsDimensionAvailabilities","priceResources","priceRangeSeparator","ProductComponent","freePriceText","priceFree","originalPriceText","currentPriceText","ratingAriaLabel","allowBack","typeName","quickViewButton","inventoryLabel","swatchItemAriaLabel","dimensionAvailabilities","dimensionAvailability","masterProductId","MasterProductId","Description","DefaultUnitOfMeasure","ExtensionProperties","RangeRefineItem","_selectedRefinementCr","_this$props$selectedR","_this$props$selectedR2","_ref2","_this$props$selectedR3","_this$props$selectedR4","_formattedPriceReverseLookup","Map","getLabels","sliderId","minPrice","maxPrice","labelId","labelString","labelPositioning","getSliderThumbs","sliderKey","selectedMin","selectedMinPrice","selectedMax","selectedMaxPrice","_this$props$minValueS","_this$props$maxValueS","minValueSliderThumbAriaLabel","currencyCode","ariaValueText","maxValueSliderThumbAriaLabel","_onRangeUpdate","_onRangeUpdateEnd","_handleRangeTooltipText","_changeMin","_changeMax","_finishChangeMin","_finishChangeMax","minInput","maxInput","selectedRefinementCriterion","initialMin","initialMax","String","minValue","maxValue","labels","sliderKeyString","sliderThumbs","isChecked","validationErrorMin","validationErrorMax","touchedMin","touchedMax","shouldComponentUpdate","nextProps","componentDidUpdate","previousProps","updateSliderProps","refineItemCommonProps","rangeType","_renderInputFields","_renderSlider","_ref3","_this$props$selectedR5","_this$props$selectedR6","_ref4","_this$props$selectedR7","_this$props$selectedR8","isDisabled","formAttrs","rangeNameFormat","minInputClassName","maxInputClassName","formattedSelectedMin","_getFormattedSelectedValue","formattedSelectedMax","minLabel","onFocus","maxLabel","placeholder","placeholderTextMax","ariaAttributes","Slider","inForm","step","orientation","showLabels","showTooltip","onChangeEnd","debounce","handleTooltipText","event","_changeValue","inputType","selectedKey","touchedKey","_getInputWithoutFormatting","selectedMinValue","minTouched","onToggle","maxNum","validationErrorNaN","_focus","_validateRange","selectedMaxValue","maxTouched","minNum","setTimeout","focus","touched","validationError","validationErrorRange","inputAsNum","get","sliderChangeNotification","firstThumbValue","secondThumbValue","_focusOnSliderThumb","document","getElementById","tooltip","RefineItem","anchorType","_productRefinerValue$","_this$props$parentPro","_this$props$parentPro2","_this$props","productCountAriaLabel","singleProductCountAriaLabel","children","refineItemAriaLabel","refineItemsAriaLabel","attrs","_objectWithoutProperties","_excluded","isSingleSelect","itemTypeClassName","SourceValue","Rating","_renderRating","productText","productCount","Count","refineMenuItemAriaLabel","format","dimensionType","toLocaleLowerCase","shouldDisplayAsSwatch","_getShouldDisplayAsSwatch","hasColor","StringExtensions","isNullOrWhitespace","SwatchColorHexCode","hasImage","SwatchImageUrl","hasContentSwatch","_getRefinerUrl","tabIndex","_renderSwatch","checkIfShouldDisplayAsSwatch","_productRefinerValue$2","swatchItems","colorHexCode","SwatchComponent","list","isSelectionEnabled","isRefineItem","ratingUserCountAriaLabel","ratingSingleUserCountAriaLabel","_productRefinerValue$3","refinerRating","ratingRefiner","selectedRefinerValues","selectedRating","defaultChkProductCount","ratingComponentClass","productCountAriaLabelValue","RatingComponent","avgRating","ratingCount","hideCount","readOnly","moduleTypeName","RefineSubmenu","_onToggleItem","_onToggleSubmenu","expanded","productRefinerHierarchy","hideRating","Collapse","timeout","_renderChildItems","_renderRange","_renderSingleMultiSelect","refinerValuesList","listItems","selectedValue","_getRangeType","DisplayTemplateValue","DisplayTemplate","Range","SliderWithBars","onUpdateRefiners","prevState","Separator","separator","Title","expandRefinersCount","SearchResultContainer","SearchResultContainer_1","_props$context$reques","sortByDropdownOptions","_pageType","_viewport","expandrefinerCount","defaultPageNumber","localyOnlineRecordId","allBrandsRecordId","allOfferSRecordId","isListPageStateUpdated","_isMounted","renderCategoriesCarousal","_this$props$data$cate","_parentCategory$","_parentCategory$2","_parentCategory$3","_parentCategory$4","_parentCategory$0$Ima","_parentCategory$0$Ima2","_this$props$data$cate3","_parentCategory$5","_this$props$data$cate5","_this$props$data$cate6","_this$props$data$cate17","_this$props$data$cate18","base_image_url","parentCategory","categories","cat","_this$props$data$cate2","ParentCategory","parentCategoryUrl","toLowerCase","parentCategoryImgUrl","Images","Uri","sameLevelCategories","_this$props$data$cate4","parentCategoryName","_this$props$data$cate7","_this$props$data$cate8","_this$props$data$cate9","_this$props$data$cate10","_this$props$data$cate11","_this$props$data$cate12","_this$props$data$cate13","_this$props$data$cate14","_this$props$data$cate15","_this$props$data$cate19","_this$props$data$cate20","_parentCategoryName","_parentCategoryImgUrl","settings","dots","infinite","speed","slidesToShow","slidesToScroll","arrows","responsive","breakpoint","indexToMove","obj","_this$props$data$cate16","movedObject","unshift","card","_this$props$data$cate21","_card$Name","_card$Images","_card$Images2","categoryUrl","_updateListPageState","listPageState","_this$props$context$r","_this$props$config$it","_this$props$config$it2","_this$props$context$r2","querySorting","totalProductCount","_getProductsDimensionsAvailabilities","_this$props$data$list","_this$props$data$list2","productsList","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","_getActivePrice","_this$props$data$list3","_this$props$data$list4","getPriceForProductSearchResult","PriceForProductSearchResultInput","_getSearchResultModal","modal","modalHeader","modalFooter","modalBody","ModalBody","SearchResultModal","modalCloseButtonText","modalIsOpen","_modalToggleRef","_toggleModal","_getCollectionTitle","collectionTitle","_this$props$context$r3","getFriendlyName","NameTranslations","productCountNumber","productCountText","numberOfProducts","oneProduct","TitleContainer","telemetryPageName","titlePrefix","searchTextPrefix","titleText","titleCount","isCategoryPage","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","tag","categoryHierarchyList","categoryLinkAriaLabel","Url","categoryHierarchySeparator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","sortOptionsBlackList","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","_sortAndFilterContainerRef","_getPagination","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","qsp","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","_getRefineMenu","_this$props$data$cate22","_this$props$data$cate23","tempRangeTypeTODO","inputRange","validRefiners","_shouldHideFromRefiners","activeRefiners","_getexpandRefinerCount","expandedRefiners","brandFilterBlackList","categoryFilterBlackList","otherFilterBlackList","RefineMenuContainer","RefinerSectionContainer","_refineItemCommonProps","_onUpdateRefiners","_buildRefinerUrl","isExpandedOnInitialLoad","_this$props$data$prod","_this$props$data$prod2","_this$props$data$prod3","_this$props$data$prod4","isInventorySortableAttribute","isInventoryProductAttribute","_getInventoryRefiner","baseCollectionInput","inventoryInStockRefinerValueInput","Promise","_getChoiceSummary","_this$props$data$refi","selectedRefiners","rating","choiceSummaryLabel","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","_getProducts","_this$props$slots","_this$props$data$feat","_this$props$data$prod5","slots","quickview","isPriceMinMaxFeatureState","featureState","IsEnabled","notification","history","pushState","_getSortColumnFromSelectedOption","transaction","option","mappedConfiguration","_getSortCriteriaColumn","_this$props$data$list5","sortCriteria","queryColumns","mappedSearchConfiguration","mappedSearchConfig","validValues","activeSortColumn","activeMappedConfig","_this$props$data$list6","newRefinementCriteria","dropdownElementId","dropdownElement","selectedChoice","isClearAll","refinerCount","all","one","two","three","four","paginationPreviousText","paginationNextText","device","Type","_updateViewport","pending","validationErrorNotNumber","validationErrorNotRange","getTelemetryObject","friendlyName","nameTranslations","_nameTranslation","nameTranslation","Language","_this$props$context$a2","addEventListener","StoreOperationsDataActions","reaction","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r4","_this$props$context$r5","_this$props$context$r6","_this$props$context$a","newListPageState","productResults","getCollectionProducts","enableAffiliationBasedPricing","user","isAuthenticated","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","DimensionTypes","none","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r7","_this$props$context$r8","getCollectionRefinersAction","componentWillUnmount","removeEventListener","_listPageState$result","_listPageState$result2","_this$props$context$r9","_this$props$data$cate24","_this$props$data$cate25","_this$props$data$cate26","_this$props$data$list7","_this$props$data$list8","_this$props$data$cate27","_this$props$data$cate28","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","moduleProps","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","RefineAndProductSectionContainer","choiceSummary","modalToggle","innerRef","searchResultModal","errorMessage","FeatureSearchContainer","similarLookProduct","categoriesCarousal","isBrandPage","renderView","_getViewport","Viewport","renderRefiner","isRecoSearchPage","renderSort","submenu","renderCategoryHierarchy","renderTitle","renderTitleCount","_props$context$action","CategoryNavContainer","Module","createSearchResultModal","modalProps","createModalBody","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","c","$type","da","name","path","runOn","iNM","ns","n","p","pdp","__bindings__","viewDictionary","cn","getDefaultSwatchSelected","coreContext","_productData$Attribut","_attributeSwatches$fi","dimensionToPreSelectInProductCard","attributeSwatches","attributeValue","_attributeValue$KeyNa","Swatches","IsDefault","updateProductUrl","productDetailsPageUrl","queryString","sourceUrl","baseUrl","search","pathname","renderProductUnitOfMeasure","unitOfMeasure","renderLabel","price","ratingAriaLabelText","reviewCount","ratingCountAriaLabelText","reviewCountArialableText","getReviewAriaLabel","getRatingAriaLabel","roundedRating","toFixed","renderPrice","basePrice","adjustedPrice","savingsText","CustomerContextualPrice","PriceComponent","fallbackImageUrl","_context$app$config","contextConfig","placeholderImageName","fallbackImageSource","cropFocalRegion","bypassHideOnFailure","msdyn365Commerce","createComponentOverride","component","_product$Name","_product$RecordId","_getProductImageUrlFr","_getProductPageUrlFro","ratingCountAriaLabel","isEnabledProductDescription","MIN_VALUE","productImageUrlFromSwatch","defaultSwatch","swatchProductImageUrls","ProductImageUrls","generateImageUrl","getProductImageUrlFromDefaultSwatch","productPageUrlFromSwatch","SwatchValue","encodeURIComponent","getProductPageUrlFromDefaultSwatch","productPageUrl","setProductPageUrl","useState","productImageUrl","setProductImageUrl","selectedSwatchItems","Dictionary","updatePageAndImageUrl","swatchItem","setValue","productPageUrlWithSwatch","newUrl","swatchProductImageUrl","productImageUrls","isUnitOfMeasureEnabled","unitOfMeasureDisplayType","AverageRating","TotalRatings","description","attributeValues","_item$KeyName$toLocal","_item$KeyName","_item$Swatches$map","_item$Swatches","dimensionTypeValue","shouldDisplayDimension","swatches","_item$RecordId","_swatchItem$SwatchVal","_swatchItem$SwatchVal2","_dimensionAvailabilit","isDefault","_swatchItem$SwatchVal3","swatch","ProductComponentSwatchComponent","onSelectDimension","totalRatings","numberRatings","renderRating","inventoryAvailabilityLabel","selectedDimensions","getValues","DimensionTypeValue","convertDimensionTypeToProductDimensionType","DimensionValue","Value","selectedProductId","renderQuickView","validateCatalogId","renderProductComparisonButton","DescriptionInterval","renderProductCards","renderProductCardsDescription","_props$data$products$","_props$data$featureSt","breadCrumbType","breadcrumbType","isAllowBack","classname","quickviewslot","renderProducts","_props$data$listPageS","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","configureStickyFilter","isStickyHeader","headerContainer","querySelector","headerHeight","offsetHeight","bannerHeights","headerElement","defaultContainer","refinerElement","documentElement","scrollTop","classList","add","clientHeight","remove","removeAttribute","renderRefinerMobile","renderRefinerFooter","handler","doneAriaLabel","doneText","useEffect","useStickyFilter","stickyFilterSetup","enableStickyHeader","isExpanded","setIsExpanded","wrapperRefiner","refinerRefernce","handleClickOutside","contains","useOutsideClick","enableProdutDescription","filterText","module","exports","ReactDOM"],"sourceRoot":""}