protected virtual Aggregation GetRangeAggregation(RangeFilter rangeFilter, IList <AggregationResponse> aggregationResponses) { var result = new Aggregation { AggregationType = "range", Field = rangeFilter.Key, Items = GetRangeAggregationItems(rangeFilter.Key, rangeFilter.Values, aggregationResponses), }; return(result); }
public static webModel.Aggregation ToWebModel(this coreModel.Aggregation aggregation) { var result = new webModel.Aggregation(); result.InjectFrom(aggregation); if (aggregation.Items != null) { result.Items = aggregation.Items.Select(i => i.ToWebModel()).ToArray(); } return result; }
protected virtual Aggregation GetAttributeAggregation(AttributeFilter attributeFilter, IList <AggregationResponse> aggregationResponses) { var result = new Aggregation { AggregationType = "attr", Field = attributeFilter.Key, Labels = attributeFilter.DisplayNames ?.Select(d => new AggregationLabel { Language = d.Language, Label = d.Name }) .ToArray(), }; var aggregationId = attributeFilter.Key; var aggregationResponse = aggregationResponses.FirstOrDefault(a => a.Id.EqualsInvariant(aggregationId)); if (aggregationResponse != null) { if (attributeFilter.Values == null) { // Return all values result.Items = aggregationResponse.Values.Select(v => new AggregationItem { Value = v.Id, Count = (int)v.Count }).ToArray(); } else { // Return predefined values with localization var aggregationItems = new List <AggregationItem>(); foreach (var group in attributeFilter.Values.GroupBy(v => v.Id)) { var value = aggregationResponse.Values.FirstOrDefault(v => v.Id.EqualsInvariant(group.Key)); if (value != null) { var valueLabels = group.GetValueLabels(); var aggregationItem = new AggregationItem { Value = value.Id, Count = (int)value.Count, Labels = valueLabels }; aggregationItems.Add(aggregationItem); } } if (aggregationItems.Any()) { result.Items = aggregationItems; } } } return(result); }
public static webModel.Aggregation ToWebModel(this coreModel.Aggregation aggregation) { var result = new webModel.Aggregation(); result.InjectFrom(aggregation); if (aggregation.Items != null) { result.Items = aggregation.Items.Select(i => i.ToWebModel()).ToArray(); } return(result); }
public static webModel.Aggregation ToWebModel(this coreModel.Aggregation aggregation) { var result = new webModel.Aggregation(); result.AggregationType = aggregation.AggregationType; result.Field = aggregation.Field; if (aggregation.Items != null) { result.Items = aggregation.Items.Select(i => i.ToWebModel()).ToArray(); } if (aggregation.Labels != null) { result.Labels = aggregation.Labels.Select(ToWebModel).ToArray(); } return(result); }
protected override Aggregation[] ConvertAggregations(IList <AggregationResponse> aggregationResponses, ProductSearchCriteria criteria) { var result = new List <Aggregation>(); var browseFilters = GetBrowseFilters(criteria); if (browseFilters != null && aggregationResponses?.Any() == true) { foreach (var filter in browseFilters) { Aggregation aggregation = null; var attributeFilter = filter as AttributeFilter; var rangeFilter = filter as RangeFilter; var priceRangeFilter = filter as PriceRangeFilter; if (attributeFilter != null) { aggregation = GetAttributeAggregation(attributeFilter, aggregationResponses); } else if (rangeFilter != null) { aggregation = GetRangeAggregation(rangeFilter, aggregationResponses); } else if (priceRangeFilter != null) { aggregation = GetPriceRangeAggregation(priceRangeFilter, aggregationResponses); } if (aggregation?.Items?.Any() == true) { result.Add(aggregation); } } } return(result.ToArray()); }