{"version":3,"file":"static/js/bce59551c232ff164fbe.bundle.js","mappings":"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","sources":["webpack://Msdyn365.Commerce.Online/./src/components/common/product-inventory-utils.ts?8daa","webpack://Msdyn365.Commerce.Online/./src/components/product-list-component/components/product-list-view-mode.tsx?1dbb","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-search-result-container/dlvry-search-result-container.props.autogenerated.ts?d84f","webpack://Msdyn365.Commerce.Online/./src/shared-utils/validate-product-access.ts?427b","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-search-result-container/dlvry-search-result-container.tsx?a550","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-search-result-container/dlvry-search-result-container.view.tsx?b71b","webpack://Msdyn365.Commerce.Online/./src/modules/dlvry-search-result-container/list-page-state.ts?18e3","webpack://Msdyn365.Commerce.Online/./lib/dlvry-search-result-container/module-registration.js?b987","webpack://Msdyn365.Commerce.Online/external var \"React\"?0d3b","webpack://Msdyn365.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IActionContext } from '@msdyn365-commerce/core';\r\nimport {\r\n InventoryAvailabilitySearchCriteria,\r\n ProductAvailableQuantity,\r\n ProductWarehouseInventoryAvailability,\r\n ProductWarehouseInventoryInformation,\r\n SearchArea\r\n} from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport enum DeliveryMode {\r\n allWareHouses = 0,\r\n shipping = 1,\r\n pickup = 2\r\n}\r\n\r\n/**\r\n * This setting defines the inventory levels supported.\r\n */\r\nexport enum InventoryLevels {\r\n physicalAvailable = 'physicalAvailable',\r\n totalAvailable = 'totalAvailable',\r\n threshold = 'inventoryThreshold'\r\n}\r\n\r\n/**\r\n * Product inventory information class.\r\n */\r\nexport interface IProductInventoryInformation {\r\n ProductAvailableQuantity: ProductAvailableQuantity;\r\n StockLevelCode?: string;\r\n StockLevelLabel?: string;\r\n IsProductAvailable: boolean;\r\n InventLocationId?: string;\r\n deliveryType?: DeliveryMode;\r\n}\r\n\r\n/**\r\n * This setting defines the inventory level values return by the API.\r\n */\r\nexport enum InventoryLevelValues {\r\n outOfStock = 'OOS',\r\n available = 'AVAIL'\r\n}\r\n/**\r\n * The function defines whether the inventory label should be displayed or not.\r\n * @param context - The action context.\r\n * @param inventoryCode - The inventory code.\r\n * @returns Boolean.\r\n */\r\nexport function displayLabelEnabled(context: IActionContext, inventoryCode?: string): boolean {\r\n if (!inventoryCode) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line default-case\r\n switch (context.requestContext.app.config.inventoryRanges) {\r\n case 'lowAndOutofStock':\r\n if (inventoryCode !== InventoryLevelValues.available) {\r\n return true;\r\n }\r\n break;\r\n case 'outOfStock':\r\n if (inventoryCode === InventoryLevelValues.outOfStock) {\r\n return true;\r\n }\r\n break;\r\n case 'all':\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n/**\r\n * The function that maps a ProductWareHouse object into a ProductAvailabilityQuantity.\r\n * @param context - The action context.\r\n * @param productsWarehouseInventory - The product warehouse inventory information.\r\n * @returns IProductInventoryInformation[].\r\n */\r\nexport function mapProductInventoryInformation(\r\n context: IActionContext,\r\n productsWarehouseInventory?: ProductWarehouseInventoryAvailability[]\r\n): IProductInventoryInformation[] {\r\n const productInventoryInformation: IProductInventoryInformation[] = [];\r\n\r\n if (context.requestContext.app.config.enableStockCheck === undefined || context.requestContext.app.config.enableStockCheck === false) {\r\n return productInventoryInformation;\r\n }\r\n\r\n if (productsWarehouseInventory && productsWarehouseInventory.length > 0) {\r\n for (const product of productsWarehouseInventory) {\r\n switch (context.requestContext.app.config.inventoryLevel) {\r\n case InventoryLevels.physicalAvailable:\r\n // Inventory level is enabled with Physical inventory\r\n const physicalProductMap = mapInventoryWithPhysicalBufferEnabled(context, product);\r\n if (physicalProductMap) {\r\n productInventoryInformation.push(physicalProductMap);\r\n }\r\n break;\r\n case InventoryLevels.totalAvailable:\r\n // Inventory level is enabled with Total available inventory\r\n const totalAvailableProductMap = mapInventoryWithTotalAvailableBufferEnabled(context, product);\r\n if (totalAvailableProductMap) {\r\n productInventoryInformation.push(totalAvailableProductMap);\r\n }\r\n break;\r\n default:\r\n // When inventory level is inventoryThreshold or not defined\r\n const productMap = mapInventoryWithThresholdEnabled(context, product);\r\n if (productMap) {\r\n productInventoryInformation.push(productMap);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return productInventoryInformation;\r\n}\r\n\r\n/**\r\n * The function that maps inventory for when threshold is selected.\r\n * @param context - The action context.\r\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\r\n * @returns IProductInventoryInformation.\r\n */\r\nexport function mapInventoryWithThresholdEnabled(\r\n context: IActionContext,\r\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability\r\n): IProductInventoryInformation | null {\r\n if (productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\r\n const productQty = productWarehouseInventoryAvailability.TotalAvailable - context.requestContext.app.config.outOfStockThreshold;\r\n const productAvailableQuantity: ProductAvailableQuantity = {\r\n ProductId: productWarehouseInventoryAvailability.ProductId,\r\n AvailableQuantity: productQty > 0 ? productQty : 0\r\n };\r\n\r\n return {\r\n ProductAvailableQuantity: productAvailableQuantity,\r\n IsProductAvailable: !!(productAvailableQuantity.AvailableQuantity && productAvailableQuantity.AvailableQuantity > 0),\r\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * The function that maps inventory for when physical available is selected.\r\n * @param context - The action context.\r\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\r\n * @returns IProductInventoryInformation.\r\n */\r\nexport function mapInventoryWithPhysicalBufferEnabled(\r\n context: IActionContext,\r\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability\r\n): IProductInventoryInformation | null {\r\n const shouldRenderLabel = displayLabelEnabled(context, productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode);\r\n\r\n if (productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\r\n // As per the new buffer logic from RS,\r\n // if code is out of stock then we set the available quantity to 0 regardless of the actual value from API\r\n let productQuantity: number | undefined = 0;\r\n if (productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode !== InventoryLevelValues.outOfStock) {\r\n productQuantity =\r\n productWarehouseInventoryAvailability.MaximumPurchasablePhysicalAvailableQuantity ??\r\n productWarehouseInventoryAvailability.PhysicalAvailable;\r\n }\r\n\r\n const productAvailableQuantity: ProductAvailableQuantity = {\r\n ProductId: productWarehouseInventoryAvailability.ProductId,\r\n AvailableQuantity: productQuantity\r\n };\r\n return {\r\n ProductAvailableQuantity: productAvailableQuantity,\r\n StockLevelCode: shouldRenderLabel ? productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelCode : undefined,\r\n StockLevelLabel: shouldRenderLabel ? productWarehouseInventoryAvailability.PhysicalAvailableInventoryLevelLabel : undefined,\r\n IsProductAvailable: productAvailableQuantity.AvailableQuantity !== undefined && productAvailableQuantity.AvailableQuantity > 0,\r\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * The function that maps inventory for when total available is selected.\r\n * @param context - The action context.\r\n * @param productWarehouseInventoryAvailability - The product warehouse inventory information.\r\n * @returns IProductInventoryInformation.\r\n */\r\nexport function mapInventoryWithTotalAvailableBufferEnabled(\r\n context: IActionContext,\r\n productWarehouseInventoryAvailability: ProductWarehouseInventoryAvailability\r\n): IProductInventoryInformation | null {\r\n const shouldRenderLabel = displayLabelEnabled(context, productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode);\r\n if (productWarehouseInventoryAvailability.ProductId && productWarehouseInventoryAvailability.TotalAvailable !== undefined) {\r\n // As per the new buffer logic from RS,\r\n // if code is out of stock then we set the available quantity to 0 regardless of the actual value from API\r\n let productQuantity: number | undefined = 0;\r\n if (productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode !== InventoryLevelValues.outOfStock) {\r\n productQuantity =\r\n productWarehouseInventoryAvailability.MaximumPurchasableTotalAvailableQuantity ??\r\n productWarehouseInventoryAvailability.TotalAvailable;\r\n }\r\n\r\n const productAvailableQuantity: ProductAvailableQuantity = {\r\n ProductId: productWarehouseInventoryAvailability.ProductId,\r\n AvailableQuantity: productQuantity\r\n };\r\n return {\r\n ProductAvailableQuantity: productAvailableQuantity,\r\n StockLevelCode: shouldRenderLabel ? productWarehouseInventoryAvailability.TotalAvailableInventoryLevelCode : undefined,\r\n StockLevelLabel: shouldRenderLabel ? productWarehouseInventoryAvailability.TotalAvailableInventoryLevelLabel : undefined,\r\n // eslint-disable-next-line eqeqeq\r\n IsProductAvailable: productAvailableQuantity.AvailableQuantity != undefined && productAvailableQuantity.AvailableQuantity > 0,\r\n InventLocationId: productWarehouseInventoryAvailability.InventLocationId\r\n };\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\r\n * @param context - The action context.\r\n * @returns Boolean.\r\n */\r\nexport function isAggregatedInventory(context: IActionContext): boolean {\r\n // If warehouse aggregated is true then query inventory from multiple warehouses\r\n // else query from single warehouse\r\n return (\r\n (context.requestContext.app.config.inventoryLevel === InventoryLevels.totalAvailable ||\r\n context.requestContext.app.config.inventoryLevel === InventoryLevels.physicalAvailable) &&\r\n context.requestContext.app.config.warehouseAggregation === 'multiple'\r\n );\r\n}\r\n\r\n/**\r\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\r\n * @param context - The action context.\r\n * @param productWarehouseInventoryInformation - The product ware house inventory information.\r\n * @returns ProductWarehouseInventoryInformation.\r\n */\r\nexport function mapAggregatedProductInventoryInformation(\r\n context: IActionContext,\r\n productWarehouseInventoryInformation: ProductWarehouseInventoryInformation\r\n): IProductInventoryInformation[] {\r\n if (isAggregatedInventory(context)) {\r\n const productInventoryMapping:\r\n | ProductWarehouseInventoryAvailability[]\r\n | undefined = productWarehouseInventoryInformation.AggregatedProductInventoryAvailabilities?.map(product => {\r\n return {\r\n DataAreaId: product.DataAreaId,\r\n MaximumPurchasablePhysicalAvailableQuantity:\r\n product.MaximumPurchasablePhysicalAvailableQuantity ?? product.PhysicalAvailableQuantity,\r\n MaximumPurchasableTotalAvailableQuantity:\r\n product.MaximumPurchasableTotalAvailableQuantity ?? product.TotalAvailableQuantity,\r\n ProductId: product.ProductId,\r\n PhysicalAvailable: product.PhysicalAvailableQuantity,\r\n PhysicalAvailableInventoryLevelCode: product.PhysicalAvailableInventoryLevelCode,\r\n PhysicalAvailableInventoryLevelLabel: product.PhysicalAvailableInventoryLevelLabel,\r\n TotalAvailable: product.TotalAvailableQuantity,\r\n TotalAvailableInventoryLevelCode: product.TotalAvailableInventoryLevelCode,\r\n TotalAvailableInventoryLevelLabel: product.TotalAvailableInventoryLevelLabel\r\n };\r\n });\r\n return mapProductInventoryInformation(context, productInventoryMapping);\r\n }\r\n\r\n return mapProductInventoryInformation(context, productWarehouseInventoryInformation.ProductWarehouseInventoryAvailabilities);\r\n}\r\n\r\n/**\r\n * The function created a InventoryAvailabilitySearchCriteria object for getEstimatedAvailability API.\r\n * @param context - The action context.\r\n * @param productIds - The product id collection.\r\n * @param isDefaultWareHouse - Flag to define whether inventory is from default warehouse or not.\r\n * @param isFilterByChannelFulfillmentGroup - Filter by fulfillment group.\r\n * @param searchArea - The search area.\r\n * @param defaultDeliveryMode - The delivery mode.\r\n * @returns InventoryAvailabilitySearchCriteria.\r\n */\r\nexport function createInventoryAvailabilitySearchCriteria(\r\n context: IActionContext,\r\n productIds: number[],\r\n isDefaultWareHouse?: boolean,\r\n isFilterByChannelFulfillmentGroup?: boolean,\r\n searchArea?: SearchArea,\r\n defaultDeliveryMode?: DeliveryMode\r\n): InventoryAvailabilitySearchCriteria {\r\n const salesUnitType = 2;\r\n const deliveryMode = defaultDeliveryMode ? defaultDeliveryMode : DeliveryMode.shipping;\r\n\r\n const inventoryAvailabilitySearchCriteria: InventoryAvailabilitySearchCriteria = {\r\n ProductIds: productIds,\r\n QuantityUnitTypeValue: salesUnitType,\r\n SearchArea: searchArea\r\n };\r\n\r\n if (isAggregatedInventory(context)) {\r\n inventoryAvailabilitySearchCriteria.FilterByChannelFulfillmentGroup = true;\r\n inventoryAvailabilitySearchCriteria.DeliveryModeTypeFilterValue = deliveryMode;\r\n } else {\r\n inventoryAvailabilitySearchCriteria.DefaultWarehouseOnly = isDefaultWareHouse;\r\n inventoryAvailabilitySearchCriteria.FilterByChannelFulfillmentGroup = isFilterByChannelFulfillmentGroup;\r\n }\r\n\r\n return inventoryAvailabilitySearchCriteria;\r\n}\r\n","import React from \"react\";\r\nimport Button from \"reactstrap/lib/Button\";\r\nimport classname from \"classnames\";\r\n\r\nexport enum ProductListViewMode {\r\n cardView = 0,\r\n listView = 1\r\n}\r\n\r\nexport interface IProductListViewModeProps {\r\n className: string;\r\n viewMode: ProductListViewMode | undefined;\r\n cardButtonTxt: string;\r\n listButtonTxt: string;\r\n setListViewMode: (() => void);\r\n setCardViewMode: (() => void);\r\n}\r\n\r\nexport const ProductListViewModeComponent: React.FC = (props: IProductListViewModeProps) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n );\r\n};\r\n","/**\r\n * Copyright (c) Microsoft Corporation\r\n * All rights reserved. See License.txt in the project root for license information.\r\n * IDlvrySearchResultContainer 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 const enum preferredViewMode {\r\n cardView = 'cardView',\r\n listView = 'listView'\r\n}\r\n\r\nexport interface IDlvrySearchResultContainerConfig extends Msdyn365.IModuleConfig {\r\n enableProdutDescription?: boolean;\r\n useStickyFilter?: boolean;\r\n itemsPerPage?: number;\r\n allowBackNavigation?: boolean;\r\n imageSettings?: Msdyn365.IImageSettings;\r\n expandRefinersCount?: expandRefinersCount;\r\n disableHierarchy?: boolean;\r\n disableAvailabilityCheckUnauthorized?: boolean;\r\n includeAttributes?: boolean;\r\n enableAffiliationBasedPricing?: boolean;\r\n updateRefinerPanel?: boolean;\r\n className?: string;\r\n clientRender?: boolean;\r\n alcoholRefinerRecordId?: string;\r\n transitRefinerRecordId?: string;\r\n tobaccoRefinerRecordId?: string;\r\n cocacolaRefinerRecordId?: string;\r\n bamaRefinerRecordId?: string;\r\n dutyFreeSugarRefinerRecordId?: string;\r\n norturaRefinerRecordId?: string;\r\n preferredViewMode?: preferredViewMode;\r\n}\r\n\r\nexport interface IDlvrySearchResultContainerResources {\r\n filterText: string;\r\n doneText: string;\r\n doneAriaLabel: string;\r\n productListOrderQuantityLabel: string;\r\n productListActionsLabel: string;\r\n productListItemText: string;\r\n discount: string;\r\n lineAmount: string;\r\n yes: string;\r\n no: string;\r\n productListItemNumberText: string;\r\n productListItemNameText: string;\r\n productListUnitNameText: string;\r\n productListPriceText: string;\r\n buyNowButtonText: string;\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 numberOfSearchResults: 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 addToCartText: string;\r\n updateCartText: string;\r\n removeFromCartText: string;\r\n outOfStockText: string;\r\n defaultWishlistName: string;\r\n addToWishlistButtonText: string;\r\n removeFromWishlistButtonText: string;\r\n addedProductToWishlistText: string;\r\n productsAddedToCart: string;\r\n productsRemovedFromCart: string;\r\n productsUpdatedInCart: string;\r\n toastErrorHeader: string;\r\n toastGoToCart: string;\r\n toastNoAccessToProduct: string;\r\n addToOrderTemplateHeader: string;\r\n noOrderTemplatesMessage: string;\r\n noOrderTemplatesDescription: string;\r\n createAnOrderTemplateButtonText: string;\r\n createNewOrderTemplateButtonText: string;\r\n cancelOrderTemplateCreationButtonText: string;\r\n selectTemplatesText: string;\r\n addToTemplateButtonText: string;\r\n lineItemsText: string;\r\n createOrderTemplateHeader: string;\r\n orderTemplateTitle: string;\r\n orderTemplateNameAriaLabel: string;\r\n createOrderTemplateDescription: string;\r\n defaultOrderTemplateName: string;\r\n createOrderTemplateButtonText: string;\r\n cancelNewOrderTemplateCreationButtonText: string;\r\n viewOrderTemplateButtonText: string;\r\n continueShoppingButtonText: string;\r\n itemAddedToOrderTemplateHeaderItemOneText: string;\r\n itemAddedToOrderTemplateHeaderItemFormatText: string;\r\n itemAddedToOrderTemplateHeaderMessageText: string;\r\n duplicatedProductsHeader: string;\r\n duplicatedProductsDescription: string;\r\n updateQuantityButtonText: string;\r\n cancelDuplicateItemsButtonText: string;\r\n addToOrderTemplateButtonText: string;\r\n addToOrderTemplateButtonTooltip: string;\r\n selectionActionsText: string;\r\n selectionActionsButtonText: string;\r\n selectionActionsMissingLicenseText: string;\r\n productListTotalPriceText: string;\r\n searchPlaceholderText: string;\r\n searchEmptySearchTermText: string;\r\n priceErrorText: string;\r\n availabilityError: string;\r\n}\r\n\r\nexport interface IDlvrySearchResultContainerProps extends Msdyn365.IModule {\r\n resources: IDlvrySearchResultContainerResources;\r\n config: IDlvrySearchResultContainerConfig;\r\n slots: {\r\n quickview: React.ReactNode[];\r\n productComparisonButton: React.ReactNode[];\r\n };\r\n}\r\n","import { AttributeValue, ProductSearchResult } from \"@msdyn365-commerce/retail-proxy\";\r\n\r\nconst AlcoholAttributeName = 'Alkoholvare';\r\nconst BamaAttributeName = 'Bama';\r\nconst CocaColaAttributeName = 'Coca-Cola';\r\nconst TobaccoAttributeName = 'Tobakk';\r\nconst TransitAttributeName = 'Transitt';\r\n\r\nexport type ValidateProductAccessResult = {\r\n RecordId: number;\r\n HasAccess: boolean;\r\n};\r\n\r\nexport function validateProductAccess(customerAttributes: AttributeValue[], productAttributes: AttributeValue[]) {\r\n const custAlcohol = Number(customerAttributes.find((attr) => attr.Name === AlcoholAttributeName)?.TextValue) || 0;\r\n const custBama = Number(customerAttributes.find((attr) => attr.Name === BamaAttributeName)?.TextValue) || 0;\r\n const custCocaCola = Number(customerAttributes.find((attr) => attr.Name === CocaColaAttributeName)?.TextValue) || 0;\r\n const custTobacco = Number(customerAttributes.find((attr) => attr.Name === TobaccoAttributeName)?.TextValue) || 0;\r\n const custTransit = Number(customerAttributes.find((attr) => attr.Name === TransitAttributeName)?.TextValue) || 0;\r\n\r\n const prodAlcohol = Number(productAttributes.find((attr) => attr.Name === AlcoholAttributeName)?.TextValue) || 0;\r\n const prodBama = Number(productAttributes.find((attr) => attr.Name === BamaAttributeName)?.TextValue) || 0;\r\n const prodCocaCola = Number(productAttributes.find((attr) => attr.Name === CocaColaAttributeName)?.TextValue) || 0;\r\n const prodTobacco = Number(productAttributes.find((attr) => attr.Name === TobaccoAttributeName)?.TextValue) || 0;\r\n const prodTransit = Number(productAttributes.find((attr) => attr.Name === TransitAttributeName)?.TextValue) || 0;\r\n\r\n return [\r\n custAlcohol >= prodAlcohol,\r\n custBama >= prodBama,\r\n custCocaCola >= prodCocaCola,\r\n custTobacco >= prodTobacco,\r\n custTransit >= prodTransit\r\n ].every(Boolean);\r\n}\r\n\r\nexport function validateProductAccessArray(\r\n customerAttributes: AttributeValue[] | undefined,\r\n products: ProductSearchResult[] | undefined\r\n): ValidateProductAccessResult[] {\r\n if (!products) {\r\n return [];\r\n }\r\n\r\n const results: ValidateProductAccessResult[] = [];\r\n const custAlcohol = Number(customerAttributes?.find((attr) => attr.Name === AlcoholAttributeName)?.TextValue) || 0;\r\n const custBama = Number(customerAttributes?.find((attr) => attr.Name === BamaAttributeName)?.TextValue) || 0;\r\n const custCocaCola = Number(customerAttributes?.find((attr) => attr.Name === CocaColaAttributeName)?.TextValue) || 0;\r\n const custTobacco = Number(customerAttributes?.find((attr) => attr.Name === TobaccoAttributeName)?.TextValue) || 0;\r\n const custTransit = Number(customerAttributes?.find((attr) => attr.Name === TransitAttributeName)?.TextValue) || 0;\r\n\r\n for (const product of products) {\r\n const productAttributes = product.AttributeValues;\r\n\r\n if (!productAttributes) {\r\n continue;\r\n }\r\n\r\n const prodAlcohol = Number(productAttributes.find((attr) => attr.Name === AlcoholAttributeName)?.TextValue) || 0;\r\n const prodBama = Number(productAttributes.find((attr) => attr.Name === BamaAttributeName)?.TextValue) || 0;\r\n const prodCocaCola = Number(productAttributes.find((attr) => attr.Name === CocaColaAttributeName)?.TextValue) || 0;\r\n const prodTobacco = Number(productAttributes.find((attr) => attr.Name === TobaccoAttributeName)?.TextValue) || 0;\r\n const prodTransit = Number(productAttributes.find((attr) => attr.Name === TransitAttributeName)?.TextValue) || 0;\r\n\r\n if (![\r\n custAlcohol >= prodAlcohol,\r\n custBama >= prodBama,\r\n custCocaCola >= prodCocaCola,\r\n custTobacco >= prodTobacco,\r\n custTransit >= prodTransit\r\n ].every(Boolean)) {\r\n results.push({\r\n RecordId: product.RecordId,\r\n HasAccess: false\r\n });\r\n } else {\r\n results.push({\r\n RecordId: product.RecordId,\r\n HasAccess: true\r\n });\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport {\r\n CategoryHierarchy as CategoryHierarchyData,\r\n IProductRefinerHierarchy,\r\n IProductsDimensionsAvailabilities\r\n} from '@msdyn365-commerce/commerce-entities';\r\nimport MsDyn365, { getCatalogId, ICoreContext } from '@msdyn365-commerce/core';\r\nimport {\r\n ChannelInventoryConfiguration,\r\n ProductPrice,\r\n ProductRefinerValue, ProductsDataActions,\r\n SortColumn,\r\n StoreOperationsDataActions,\r\n TextValueTranslation,\r\n SimpleProduct,\r\n UnitOfMeasureConversion,\r\n format\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n DimensionAvailabilitiesForProductSearchResultInput,\r\n DimensionTypes,\r\n DimensionSwatchDisplayTypes,\r\n getDimensionAvailabilitiesForProductSearchResultAction,\r\n IDimensionsApp,\r\n ProductInput,\r\n getSimpleProducts\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n getTelemetryObject,\r\n ILabeledDropdownOnChangeNotification,\r\n ILabeledDropdownOption,\r\n IModuleProps,\r\n INodeProps,\r\n isMobile,\r\n ITelemetryContent,\r\n LabeledDropdown,\r\n UncontrolledPagination,\r\n VariantType,\r\n Button,\r\n Tooltip\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport { getCartStateData, GetCartStateDataInput, ICartActionResult } from '@msdyn365-commerce/global-state';\r\nimport classnames from 'classnames';\r\nimport { computed, observable, reaction, transaction, action, toJS } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { ProductListViewMode, IProductListViewModeProps } from '../../components/product-list-component/components/product-list-view-mode';\r\n\r\nimport {\r\n buildListPageUrl,\r\n getCollectionProducts,\r\n getRefinersForCollectionDataAction,\r\n getCurrentUrl,\r\n GetFullProductsByCollectionInput,\r\n parseQueryParam,\r\n ProductListInventoryFilteringOptions,\r\n RefinersByCollectionInput,\r\n sortOptions\r\n} from './actions';\r\nimport { IFullProductsSearchResultsWithCount } from './actions/get-full-products-by-collection';\r\nimport { hydrateRefinersFromUrl } from './actions/url-utils';\r\nimport {\r\n ErrorMessage,\r\n FeatureSearchResultItem,\r\n getUpdatedRefinementCriteria,\r\n IChoiceSummaryClickNotification,\r\n IRefineItemCommonProps,\r\n IRefineItemToggleNotification,\r\n ISearchResultModalViewProps,\r\n isMatchingRefinementCriterion,\r\n Link,\r\n ModalToggle,\r\n ProductSearchResultExt,\r\n // @ts-ignore\r\n ProductSearchResultItems,\r\n SearchResultModal,\r\n Separator,\r\n Title\r\n} from './components';\r\nimport ChoiceSummary from './components/choice-summary';\r\nimport RefineSubmenu from './components/refine-submenu';\r\nimport { ListPageState } from './list-page-state';\r\nimport { IDlvrySearchResultContainerData } from './dlvry-search-result-container.data';\r\nimport { IDlvrySearchResultContainerProps, preferredViewMode } from './dlvry-search-result-container.props.autogenerated';\r\nimport { IProductSelection, ProductListComponent, productSearchResults2ProductList } from '../../components/product-list-component/product-list-component';\r\nimport { GetCookie, SetCookie } from '../../shared-utils/cookie-utilities';\r\nimport {\r\n createInventoryAvailabilitySearchCriteria,\r\n mapAggregatedProductInventoryInformation,\r\n DeliveryMode,\r\n IProductInventoryInformation\r\n} from \"../../components/common/product-inventory-utils\";\r\nimport { toast } from '../../components/toast/toast';\r\nimport { validateProductAccessArray, ValidateProductAccessResult } from '../../shared-utils/validate-product-access';\r\nimport { getProductUnitOfMeasureOptionsAsync } from '../../actions/get-product-unit-of-measure-options.action';\r\nimport { getLocale } from '../../shared-utils/attributes/locale';\r\nimport { getActivePricesAsync, getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { getDiscountBadge } from '../../shared-utils/badge-utils';\r\nimport { onBuyHasAccessValidator } from '../../shared-utils/attributes/on-buy-access-validator';\r\n\r\nexport interface ISearchResultContainerViewProps extends IDlvrySearchResultContainerProps {\r\n products?: React.ReactNode;\r\n totalProductCount?: React.ReactNode;\r\n className?: string;\r\n SearchResultContainer: IModuleProps;\r\n TitleViewProps: ITitleViewProps;\r\n categoryHierarchy: ICategoryHierarchyViewProps;\r\n pagination?: React.ReactNode;\r\n ProductsContainer: INodeProps;\r\n ProductSectionContainer: INodeProps;\r\n refineMenu: IRefineMenuViewProps;\r\n sortByOptions: ISortByViewProps;\r\n choiceSummary?: React.ReactNode;\r\n modalToggle: React.ReactNode;\r\n searchResultModal: ISearchResultModalViewProps;\r\n isMobile: boolean;\r\n CategoryNavContainer: INodeProps;\r\n RefineAndProductSectionContainer: INodeProps;\r\n searchBar?: React.ReactNode;\r\n errorMessage: React.ReactNode;\r\n FeatureSearchContainer: INodeProps;\r\n similarLookProduct?: React.ReactNode;\r\n productPrices?: ProductPrice[];\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n viewModesComponent: IProductListViewModeProps;\r\n selectedProductsActions?: React.ReactNode;\r\n productInventoryStatus?: IProductInventoryInformation[];\r\n simpleProducts: SimpleProduct[];\r\n unitConversions: UnitOfMeasureConversion[];\r\n}\r\n\r\nexport interface ITitleViewProps {\r\n TitleContainer: INodeProps;\r\n title: ISearchResultTitle;\r\n}\r\n\r\nexport interface IRefineMenuViewProps {\r\n RefineMenuContainer: INodeProps;\r\n RefinerSectionContainer: INodeProps;\r\n refiners?: React.ReactNode[];\r\n}\r\n\r\nexport interface ICategoryHierarchyViewProps {\r\n categoryHierarchyList?: React.ReactNode[];\r\n categoryHierarchySeparator?: React.ReactNode;\r\n CategoryHierarchyContainer: INodeProps;\r\n}\r\n\r\nexport interface ISortByViewProps {\r\n SortingContainer: INodeProps;\r\n sortByDropDown?: React.ReactNode;\r\n}\r\n\r\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Title component for search result container.\r\n */\r\nexport interface ISearchResultTitle {\r\n titlePrefix?: React.ReactNode;\r\n titleText?: React.ReactNode;\r\n titleCount?: React.ReactNode;\r\n}\r\n\r\nexport interface ISearchResultContainerState {\r\n sortingState: ISortByCollectionState;\r\n modalIsOpen: boolean;\r\n refiners: IProductRefinerHierarchy[] | undefined;\r\n productsDimensionAvailabilities?: IProductsDimensionsAvailabilities[][];\r\n channelInventoryConfiguration?: ChannelInventoryConfiguration;\r\n productInventoryStatus?: IProductInventoryInformation[];\r\n selectedProducts: IProductSelection;\r\n productQuantities: { [key: number]: number };\r\n working: boolean;\r\n retrievedActivePrices: boolean;\r\n validatedProductAccess?: ValidateProductAccessResult[];\r\n showEmptySearchBarTooltip: boolean;\r\n simpleProducts: SimpleProduct[];\r\n unitConversions: UnitOfMeasureConversion[];\r\n resetSelectedQuantities?: Set;\r\n previousSearchText: string;\r\n}\r\n\r\ninterface ISortByCollectionState {\r\n selectedSortByOption: ILabeledDropdownOption;\r\n pending: boolean;\r\n}\r\n\r\n/**\r\n *\r\n * SearchResultContainer component.\r\n * @extends {React.PureComponent>}\r\n */\r\n@observer\r\nexport default class SearchResultContainer extends React.PureComponent<\r\n IDlvrySearchResultContainerProps,\r\n ISearchResultContainerState\r\n> {\r\n\r\n private readonly _viewModeCookieName = 'i365_searchResultViewMode_cookie';\r\n private readonly BuyAlwaysAdd = true;\r\n\r\n @computed get isMobile(): boolean {\r\n return this._viewport === 'xs' || this._viewport === 'sm';\r\n }\r\n\r\n @computed get shouldShowAvailability(): boolean {\r\n return !this.props.config.disableAvailabilityCheckUnauthorized || this.props.context.request.user.isAuthenticated;\r\n }\r\n\r\n private readonly sortByDropdownOptions: ILabeledDropdownOption[] = [\r\n { key: sortOptions.sortByOptionRelevanceDesc, value: this.props.resources.sortByOptionRelevanceDesc },\r\n { key: sortOptions.sortByOptionNameAsc, value: this.props.resources.sortByOptionNameAsc },\r\n { key: sortOptions.sortByOptionNameDesc, value: this.props.resources.sortByOptionNameDesc },\r\n { key: sortOptions.sortByOptionPriceAsc, value: this.props.resources.sortByOptionPriceAsc },\r\n { key: sortOptions.sortByOptionPriceDesc, value: this.props.resources.sortByOptionPriceDesc },\r\n { key: sortOptions.sortByOptionRatingDesc, value: this.props.resources.sortByOptionRatingDesc },\r\n { key: sortOptions.sortByOptionBestSelling, value: this.props.resources.sortByOptionBestSelling },\r\n { key: sortOptions.sortByOptionNewScore, value: this.props.resources.sortByOptionNewScore },\r\n { key: sortOptions.sortByOptionTrendingScore, value: this.props.resources.sortByOptionTrendingScore }\r\n ];\r\n\r\n private readonly _refineItemCommonProps: IRefineItemCommonProps;\r\n\r\n private readonly _pageType: string | undefined = this.props.context.request.urlTokens.pageType;\r\n\r\n @observable\r\n private _viewport: GridSize = 'lg';\r\n\r\n @observable\r\n private _viewMode: ProductListViewMode | undefined = undefined;\r\n\r\n private readonly _modalToggleRef: React.RefObject;\r\n\r\n private readonly _sortAndFilterContainerRef: React.RefObject;\r\n\r\n // private expandrefinerCount: number | undefined = 0;\r\n\r\n private readonly telemetryContent: ITelemetryContent;\r\n\r\n private readonly productPrices: ProductPrice[];\r\n\r\n private readonly defaultPageNumber = 0;\r\n\r\n private readonly catalogId = getCatalogId(this.props.context.request);\r\n\r\n private isListPageStateUpdated: boolean = false;\r\n\r\n private _isMounted: boolean = false;\r\n\r\n private readonly attributeLocale: any;\r\n\r\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\r\n let nameTranslation: TextValueTranslation | undefined;\r\n if (locale && nameTranslations && ArrayExtensions.hasElements(nameTranslations)) {\r\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\r\n }\r\n\r\n return nameTranslation?.Text;\r\n }\r\n\r\n public constructor(props: IDlvrySearchResultContainerProps, state: ISearchResultContainerState) {\r\n super(props);\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Check required.\r\n this._viewport = props.context.request?.device?.Type === 'Mobile' ? 'xs' : 'lg';\r\n this._modalToggleRef = React.createRef();\r\n this._sortAndFilterContainerRef = React.createRef();\r\n this._toggleModal = this._toggleModal.bind(this);\r\n this._updateViewport = this._updateViewport.bind(this);\r\n this.productPrices = [];\r\n this.state = {\r\n sortingState: {\r\n pending: false,\r\n selectedSortByOption: this.sortByDropdownOptions[0]\r\n },\r\n modalIsOpen: false,\r\n refiners: undefined,\r\n channelInventoryConfiguration: undefined,\r\n productInventoryStatus: undefined,\r\n validatedProductAccess: [],\r\n selectedProducts: {\r\n isAllSelected: false,\r\n isDisabled: false\r\n },\r\n productQuantities: {},\r\n working: false,\r\n retrievedActivePrices: false,\r\n showEmptySearchBarTooltip: false,\r\n simpleProducts: [],\r\n unitConversions: [],\r\n previousSearchText: this.props.context.request.query?.q || ''\r\n };\r\n const { placeholderTextMax, minLabel, maxLabel, rangeNameFormat } = this.props.resources;\r\n const locale = this.props.context.request.locale;\r\n const telemetry = this.props.telemetry;\r\n const validationErrorNaN = this.props.resources.validationErrorNotNumber;\r\n const validationErrorRange = this.props.resources.validationErrorNotRange;\r\n this._refineItemCommonProps = {\r\n telemetry,\r\n locale,\r\n placeholderTextMax,\r\n minLabel,\r\n maxLabel,\r\n rangeNameFormat,\r\n validationErrorNaN,\r\n validationErrorRange\r\n };\r\n this.telemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n this._updateViewport();\r\n\r\n const savedViewMode = GetCookie(this.props.context.request.cookies, this._viewModeCookieName);\r\n if (savedViewMode) {\r\n this._viewMode = +savedViewMode;\r\n } else if (this.props.config.preferredViewMode) {\r\n this._viewMode = this.props.config.preferredViewMode === preferredViewMode.listView\r\n ? ProductListViewMode.listView\r\n : ProductListViewMode.cardView;\r\n } else {\r\n // Need to set here to trigger update\r\n this._viewMode = ProductListViewMode.listView;\r\n }\r\n\r\n this.attributeLocale = getLocale(this.props.context);\r\n }\r\n public async componentDidMount(): Promise {\r\n this._isMounted = true;\r\n if (MsDyn365.isBrowser && window.addEventListener) {\r\n window.addEventListener('resize', this._updateViewport);\r\n this._updateViewport();\r\n }\r\n\r\n const listPageState = await this.props.data.listPageState;\r\n const products = await this.props.data.products;\r\n\r\n // @ts-expect-error -- window is not typed.\r\n if (window && !window.units) {\r\n // @ts-expect-error -- window is not typed.\r\n window.units = async (...productsId: any[]) => {\r\n const activeProducts = (await this.props.data.listPageState).activeProducts;\r\n const input = productsId.map(x => x ? x.toString() : undefined).filter(Boolean) as string[];\r\n const ids = activeProducts.filter(x => x.ItemId && input.includes(x.ItemId)).map(x => x.RecordId);\r\n\r\n if (!ids || ids.length === 0) {\r\n return;\r\n }\r\n\r\n const results = await getProductUnitOfMeasureOptionsAsync({ callerContext: this.props.context.actionContext }, ids);\r\n\r\n console.log('results', toJS(results));\r\n\r\n const conversions = [...new Set(results.map(x => x.ItemId))].map(x => {\r\n const defaultUOM = activeProducts.find(ap => ap.ItemId === x)?.DefaultUnitOfMeasure;\r\n const conversion = results.find(r =>\r\n r.ItemId === x\r\n && r.FromUnitOfMeasureSymbol === defaultUOM\r\n && (r.ToUnitOfMeasureSymbol === 'Kilogram' || r.ToUnitOfMeasureSymbol === 'Stykk' || r.ToUnitOfMeasureSymbol === 'Liter'));\r\n\r\n return {\r\n ItemId: x,\r\n DefaultUnitOfMeasure: defaultUOM,\r\n Conversion: conversion?.ToUnitOfMeasureSymbol,\r\n Value: conversion?.Factor,\r\n TextValue: conversion ? `${conversion?.Factor} ${conversion?.ToUnitOfMeasureSymbol}` : undefined\r\n };\r\n });\r\n\r\n return toJS(conversions);\r\n };\r\n }\r\n\r\n this._updateListPageState(listPageState, products);\r\n\r\n if (this.props.context.actionContext.requestContext?.user.isAuthenticated) {\r\n void this._getSimpleProducts();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\r\n if (\r\n this.props.config.enableAffiliationBasedPricing &&\r\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\r\n ) {\r\n if (products.products.some(x => !x.PrefetchedPrice)) {\r\n void this._getActivePrice();\r\n } else {\r\n this.setState({ retrievedActivePrices: true });\r\n }\r\n }\r\n\r\n await this._updateVariantAvailability();\r\n\r\n void this._getUnitOfMeasureConversions();\r\n\r\n const channelInventoryConfiguration = await StoreOperationsDataActions.getInventoryConfigurationAsync({\r\n callerContext: this.props.context.actionContext\r\n });\r\n if (this._isMounted) {\r\n this.setState({ channelInventoryConfiguration });\r\n }\r\n\r\n let productInventoryStatus: IProductInventoryInformation[] | undefined;\r\n\r\n try {\r\n productInventoryStatus = await this._getAvailableQuantity();\r\n } catch {\r\n productInventoryStatus = this.props.data.listPageState.result?.activeProducts.map((p) => {\r\n return {\r\n IsProductAvailable: false,\r\n StockLevelCode: 'ERR',\r\n StockLevelLabel: this.props.resources.availabilityError,\r\n ProductAvailableQuantity: {\r\n ProductId: p.RecordId\r\n }\r\n };\r\n });\r\n }\r\n\r\n const validatedProductAccess = validateProductAccessArray(\r\n this.props.data.customerInformation.result?.Attributes,\r\n this.props.data.listPageState.result?.activeProducts);\r\n this.setState({ productInventoryStatus, validatedProductAccess });\r\n\r\n // Initialize reaction based on listPageState properties\r\n reaction(\r\n () => {\r\n return [\r\n listPageState.activeFilters?.length,\r\n listPageState.currentPageNumber,\r\n listPageState.searchText,\r\n ArrayExtensions.hasElements(listPageState.sortingCritera?.Columns)\r\n ];\r\n },\r\n async () => {\r\n let searchTextChanged = false;\r\n\r\n if (this.state.previousSearchText !== listPageState.searchText) {\r\n this.setState({ previousSearchText: listPageState.searchText || '' });\r\n searchTextChanged = true;\r\n }\r\n\r\n const newListPageState = await this.props.data.listPageState;\r\n const input = new GetFullProductsByCollectionInput(\r\n newListPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(newListPageState.pageSize * (newListPageState.currentPageNumber ?? 0), 0)\r\n },\r\n count: true,\r\n Sorting: newListPageState.sortingCritera ?? {}\r\n },\r\n newListPageState.activeFilters ?? [],\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\r\n +(this.props.context.request.urlTokens.recordId || 0),\r\n (this.props.context.request.query?.productId || this.props.context.request.query?.recommendation)\r\n ? JSON.stringify({\r\n ProductId: this.props.context.request.query?.productId,\r\n Recommendation: this.props.context.request.query?.recommendation,\r\n SearchText: listPageState.searchText\r\n })\r\n : listPageState.searchText,\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Required check.\r\n !!this.props?.config?.includeAttributes,\r\n this.props.config.updateRefinerPanel,\r\n this.props.context.request.locale,\r\n this.catalogId,\r\n channelInventoryConfiguration\r\n );\r\n\r\n const productResults = await getCollectionProducts(input, this.props.context.actionContext);\r\n newListPageState.totalProductCount = productResults?.count;\r\n newListPageState.activeProducts = productResults?.products;\r\n\r\n if (this.props.context.request.user.isAuthenticated) {\r\n void this._getSimpleProducts();\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- check is required.\r\n if (\r\n this.props.config.enableAffiliationBasedPricing &&\r\n this.props.context.actionContext.requestContext?.user?.isAuthenticated\r\n ) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises -- Call api to retrieve the availabilities data without blocking the UI.\r\n this._getActivePrice();\r\n }\r\n\r\n void this._getUnitOfMeasureConversions();\r\n\r\n await this._updateVariantAvailability();\r\n\r\n if (searchTextChanged || this.props.config.updateRefinerPanel) {\r\n const refinerInput = new RefinersByCollectionInput(\r\n newListPageState.pageType,\r\n this.props.context.request.apiSettings,\r\n {\r\n Paging: {\r\n Top: this.props.config.itemsPerPage,\r\n Skip: Math.max(\r\n newListPageState.pageSize * (newListPageState.currentPageNumber ?? this.defaultPageNumber),\r\n this.defaultPageNumber\r\n )\r\n },\r\n count: true,\r\n Sorting: newListPageState.sortingCritera ?? {}\r\n },\r\n newListPageState.activeFilters ?? [],\r\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- RecordId is string. Check required.\r\n +(this.props.context.request.urlTokens.recordId || 0),\r\n (this.props.context.request.query?.productId || this.props.context.request.query?.recommendation)\r\n ? JSON.stringify({\r\n ProductId: this.props.context.request.query?.productId,\r\n Recommendation: this.props.context.request.query?.recommendation,\r\n SearchText: listPageState.searchText\r\n })\r\n : listPageState.searchText,\r\n false,\r\n searchTextChanged || this.props.config.updateRefinerPanel,\r\n undefined,\r\n this.catalogId,\r\n channelInventoryConfiguration\r\n );\r\n\r\n const refiners = await getRefinersForCollectionDataAction(refinerInput, this.props.context.actionContext);\r\n this.setState({ refiners });\r\n }\r\n }\r\n );\r\n\r\n reaction(\r\n () => {\r\n return [\r\n this.props.data.listPageState.result,\r\n this.props.data.listPageState.result?.activeProducts,\r\n this.props.data.listPageState.result?.activeProducts.length\r\n ];\r\n },\r\n async () => {\r\n let productInventoryStatus: IProductInventoryInformation[] | undefined;\r\n\r\n try {\r\n productInventoryStatus = await this._getAvailableQuantity();\r\n } catch {\r\n productInventoryStatus = this.props.data.listPageState.result?.activeProducts.map((p) => {\r\n return {\r\n IsProductAvailable: false,\r\n StockLevelCode: 'ERR',\r\n StockLevelLabel: this.props.resources.availabilityError,\r\n ProductAvailableQuantity: {\r\n ProductId: p.RecordId\r\n }\r\n };\r\n });\r\n }\r\n\r\n const validatedProductAccess = validateProductAccessArray(\r\n this.props.data.customerInformation.result?.Attributes,\r\n this.props.data.listPageState.result?.activeProducts);\r\n this.setState({ productInventoryStatus, validatedProductAccess });\r\n }\r\n );\r\n reaction(\r\n () => this._viewMode,\r\n () => {\r\n this.setState({ selectedProducts: { isAllSelected: false, isDisabled: false } });\r\n }\r\n );\r\n }\r\n\r\n public componentWillUnmount(): void {\r\n this._isMounted = false;\r\n if (MsDyn365.isBrowser && window.removeEventListener) {\r\n window.removeEventListener('resize', this._updateViewport);\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const {\r\n config: { imageSettings, className },\r\n resources,\r\n data: { listPageState, products: productCollection, featureProduct }\r\n } = this.props;\r\n\r\n if (!this.isListPageStateUpdated && listPageState.result && productCollection.result) {\r\n this._updateListPageState(listPageState.result, productCollection.result);\r\n this.isListPageStateUpdated = true;\r\n }\r\n\r\n //const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n const searchProduct = listPageState.result?.featureProduct ?? featureProduct.result ?? null;\r\n let errorText = '';\r\n // if (!ArrayExtensions.hasElements(products)) {\r\n if (listPageState.result && listPageState.result.activeProducts.length === 0) {\r\n errorText = this._pageType === 'Category' ? resources.resultCategoryNotFoundText : resources.resultSearchNotFoundText;\r\n }\r\n const productsComponent = this._getProducts();\r\n const featureComponent = (\r\n \r\n );\r\n\r\n const viewModeProps = {\r\n viewMode: this._viewMode,\r\n cardButtonTxt: 'Varekort',\r\n listButtonTxt: 'Liste',\r\n className: 'ms-search-result-container__category-nav-section__view-modes',\r\n setCardViewMode: this.setCardViewMode,\r\n setListViewMode: this.setListViewMode\r\n };\r\n\r\n const searchResultContainerViewProps: Partial = {\r\n ...this.props,\r\n products: productsComponent,\r\n totalProductCount: this._getTotalProductCount(),\r\n TitleViewProps: this._getCollectionTitle(),\r\n categoryHierarchy: !this.props.config.disableHierarchy ? this._getCategoryHierarchy() : undefined,\r\n refineMenu: this._getRefineMenu(),\r\n className: classnames('ms-search-result-container', className),\r\n SearchResultContainer: {\r\n moduleProps: this.props,\r\n className: classnames('ms-search-result-container', className)\r\n },\r\n sortByOptions: this.props.data.listPageState.result?.totalProductCount !== 0 ? this._getSortingDropDown() : undefined,\r\n pagination: this._getPagination(),\r\n ProductsContainer: { className: 'ms-search-result-container__Products' },\r\n ProductSectionContainer: { className: 'ms-search-result-container__product-section' },\r\n CategoryNavContainer: { className: 'ms-search-result-container__category-nav-section' },\r\n RefineAndProductSectionContainer: { className: 'ms-search-result-container__refine-product-section' },\r\n searchBar: this._getSearchBar(),\r\n choiceSummary: this._getChoiceSummary(),\r\n modalToggle:\r\n this.props.data.listPageState.result?.totalProductCount !== 0 ? (\r\n \r\n ) : null,\r\n searchResultModal: this._getSearchResultModal(),\r\n isMobile: this.isMobile,\r\n errorMessage: errorText && ,\r\n FeatureSearchContainer: { className: 'ms-feature-search-result' },\r\n similarLookProduct: searchProduct ? featureComponent : null,\r\n productPrices: this.productPrices,\r\n productsDimensionAvailabilities: this.state.productsDimensionAvailabilities,\r\n viewModesComponent: viewModeProps,\r\n selectedProductsActions: this._getSelectedProductsActions(),\r\n productInventoryStatus: this.state.productInventoryStatus,\r\n simpleProducts: this.state.simpleProducts,\r\n unitConversions: this.state.unitConversions\r\n };\r\n return this.props.renderView(searchResultContainerViewProps as any) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Get products variants dimension availabilities.\r\n * @returns Void.\r\n */\r\n private readonly _updateVariantAvailability = async (): Promise => {\r\n const context = this.props.context as ICoreContext;\r\n const dimensionsToDisplayOnProductCard = context.app.config.dimensionsInProductCard;\r\n const dimensionsToDisplayAsSwatch = context.app.config.dimensionsAsSwatchType;\r\n if (\r\n ArrayExtensions.hasElements(dimensionsToDisplayOnProductCard) &&\r\n !dimensionsToDisplayOnProductCard.includes(DimensionTypes.none) &&\r\n ArrayExtensions.hasElements(dimensionsToDisplayAsSwatch) &&\r\n !dimensionsToDisplayAsSwatch.includes(DimensionTypes.none) &&\r\n this.props.config.includeAttributes\r\n ) {\r\n await this._getProductsDimensionsAvailabilities();\r\n }\r\n };\r\n\r\n public readonly setListViewMode = () => {\r\n this._viewMode = ProductListViewMode.listView;\r\n this._updateCurrentViewMode();\r\n };\r\n\r\n public readonly setCardViewMode = () => {\r\n this._viewMode = ProductListViewMode.cardView;\r\n this._updateCurrentViewMode();\r\n };\r\n\r\n private readonly _updateCurrentViewMode = () => {\r\n const cookieAge: number = 31536000000;\r\n const newCookieValue: string = String(this._viewMode);\r\n SetCookie(this.props.context.request.cookies, newCookieValue, this._viewModeCookieName, cookieAge);\r\n };\r\n\r\n /**\r\n * Update the list page state with initial data.\r\n * @param listPageState -- List page State.\r\n * @param products -- Products.\r\n */\r\n @action.bound\r\n private readonly _updateListPageState = (listPageState: ListPageState, products: IFullProductsSearchResultsWithCount): void => {\r\n let querySorting: SortColumn[] = [];\r\n const defaultPageNumber: number = 10;\r\n\r\n if (this._pageType === 'Category') {\r\n listPageState.pageType = 'Category';\r\n } else {\r\n listPageState.pageType = 'Search';\r\n }\r\n\r\n if (this.props.context.request.query?.sorting) {\r\n querySorting = JSON.parse(decodeURIComponent(this.props.context.request.query.sorting)) as SortColumn[];\r\n }\r\n\r\n listPageState.currentPageNumber =\r\n (this.props.context.request.query &&\r\n +this.props.context.request.query.skip / (this.props.config.itemsPerPage ?? defaultPageNumber)) ||\r\n 0;\r\n listPageState.sortingCritera = { Columns: querySorting };\r\n listPageState.pageSize = this.props.config.itemsPerPage ?? defaultPageNumber;\r\n listPageState.activeProducts = products.products;\r\n listPageState.totalProductCount = products.count;\r\n listPageState.activeFilters = hydrateRefinersFromUrl(this.props.context.request) || [];\r\n listPageState.searchText = this.props.context.request.query?.q || '';\r\n if (this.props.context.request.query?.productId) {\r\n const featureProduct = this.props.data.featureProduct.result;\r\n if (featureProduct) {\r\n listPageState.featureProduct = featureProduct;\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Get products dimension availabilities.\r\n * @returns Void.\r\n */\r\n private readonly _getProductsDimensionsAvailabilities = async (): Promise => {\r\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\r\n\r\n const productsDimensionAvailabilities = await getDimensionAvailabilitiesForProductSearchResultAction(\r\n new DimensionAvailabilitiesForProductSearchResultInput(\r\n productsList,\r\n this.props.context as ICoreContext,\r\n DimensionSwatchDisplayTypes.productCard\r\n ),\r\n this.props.context.actionContext\r\n );\r\n\r\n if (ArrayExtensions.hasElements(productsDimensionAvailabilities)) {\r\n this.setState({ productsDimensionAvailabilities });\r\n }\r\n };\r\n\r\n /**\r\n * Get the active price for the products.\r\n */\r\n private readonly _getActivePrice = async (): Promise => {\r\n // Hide prices when retrieving so we don't show base price\r\n this.setState({ retrievedActivePrices: false });\r\n\r\n const productsList = this.props.data.listPageState.result?.activeProducts ?? [];\r\n const missingPrices = productsList.filter((x) => !x.PrefetchedPrice);\r\n\r\n if (missingPrices.length > 0) {\r\n try {\r\n const prices = await getActivePricesAsync(\r\n { callerContext: this.props.context.actionContext },\r\n {\r\n CatalogId: this.catalogId,\r\n ChannelId: this.props.context.request.apiSettings.channelId\r\n },\r\n missingPrices.map((x) => x.RecordId),\r\n new Date(),\r\n null,\r\n undefined,\r\n true\r\n );\r\n const listPageState = await this.props.data.listPageState;\r\n\r\n prices.forEach((p) => {\r\n const indexOfProduct = listPageState.activeProducts.findIndex((x) => x.RecordId === p.ProductId);\r\n\r\n if (indexOfProduct !== -1) {\r\n listPageState.activeProducts[indexOfProduct].Price = p.CustomerContextualPrice || 0;\r\n listPageState.activeProducts[indexOfProduct].BasePrice = p.AdjustedPrice || 0;\r\n listPageState.activeProducts[indexOfProduct].Badge = getDiscountBadge(p);\r\n listPageState.activeProducts[indexOfProduct].ProductPrice = p;\r\n }\r\n });\r\n } catch (error) {\r\n missingPrices.forEach((product) => {\r\n product.PriceFailed = true;\r\n });\r\n console.error('Failed to retrieve active prices.', error);\r\n }\r\n }\r\n\r\n this.setState({ retrievedActivePrices: true });\r\n };\r\n\r\n private readonly _getSimpleProducts = async(): Promise => {\r\n const missing = this.props.data.listPageState.result?.activeProducts\r\n ?.filter(x => !this.state.simpleProducts.find(y => y.RecordId === x.RecordId));\r\n\r\n if (!missing) {\r\n return;\r\n }\r\n\r\n const simpleProducts = await getByIdsAsync(\r\n {callerContext:this.props.context.actionContext},\r\n this.props.context.request.apiSettings.channelId,\r\n missing?.map(x => x.RecordId)\r\n );\r\n\r\n const newSimpleProducts = [...this.state.simpleProducts ];\r\n\r\n simpleProducts.forEach(x => {\r\n if (!newSimpleProducts.find(y => y.RecordId === x.RecordId)) {\r\n newSimpleProducts.push(x);\r\n }\r\n });\r\n\r\n this.setState({ simpleProducts: newSimpleProducts });\r\n };\r\n\r\n private readonly _getUnitOfMeasureConversions = async (): Promise => {\r\n const { actionContext, request, app } = this.props.context;\r\n\r\n if (!request.user.isAuthenticated || app.config.unitOfMeasureConversions !== true) {\r\n return;\r\n }\r\n\r\n const activeProducts = (await this.props.data.listPageState).activeProducts;\r\n const ids = activeProducts.map(x => x.RecordId);\r\n\r\n if (!ids || ids.length === 0) {\r\n return;\r\n }\r\n\r\n const unitConversions = await getProductUnitOfMeasureOptionsAsync({ callerContext: actionContext }, ids);\r\n\r\n this.setState({ unitConversions });\r\n };\r\n\r\n private readonly _getSearchResultModal = (): ISearchResultModalViewProps => {\r\n const { resources } = this.props;\r\n return SearchResultModal({\r\n resources: {\r\n modalCloseButtonText: resources.modalCloseButtonText,\r\n modalTitle: resources.modalTitle\r\n },\r\n isOpen: this.state.modalIsOpen,\r\n returnRef: this._modalToggleRef,\r\n onModalToggle: this._toggleModal\r\n });\r\n };\r\n\r\n private readonly _getSelectedProductIds = (): number[] => {\r\n const { isDisabled, isAllSelected, ...selectedProducts } = this.state.selectedProducts || {};\r\n const selectedProductsIds = Object.entries(selectedProducts).map(([key, value]) => value ? Number(key) : 0).filter(x => x !== 0);\r\n\r\n return selectedProductsIds;\r\n };\r\n\r\n private readonly _getSelectedProductsActions = (): React.ReactNode => {\r\n const ids = this._getSelectedProductIds();\r\n\r\n if (ids.length === 0) {\r\n return null;\r\n }\r\n\r\n const { working } = this.state;\r\n const baseClassName = 'ms-search-result-container';\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n {this.props.resources.selectionActionsButtonText}\r\n \r\n
\r\n );\r\n };\r\n\r\n private readonly _onBuySelectedProducts = async (): Promise => {\r\n const { context, context: { actionContext, request } } = this.props;\r\n\r\n if (!context || !context.request.user.catalogId) {\r\n return;\r\n }\r\n\r\n this.setState({ working: true });\r\n\r\n const simpleInputs = this._getSelectedProductIds().map(id => {\r\n return new ProductInput(\r\n id,\r\n request.apiSettings,\r\n undefined, undefined,\r\n request,\r\n +request.user.catalogId!\r\n );\r\n });\r\n const simpleProducts = await getSimpleProducts(simpleInputs, actionContext);\r\n\r\n if (!simpleProducts || simpleProducts.length === 0) {\r\n this.setState({ working: false });\r\n return;\r\n }\r\n\r\n let cart = await getCartStateData(new GetCartStateDataInput(request.apiSettings, request), actionContext);\r\n\r\n if (!cart) {\r\n this.setState({ working: false });\r\n return;\r\n }\r\n\r\n while (cart.status === 'UPDATING') {\r\n console.log('Cart is updating, waiting for it to finish...');\r\n await new Promise((resolve) => setTimeout(resolve, 1000));\r\n cart = await getCartStateData(new GetCartStateDataInput(request.apiSettings, request), actionContext);\r\n\r\n if (!cart) {\r\n // Shouldn't happen, but just in case\r\n toast({\r\n header: 'Error',\r\n text: 'Cart is undefined. Please try again later.',\r\n autoClose: 30000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n showProgress: true\r\n });\r\n this.setState({ working: false });\r\n return;\r\n }\r\n }\r\n\r\n // Divide products into groups of buy, update and remove\r\n const cartLineQuantities = Object.fromEntries(cart.cart.CartLines!.map(line => [line.ProductId, line.Quantity] ));\r\n const operations: {\r\n buy: { product: SimpleProduct, quantity: number }[],\r\n update: { product: SimpleProduct, quantity: number }[],\r\n remove: { product: SimpleProduct, quantity: number }[]\r\n } = {\r\n buy: [],\r\n update: [],\r\n remove: []\r\n };\r\n\r\n for (const product of simpleProducts) {\r\n const quantity = this.state.productQuantities[product.RecordId] ?? 1;\r\n const cartQuantity = cartLineQuantities[product.RecordId] ?? 0;\r\n\r\n if (this.BuyAlwaysAdd || cartQuantity === 0) {\r\n operations.buy.push({ product, quantity });\r\n } else if (quantity === 0) {\r\n operations.remove.push({ product, quantity });\r\n } else if (quantity === cartQuantity) {\r\n continue;\r\n } else {\r\n operations.update.push({ product, quantity });\r\n }\r\n }\r\n\r\n const { customerInformation, listPageState } = this.props.data;\r\n const result = validateProductAccessArray(\r\n customerInformation.result?.Attributes,\r\n operations.buy.concat(operations.update)\r\n .map(x => listPageState.result?.activeProducts.find(p => p.RecordId === x.product.RecordId)!)\r\n );\r\n\r\n // TODO: Remove this to re-enable license check\r\n result.forEach(x => x.HasAccess = true);\r\n\r\n // Check if any of the products require an alcohol license\r\n if (result.some(x => x.HasAccess === false)) {\r\n toast({\r\n header: this.props.resources.toastErrorHeader,\r\n text: this.props.resources.selectionActionsMissingLicenseText,\r\n type: 'error',\r\n autoClose: 30000,\r\n canClose: true,\r\n position: 'bottom-right',\r\n showProgress: true\r\n });\r\n this.setState({ working: false });\r\n return;\r\n }\r\n\r\n const resetQuantitiesFor = new Set();\r\n const newProductQuantities = { ...this.state.productQuantities };\r\n const newSelectedProducts = { ...this.state.selectedProducts };\r\n\r\n const getErrorMessage = (result: ICartActionResult): string => {\r\n if (result.status === 'FAILED') {\r\n if (result.validationResults?.[0]?.LocalizedMessage) {\r\n return result.validationResults?.[0]?.LocalizedMessage;\r\n }\r\n\r\n if (typeof result.errorDetails?.LocalizedMessage === 'string') {\r\n return result.errorDetails?.LocalizedMessage;\r\n }\r\n\r\n if ((result.errorDetails?.LocalizedMessage as any)?.data?.ValidationResults?.[0]?.ErrorContext) {\r\n return (result.errorDetails?.LocalizedMessage as any)?.data?.ValidationResults?.[0]?.ErrorContext;\r\n }\r\n }\r\n\r\n return 'Unknown error adding items to cart';\r\n };\r\n const handleResult = (result: ICartActionResult, products: SimpleProduct[]): boolean => {\r\n if (result.status === 'SUCCESS') {\r\n newSelectedProducts.isAllSelected = false;\r\n products.forEach(x => {\r\n resetQuantitiesFor.add(x.RecordId);\r\n delete newProductQuantities[x.RecordId];\r\n delete newSelectedProducts[x.RecordId];\r\n });\r\n }\r\n\r\n if (result.status === 'FAILED') {\r\n toast({\r\n header: this.props.resources.toastErrorHeader,\r\n text: getErrorMessage(result),\r\n footer: (result.errorDetails?.LocalizedMessage as any)?.data?.CorrelationId,\r\n type: 'error',\r\n autoClose: 0,\r\n position: \"bottom-right\",\r\n canClose: true,\r\n showProgress: true\r\n });\r\n this.setState({\r\n resetSelectedQuantities: resetQuantitiesFor,\r\n working: false,\r\n productQuantities: newProductQuantities,\r\n selectedProducts: newSelectedProducts\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n if (operations.buy.length > 0) {\r\n const buyInput = operations.buy.map(({ product, quantity }) => ({\r\n product,\r\n count: quantity,\r\n customPrice: listPageState.result?.activeProducts.find(p => p.RecordId === product.RecordId)?.Price\r\n }));\r\n const result = await cart.addProductsToCart(buyInput);\r\n\r\n if (handleResult(result, operations.buy.map(x => x.product)) === false) {\r\n return;\r\n }\r\n }\r\n\r\n if (operations.update.length > 0) {\r\n const updateInput = operations.update.map(({ product, quantity }) => {\r\n const line = cart!.cart.CartLines!.find(x => x.ProductId === product.RecordId);\r\n line!.Quantity = quantity;\r\n return line!;\r\n });\r\n const result = await cart.updateCartLines({ updatedCartLinesObject: updateInput });\r\n\r\n if (handleResult(result, operations.update.map(x => x.product)) === false) {\r\n return;\r\n }\r\n }\r\n\r\n if (operations.remove.length > 0) {\r\n const cartLineIds = operations.remove.map(({ product }) => {\r\n const line = cart!.cart.CartLines!.find(x => x.ProductId === product.RecordId);\r\n return line!.LineId!;\r\n });\r\n\r\n const result = await cart.removeCartLines({ cartLineIds });\r\n\r\n if (handleResult(result, operations.remove.map(x => x.product)) === false) {\r\n return;\r\n }\r\n }\r\n\r\n await cart.refreshCart({});\r\n this.setState({\r\n resetSelectedQuantities: resetQuantitiesFor,\r\n working: false,\r\n productQuantities: newProductQuantities,\r\n selectedProducts: newSelectedProducts\r\n });\r\n };\r\n\r\n private readonly _getCollectionTitle = (): ITitleViewProps => {\r\n const { data, context, resources } = this.props;\r\n\r\n let collectionTitle: string | undefined = '';\r\n /* if (context && context.request && context.request.query && context.request.query.q) {\r\n collectionTitle = `\"${context.request.query.q}\"`;\r\n } else {\r\n collectionTitle =\r\n (data.category.result &&\r\n SearchResultContainer.getFriendlyName(context.request.locale, data.category.result.NameTranslations)) ||\r\n (data.category.result && data.category.result.Name) ||\r\n this.props.context.request.query?.title ||\r\n '';\r\n } */\r\n\r\n if (context.request.query?.title) {\r\n collectionTitle = context.request.query.title;\r\n }\r\n\r\n let productCountText = '';\r\n let productCountNumber: number | undefined;\r\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\r\n productCountNumber = data.listPageState.result.totalProductCount;\r\n } else if (data.products && data.products.result) {\r\n productCountNumber = data.products.result.count;\r\n }\r\n\r\n if (productCountNumber && productCountNumber !== 0) {\r\n productCountText =\r\n productCountNumber !== 1\r\n ? format(this.props.resources.numberOfProducts, productCountNumber)\r\n : this.props.resources.oneProduct;\r\n } else {\r\n productCountText = format(this.props.resources.numberOfProducts, 0);\r\n }\r\n const pageName = context.request.telemetryPageName ? `result-count-${context.request.telemetryPageName.toLowerCase()}` : '';\r\n const titlePrefix = ;\r\n const titleText = collectionTitle && <Title className='ms-search-result__collection-title-text' text={collectionTitle} />;\r\n const titleCount = <Title className='ms-search-result__collection-title-count' text={productCountText} />;\r\n\r\n return {\r\n TitleContainer: { className: `ms-search-result-container__title ${pageName}` },\r\n title: {\r\n titlePrefix,\r\n titleText,\r\n titleCount\r\n }\r\n };\r\n };\r\n\r\n private readonly _getCategoryHierarchy = (): ICategoryHierarchyViewProps => {\r\n const { data } = this.props;\r\n const categoryHierarchy = data.categoryHierarchy.result;\r\n const categoryLinks =\r\n categoryHierarchy &&\r\n categoryHierarchy.map((value: CategoryHierarchyData, index: number) => {\r\n return (\r\n <Link\r\n key={index}\r\n text={value.Name}\r\n ariaLabel={`${this.props.resources.categoryLinkAriaLabel} ${value.Name}`}\r\n href={value.Url}\r\n />\r\n );\r\n });\r\n const categoryLinkSeparator = <Separator separator='/' />;\r\n\r\n return {\r\n CategoryHierarchyContainer: { tag: 'nav', className: 'ms-search-result-container__category-hierarchy' },\r\n categoryHierarchyList: categoryLinks,\r\n categoryHierarchySeparator: categoryLinkSeparator\r\n };\r\n };\r\n\r\n private readonly _getSortingDropDown = (): ISortByViewProps => {\r\n const { resources } = this.props;\r\n const activeDropdown = this._getCurrentlySelectedOption() || this.state.sortingState.selectedSortByOption;\r\n let dropdownOptions = this._getAllSortByOptions();\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- App config settings are of \"any\" value.\r\n if (this.props.context.app.config.hideRating) {\r\n dropdownOptions = dropdownOptions.filter(dropdownOption => dropdownOption.key !== sortOptions.sortByOptionRatingDesc);\r\n }\r\n\r\n const dropdown = (\r\n <LabeledDropdown\r\n labelClassname='reviews-list-sort-by'\r\n labelText={resources.sortByDropdownLabel}\r\n dropdownId='categorySortByDropdown'\r\n dropdownClassname='reviews-list-dropdown'\r\n toggleColor='link'\r\n dropdownOptions={dropdownOptions}\r\n selectedOption={activeDropdown}\r\n onSelectOption={this._updateSortByDropdown}\r\n ref={this._sortAndFilterContainerRef}\r\n />\r\n );\r\n return {\r\n SortingContainer: { className: 'ms-search-result-container__Sort-by-category' },\r\n sortByDropDown: dropdown\r\n };\r\n };\r\n\r\n private readonly _getPagination = (): React.ReactNode => {\r\n const { config, context, data, resources } = this.props;\r\n const listPageState = data.listPageState.result;\r\n const fullUrl = getCurrentUrl(context.request);\r\n const itemsPerPage = config.itemsPerPage || 10;\r\n // eslint-disable-next-line max-len -- existing code\r\n const skipCount = listPageState?.currentPageNumber\r\n ? listPageState.currentPageNumber * (this.props.config.itemsPerPage || 10)\r\n : (this.props.context.request.query && +this.props.context.request.query.skip) || 0;\r\n const totalItems = listPageState?.totalProductCount || 0;\r\n const previousText = resources.flipperPrevious;\r\n const nextText = resources.flipperNext;\r\n\r\n if (totalItems <= itemsPerPage) {\r\n return null;\r\n }\r\n return (\r\n <UncontrolledPagination\r\n className='ms-search-result-container__pagination'\r\n role='navigation'\r\n aria-label={resources.paginationAriaLabel}\r\n url={fullUrl.href}\r\n qsp='skip'\r\n items={totalItems}\r\n itemsPerPage={itemsPerPage}\r\n startingItem={skipCount}\r\n previousText={this._renderPrev(previousText)}\r\n nextText={this._renderNext(nextText)}\r\n previousAriaLabel={previousText}\r\n nextAriaLabel={nextText}\r\n telemetryContent={this.telemetryContent}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getRefineMenu = (): IRefineMenuViewProps => {\r\n const { data, context } = this.props;\r\n const tempRangeTypeTODO = context.request.query && context.request.query.inputRange ? 'input' : 'slider';\r\n const validRefiners =\r\n this.state.refiners && ArrayExtensions.hasElements(this.state.refiners)\r\n ? this.state.refiners.filter(refiner => {\r\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\r\n })\r\n : data.refiners.result &&\r\n data.refiners.result.filter(refiner => {\r\n return ArrayExtensions.hasElements(refiner.Values) && !this._shouldHideFromRefiners(refiner);\r\n });\r\n\r\n const activeRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n // this._getexpandRefinerCount(validRefiners && validRefiners.length, config.expandRefinersCount);\r\n // const expandedRefiners = this.expandrefinerCount;\r\n const subMenus =\r\n validRefiners &&\r\n validRefiners.map((productRefinerHierarchy: IProductRefinerHierarchy, index: number) => {\r\n return (\r\n <RefineSubmenu\r\n productRefinerHierarchy={productRefinerHierarchy}\r\n selectedRefinerValues={activeRefiners}\r\n refineItemCommonProps={this._refineItemCommonProps}\r\n minValueSliderThumbAriaLabel={this.props.resources.minValueSliderThumbAriaLabel}\r\n maxValueSliderThumbAriaLabel={this.props.resources.maxValueSliderThumbAriaLabel}\r\n key={index}\r\n onUpdateRefiners={this._onUpdateRefiners}\r\n urlBuilder={this._buildRefinerUrl}\r\n isDisabled={false}\r\n isExpandedOnInitialLoad={false}\r\n tempRangeTypeTODO={tempRangeTypeTODO}\r\n context={context}\r\n moduleId={this.props.id}\r\n moduleTypeName={this.props.typeName}\r\n telemetryContent={this.telemetryContent}\r\n productCountAriaLabel={this.props.resources.productCountAriaLabel}\r\n refineItemAriaLabel={this.props.resources.refineItemAriaLabel}\r\n refineItemsAriaLabel={this.props.resources.refineItemsAriaLabel}\r\n singleProductCountAriaLabel={this.props.resources.singleProductCountAriaLabel}\r\n isMobile={this.isMobile}\r\n />\r\n );\r\n });\r\n\r\n return {\r\n RefineMenuContainer: { className: 'ms-search-result-container__refine-menu' },\r\n RefinerSectionContainer: { className: 'ms-search-result-container__refiner-section' },\r\n refiners: subMenus\r\n };\r\n };\r\n\r\n /**\r\n * Should hide from refiners.\r\n * @param refiner - The refiner.\r\n * @returns ShouldHideFromRefiners.\r\n */\r\n private readonly _shouldHideFromRefiners = (refiner: IProductRefinerHierarchy): boolean => {\r\n const { channelInventoryConfiguration } = this.state;\r\n const refinerIds = [\r\n Number(this.props.context.app.config?.forsvaretAttributeRecordId),\r\n Number(this.props.config.alcoholRefinerRecordId),\r\n Number(this.props.config.transitRefinerRecordId),\r\n Number(this.props.config.tobaccoRefinerRecordId),\r\n Number(this.props.config.cocacolaRefinerRecordId),\r\n Number(this.props.config.bamaRefinerRecordId),\r\n Number(this.props.config.dutyFreeSugarRefinerRecordId),\r\n Number(this.props.config.norturaRefinerRecordId)\r\n ];\r\n // Always hide sortable attribute since it's just for sorting products in Azure search, not for customers\r\n return (\r\n refiner.RecordId === this.props.data.products.result?.inventoryAwareSortableAttributeId ||\r\n refiner.RecordId === channelInventoryConfiguration?.ProductAvailabilitySortableAttributeRecordId ||\r\n refiner.RecordId && refinerIds.includes(refiner.RecordId) ||\r\n (this.props.context.app.config.productListInventoryDisplay === ProductListInventoryFilteringOptions.HideOOS &&\r\n (refiner.RecordId === this.props.data.products.result?.channelInventoryConfigurationId ||\r\n refiner.RecordId === channelInventoryConfiguration?.InventoryProductAttributeRecordId))\r\n );\r\n };\r\n\r\n private readonly _canSearchEmpty = (): Boolean => {\r\n // If we're on a recommendation page, we can search for empty string. Will show entire recommendation list\r\n if (this.props.context.request.query?.recommendation) {\r\n return true;\r\n }\r\n // If we're on a category page, we can search for empty string. Will show entire category\r\n if (this._pageType === 'Category') {\r\n return true;\r\n }\r\n return false;\r\n };\r\n\r\n private readonly _getSearchBar = (): React.ReactNode => {\r\n const {\r\n data: { listPageState },\r\n resources: { searchPlaceholderText }\r\n } = this.props;\r\n\r\n const onKeyDown = async (e: React.KeyboardEvent) => {\r\n this.setState({ showEmptySearchBarTooltip: false });\r\n\r\n if (e.key === 'Enter') {\r\n const value = (e.target as HTMLInputElement).value;\r\n\r\n if (!value && !this._canSearchEmpty()) {\r\n // Can't search for empty string\r\n this.setState({ showEmptySearchBarTooltip: true });\r\n return;\r\n }\r\n\r\n const newUrl = new URL(window.location.href);\r\n if (value) {\r\n newUrl.searchParams.set('q', value);\r\n } else {\r\n newUrl.searchParams.delete('q');\r\n }\r\n // Reset to first page everytime we do a search\r\n newUrl.searchParams.delete('skip');\r\n if (this.props.context.request.query?.skip) {\r\n delete this.props.context.request.query.skip;\r\n }\r\n window.history.pushState({ path: newUrl.href }, '', newUrl.href);\r\n\r\n transaction(() => {\r\n listPageState.result!.currentPageNumber = 0;\r\n listPageState.result!.searchText = value;\r\n });\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n <input\r\n className='msc-search-bar'\r\n placeholder={searchPlaceholderText}\r\n defaultValue={this.props.context.request.query?.q}\r\n onKeyDown={onKeyDown}\r\n onBlur={() => this.setState({ showEmptySearchBarTooltip: false })}\r\n />\r\n <Tooltip\r\n isOpen={this.state.showEmptySearchBarTooltip}\r\n target='.msc-search-bar'\r\n className='msc-search-bar-tooltip'\r\n >\r\n {this.props.resources.searchEmptySearchTermText}\r\n </Tooltip>\r\n </>\r\n );\r\n };\r\n\r\n private readonly _getChoiceSummary = (): React.ReactNode => {\r\n const { resources, data, telemetry } = this.props;\r\n const { channelInventoryConfiguration } = this.state;\r\n const selectedRefiners = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n const refinerValueName = this.props.data.refiners.result?.find(rating => rating.KeyName === 'Rating');\r\n // @ts-ignore\r\n return (\r\n <ChoiceSummary\r\n classNames='ms-choice-summary-by-category'\r\n clearAllText={resources.clearAllText}\r\n label={resources.choiceSummaryLabel}\r\n closeAriaLabel={resources.closeAriaLabel}\r\n selectedChoices={selectedRefiners}\r\n refinerHierarchy={data.refiners.result}\r\n choiceFormat={resources.choiceFormat}\r\n choiceRangeValueFormat={resources.choiceRangeValueFormat}\r\n telemetry={telemetry}\r\n onChoiceClicked={this._onChoiceClicked}\r\n urlBuilder={this._buildRefinerUrlForChoiceSummary}\r\n choiceAriaLabel={resources.choiceAriaLabel}\r\n telemetryContent={this.telemetryContent}\r\n context={this.props.context}\r\n channelInventoryConfigurationId={channelInventoryConfiguration?.InventoryProductAttributeRecordId}\r\n refinerValues={refinerValueName}\r\n yesLabel={resources.yes}\r\n noLabel={resources.no}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getAvailableQuantity = async (): Promise<IProductInventoryInformation[] | undefined> => {\r\n const { context } = this.props;\r\n const products = (await this.props.data.listPageState).activeProducts;\r\n if (this.shouldShowAvailability === false) {\r\n return undefined;\r\n }\r\n\r\n if (!products || products.length === 0) {\r\n return undefined;\r\n }\r\n const productIds = products.map(p => p.RecordId);\r\n const shippingSearchCriteria = createInventoryAvailabilitySearchCriteria(\r\n context.actionContext,\r\n productIds,\r\n true,\r\n undefined,\r\n undefined,\r\n DeliveryMode.shipping\r\n );\r\n const shippingAvailability = await ProductsDataActions.getEstimatedAvailabilityAsync(\r\n { callerContext: context.actionContext },\r\n shippingSearchCriteria\r\n );\r\n\r\n if (shippingAvailability.ProductWarehouseInventoryAvailabilities) {\r\n const shippingInventory = mapAggregatedProductInventoryInformation(context.actionContext, shippingAvailability);\r\n if (ArrayExtensions.hasElements(shippingInventory)) {\r\n shippingInventory[0].deliveryType = DeliveryMode.shipping;\r\n return shippingInventory;\r\n } else {\r\n return undefined;\r\n }\r\n }else{\r\n return undefined;\r\n }\r\n };\r\n /**\r\n * Get Active products.\r\n * @returns - JSX Elements.\r\n */\r\n private readonly _getProducts = (): JSX.Element => {\r\n const {\r\n config: { imageSettings, allowBackNavigation: shouldAllowBackNavigation },\r\n data\r\n } = this.props;\r\n // const { resources } = this.props;\r\n const products = (this.props.data.listPageState.result && this.props.data.listPageState.result.activeProducts) || [];\r\n let productCountNumber: number | undefined;\r\n if (data.listPageState && data.listPageState.result && data.listPageState.result.totalProductCount !== undefined) {\r\n productCountNumber = data.listPageState.result.totalProductCount;\r\n } else if (data.products && data.products.result) {\r\n productCountNumber = data.products.result.count;\r\n }\r\n const resources = {\r\n ...this.props.resources,\r\n productListItemText: productCountNumber ? `${this.props.resources.productListItemText} (${productCountNumber})` : this.props.resources.productListItemText\r\n };\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- Reading config value.\r\n const breadCrumbType: string = this.props.context.app.config.breadcrumbType;\r\n const shouldAllowBack = shouldAllowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\r\n const quickviewSlot = this.props.slots?.quickview?.[0];\r\n const productComparisonButton = ArrayExtensions.hasElements(this.props.slots.productComparisonButton)\r\n ? this.props.slots.productComparisonButton[0]\r\n : null;\r\n\r\n const isPriceMinMaxFeatureState = this.props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n );\r\n\r\n const actionsAvailable = {\r\n addToCartAction: true,\r\n addToWishlistAction: false,\r\n productComparisonButton:false\r\n };\r\n\r\n if (this._viewMode === ProductListViewMode.cardView) {\r\n const extendedProducts = products.map((product: ProductSearchResultExt) => {\r\n product.Brand = product.AttributeValues?.find(attribute => attribute.KeyName === this.attributeLocale.brand)?.TextValue;\r\n product.Manufacturer = product.AttributeValues?.find(attribute => attribute.KeyName === this.attributeLocale.manufacturer)?.TextValue;\r\n return product;\r\n });\r\n\r\n return (\r\n <ProductSearchResultItems\r\n cart={this.props.data.cart.result}\r\n products={extendedProducts}\r\n simpleProducts={this.state.simpleProducts}\r\n customerInformation={this.props.data.customerInformation.result}\r\n unitConversions={this.state.unitConversions}\r\n productInventoryStatus={this.state.productInventoryStatus|| undefined}\r\n wishlists={this.props.data.wishlists.result}\r\n context={this.props.context}\r\n config={this.props.config}\r\n imageSettings={imageSettings}\r\n resources={resources}\r\n moduleType={this.props.typeName}\r\n moduleId={this.props.id}\r\n allowBackNavigation={shouldAllowBack}\r\n disableBuyButtons={!this.state.retrievedActivePrices}\r\n showPrices={this.props.data.products.result?.products.every(x => x.PrefetchedPrice) || this.state.retrievedActivePrices}\r\n telemetryContent={this.telemetryContent}\r\n quickviewSlot={quickviewSlot}\r\n productComparisonButton={productComparisonButton}\r\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\r\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\r\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\r\n validatedProductAccess={this.state.validatedProductAccess}\r\n productInventoryInformation={this.state.productInventoryStatus}\r\n />\r\n );\r\n }\r\n\r\n const productList = productSearchResults2ProductList(\r\n this.props.context,\r\n products,\r\n this.props.data.products.result?.channelInventoryConfigurationId,\r\n this.props.data.cart.result,\r\n this.state.productInventoryStatus || undefined\r\n );\r\n\r\n return (\r\n <ProductListComponent\r\n cart={this.props.data.cart.result}\r\n products={productList}\r\n simpleProducts={this.state.simpleProducts}\r\n customerInformation={this.props.data.customerInformation.result}\r\n unitConversions={this.state.unitConversions}\r\n context={this.props.context}\r\n imageSettings={imageSettings}\r\n resources={resources}\r\n moduleType={this.props.typeName}\r\n moduleId={this.props.id}\r\n allowBackNavigation={shouldAllowBack}\r\n allowMultiSelect\r\n selectOnQuantityChange\r\n telemetryContent={this.telemetryContent}\r\n quickviewSlot={quickviewSlot}\r\n productComparisonButton={productComparisonButton}\r\n channelInventoryConfigurationId={this.props.data.products.result?.channelInventoryConfigurationId}\r\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\r\n productsDimensionAvailabilities={this.state.productsDimensionAvailabilities}\r\n validatedProductAccess={this.state.validatedProductAccess}\r\n actionsAvailable={actionsAvailable}\r\n disableBuyButtons={this.state.working || !this.state.retrievedActivePrices}\r\n showAvailability={this.shouldShowAvailability}\r\n showPrices={this.props.data.products.result?.products.every(x => x.PrefetchedPrice) || this.state.retrievedActivePrices}\r\n buyAlwaysAdd\r\n resetSelectedQuantities={this.state.resetSelectedQuantities}\r\n onResetSelectedQuantities={() => this.setState({ resetSelectedQuantities: undefined })}\r\n onUpdateQuantity={(product, quantity) => {\r\n if (!product.RecordId) {\r\n return;\r\n }\r\n\r\n const productQuantities = { ...this.state.productQuantities };\r\n\r\n productQuantities[product.RecordId] = quantity;\r\n this.setState({\r\n productQuantities\r\n });\r\n }}\r\n onUpdateSelection={(products) => {\r\n this.setState({ selectedProducts: products });\r\n }}\r\n onBuyValidate={(product) => onBuyHasAccessValidator(\r\n this.props.context,\r\n this.props.data.customerInformation.result,\r\n this.props.data.listPageState.result?.activeProducts.find(p => p.RecordId === product.RecordId) as ProductSearchResultExt,\r\n this.props.resources.toastNoAccessToProduct\r\n )}\r\n selectedProducts={this.state.selectedProducts}\r\n />\r\n );\r\n };\r\n\r\n private readonly _getTotalProductCount = (): React.ReactNode => {\r\n const {\r\n data: { listPageState, products }\r\n } = this.props;\r\n\r\n let totalProductCount: number | undefined;\r\n if (listPageState && listPageState.result && listPageState.result.totalProductCount !== undefined) {\r\n totalProductCount = listPageState.result.totalProductCount;\r\n } else if (products && products.result) {\r\n totalProductCount = products.result.count;\r\n }\r\n\r\n if (!totalProductCount) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className={`ms-search-result-container__total-product-count`}>\r\n {format(this.props.resources.numberOfSearchResults, totalProductCount)}\r\n </div>\r\n );\r\n };\r\n\r\n private readonly _updateSortByDropdown = (notification: ILabeledDropdownOnChangeNotification): void => {\r\n const {\r\n context: { request: requestContext, actionContext }\r\n } = this.props;\r\n\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n // eslint-disable-next-line max-len -- existing code\r\n const error = `[sort-by-category] cannot sort without context: ${!requestContext ? 'requestContext ' : ''} ${\r\n !actionContext ? 'actionContext ' : ''\r\n } could not be found`;\r\n this.props.telemetry.warning(error);\r\n return;\r\n }\r\n\r\n window.history.pushState(\r\n {},\r\n '',\r\n buildListPageUrl(\r\n getCurrentUrl(this.props.context.request),\r\n undefined,\r\n [this._getSortColumnFromSelectedOption(notification.selectedOption)],\r\n undefined\r\n )\r\n );\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.sortingCritera = {\r\n Columns: [this._getSortColumnFromSelectedOption(notification.selectedOption)]\r\n };\r\n });\r\n };\r\n\r\n private readonly _getSortColumnFromSelectedOption = (option: ILabeledDropdownOption): SortColumn => {\r\n const { data } = this.props;\r\n\r\n if (!data.searchConfiguration.result) {\r\n return {};\r\n }\r\n\r\n const mappedConfiguration = data.searchConfiguration.result.find(searchConfiguration => {\r\n return searchConfiguration.key === option.key;\r\n });\r\n\r\n if (mappedConfiguration) {\r\n return mappedConfiguration.sortColumn;\r\n }\r\n\r\n return {};\r\n };\r\n\r\n /**\r\n * Retrieves current sort criteria.\r\n * @returns Sort criteria column which is currently active or undefined if it's not specified.\r\n */\r\n private readonly _getSortCriteriaColumn = (): SortColumn | undefined => {\r\n const sortCriteria = this.props.data.listPageState.result?.sortingCritera;\r\n if (ArrayExtensions.hasElements(sortCriteria?.Columns)) {\r\n return sortCriteria!.Columns[0];\r\n }\r\n\r\n const queryColumns = parseQueryParam<SortColumn[]>('sorting', this.props.context.request);\r\n if (ArrayExtensions.hasElements(queryColumns)) {\r\n return queryColumns[0];\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n /**\r\n * Retrieves dropdown options.\r\n * @returns All dropdown options.\r\n */\r\n private readonly _getAllSortByOptions = (): ILabeledDropdownOption[] => {\r\n const searchConfiguration = this.props.data.searchConfiguration.result;\r\n\r\n if (!searchConfiguration) {\r\n return [];\r\n }\r\n\r\n const mappedSearchConfiguration = this.sortByDropdownOptions.filter(mappedSearchConfig =>\r\n searchConfiguration.find(item => mappedSearchConfig.key === item.key)\r\n );\r\n\r\n return ArrayExtensions.validValues(mappedSearchConfiguration);\r\n };\r\n\r\n /**\r\n * Retrieves current selected dropdown option based on the sort criteria.\r\n * @returns Current dropdown option.\r\n */\r\n private readonly _getCurrentlySelectedOption = (): ILabeledDropdownOption | undefined => {\r\n const activeSortColumn = this._getSortCriteriaColumn();\r\n\r\n const searchConfiguration = this.props.data.searchConfiguration.result;\r\n\r\n if (!activeSortColumn || !searchConfiguration) {\r\n return undefined;\r\n }\r\n\r\n const activeMappedConfig = searchConfiguration.find(\r\n mappedSearchConfig =>\r\n mappedSearchConfig.sortColumn.ColumnName === activeSortColumn.ColumnName &&\r\n mappedSearchConfig.sortColumn.IsDescending === activeSortColumn.IsDescending\r\n );\r\n if (!activeMappedConfig) {\r\n return undefined;\r\n }\r\n\r\n return this.sortByDropdownOptions.find(dropdownOption => dropdownOption.key === activeMappedConfig.key);\r\n };\r\n\r\n private readonly _onUpdateRefiners = (itemToggleNotification: IRefineItemToggleNotification): void => {\r\n const {\r\n context: { request: requestContext, actionContext }\r\n } = this.props;\r\n\r\n if (!requestContext || !actionContext || !this.props.data.listPageState.result) {\r\n const error = `Refine menu cannot refine search criteria: \r\n ${!requestContext ? 'requestContext ' : ''} ${!actionContext ? 'actionContext ' : ''} could not be found`;\r\n this.props.telemetry.warning(error);\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Server side the list PageState will not be called.\r\n const updatedRefinementCriteria = getUpdatedRefinementCriteria(\r\n itemToggleNotification,\r\n this.props.data.listPageState.result?.activeFilters || []\r\n );\r\n\r\n window.history.pushState({}, '', buildListPageUrl(getCurrentUrl(this.props.context.request), updatedRefinementCriteria));\r\n transaction(() => {\r\n this.props.data.listPageState.result!.currentPageNumber = 0;\r\n this.props.data.listPageState.result!.activeFilters = updatedRefinementCriteria;\r\n });\r\n };\r\n\r\n private readonly _buildRefinerUrl = (itemToggleNotification: IRefineItemToggleNotification): string => {\r\n if (this.props.data.listPageState.result) {\r\n const newRefinementCriteria = getUpdatedRefinementCriteria(\r\n itemToggleNotification,\r\n this.props.data.listPageState.result.activeFilters || []\r\n );\r\n\r\n return buildListPageUrl(getCurrentUrl(this.props.context.request), newRefinementCriteria);\r\n }\r\n this.props.telemetry.warning('[buildRefinerQueryString]List Page State Not available, unable to build refiner URL');\r\n return '';\r\n };\r\n\r\n private readonly _onChoiceClicked = (notification: IChoiceSummaryClickNotification): void => {\r\n const { data, telemetry } = this.props;\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked]ListPageState unavailable, unable to update refiners.');\r\n return;\r\n }\r\n\r\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (!notification.clearAll) {\r\n const selectedChoice = notification.choiceClicked;\r\n if (!selectedChoice) {\r\n telemetry.warning('[choice-summary-by-category._onChoiceClicked] Choice could not be determined');\r\n return;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedChoice, selectedCriterion)\r\n );\r\n } else {\r\n currentRefinementCriteria = [];\r\n\r\n // Set focus to sort and filter\r\n const dropdownElementId = this._sortAndFilterContainerRef.current && this._sortAndFilterContainerRef.current.props.dropdownId;\r\n const dropdownElement = dropdownElementId && document.getElementById(dropdownElementId);\r\n setTimeout(() => {\r\n dropdownElement && dropdownElement.focus();\r\n }, 50);\r\n }\r\n\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n window.history.pushState({}, '', buildListPageUrl(fullUrl, currentRefinementCriteria));\r\n data.listPageState.result.currentPageNumber = 0;\r\n data.listPageState.result.activeFilters = currentRefinementCriteria;\r\n };\r\n\r\n private readonly _buildRefinerUrlForChoiceSummary = (selectedRefiner: ProductRefinerValue, isClearAll: boolean): string => {\r\n const { data, telemetry } = this.props;\r\n const fullUrl = getCurrentUrl(this.props.context.request);\r\n\r\n if (!data.listPageState.result) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl]ListPageState unavailable, unable to create refiner URL.');\r\n return fullUrl.href;\r\n }\r\n\r\n let currentRefinementCriteria = (data.listPageState.result && data.listPageState.result.activeFilters) || [];\r\n\r\n if (!isClearAll) {\r\n if (!selectedRefiner) {\r\n telemetry.warning('[choice-summary-by-category._buildRefinerUrl] URL for Choice could not be determined');\r\n return fullUrl.href;\r\n }\r\n currentRefinementCriteria = currentRefinementCriteria.filter(\r\n (selectedCriterion: ProductRefinerValue) => !isMatchingRefinementCriterion(selectedRefiner, selectedCriterion)\r\n );\r\n } else {\r\n currentRefinementCriteria = [];\r\n }\r\n\r\n return buildListPageUrl(fullUrl, currentRefinementCriteria);\r\n };\r\n\r\n private _getViewport(): GridSize {\r\n if (MsDyn365.isBrowser) {\r\n return isMobile({ variant: VariantType.Browser, context: this.props.context.request });\r\n }\r\n return isMobile({ variant: VariantType.Viewport, context: this.props.context.request });\r\n }\r\n\r\n private _toggleModal(): void {\r\n this.setState({\r\n modalIsOpen: !this.state.modalIsOpen\r\n });\r\n }\r\n\r\n private _updateViewport(): void {\r\n this._viewport = this._getViewport();\r\n\r\n if (this.state.modalIsOpen && !this.isMobile) {\r\n this._toggleModal();\r\n }\r\n }\r\n\r\n // private readonly _getexpandRefinerCount = (validRefiners?: number, refinerCount?: expandRefinersCount): void => {\r\n // switch (refinerCount) {\r\n // case expandRefinersCount.all:\r\n // this.expandrefinerCount = validRefiners;\r\n // break;\r\n // case expandRefinersCount.one:\r\n // this.expandrefinerCount = 1;\r\n // break;\r\n // case expandRefinersCount.two:\r\n // this.expandrefinerCount = 2;\r\n // break;\r\n // case expandRefinersCount.three:\r\n // this.expandrefinerCount = 3;\r\n // break;\r\n // case expandRefinersCount.four:\r\n // this.expandrefinerCount = 4;\r\n // break;\r\n // default:\r\n // this.expandrefinerCount = 0;\r\n // }\r\n // };\r\n\r\n /**\r\n * Renders a Pagination previous text.\r\n * @param paginationPreviousText - Pagination previous text from resources.\r\n * @returns Previous text and flipper icon.\r\n */\r\n private readonly _renderPrev = (paginationPreviousText: string) => {\r\n return (\r\n <div className='msc-pagination__prev'>\r\n <span className='ms-search-result__pagination-left' aria-hidden='true' />\r\n <span className='prev-text'>{paginationPreviousText}</span>\r\n </div>\r\n );\r\n };\r\n\r\n /**\r\n * Renders a Pagination next text.\r\n * @param paginationNextText - Pagination next text from resources.\r\n * @returns Next text and flipper icon.\r\n */\r\n private readonly _renderNext = (paginationNextText: string) => {\r\n return (\r\n <div className='msc-pagination__next'>\r\n <span className='next-text'>{paginationNextText}</span>\r\n <span className='ms-search-result__pagination-right' aria-hidden='true' />\r\n </div>\r\n );\r\n };\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport { IPriceComponentResources } from '@msdyn365-commerce/components';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ProductList, ProductSearchResult } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n ArrayExtensions,\r\n OrderTemplate,\r\n QueryResultSettingsProxy,\r\n GetOrderTemplatesInput,\r\n getOrderTemplates\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport {\r\n ICategoryHierarchyViewProps,\r\n IRefineMenuViewProps,\r\n ISearchResultContainerViewProps,\r\n ISortByViewProps,\r\n ITitleViewProps\r\n} from './dlvry-search-result-container';\r\nimport { ISearchResultModalViewProps } from '@msdyn365-commerce-modules/search-result-container';\r\nimport {getTelemetryObject, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport React, { useEffect } from 'react';\r\nimport { IProductsDimensionsAvailabilities } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n IDlvrySearchResultContainerProps\r\n} from './dlvry-search-result-container.props.autogenerated';\r\nimport {\r\n IProductListViewModeProps,\r\n ProductListViewMode,\r\n ProductListViewModeComponent\r\n} from '../../components/product-list-component/components/product-list-view-mode';\r\nimport { ProductComponent } from '../../themes/dlvry-adventureworks/views/components/product.component';\r\nimport PQueue from 'p-queue';\r\nimport { IProductInventoryInformation } from '../../components/common/product-inventory-utils';\r\nimport { onBuyHasAccessValidator } from '../../shared-utils/attributes/on-buy-access-validator';\r\n\r\n/**\r\n * DescriptionInterval.\r\n */\r\nenum DescriptionInterval {\r\n productDescriptionInterval = 14,\r\n productDescriptionIntervalRemainder0 = 0,\r\n productDescriptionIntervalRemainder9 = 9\r\n}\r\n\r\n/**\r\n * Render Clear button for mobile viewport.\r\n * @param props - The view props.\r\n * @param refinerHeading\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductCards = (props: ISearchResultContainerViewProps & IDlvrySearchResultContainerProps<{}>, refinerHeading: any): JSX.Element | null => {\r\n return (\r\n <Node {...props.ProductsContainer}>\r\n {refinerHeading}\r\n {props.totalProductCount}\r\n {props.products}\r\n {props.errorMessage}\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Returns the product inventory label.\r\n * @param channelInventoryConfigurationId - The channel configuration Id.\r\n * @param product - The product.\r\n * @returns The inventory label.\r\n */\r\nfunction getInventoryLabel(channelInventoryConfigurationId: number | undefined, product: ProductSearchResult): string | undefined {\r\n if (!channelInventoryConfigurationId || !ArrayExtensions.hasElements(product.AttributeValues)) {\r\n return undefined;\r\n }\r\n const inventoryAttribute = product.AttributeValues.find(attribute => attribute.RecordId === channelInventoryConfigurationId);\r\n if (inventoryAttribute) {\r\n return inventoryAttribute.TextValue;\r\n }\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Render Clear button for mobile viewport.\r\n * @param props - The view props.\r\n * @param product - The product item data.\r\n * @param index - The index of each product item.\r\n * @param isEnabledProductDescription - The flag for showing Product desription tile.\r\n * @returns The JSX Element.\r\n */\r\nconst renderProductCardsDescription = (\r\n props: ISearchResultContainerViewProps & IDlvrySearchResultContainerProps<{}>,\r\n cartQueue: PQueue,\r\n product: ProductSearchResult,\r\n index: number,\r\n retrieveOrderTemplates: () => Promise<OrderTemplate[]>,\r\n onUpdateOrderTemplates: (orderTemplate?: ProductList | undefined) => Promise<OrderTemplate[]>,\r\n productInventoryStatus: IProductInventoryInformation[] | undefined,\r\n isEnabledProductDescription?: boolean\r\n): JSX.Element | null => {\r\n const { config, context, resources, productsDimensionAvailabilities } = props;\r\n const telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n const breadCrumbType = props.context.app.config.breadcrumbType;\r\n const isAllowBack = props.config.allowBackNavigation && (breadCrumbType === 'back' || breadCrumbType === 'categoryAndBack');\r\n const classname = isEnabledProductDescription\r\n ? 'ms-product-search-result__item product__description'\r\n : 'ms-product-search-result__item';\r\n const quickviewslot = ArrayExtensions.hasElements(props.slots.quickview) ? props.slots.quickview[0] : undefined;\r\n const channelInventoryConfigurationId = props.data.products.result?.channelInventoryConfigurationId;\r\n const isPriceMinMaxFeatureState = props.data.featureState.result?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n );\r\n const priceResources: IPriceComponentResources = {\r\n priceRangeSeparator: resources.priceRangeSeparator\r\n };\r\n\r\n const productComparisonButton = ArrayExtensions.hasElements(props.slots.productComparisonButton)\r\n ? props.slots.productComparisonButton[0]\r\n : null;\r\n\r\n return (\r\n <li className={classname} key={index}>\r\n <ProductComponent\r\n context={context}\r\n telemetryContent={telemetryContent}\r\n imageSettings={config.imageSettings}\r\n freePriceText={resources.priceFree}\r\n originalPriceText={resources.originalPriceText}\r\n currentPriceText={resources.currentPriceText}\r\n ratingAriaLabel={resources.ratingAriaLabel}\r\n allowBack={isAllowBack}\r\n id={props.id}\r\n key={product.RecordId}\r\n typeName={props.typeName}\r\n data={{\r\n cart: props.data.cart.result,\r\n product,\r\n simpleProduct: props.simpleProducts.find(x => x.RecordId === product.RecordId),\r\n customerInformation: props.data.customerInformation.result,\r\n unitConversions: props.unitConversions?.filter(x => x.ProductRecordId === product.RecordId)\r\n }}\r\n cartQueue={cartQueue}\r\n buyAlwaysAdd\r\n retrieveOrderTemplates={retrieveOrderTemplates}\r\n onUpdateOrderTemplates={onUpdateOrderTemplates}\r\n quickViewButton={quickviewslot}\r\n productComparisonButton={productComparisonButton}\r\n isEnabledProductDescription={isEnabledProductDescription}\r\n inventoryLabel={getInventoryLabel(channelInventoryConfigurationId, product)}\r\n inventoryStatus={productInventoryStatus?.find(x => x.ProductAvailableQuantity.ProductId === product.RecordId)}\r\n isPriceMinMaxEnabled={isPriceMinMaxFeatureState?.IsEnabled}\r\n priceResources={priceResources}\r\n swatchItemAriaLabel={resources.swatchItemAriaLabel}\r\n addToCartText={resources.addToCartText}\r\n updateCartText={resources.updateCartText}\r\n removeFromCartText={resources.removeFromCartText}\r\n outOfStockText={resources.outOfStockText}\r\n priceErrorText={resources.priceErrorText}\r\n toastStrings={{\r\n errorHeader: resources.toastErrorHeader,\r\n productsAddedToCart: resources.productsAddedToCart,\r\n productsRemovedFromCart: resources.productsRemovedFromCart,\r\n productsUpdatedInCart: resources.productsUpdatedInCart,\r\n goToCart: resources.toastGoToCart,\r\n noAccessToProduct: resources.toastNoAccessToProduct\r\n }}\r\n dimensionAvailabilities={productsDimensionAvailabilities?.find(\r\n (dimensionAvailability: IProductsDimensionsAvailabilities[]) =>\r\n ArrayExtensions.hasElements(dimensionAvailability) &&\r\n dimensionAvailability[0].masterProductId === product.MasterProductId\r\n )}\r\n addToOrderTemplateResources={{\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText,\r\n createOrderTemplateHeader: resources.createOrderTemplateHeader,\r\n orderTemplateTitle: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n createOrderTemplateDescription: resources.createOrderTemplateDescription,\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n createOrderTemplateButtonText: resources.createOrderTemplateButtonText,\r\n cancelNewOrderTemplateCreationButtonText: resources.cancelNewOrderTemplateCreationButtonText,\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n priceFree: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText,\r\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\r\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip\r\n }}\r\n onBuyValidate={(product) => onBuyHasAccessValidator(\r\n props.context,\r\n props.data.customerInformation.result,\r\n product,\r\n props.resources.toastNoAccessToProduct\r\n )}\r\n />\r\n </li>\r\n );\r\n};\r\nconst refinerHeadingRender = (props: ISearchResultContainerViewProps & IDlvrySearchResultContainerProps<{}>, wrapperRefiner: React.MutableRefObject<null>) => {\r\n const { choiceSummary, isMobile, viewModesComponent, sortByOptions } = props;\r\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\r\n\r\n return (\r\n <Node ref={wrapperRefiner} className='ms-refiner-heading'>\r\n <Node className='ms-refiner-heading_title'>\r\n <div className='ms-search-result-wrapper-search'>\r\n {props.searchBar}\r\n </div>\r\n <div className='ms-search-result-wrapper-title-choice-summary'>{choiceSummary}</div>\r\n <div className='ms-search-result-wrapper-sort-by-category'>\r\n {!isMobile && sortByOptions && !isRecoSearchPage && renderSort(sortByOptions)}\r\n </div>\r\n <div className='ms-search-result-wrapper-view-mode'>\r\n {renderViewModes(viewModesComponent)}\r\n </div>\r\n </Node>\r\n\r\n {/*<Node className='ms-refine__footer'>*/}\r\n {/* {refineMenu && isExpanded && renderRefinerFooter(refineMenu, toggle, resources)}*/}\r\n {/*</Node>*/}\r\n </Node>\r\n );\r\n};\r\n/**\r\n * Render Clear button for mobile viewport.\r\n * @param props - The view props.\r\n * @param refinerHeading\r\n * @returns The JSX Element.\r\n */\r\nconst renderProducts = (\r\n props: ISearchResultContainerViewProps & IDlvrySearchResultContainerProps<{}>,\r\n cartQueue: PQueue,\r\n refinerHeading: any,\r\n retrieveOrderTemplates: () => Promise<OrderTemplate[]>,\r\n onUpdateOrderTemplates: (orderTemplate?: ProductList | undefined) => Promise<OrderTemplate[]>,\r\n productInventoryStatus: IProductInventoryInformation[] | undefined\r\n): JSX.Element | null => {\r\n const products = props.data.listPageState.result?.activeProducts;\r\n if (!products || !ArrayExtensions.hasElements(products)) {\r\n return null;\r\n }\r\n\r\n const productDescriptionInterval: number = DescriptionInterval.productDescriptionInterval;\r\n const productDescriptionIntervalRemainder0: number = DescriptionInterval.productDescriptionIntervalRemainder0;\r\n const productDescriptionIntervalRemainder9: number = DescriptionInterval.productDescriptionIntervalRemainder9;\r\n\r\n if (props.viewModesComponent.viewMode === undefined) {\r\n // Not ready yet\r\n return null;\r\n }\r\n\r\n if (props.viewModesComponent.viewMode === ProductListViewMode.listView) {\r\n return (\r\n <Node {...props.ProductsContainer}>\r\n {refinerHeading}\r\n {props.errorMessage}\r\n {props.totalProductCount}\r\n {props.products}\r\n </Node>\r\n );\r\n }\r\n\r\n return (\r\n <Node {...props.ProductsContainer}>\r\n {refinerHeading}\r\n {props.errorMessage}\r\n <ul className='list-unstyled'>\r\n {products.map((product: ProductSearchResult, index: number) =>\r\n index % productDescriptionInterval === productDescriptionIntervalRemainder0 ||\r\n index % productDescriptionInterval === productDescriptionIntervalRemainder9\r\n ? renderProductCardsDescription(props, cartQueue, product, index, retrieveOrderTemplates, onUpdateOrderTemplates, productInventoryStatus, true)\r\n : renderProductCardsDescription(props, cartQueue, product, index, retrieveOrderTemplates, onUpdateOrderTemplates, productInventoryStatus, false)\r\n )}\r\n </ul>\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render Title Count.\r\n * @param props - The title view props.\r\n * @returns The JSX Element.\r\n */\r\n// const renderTitleCount = (props: ITitleViewProps): JSX.Element | null => {\r\n// const { title, TitleContainer } = props;\r\n// if (title) {\r\n// return <Node {...TitleContainer}>{title.titleCount}</Node>;\r\n// }\r\n// return null;\r\n// };\r\n\r\n/**\r\n * Render Category Hierarchy.\r\n * @param props - The category hierarchy view props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderCategoryHierarchy = (props: ICategoryHierarchyViewProps): JSX.Element | null => {\r\n const { CategoryHierarchyContainer, categoryHierarchyList, categoryHierarchySeparator } = props;\r\n if (categoryHierarchyList) {\r\n return (\r\n <Node {...CategoryHierarchyContainer}>\r\n {categoryHierarchyList.map((category, index) => (\r\n <React.Fragment key={index}>\r\n {category}\r\n {categoryHierarchyList[index + 1] && categoryHierarchySeparator}\r\n </React.Fragment>\r\n ))}\r\n </Node>\r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\n/**\r\n * Function to make filter sticky.\r\n * @param isMobile - The boolean prop.\r\n * @param isStickyHeader - The boolean prop.\r\n */\r\nexport const configureStickyFilter = (isMobile: boolean, isStickyHeader: boolean): void => {\r\n // Get heights of cookie and promotion banners\r\n const defaultValue = 0;\r\n const defaultOffset = 28;\r\n const headerContainer: HTMLElement | null = document.querySelector('.ms-header');\r\n\r\n const headerHeight: number | undefined = headerContainer?.offsetHeight;\r\n const containerHeight: number = headerHeight ?? defaultOffset;\r\n const bannerHeights = isStickyHeader ? defaultValue : containerHeight;\r\n const headerElement = document.querySelector('header .lock-opaque');\r\n const defaultContainer = document.querySelector('header .default-container');\r\n const refinerElement = isMobile ? document.querySelector('.msc-sort-filter-wrapper') : document.querySelector('.ms-refiner-heading');\r\n if (refinerElement && headerElement && defaultContainer) {\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\r\n refinerElement.classList.add('lock-Filter');\r\n refinerElement.setAttribute('style', `top: ${defaultContainer.clientHeight}px`);\r\n } else {\r\n refinerElement.classList.remove('lock-Filter');\r\n }\r\n } else if (refinerElement) {\r\n if (MsDyn365.isBrowser && document.documentElement.scrollTop > bannerHeights) {\r\n refinerElement.classList.add('lock-top');\r\n } else {\r\n refinerElement.classList.remove('lock-top');\r\n refinerElement.classList.remove('lock-Filter');\r\n refinerElement.removeAttribute('style');\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Function to setup filter sticky.\r\n * @param isMobile - The boolean prop.\r\n * @param isStickyHeader - The boolean prop.\r\n */\r\nfunction stickyFilterSetup(isMobile: boolean, isStickyHeader: boolean): void {\r\n window.addEventListener('scroll', () => {\r\n configureStickyFilter(isMobile, isStickyHeader);\r\n });\r\n configureStickyFilter(isMobile, isStickyHeader);\r\n}\r\n\r\n/**\r\n * Function to make filter sticky.\r\n * @param refinerRefernce - Ref prop for filter.\r\n * @param toggle - Toggle function for filter menu.\r\n */\r\n// function useOutsideClick(refinerRefernce: React.RefObject<HTMLElement>, toggle: (event: Event) => void) {\r\n// React.useEffect(() => {\r\n// /**\r\n// * Function to make filter sticky.\r\n// * @param event - Event prop for filter.\r\n// */\r\n// function handleClickOutside(event: Event) {\r\n// const element = document.querySelector('.ms-refine-filter__toggle_collapsed');\r\n// if (refinerRefernce.current && !refinerRefernce.current.contains(event.target as Node) && !element) {\r\n// toggle(event);\r\n// }\r\n// }\r\n// if (MsDyn365.isBrowser) {\r\n// document.addEventListener('click', handleClickOutside);\r\n// }\r\n// return () => {\r\n// if (MsDyn365.isBrowser) {\r\n// document.removeEventListener('click', handleClickOutside);\r\n// }\r\n// };\r\n// }, [refinerRefernce, toggle]);\r\n// }\r\n\r\n/**\r\n * Render the category page items.\r\n * @param props - The view props.\r\n * @returns The search Result container module view.\r\n */\r\nconst SearchResultContainerView: React.FC<ISearchResultContainerViewProps & IDlvrySearchResultContainerProps<{}>> = props => {\r\n const {\r\n SearchResultContainer,\r\n pagination,\r\n ProductSectionContainer,\r\n isMobile,\r\n modalToggle,\r\n searchResultModal,\r\n TitleViewProps,\r\n refineMenu,\r\n categoryHierarchy,\r\n sortByOptions,\r\n CategoryNavContainer,\r\n RefineAndProductSectionContainer,\r\n FeatureSearchContainer,\r\n similarLookProduct,\r\n productInventoryStatus\r\n } = props;\r\n useEffect(() => {\r\n if (props.config.useStickyFilter && MsDyn365.isBrowser) {\r\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app context is generic\r\n stickyFilterSetup(props.isMobile, props.context.app.config.enableStickyHeader as boolean);\r\n }\r\n }, [props]);\r\n // const [isExpanded, setIsExpanded] = useState<boolean>(true);\r\n // const toggle = () => {\r\n // setIsExpanded(isExpanded);\r\n // };\r\n const wrapperRefiner = React.useRef(null);\r\n // useOutsideClick(wrapperRefiner, toggle);\r\n const refinerHeading = refinerHeadingRender(props,wrapperRefiner);\r\n const isRecoSearchPage = props.context.actionContext.requestContext.query?.recommendation;\r\n\r\n const [orderTemplates, setOrderTemplates] = React.useState<OrderTemplate[] | undefined>(undefined);\r\n\r\n const cartQueue = React.useMemo(() => new PQueue({ concurrency: 1 }), []);\r\n\r\n const updateOrderTemplatesAsync = async (newOrderTemplate?: ProductList) => {\r\n let newOrderTemplates;\r\n\r\n if (newOrderTemplate) {\r\n newOrderTemplates = [...(orderTemplates ? orderTemplates : [])];\r\n\r\n // Add new order template if it doesn't exist\r\n if (newOrderTemplates.every(x => x.productList.Id !== newOrderTemplate.Id)) {\r\n newOrderTemplates.splice(0, 0, new OrderTemplate(newOrderTemplate, [], 0));\r\n }\r\n } else {\r\n // Refresh order templates incase new order template was created\r\n const queryResultSettings = QueryResultSettingsProxy.fromInputData({\r\n requestContext: props.context.request,\r\n config: props.config\r\n }).QueryResultSettings;\r\n const input = new GetOrderTemplatesInput('', queryResultSettings);\r\n newOrderTemplates = (await getOrderTemplates(input, props.context.actionContext)).map(x => new OrderTemplate(x, [], 0));\r\n }\r\n\r\n setOrderTemplates(newOrderTemplates);\r\n return newOrderTemplates;\r\n };\r\n\r\n const retrieveOrderTemplates = async () => {\r\n return orderTemplates ? orderTemplates : updateOrderTemplatesAsync();\r\n };\r\n\r\n return (\r\n <Module {...SearchResultContainer}>\r\n {TitleViewProps && renderTitle(TitleViewProps)}\r\n {similarLookProduct ? null : (\r\n <Node {...CategoryNavContainer}>\r\n {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\r\n {/*{TitleViewProps && renderTitle(TitleViewProps)}*/}\r\n {/*{TitleViewProps && renderTitleCount(TitleViewProps)}*/}\r\n </Node>\r\n )}\r\n {isMobile && <Node className='msc-sort-filter-wrapper'>{modalToggle}</Node>}\r\n {isMobile && createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\r\n <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\r\n <Node {...RefineAndProductSectionContainer}>\r\n <Node {...ProductSectionContainer}>\r\n {!isMobile && refineMenu && renderRefiner(refineMenu)}\r\n {props.config.enableProdutDescription\r\n ? renderProducts(props, cartQueue, refinerHeading, retrieveOrderTemplates, updateOrderTemplatesAsync, productInventoryStatus)\r\n : renderProductCards(props,refinerHeading)}\r\n {pagination}\r\n </Node>\r\n </Node>\r\n {props.selectedProductsActions}\r\n </Module>\r\n );\r\n\r\n // if (isMobile) {\r\n // return (\r\n // <Module {...SearchResultContainer}>\r\n // {similarLookProduct ? null : (\r\n // <Node {...CategoryNavContainer}>\r\n // {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\r\n // {/*{renderTitle(TitleViewProps)}*/}\r\n // {/*{renderTitleCount(TitleViewProps)}*/}\r\n // </Node>\r\n // )}\r\n // {choiceSummary}\r\n // <Node className='msc-sort-filter-wrapper'>{modalToggle}</Node>\r\n // {createSearchResultModal(searchResultModal, refineMenu, sortByOptions, isRecoSearchPage)}\r\n // <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\r\n // <Node {...RefineAndProductSectionContainer}>\r\n // <Node {...ProductSectionContainer}>\r\n // {props.config.enableProdutDescription ? renderProducts(props, refinerHeading) : renderProductCards(props, refinerHeading)}\r\n // {pagination}\r\n // </Node>\r\n // </Node>\r\n // {props.selectedProductsActions}\r\n // </Module>\r\n // );\r\n // }\r\n // return (\r\n // <Module {...SearchResultContainer}>\r\n // {similarLookProduct ? null : (\r\n // <Node {...CategoryNavContainer}>\r\n // {categoryHierarchy && renderCategoryHierarchy(categoryHierarchy)}\r\n // {/*{TitleViewProps && renderTitle(TitleViewProps)}*/}\r\n // {/*{TitleViewProps && renderTitleCount(TitleViewProps)}*/}\r\n // </Node>\r\n // )}\r\n // <Node {...FeatureSearchContainer}>{similarLookProduct}</Node>\r\n // <Node {...RefineAndProductSectionContainer}>\r\n // <Node {...ProductSectionContainer}>\r\n // {refineMenu && renderRefiner(refineMenu)}\r\n // {props.config.enableProdutDescription ? renderProducts(props, refinerHeading) : renderProductCards(props, refinerHeading)}\r\n // {pagination}\r\n // </Node>\r\n // </Node>\r\n // {props.selectedProductsActions}\r\n // </Module>\r\n // );\r\n};\r\n\r\nconst renderViewModes = (props: IProductListViewModeProps): JSX.Element => {\r\n return (\r\n <ProductListViewModeComponent {...props} />\r\n );\r\n};\r\n\r\n/**\r\n * Render Search result Modal.\r\n * @param modalProps - The Search Result Modal view props.\r\n * @param refineMenu - The Refine Menu view props.\r\n * @param sortByDropDown - The Sort by view props.\r\n * @param isRecoSearchPage - The recomandation search page flag.\r\n * @returns The JSX Element.\r\n */\r\nconst createSearchResultModal = (\r\n modalProps: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps,\r\n isRecoSearchPage?: string\r\n): JSX.Element => {\r\n return React.cloneElement(\r\n modalProps.modal,\r\n {},\r\n modalProps.modalHeader,\r\n createModalBody(modalProps, refineMenu, sortByDropDown, isRecoSearchPage),\r\n modalProps.modalFooter\r\n );\r\n};\r\n\r\n/**\r\n * Render Refiner Mobile.\r\n * @param props - The Refine Menu view props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderRefinerMobile = (props: IRefineMenuViewProps): JSX.Element | null => {\r\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\r\n if (refiners) {\r\n return (\r\n <Node {...RefinerSectionContainer}>\r\n <Node {...RefineMenuContainer}>\r\n {refiners.map((submenu, index) => (\r\n <React.Fragment key={index}>{submenu}</React.Fragment>\r\n ))}\r\n </Node>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Render Search result Body.\r\n * @param props - The Search Result Modal view props.\r\n * @param refineMenu - The Refine Menu view props.\r\n * @param sortByDropDown - The Sort by view props.\r\n * @param isRecoSearchPage - The recomandation search page flag.\r\n * @returns The JSX Element.\r\n */\r\nconst createModalBody = (\r\n props: ISearchResultModalViewProps,\r\n refineMenu: IRefineMenuViewProps,\r\n sortByDropDown: ISortByViewProps,\r\n isRecoSearchPage?: string\r\n): JSX.Element | null => {\r\n if (sortByDropDown) {\r\n return React.cloneElement(props.modalBody, {}, renderSort(sortByDropDown, isRecoSearchPage), renderRefinerMobile(refineMenu));\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Render Refiner.\r\n * @param props - The Refine Menu view props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderRefiner = (props: IRefineMenuViewProps): JSX.Element | null => {\r\n const { refiners, RefineMenuContainer, RefinerSectionContainer } = props;\r\n return (\r\n <Node {...RefinerSectionContainer}>\r\n <Node {...RefineMenuContainer}>\r\n {refiners?.map((submenu, index) => (\r\n <React.Fragment key={index}>{submenu}</React.Fragment>\r\n ))}\r\n </Node>\r\n </Node>\r\n );\r\n};\r\n\r\n/**\r\n * Render Refiner Footer.\r\n * @param props - The Refine Menu view props.\r\n * @param handler - The Refine menu toggle function.\r\n * @param resources - Resources to get the done text and aria label.\r\n * @returns The JSX Element.\r\n */\r\n// const renderRefinerFooter = (\r\n// props: IRefineMenuViewProps,\r\n// handler: MouseEventHandler,\r\n// resources: IDlvrySearchResultContainerResources\r\n// ): JSX.Element | null => {\r\n// const { refiners } = props;\r\n// if (refiners) {\r\n// return (\r\n// <Node className='ms-refine__footer__done'>\r\n// <Node tag='button' className='ms-refine-filter-done' aria-label={resources.doneAriaLabel} tabIndex={0} onClick={handler}>\r\n// {resources.doneText}\r\n// </Node>\r\n// </Node>\r\n// );\r\n// }\r\n// return null;\r\n// };\r\n\r\n/**\r\n * Render sort by drop down.\r\n * @param props - The sort by view props.\r\n * @param isRecoSearchPage - The recomandation search page flag.\r\n * @returns The JSX Element.\r\n */\r\nconst renderSort = (props: ISortByViewProps, isRecoSearchPage?: string): JSX.Element | null => {\r\n const { SortingContainer, sortByDropDown } = props;\r\n if (sortByDropDown && !isRecoSearchPage) {\r\n return <Node {...SortingContainer}>{sortByDropDown}</Node>;\r\n }\r\n return null;\r\n};\r\n\r\n/**\r\n * Render Title.\r\n * @param props - The title view props.\r\n * @returns The JSX Element.\r\n */\r\nconst renderTitle = (props: ITitleViewProps): JSX.Element | null => {\r\n const { title, TitleContainer } = props;\r\n if (title) {\r\n return (\r\n <Node {...TitleContainer}>\r\n <Node tag='h1' className=''>\r\n {title.titlePrefix}\r\n {title.titleText}\r\n </Node>\r\n </Node>\r\n );\r\n }\r\n return null;\r\n};\r\n\r\nexport default SearchResultContainerView;\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { ProductPrice, ProductRefinerValue, SimpleProduct, SortingInfo } from '@msdyn365-commerce/retail-proxy';\r\nimport { observable } from 'mobx';\r\n\r\nimport { listPageType } from './actions';\r\nimport { ProductSearchResultExt } from './components';\r\n\r\n/**\r\n * ListPageState class.\r\n */\r\nexport class ListPageState {\r\n @observable public activeFilters: ProductRefinerValue[] | null = null;\r\n\r\n @observable public activeProducts: ProductSearchResultExt[] = [];\r\n\r\n @observable public sortingCritera: SortingInfo | null = null;\r\n\r\n @observable public currentPageNumber: number | null = null;\r\n\r\n @observable public refiners: IProductRefinerHierarchy[] | null = null;\r\n\r\n @observable public totalProductCount: number | undefined;\r\n\r\n @observable public pageSize: number = 10;\r\n\r\n @observable public pageType: listPageType = 'Unknown';\r\n\r\n @observable public searchText: string | undefined = '';\r\n\r\n @observable public featureProduct: SimpleProduct | null = null;\r\n\r\n @observable public productPrices: ProductPrice[] | undefined = [];\r\n}\r\n\r\n/**\r\n * ListPageStateInput - action input.\r\n */\r\nexport class ListPageStateInput implements IActionInput {\r\n public getCacheKey = () => 'ListPageState';\r\n\r\n public getCacheObjectType = () => 'ListPageState';\r\n\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n\r\nexport async function listPageStateAction(input: ListPageStateInput, ctx: IActionContext): Promise<ListPageState> {\r\n return new ListPageState();\r\n}\r\n\r\n/**\r\n * Create new input for create action.\r\n * @param inputData\r\n */\r\nexport const createListPageInput = (inputData: ICreateActionContext<IGeneric<IAny>>): IActionInput => {\r\n return new ListPageStateInput();\r\n};\r\n\r\n/**\r\n * ListPageState - create action.\r\n */\r\nexport default createObservableDataAction<ListPageState>({\r\n action: <IAction<ListPageState>>listPageStateAction,\r\n input: createListPageInput\r\n});\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['dlvry-search-result-container'] = {\n c: () => require('partner/modules/dlvry-search-result-container/dlvry-search-result-container.tsx'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-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:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', 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/dlvry-search-result-container/list-page-state', runOn: 0},{name:'products', path:'modules/dlvry-search-result-container/actions/get-full-products-by-collection', runOn: 0},{name:'refiners', path:'modules/dlvry-search-result-container/actions/get-refiners-for-collection', runOn: 0},{name:'searchConfiguration', path:'modules/dlvry-search-result-container/actions/get-mapped-search-configuration', runOn: 0},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: false,\n ns: '__local__',\n n: 'dlvry-search-result-container',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/dlvry-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-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\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 = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-search-result-container/actions/get-full-products-by-collection';\n let dataAction = require('partner/modules/dlvry-search-result-container/actions/get-full-products-by-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-search-result-container/actions/get-mapped-search-configuration';\n let dataAction = require('partner/modules/dlvry-search-result-container/actions/get-mapped-search-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-search-result-container/actions/get-refiners-for-collection';\n let dataAction = require('partner/modules/dlvry-search-result-container/actions/get-refiners-for-collection');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = 'modules/dlvry-search-result-container/list-page-state';\n let dataAction = require('partner/modules/dlvry-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|dlvry-search-result-container|dlvry-search-result-container'] = {\n c: () => require('partner/modules/dlvry-search-result-container/dlvry-search-result-container.view.tsx'),\n cn: '__local__-__local__-dlvry-search-result-container'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","module.exports = React;","module.exports = ReactDOM;"],"names":["DeliveryMode","InventoryLevels","InventoryLevelValues","displayLabelEnabled","context","inventoryCode","requestContext","app","config","inventoryRanges","available","outOfStock","mapProductInventoryInformation","productsWarehouseInventory","productInventoryInformation","undefined","enableStockCheck","length","product","inventoryLevel","physicalAvailable","physicalProductMap","mapInventoryWithPhysicalBufferEnabled","push","totalAvailable","totalAvailableProductMap","mapInventoryWithTotalAvailableBufferEnabled","productMap","mapInventoryWithThresholdEnabled","productWarehouseInventoryAvailability","ProductId","TotalAvailable","productQty","outOfStockThreshold","productAvailableQuantity","AvailableQuantity","ProductAvailableQuantity","IsProductAvailable","InventLocationId","shouldRenderLabel","PhysicalAvailableInventoryLevelCode","productQuantity","_productWarehouseInve","MaximumPurchasablePhysicalAvailableQuantity","PhysicalAvailable","StockLevelCode","StockLevelLabel","PhysicalAvailableInventoryLevelLabel","TotalAvailableInventoryLevelCode","_productWarehouseInve2","MaximumPurchasableTotalAvailableQuantity","TotalAvailableInventoryLevelLabel","isAggregatedInventory","warehouseAggregation","mapAggregatedProductInventoryInformation","productWarehouseInventoryInformation","_productWarehouseInve3","AggregatedProductInventoryAvailabilities","map","_product$MaximumPurch","_product$MaximumPurch2","DataAreaId","PhysicalAvailableQuantity","TotalAvailableQuantity","ProductWarehouseInventoryAvailabilities","createInventoryAvailabilitySearchCriteria","productIds","isDefaultWareHouse","isFilterByChannelFulfillmentGroup","searchArea","defaultDeliveryMode","deliveryMode","shipping","inventoryAvailabilitySearchCriteria","ProductIds","QuantityUnitTypeValue","SearchArea","FilterByChannelFulfillmentGroup","DeliveryModeTypeFilterValue","DefaultWarehouseOnly","ProductListViewMode","ProductListViewModeComponent","props","React","className","Button","classname","viewMode","cardView","title","cardButtonTxt","role","onClick","setCardViewMode","listView","listButtonTxt","setListViewMode","expandRefinersCount","preferredViewMode","AlcoholAttributeName","BamaAttributeName","CocaColaAttributeName","TobaccoAttributeName","TransitAttributeName","validateProductAccessArray","customerAttributes","products","_customerAttributes$f6","_customerAttributes$f7","_customerAttributes$f8","_customerAttributes$f9","_customerAttributes$f10","results","custAlcohol","Number","find","attr","Name","TextValue","custBama","custCocaCola","custTobacco","custTransit","_productAttributes$fi6","_productAttributes$fi7","_productAttributes$fi8","_productAttributes$fi9","_productAttributes$fi10","productAttributes","AttributeValues","every","Boolean","RecordId","HasAccess","SearchResultContainer","constructor","state","_props$context$reques","_this$props$context$r7","super","_viewModeCookieName","BuyAlwaysAdd","sortByDropdownOptions","key","sortOptions","sortByOptionRelevanceDesc","value","this","resources","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","sortByOptionBestSelling","sortByOptionNewScore","sortByOptionTrendingScore","_pageType","request","urlTokens","pageType","_viewport","_viewMode","defaultPageNumber","catalogId","getCatalogId","isListPageStateUpdated","_isMounted","_updateVariantAvailability","async","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","ArrayExtensions","hasElements","includes","DimensionTypes","none","includeAttributes","_getProductsDimensionsAvailabilities","_updateCurrentViewMode","newCookieValue","String","SetCookie","cookies","_updateListPageState","listPageState","_this$props$context$r","_this$props$config$it","_this$props$config$it2","_this$props$context$r2","_this$props$context$r3","querySorting","query","sorting","JSON","parse","decodeURIComponent","currentPageNumber","skip","itemsPerPage","sortingCritera","Columns","pageSize","activeProducts","totalProductCount","count","activeFilters","hydrateRefinersFromUrl","searchText","q","productId","featureProduct","data","result","_this$props$data$list","_this$props$data$list2","productsList","productsDimensionAvailabilities","getDimensionAvailabilitiesForProductSearchResultAction","DimensionAvailabilitiesForProductSearchResultInput","DimensionSwatchDisplayTypes","productCard","actionContext","setState","_getActivePrice","_this$props$data$list3","_this$props$data$list4","retrievedActivePrices","missingPrices","filter","x","PrefetchedPrice","prices","getActivePricesAsync","callerContext","CatalogId","ChannelId","apiSettings","channelId","Date","forEach","p","indexOfProduct","findIndex","Price","CustomerContextualPrice","BasePrice","AdjustedPrice","Badge","getDiscountBadge","ProductPrice","error","PriceFailed","console","_getSimpleProducts","_this$props$data$list5","missing","simpleProducts","y","getByIdsAsync","newSimpleProducts","_getUnitOfMeasureConversions","user","isAuthenticated","unitOfMeasureConversions","ids","unitConversions","getProductUnitOfMeasureOptionsAsync","_getSearchResultModal","SearchResultModal","modalCloseButtonText","modalTitle","isOpen","modalIsOpen","returnRef","_modalToggleRef","onModalToggle","_toggleModal","_getSelectedProductIds","_ref","selectedProducts","isDisabled","isAllSelected","_objectWithoutProperties","_excluded","Object","entries","_ref2","_getSelectedProductsActions","working","baseClassName","dangerouslySetInnerHTML","__html","selectionActionsText","replace","toString","classnames","_onBuySelectedProducts","disabled","selectionActionsButtonText","_customerInformation$","simpleInputs","id","ProductInput","getSimpleProducts","cart","getCartStateData","GetCartStateDataInput","status","log","Promise","resolve","setTimeout","toast","header","text","autoClose","canClose","position","showProgress","cartLineQuantities","fromEntries","CartLines","line","Quantity","operations","buy","update","remove","_this$state$productQu","_cartLineQuantities$p","quantity","productQuantities","cartQuantity","customerInformation","Attributes","concat","_listPageState$result","some","toastErrorHeader","selectionActionsMissingLicenseText","type","resetQuantitiesFor","Set","newProductQuantities","_objectSpread","newSelectedProducts","getErrorMessage","_result$validationRes","_result$errorDetails","_result$errorDetails3","_result$validationRes2","_result$errorDetails2","_result$errorDetails4","validationResults","LocalizedMessage","errorDetails","ValidationResults","ErrorContext","handleResult","_result$errorDetails5","add","footer","CorrelationId","resetSelectedQuantities","buyInput","_ref3","_listPageState$result2","customPrice","addProductsToCart","updateInput","_ref4","updateCartLines","updatedCartLinesObject","cartLineIds","_ref5","LineId","removeCartLines","refreshCart","_getCollectionTitle","_context$request$quer","collectionTitle","productCountNumber","productCountText","format","numberOfProducts","oneProduct","TitleContainer","telemetryPageName","toLowerCase","titlePrefix","Title","searchTextPrefix","titleText","titleCount","_getCategoryHierarchy","categoryHierarchy","CategoryHierarchyContainer","tag","categoryHierarchyList","index","Link","ariaLabel","categoryLinkAriaLabel","href","Url","categoryHierarchySeparator","Separator","separator","_getSortingDropDown","activeDropdown","_getCurrentlySelectedOption","sortingState","selectedSortByOption","dropdownOptions","_getAllSortByOptions","hideRating","dropdownOption","SortingContainer","sortByDropDown","LabeledDropdown","labelClassname","labelText","sortByDropdownLabel","dropdownId","dropdownClassname","toggleColor","selectedOption","onSelectOption","_updateSortByDropdown","ref","_sortAndFilterContainerRef","_getPagination","fullUrl","getCurrentUrl","skipCount","totalItems","previousText","flipperPrevious","nextText","flipperNext","UncontrolledPagination","paginationAriaLabel","url","qsp","items","startingItem","_renderPrev","_renderNext","previousAriaLabel","nextAriaLabel","telemetryContent","_getRefineMenu","tempRangeTypeTODO","inputRange","validRefiners","refiners","refiner","Values","_shouldHideFromRefiners","activeRefiners","RefineMenuContainer","RefinerSectionContainer","productRefinerHierarchy","RefineSubmenu","selectedRefinerValues","refineItemCommonProps","_refineItemCommonProps","minValueSliderThumbAriaLabel","maxValueSliderThumbAriaLabel","onUpdateRefiners","_onUpdateRefiners","urlBuilder","_buildRefinerUrl","isExpandedOnInitialLoad","moduleId","moduleTypeName","typeName","productCountAriaLabel","refineItemAriaLabel","refineItemsAriaLabel","singleProductCountAriaLabel","isMobile","_this$props$context$a","_this$props$data$prod","_this$props$data$prod2","channelInventoryConfiguration","refinerIds","forsvaretAttributeRecordId","alcoholRefinerRecordId","transitRefinerRecordId","tobaccoRefinerRecordId","cocacolaRefinerRecordId","bamaRefinerRecordId","dutyFreeSugarRefinerRecordId","norturaRefinerRecordId","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","productListInventoryDisplay","ProductListInventoryFilteringOptions","HideOOS","channelInventoryConfigurationId","InventoryProductAttributeRecordId","_canSearchEmpty","_this$props$context$r4","recommendation","_getSearchBar","_this$props$context$r6","searchPlaceholderText","placeholder","defaultValue","onKeyDown","showEmptySearchBarTooltip","e","_this$props$context$r5","target","newUrl","URL","window","location","searchParams","set","delete","history","pushState","path","transaction","onBlur","Tooltip","searchEmptySearchTermText","_getChoiceSummary","_this$props$data$refi","telemetry","selectedRefiners","refinerValueName","rating","KeyName","ChoiceSummary","classNames","clearAllText","label","choiceSummaryLabel","closeAriaLabel","selectedChoices","refinerHierarchy","choiceFormat","choiceRangeValueFormat","onChoiceClicked","_onChoiceClicked","_buildRefinerUrlForChoiceSummary","choiceAriaLabel","refinerValues","yesLabel","yes","noLabel","no","_getAvailableQuantity","shouldShowAvailability","shippingSearchCriteria","shippingAvailability","ProductsDataActions","shippingInventory","deliveryType","_getProducts","_this$props$slots","_this$props$data$feat","_this$props$data$prod5","_this$props$data$prod6","_this$props$data$prod7","imageSettings","allowBackNavigation","shouldAllowBackNavigation","productListItemText","breadCrumbType","breadcrumbType","shouldAllowBack","quickviewSlot","slots","quickview","productComparisonButton","isPriceMinMaxFeatureState","featureState","_this$props$data$prod3","_this$props$data$prod4","extendedProducts","_product$AttributeVal","_product$AttributeVal2","Brand","attribute","attributeLocale","brand","Manufacturer","manufacturer","ProductSearchResultItems","productInventoryStatus","wishlists","moduleType","disableBuyButtons","showPrices","isPriceMinMaxEnabled","IsEnabled","validatedProductAccess","productList","productSearchResults2ProductList","ProductListComponent","allowMultiSelect","selectOnQuantityChange","actionsAvailable","addToCartAction","addToWishlistAction","showAvailability","buyAlwaysAdd","onResetSelectedQuantities","onUpdateQuantity","onUpdateSelection","onBuyValidate","_this$props$data$list6","onBuyHasAccessValidator","toastNoAccessToProduct","_getTotalProductCount","numberOfSearchResults","notification","buildListPageUrl","_getSortColumnFromSelectedOption","warning","option","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list7","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","item","validValues","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","itemToggleNotification","_this$props$data$list8","updatedRefinementCriteria","getUpdatedRefinementCriteria","newRefinementCriteria","currentRefinementCriteria","clearAll","dropdownElementId","current","dropdownElement","document","getElementById","focus","selectedChoice","choiceClicked","selectedCriterion","isMatchingRefinementCriterion","selectedRefiner","isClearAll","paginationPreviousText","paginationNextText","device","Type","bind","_updateViewport","productPrices","pending","previousSearchText","placeholderTextMax","minLabel","maxLabel","rangeNameFormat","locale","validationErrorNaN","validationErrorNotNumber","validationErrorRange","validationErrorNotRange","getTelemetryObject","friendlyName","savedViewMode","GetCookie","getLocale","disableAvailabilityCheckUnauthorized","nameTranslations","_nameTranslation","nameTranslation","Language","Text","_this$props$context$a2","_this$props$context$a3","_this$props$data$cust","_this$props$data$list10","_this","MsDyn365","isBrowser","addEventListener","units","_len","arguments","productsId","Array","_key","input","ItemId","toJS","conversions","_activeProducts$find","defaultUOM","ap","DefaultUnitOfMeasure","conversion","r","FromUnitOfMeasureSymbol","ToUnitOfMeasureSymbol","Conversion","Value","Factor","enableAffiliationBasedPricing","StoreOperationsDataActions","_unused","_this$props$data$list9","availabilityError","reaction","_listPageState$active","_listPageState$sortin","_newListPageState$cur","_newListPageState$sor","_newListPageState$act","_this$props$context$r8","_this$props$context$r9","_this$props$context$r10","_this$props$context$r11","_this$props","_this$props$context$a4","searchTextChanged","newListPageState","GetFullProductsByCollectionInput","Paging","Top","Skip","Math","max","Sorting","recordId","stringify","Recommendation","SearchText","updateRefinerPanel","productResults","getCollectionProducts","_newListPageState$cur2","_newListPageState$sor2","_newListPageState$act2","_this$props$context$r12","_this$props$context$r13","_this$props$context$r14","_this$props$context$r15","refinerInput","RefinersByCollectionInput","getRefinersForCollectionDataAction","_this$props$data$list11","_this$props$data$list12","_this$props$data$cust2","_this$props$data$list14","_unused2","_this$props$data$list13","componentWillUnmount","removeEventListener","render","_ref6","_listPageState$result3","_listPageState$result4","_this$props$context$r16","_this$props$data$list15","_this$props$data$list16","productCollection","searchProduct","errorText","resultCategoryNotFoundText","resultSearchNotFoundText","productsComponent","featureComponent","FeatureSearchResultItem","viewModeProps","searchResultContainerViewProps","TitleViewProps","disableHierarchy","refineMenu","moduleProps","sortByOptions","pagination","ProductsContainer","ProductSectionContainer","CategoryNavContainer","RefineAndProductSectionContainer","searchBar","choiceSummary","modalToggle","ModalToggle","innerRef","searchResultModal","errorMessage","ErrorMessage","FeatureSearchContainer","similarLookProduct","viewModesComponent","selectedProductsActions","renderView","_getViewport","variant","VariantType","Browser","Viewport","__decorate","computed","observable","action","bound","observer","DescriptionInterval","getInventoryLabel","inventoryAttribute","renderProductCardsDescription","cartQueue","retrieveOrderTemplates","onUpdateOrderTemplates","isEnabledProductDescription","_props$data$products$","_props$data$featureSt","_props$unitConversion","isAllowBack","quickviewslot","priceResources","priceRangeSeparator","ProductComponent","freePriceText","priceFree","originalPriceText","currentPriceText","ratingAriaLabel","allowBack","simpleProduct","ProductRecordId","quickViewButton","inventoryLabel","inventoryStatus","swatchItemAriaLabel","addToCartText","updateCartText","removeFromCartText","outOfStockText","priceErrorText","toastStrings","errorHeader","productsAddedToCart","productsRemovedFromCart","productsUpdatedInCart","goToCart","toastGoToCart","noAccessToProduct","dimensionAvailabilities","dimensionAvailability","masterProductId","MasterProductId","addToOrderTemplateResources","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","createOrderTemplateHeader","orderTemplateTitle","orderTemplateNameAriaLabel","createOrderTemplateDescription","defaultOrderTemplateName","createOrderTemplateButtonText","cancelNewOrderTemplateCreationButtonText","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","configureStickyFilter","isStickyHeader","headerContainer","querySelector","headerHeight","offsetHeight","bannerHeights","headerElement","defaultContainer","refinerElement","documentElement","scrollTop","classList","setAttribute","clientHeight","removeAttribute","renderViewModes","assign","createSearchResultModal","modalProps","isRecoSearchPage","modal","modalHeader","createModalBody","modalFooter","modalBody","renderSort","Node","submenu","renderRefinerMobile","renderRefiner","renderTitle","_props$context$action2","useEffect","useStickyFilter","stickyFilterSetup","enableStickyHeader","wrapperRefiner","refinerHeading","refinerHeadingRender","_props$context$action","orderTemplates","setOrderTemplates","PQueue","concurrency","updateOrderTemplatesAsync","newOrderTemplates","newOrderTemplate","Id","splice","OrderTemplate","queryResultSettings","QueryResultSettingsProxy","fromInputData","QueryResultSettings","GetOrderTemplatesInput","getOrderTemplates","Module","category","renderCategoryHierarchy","enableProdutDescription","renderProducts","_props$data$listPageS","productDescriptionInterval","productDescriptionIntervalRemainder0","productDescriptionIntervalRemainder9","renderProductCards","ListPageState","ListPageStateInput","getCacheKey","getCacheObjectType","dataCacheType","listPageStateAction","ctx","createListPageInput","inputData","createObservableDataAction","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","runOn","iNM","ns","n","pdp","md","__bindings__","viewDictionary","cn","module","exports","ReactDOM"],"sourceRoot":""}