public TParameters ForPage(int page)
 {
     if (!HasPage(page)) return null;
     var p = QueryStringParser<TParameters>.Copy(_parameters);
     p.Page = page;
     return p;
 }
        public TParameters NextPage()
        {
	        if (!HasNextPage) return null;
            var p = QueryStringParser<TParameters>.Copy(_parameters);
	        p.Page += 1;
	        return p;
	    }
	    public TParameters PreviousPage()
	    {
	        if (!HasPreviousPage) return null;
	        var p = QueryStringParser<TParameters>.Copy(_parameters);
	        p.Page -= 1;
	        return p;
        }
        public TParameters FirstPage()
        {
            var p = QueryStringParser <TParameters> .Copy(_parameters);

            p.Page = 1;
            return(p);
        }
        public TParameters LastPage()
        {
            var p = QueryStringParser <TParameters> .Copy(_parameters);

            p.Page = (int)Pages;
            return(p);
        }
Esempio n. 6
0
        protected AggregationFilterModel <TParameters> SignificantTermsFilterFor(string filterName)
        {
            var propertyInfo = ParameterPropertyCache.FirstOrDefault(c => c.Key == filterName);

            if (string.IsNullOrWhiteSpace(propertyInfo.Key))
            {
                throw new ArgumentOutOfRangeException(nameof(filterName), $"Unable to find parameter named '{filterName}', ensure that either the parameters has a matching property or that a JsonProperty attribute is assigned");
            }

            var filterValue = propertyInfo.Value.GetValue(Parameters);

            var model = new AggregationFilterModel <TParameters>();
            var agg   = AggregationHelper.SignificantTerms(filterName);

            if (agg == null)
            {
                return(model);
            }

            model.Name        = filterName;
            model.Meta        = agg.Meta;
            model.Type        = agg.SearchifyAggregationType();
            model.DisplayName = agg.SearchifyDisplayName() ?? model.Name;

            model.Items = agg.Buckets.Select(item =>
            {
                var parameters = QueryStringParser <TParameters> .Copy(Parameters);

                var term  = item.Key;
                var value = item.Key;

                if (FilterField.TryParse(item.Key, out FilterField filterField))
                {
                    term  = filterField.Text;
                    value = filterField.Value;
                }

                var isSelected = value.Equals(filterValue);

                if (propertyInfo.Value != null)
                {
                    var convertablePropertyInfo = Nullable.GetUnderlyingType(propertyInfo.Value.PropertyType) ??
                                                  propertyInfo.Value.PropertyType;
                    propertyInfo.Value.SetValue(parameters,
                                                isSelected ? null : Convert.ChangeType(value, convertablePropertyInfo));
                }

                return(new TermFilterItemModel <TParameters>()
                {
                    Term = term,
                    Value = value,
                    DocCount = item.DocCount,
                    Selected = isSelected,
                    Parameters = parameters
                });
            }).ToList();

            return(model);
        }
        public TParameters ForPage(int page)
        {
            if (!HasPage(page))
            {
                return(null);
            }
            var p = QueryStringParser <TParameters> .Copy(_parameters);

            p.Page = page;
            return(p);
        }
        public TParameters PreviousPage()
        {
            if (!HasPreviousPage)
            {
                return(null);
            }
            var p = QueryStringParser <TParameters> .Copy(_parameters);

            p.Page -= 1;
            return(p);
        }
        public TParameters NextPage()
        {
            if (!HasNextPage)
            {
                return(null);
            }
            var p = QueryStringParser <TParameters> .Copy(_parameters);

            p.Page += 1;
            return(p);
        }
Esempio n. 10
0
        protected AggregationFilterModel <TParameters> MultiTermFilterFor(string filterName)
        {
            var propertyInfo = ParameterPropertyCache.FirstOrDefault(c => c.Key == filterName);

            if (string.IsNullOrWhiteSpace(propertyInfo.Key))
            {
                throw new ArgumentOutOfRangeException(nameof(filterName), $"Unable to find parameter named '{filterName}', ensure that either the parameters has a matching property or that a JsonProperty attribute is assigned");
            }

            var filterValue = ((IEnumerable <string>)propertyInfo.Value.GetValue(Parameters))?.ToList() ?? Enumerable.Empty <string>();

            var model = new AggregationFilterModel <TParameters>();
            var agg   = AggregationHelper.Terms(filterName);

            if (agg == null)
            {
                return(model);
            }

            model.Name        = filterName;
            model.Meta        = agg.Meta;
            model.Type        = agg.SearchifyAggregationType();
            model.DisplayName = agg.SearchifyDisplayName() ?? model.Name;

            model.Items = agg.Buckets.Select(item =>
            {
                var parameters = QueryStringParser <TParameters> .Copy(Parameters);

                var term  = item.Key;
                var value = item.Key;

                if (FilterField.TryParse(item.Key, out FilterField filterField))
                {
                    term  = filterField.Text;
                    value = filterField.Value;
                }

                var filterValueList = new HashSet <string>(filterValue);

                var isSelected = filterValue.Contains(value);

                if (isSelected)
                {
                    filterValueList.Remove(value);
                }
                else
                {
                    filterValueList.Add(value);
                }

                propertyInfo.Value.SetValue(parameters, filterValueList);

                return(new TermFilterItemModel <TParameters>()
                {
                    Term = term,
                    Value = value,
                    DocCount = item.DocCount,
                    Selected = isSelected,
                    Parameters = parameters
                });
            }).ToList();

            return(model);
        }