@using System.Web @using BTCPayServer.TagHelpers @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) .Where(e => e.Value != null) .GroupBy(e => e.Key) .ToDictionary(g => g.Key, g => g.First().Value); } return ReplaceQueryParameters(query); } string ReplaceQueryParameters(Dictionary query) { var uri = new Uri(ViewContext.HttpContext.Request.GetCurrentUrlWithQueryString()); var queryParams = HttpUtility.ParseQueryString(uri.Query); foreach (var (key, value) in query) { if (value != null) queryParams[key] = value?.ToString(); } var uriBuilder = new UriBuilder(uri) { Query = queryParams.ToString()! }; return uriBuilder.ToString(); } }