{"version":3,"file":"static/js/58921050ca62c417ffe4.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 inCartTooltipText: string;\r\n transitTooltip: string;\r\n agreementProductTooltip: 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 ObjectExtensions\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 { action, computed, observable, reaction, transaction, 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, toasts } 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\nimport { getTemperatureZone } from '../../shared-utils/attributes/get-temperature-zone';\r\nimport { hasAgreementProducts, getAgreementProductRefinersToHide, isAgreementProduct } from '../../shared-utils/agreement-product-utils';\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 breakoffProducts: { [key: number]: boolean };\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 /* Removed until Microsoft improves this functionality */\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 breakoffProducts: {}\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 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 (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 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\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?.skip &&\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 toasts.error(this.props.resources.toastErrorHeader, this.props.resources.selectionActionsMissingLicenseText);\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 const footer = (result.errorDetails?.LocalizedMessage as any)?.data?.CorrelationId;\r\n toasts.error(this.props.resources.toastErrorHeader, getErrorMessage(result), { footer });\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 = !ObjectExtensions.isNullOrUndefined(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 yesText={this.props.resources.yes}\r\n noText={this.props.resources.no}\r\n transitRefinerRecordId={this.props.config.transitRefinerRecordId}\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?.blockedSvalbardAttributeRecordId),\r\n Number(this.props.context.app.config?.forsvaretAttributeRecordId),\r\n Number(this.props.context.app.config?.prioritySortingAttribute),\r\n Number(this.props.config.alcoholRefinerRecordId),\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\r\n const agreementProductAttributeRecordIds = getAgreementProductRefinersToHide(this.props.context, this.props.data.orgInformation.result);\r\n\r\n if (agreementProductAttributeRecordIds && agreementProductAttributeRecordIds.length > 0) {\r\n refinerIds.push(...agreementProductAttributeRecordIds);\r\n }\r\n\r\n const transitRefinerRecordId = this.props.config.transitRefinerRecordId;\r\n const customerTransit = transitRefinerRecordId\r\n ? this.props.data.orgInformation.result?.Attributes?.find(x => x.RecordId === Number(transitRefinerRecordId))\r\n : undefined;\r\n const customerTransitValue = Number(customerTransit?.AttributeValue?.StringValue);\r\n\r\n if (isNaN(customerTransitValue) || customerTransitValue === 0) {\r\n refinerIds.push(Number(transitRefinerRecordId));\r\n }\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 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 transitRefinerRecordId={this.props.config.transitRefinerRecordId}\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 context\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 addToWishlistText: this.props.resources.addToWishlistButtonText,\r\n removeButtonText: this.props.resources.removeFromWishlistButtonText\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 if (this._viewMode === ProductListViewMode.cardView) {\r\n const extendedProducts = products.map((productOrg: ProductSearchResultExt) => {\r\n const product = observable.object({ ...productOrg });\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 product.Transit = product.AttributeValues?.find(attribute => attribute.KeyName === this.attributeLocale.transit)?.TextValue === '1';\r\n product.IsAgreementProduct = isAgreementProduct(this.props.context, product.AttributeValues);\r\n product.TemperatureZone = getTemperatureZone(this.props.context.request.locale, product.AttributeValues);\r\n product.AgentImporter = product.AttributeValues?.find(attribute => attribute.Name === this.attributeLocale.agentImporter)?.TextValue;\r\n product.Producer = product.AttributeValues?.find(attribute => attribute.Name === this.attributeLocale.producer)?.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 orgInformation={this.props.data.orgInformation.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={{\r\n addToCartAction: true,\r\n addToWishlistAction: true,\r\n productComparisonButton:false\r\n }}\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 showCartCount\r\n showAgreementProduct={hasAgreementProducts(context, data.orgInformation.result)}\r\n buyAlwaysAdd\r\n wishlists={this.props.data.wishlists.result}\r\n resetSelectedQuantities={this.state.resetSelectedQuantities}\r\n breakoffProducts={this.state.breakoffProducts}\r\n onBreakoffChange={(product, enabled) => {\r\n if (!product.RecordId) {\r\n return;\r\n }\r\n const newBreakoffProducts = { ...this.state.breakoffProducts };\r\n newBreakoffProducts[product.RecordId] = enabled;\r\n this.setState({ breakoffProducts: newBreakoffProducts });\r\n }}\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\nimport { hasAgreementProducts } from '../../shared-utils/agreement-product-utils';\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 {\r\n config,\r\n context,\r\n data: { orgInformation },\r\n resources,\r\n productsDimensionAvailabilities\r\n } = 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 showAgreementProduct={hasAgreementProducts(context, orgInformation.result)}\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 inCartTooltipText={resources.inCartTooltipText}\r\n transitTooltip={resources.transitTooltip}\r\n agreementProductTooltip={resources.agreementProductTooltip}\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:'orgInformation', path:'actions/get-organization-customer', 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: 1}],\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 = 'actions/get-organization-customer';\n let dataAction = require('partner/actions/get-organization-customer');\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","_props$context$reques2","super","_viewModeCookieName","BuyAlwaysAdd","sortByDropdownOptions","key","sortOptions","value","this","resources","sortByOptionRelevanceDesc","sortByOptionNameAsc","sortByOptionNameDesc","sortByOptionPriceAsc","sortByOptionPriceDesc","sortByOptionRatingDesc","_pageType","request","urlTokens","pageType","_viewport","_viewMode","defaultPageNumber","catalogId","getCatalogId","isListPageStateUpdated","_isMounted","_updateVariantAvailability","async","dimensionsToDisplayOnProductCard","dimensionsInProductCard","dimensionsToDisplayAsSwatch","dimensionsAsSwatchType","ArrayExtensions","includes","DimensionTypes","includeAttributes","_getProductsDimensionsAvailabilities","_updateCurrentViewMode","newCookieValue","String","SetCookie","cookies","_updateListPageState","listPageState","_this$props$context$r","_this$props$context$r2","_this$props$config$it","_this$props$config$it2","_this$props$context$r3","_this$props$context$r4","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","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","_this$props$data$list6","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","toasts","toastErrorHeader","selectionActionsMissingLicenseText","resetQuantitiesFor","Set","newProductQuantities","_objectSpread","newSelectedProducts","handleResult","add","_result$errorDetails13","_result$errorDetails14","_result$errorDetails15","footer","errorDetails","LocalizedMessage","CorrelationId","_result$validationRes","_result$validationRes2","_result$errorDetails","_result$errorDetails3","_result$errorDetails4","_result$errorDetails5","_result$errorDetails6","_result$errorDetails7","_result$validationRes3","_result$validationRes4","_result$errorDetails2","_result$errorDetails8","_result$errorDetails9","_result$errorDetails10","_result$errorDetails11","_result$errorDetails12","validationResults","ValidationResults","ErrorContext","getErrorMessage","resetSelectedQuantities","buyInput","_ref3","_listPageState$result2","_listPageState$result3","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","ObjectExtensions","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","yesText","yes","noText","no","transitRefinerRecordId","_this$props$context$a","_this$props$context$a2","_this$props$context$a3","_this$props$data$orgI","_this$props$data$orgI2","_customerTransit$Attr","_this$props$data$prod","_this$props$data$prod2","channelInventoryConfiguration","refinerIds","blockedSvalbardAttributeRecordId","forsvaretAttributeRecordId","prioritySortingAttribute","alcoholRefinerRecordId","tobaccoRefinerRecordId","cocacolaRefinerRecordId","bamaRefinerRecordId","dutyFreeSugarRefinerRecordId","norturaRefinerRecordId","agreementProductAttributeRecordIds","getAgreementProductRefinersToHide","orgInformation","customerTransit","customerTransitValue","AttributeValue","StringValue","isNaN","inventoryAwareSortableAttributeId","ProductAvailabilitySortableAttributeRecordId","productListInventoryDisplay","ProductListInventoryFilteringOptions","channelInventoryConfigurationId","InventoryProductAttributeRecordId","_canSearchEmpty","_this$props$context$r5","recommendation","_getSearchBar","_this$props$context$r7","searchPlaceholderText","placeholder","defaultValue","onKeyDown","showEmptySearchBarTooltip","e","_this$props$context$r6","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","noLabel","_getAvailableQuantity","shouldShowAvailability","shippingSearchCriteria","shippingAvailability","ProductsDataActions","shippingInventory","deliveryType","_getProducts","_this$props$slots","_this$props$slots$qui","_this$props$data$feat","_this$props$data$prod5","_this$props$data$prod6","_this$props$data$prod7","imageSettings","allowBackNavigation","shouldAllowBackNavigation","productListItemText","addToWishlistText","addToWishlistButtonText","removeButtonText","removeFromWishlistButtonText","breadCrumbType","breadcrumbType","shouldAllowBack","quickviewSlot","slots","quickview","productComparisonButton","isPriceMinMaxFeatureState","featureState","_this$props$data$prod3","_this$props$data$prod4","extendedProducts","productOrg","_product$AttributeVal","_product$AttributeVal2","_product$AttributeVal3","_product$AttributeVal4","_product$AttributeVal5","_product$AttributeVal6","_product$AttributeVal7","_product$AttributeVal8","_product$AttributeVal9","_product$AttributeVal10","observable","Brand","attribute","attributeLocale","brand","Manufacturer","manufacturer","Transit","transit","IsAgreementProduct","isAgreementProduct","TemperatureZone","getTemperatureZone","locale","AgentImporter","agentImporter","Producer","producer","ProductSearchResultItems","productInventoryStatus","wishlists","moduleType","disableBuyButtons","showPrices","isPriceMinMaxEnabled","IsEnabled","validatedProductAccess","productList","productSearchResults2ProductList","ProductListComponent","allowMultiSelect","selectOnQuantityChange","actionsAvailable","addToCartAction","addToWishlistAction","showAvailability","showCartCount","showAgreementProduct","hasAgreementProducts","buyAlwaysAdd","breakoffProducts","onBreakoffChange","enabled","newBreakoffProducts","onResetSelectedQuantities","onUpdateQuantity","onUpdateSelection","onBuyValidate","_this$props$data$list7","onBuyHasAccessValidator","toastNoAccessToProduct","_getTotalProductCount","numberOfSearchResults","notification","buildListPageUrl","_getSortColumnFromSelectedOption","warning","option","searchConfiguration","mappedConfiguration","sortColumn","_getSortCriteriaColumn","_this$props$data$list8","sortCriteria","queryColumns","parseQueryParam","mappedSearchConfiguration","mappedSearchConfig","item","activeSortColumn","activeMappedConfig","ColumnName","IsDescending","itemToggleNotification","_this$props$data$list9","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","placeholderTextMax","minLabel","maxLabel","rangeNameFormat","validationErrorNaN","validationErrorNotNumber","validationErrorRange","validationErrorNotRange","getTelemetryObject","friendlyName","savedViewMode","GetCookie","getLocale","disableAvailabilityCheckUnauthorized","nameTranslations","_nameTranslation","nameTranslation","Language","Text","_this$props$context$a4","_this$props$context$a5","_this$props$context$a6","_this$props$data$cust","_this$props$data$list11","_this","MsDyn365","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$list10","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$config","_this$props$context$a7","_this$props$context$a8","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$list12","_this$props$data$list13","_this$props$data$cust2","_this$props$data$list15","_unused2","_this$props$data$list14","componentWillUnmount","removeEventListener","render","_ref6","_listPageState$result4","_listPageState$result5","_this$props$context$r16","_this$props$data$list16","_this$props$data$list17","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","__decorate","computed","action","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","inCartTooltipText","transitTooltip","agreementProductTooltip","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","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":""}