async Task <PeopleSearchResults> ProductSearchResults(SearchParams searchParams, bool correctFacets) { var fieldsEqualsList = new List <FieldFilter>(); //Facets from URL if (searchParams.Facets != null && searchParams.Facets.Any()) { fieldsEqualsList.AddRange(AddFacetFilters(searchParams.Facets)); } List <FieldFilter> fieldFilters = new List <FieldFilter>(); fieldFilters.Add(new FieldFilter() { name = "_templatename", value = "Person" }); fieldFilters.Add(new FieldFilter() { name = "ismvp", value = "true" }); fieldsEqualsList.AddRange(fieldFilters); GraphQL.GraphQLResponse <Response> response = await _graphQLProvider.SendQueryAsync <Response>(searchParams.IsInEditingMode, GraphQLFiles.PeopleSearchAdvanced, new { language = searchParams.Language, rootItem = new Guid(searchParams.RootItemId).ToString("N"), pageSize = searchParams.PageSize, cursorValueToGetItemsAfter = searchParams.CursorValueToGetItemsAfter?.ToString(), query = searchParams.Query, fieldsEqual = fieldsEqualsList, facetOn = searchParams.FacetOn }); if (searchParams.Facets != null && searchParams.Facets.Any()) { response.Data.Search.facets = response.Data.Search.facets.Select(fc => UpdateFacetState(fc, searchParams.Facets)).ToList(); } var result = new PeopleSearchResults { People = response.Data.Search.results.items.Select(x => x.item), Facets = response.Data.Search.facets, TotalCount = response.Data.Search.results.totalCount, StartCursor = int.Parse(response.Data.Search.results.pageInfo.startCursor), EndCursor = int.Parse(response.Data.Search.results.pageInfo.endCursor), HasNextPage = response.Data.Search.results.pageInfo.hasNextPage, HasPreviousPage = response.Data.Search.results.pageInfo.hasPreviousPage, PageSize = searchParams.PageSize != 0 ? searchParams.PageSize : null, FilterFacets = searchParams.FilterFacets, keyword = searchParams.Query, CurrentPage = !searchParams.PageSize.HasValue ? 0 : Convert.ToInt32(Math.Ceiling(int.Parse(response.Data.Search.results.pageInfo.endCursor) / Convert.ToDouble(searchParams.PageSize))) }; if (correctFacets) { result = await CorrectFacetCounts(searchParams, result); if (searchParams.Facets != null && searchParams.Facets.Any()) { result.Facets = result.Facets.Select(fc => UpdateFacetState(fc, searchParams.Facets)).ToList(); } } result.Facets = result.Facets.Select(fc => UpdateFacetValuesOrder(fc)).ToList(); result.Facets.Remove(result.Facets.Where(x => x.name == "personyearaward").FirstOrDefault()); return(result); }
async Task <PeopleSearchResults> CorrectFacetCounts(SearchParams searchParams, PeopleSearchResults originalResults) { foreach (string facetOn in searchParams.FacetOn) { SearchParams temp = CopySearchParams(searchParams); temp.PageSize = 1; temp.CursorValueToGetItemsAfter = 0; //var otherFacetOn = temp.FacetOn.Where(fc => !fc.Equals(facetOn)).ToList(); var facets = temp.Facets.Where(fc => !fc.Key.Equals(facetOn)).ToList(); //temp.FacetOn = otherFacetOn; temp.Facets = facets; var searchResultsTemp = await ProductSearchResults(temp, false); var facetToremove = originalResults.Facets.Where(fct => fct.name.Equals(facetOn)).FirstOrDefault(); var facetToadd = searchResultsTemp.Facets.Where(fct => fct.name.Equals(facetOn)).FirstOrDefault(); if (facetToremove != null && facetToadd != null) { originalResults.Facets.Remove(facetToremove); originalResults.Facets.Add(facetToadd); } } return(originalResults); }