private MultipleProductSearchResults GetMultipleProductSearchResults()

in src/Feature/Catalog/code/Repositories/CatalogRepository.cs [331:383]


        private MultipleProductSearchResults GetMultipleProductSearchResults(BaseItem dataSource,
            CommerceSearchOptions productSearchOptions)
        {
            Assert.ArgumentNotNull(productSearchOptions, "productSearchOptions");

            MultilistField searchesField = dataSource.Fields[Templates.ProductSearch.Fields.NamedSearches.ToString()];
            var searches = searchesField.GetItems();
            var productsSearchResults = new List<SearchResults>();

            foreach (var search in searches)
            {
                if (TemplateManager.GetTemplate(search).GetBaseTemplates().FirstOrDefault(t => t.ID == Templates.NamedSearch.ID) != null)
                {
                    var productsSearchResult = _catalogManager.GetProductSearchResults(search, productSearchOptions);

                    if (productsSearchResult != null)
                    {
                        productsSearchResult.NamedSearchItem = search;
                        productsSearchResult.DisplayName = search[Templates.NamedSearch.Fields.Title.ToString()];
                        productsSearchResults.Add(productsSearchResult);
                    }
                }
                else if (TemplateManager.GetTemplate(search).GetBaseTemplates().FirstOrDefault(t => t.ID == Templates.SelectedProducts.ID) != null)
                {
                    var itemCount = 0;
                    var staticSearchList = new SearchResults
                    {
                        DisplayName = search[Templates.SelectedProducts.Fields.Title.ToString()],
                        NamedSearchItem = search
                    };

                    MultilistField productListField = search.Fields[Templates.SelectedProducts.Fields.ProductList.ToString()];
                    var productList = productListField.GetItems();

                    foreach (var productItem in productList)
                    {
                        var catalogItemtype = productItem.ItemType();

                        if (catalogItemtype == StorefrontConstants.ItemTypes.Category || catalogItemtype == StorefrontConstants.ItemTypes.Product)
                        {
                            staticSearchList.SearchResultItems.Add(productItem);
                            itemCount++;
                        }
                    }

                    staticSearchList.TotalItemCount = itemCount;
                    staticSearchList.TotalPageCount = itemCount;
                    productsSearchResults.Add(staticSearchList);
                }
            }

            return new MultipleProductSearchResults(productsSearchResults);
        }