/// <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); }
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); }