@model BasePagingViewModel
@{
var pageSizeOptions = new[] { 50, 100, 250, 500 };
}
@if (Model.Total is null || Model.Total.Value > pageSizeOptions.Min())
{
}
@{
string NavigatePages(int prevNext, int count)
{
var skip = Model.Skip;
if (prevNext == -1)
{
skip = Math.Max(0, Model.Skip - Model.Count);
}
else if (prevNext == 1)
{
skip = Model.Skip + count;
}
var query = new Dictionary
{
{ "searchTerm", Model.SearchTerm },
{ "timezoneOffset", Model.TimezoneOffset },
{ "skip", skip },
{ "count", count }
};
if (Model.PaginationQuery != null)
{
// merge both, preferring the `query` properties in case of duplicate keys
query = query.Concat(Model.PaginationQuery)
.GroupBy(e => e.Key)
.ToDictionary(g => g.Key, g => g.First().Value);
}
return Url.Action(null, query);
}
}