/// <summary>
        /// Provides the UI a list of sort by information (display & complete url).  It also provide the current selected sort by.
        /// </summary>
        /// <param name="param">The query criteria.</param>
        /// <param name="searchResultsViewModel">The search results view model.</param>
        private void ResolveProductAvailableSortBy(TParam param,
                                                   ProductSearchResultsViewModel searchResultsViewModel)
        {
            searchResultsViewModel.SelectedSortBy = GetSelectedSortBy(param.Criteria);

            searchResultsViewModel.AvailableSortBys = GetAvailableSortBys(param);
        }
        /// <summary>
        ///     Creates the product search results view model.
        /// </summary>
        /// <createSearchViewModelParam name="createSearchViewModelParam">The parameter.</createSearchViewModelParam>
        /// <returns></returns>
        protected virtual async Task <ProductSearchResultsViewModel> CreateProductSearchResultsViewModelAsync(CreateProductSearchResultsViewModelParam <TParam> param)
        {
            //TODO: Implement by calling the ViewModelMapper instead.
            var searchResultViewModel = new ProductSearchResultsViewModel
            {
                SearchResults        = new List <ProductSearchViewModel>(),
                CategoryFacetCounts  = BuildCategoryFacetCounts(param),
                Keywords             = param.SearchParam.Criteria.Keywords,
                TotalCount           = param.SearchResult.TotalCount,
                CorrectedSearchTerms = param.SearchResult.CorrectedSearchTerms,
                Suggestions          = new List <Suggestion>()
            };

            if (param.SearchResult.Suggestions != null)
            {
                foreach (var suggestion in param.SearchResult.Suggestions)
                {
                    var cloneParam = param.SearchParam.Criteria.Clone();
                    cloneParam.Keywords = suggestion.Title;

                    searchResultViewModel.Suggestions.Add(new Suggestion
                    {
                        Title = suggestion.Title,
                        Url   = SearchUrlProvider.BuildSearchUrl(new BuildSearchUrlParam
                        {
                            SearchCriteria = cloneParam
                        })
                    });
                }
            }

            var imgDictionary     = LineItemHelper.BuildImageDictionaryFor(param.ImageUrls);
            var searchResultsList = new List <(ProductSearchViewModel, ProductDocument)>();

            // Populate search results
            foreach (var resultItem in param.SearchResult.Documents)
            {
                searchResultsList.Add((ProductSearchViewModelFactory.GetProductSearchViewModel(resultItem, param.SearchParam.Criteria, imgDictionary), resultItem));
            }

            searchResultViewModel.SearchResults = await ProductSearchViewModelFactory.EnrichAppendProductSearchViewModels(searchResultsList, param.SearchParam.Criteria).ConfigureAwait(false);

            var facets = BuildFacets(param.SearchParam.Criteria, param.SearchResult);

            searchResultViewModel.Facets              = facets;
            searchResultViewModel.Pagination          = BuildPaginationForSearchResults(param.SearchResult, param.SearchParam, SearchConfiguration.MaximumPages);
            searchResultViewModel.PromotedFacetValues = BuildPromotedFacetValues(facets);

            // TODO: Fix this
            new SearchSortByResolver <TParam>(LocalizationProvider, GetSearchSortByList(SearchType), GenerateUrl)
            .Resolve(searchResultViewModel, param.SearchParam);

            searchResultViewModel.BaseUrl = param.SearchParam.Criteria.BaseUrl;

            return(searchResultViewModel);
        }
Exemple #3
0
        protected virtual async Task <ProductSearchResultsViewModel> GetProductSearchResultsAsync(GetCategoryBrowsingViewModelParam param)
        {
            var searchParam = new BrowsingSearchParam
            {
                Criteria          = await GetSearchCriteriaAsync(param).ConfigureAwait(false),
                CategoryId        = param.CategoryId,
                CategoryFilters   = await GetSelectedCategoriesAsync(param).ConfigureAwait(false),
                IsAllProductsPage = param.IsAllProducts
            };

            ProductSearchResultsViewModel model = await SearchAsync(searchParam).ConfigureAwait(false);

            return(model);
        }
            /// <summary>
            /// Get the search results.
            /// </summary>
            /// <param name="searchText">The search text.</param>
            /// <returns>
            /// The View for that product.
            /// </returns>
            public async Task <ActionResult> Search(string searchText)
            {
                EcommerceContext         ecommerceContext         = ServiceUtilities.GetEcommerceContext(this.HttpContext);
                ProductOperationsHandler productOperationsHandler = new ProductOperationsHandler(ecommerceContext);

                string sanitizedSearchText = Utilities.GetSanitizedSearchText(searchText);
                PagedResult <ProductSearchResult> productSearchResults = await productOperationsHandler.SearchByText(sanitizedSearchText, catalogId : 0, queryResultSettings : Utilities.DefaultQuerySettings);

                await PopulateProductInfo(productSearchResults, ecommerceContext);

                ProductSearchResultsViewModel viewModel = new ProductSearchResultsViewModel(sanitizedSearchText, productSearchResults);

                return(this.View(ProductsController.ProductSearchResultsViewName, viewModel));
            }
 /// <summary>
 /// Resolves the specified search results view model.
 /// </summary>
 /// <param name="searchResultsViewModel">The search results view model.</param>
 /// <param name="searchCriteria">The search criteria.</param>
 public void Resolve(ProductSearchResultsViewModel searchResultsViewModel, TParam searchCriteria)
 {
     ResolveProductAvailableSortBy(searchCriteria, searchResultsViewModel);
 }