public virtual async Task <ProductSearchResult> SearchProductAsync(SearchCriteria criteria) { if (criteria == null) { throw new ArgumentNullException(nameof(criteria)); } if (criteria.CultureInfo == null) { throw new ArgumentException(GetMessageOfNull(nameof(criteria.CultureInfo)), nameof(criteria)); } if (string.IsNullOrWhiteSpace(criteria.Scope)) { throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(criteria.Scope)), nameof(criteria)); } var request = CreateSearchRequest(criteria); var results = await ExecuteProductSearchRequestAsync(request).ConfigureAwait(false); if (results?.Facets == null) { return(results); } var facetsToQuery = GetFacetFieldNameToQuery(criteria); results.Facets.RemoveAll(facet => !facetsToQuery.Contains(facet.FieldName)); if (criteria.SelectedFacets.Count == 0) { return(results); } var param = new RemoveSelectedFacetsFromFacetsParam { Facets = results.Facets, SelectedFacets = criteria.SelectedFacets, FacetSettings = FacetConfigContext.GetFacetSettings() }; results.Facets = RemoveSelectedFacetsFromFacets(param); return(results); }
protected virtual List <Facet> RemoveSelectedFacetsFromFacets(RemoveSelectedFacetsFromFacetsParam param) { var strippedFacets = new List <Facet>(); var facets = param.Facets; var selectedFacets = param.SelectedFacets; var facetSettings = param.FacetSettings; foreach (var facet in facets) { var facetSetting = facetSettings.FirstOrDefault(setting => setting.FieldName == facet.FieldName); if (facetSetting?.FacetType == Facets.FacetType.MultiSelect || selectedFacets.Find(selectedFacet => selectedFacet.Name == facet.FieldName) == null) { strippedFacets.Add(facet); } } return(strippedFacets); }