diff --git a/BTCPayServer/Controllers/InvoiceController.UI.cs b/BTCPayServer/Controllers/InvoiceController.UI.cs index ed13cc3f5..572cc248a 100644 --- a/BTCPayServer/Controllers/InvoiceController.UI.cs +++ b/BTCPayServer/Controllers/InvoiceController.UI.cs @@ -29,6 +29,7 @@ using Microsoft.EntityFrameworkCore; using NBitcoin; using NBitpayClient; using NBXplorer; +using Newtonsoft.Json; using Newtonsoft.Json.Linq; using StoreData = BTCPayServer.Data.StoreData; @@ -597,12 +598,40 @@ namespace BTCPayServer.Controllers return Ok("{}"); } + public class InvoicePreference + { + public int? TimezoneOffset { get; set; } + public string SearchTerm { get; set; } + } + [HttpGet] [Route("invoices")] [Authorize(AuthenticationSchemes = AuthenticationSchemes.Cookie)] [BitpayAPIConstraint(false)] - public async Task ListInvoices(string searchTerm = null, int skip = 0, int count = 50, int timezoneOffset = 0) + public async Task ListInvoices(string searchTerm = null, int skip = 0, int count = 50, int? timezoneOffset = null) { + // If the user enter an empty searchTerm, then the variable will be null and not empty string + // but we want searchTerm to be null only if the user is browsing the page via some link + // NOT if the user entered some empty search + searchTerm = searchTerm is string ? searchTerm : + this.Request.Query.ContainsKey(nameof(searchTerm)) ? string.Empty : + null; + if (searchTerm is null) + { + if (this.Request.Cookies.TryGetValue("ListInvoicePreferences", out var str)) + { + var preferences = JsonConvert.DeserializeObject(str); + searchTerm = preferences.SearchTerm; + timezoneOffset = timezoneOffset is int v ? v : preferences.TimezoneOffset; + } + } + else + { + var preferences = new InvoicePreference(); + preferences.SearchTerm = searchTerm; + preferences.TimezoneOffset = timezoneOffset; + this.Response.Cookies.Append("ListInvoicePreferences", JsonConvert.SerializeObject(preferences)); + } var fs = new SearchString(searchTerm); var storeIds = fs.GetFilterArray("storeid") != null ? fs.GetFilterArray("storeid") : new List().ToArray(); @@ -614,7 +643,7 @@ namespace BTCPayServer.Controllers StoreIds = storeIds, TimezoneOffset = timezoneOffset }; - InvoiceQuery invoiceQuery = GetInvoiceQuery(searchTerm, timezoneOffset); + InvoiceQuery invoiceQuery = GetInvoiceQuery(searchTerm, timezoneOffset ?? 0); var counting = _InvoiceRepository.GetInvoicesTotal(invoiceQuery); invoiceQuery.Count = count; invoiceQuery.Skip = skip; diff --git a/BTCPayServer/Views/Invoice/ListInvoices.cshtml b/BTCPayServer/Views/Invoice/ListInvoices.cshtml index b42d98b08..1556cebc7 100644 --- a/BTCPayServer/Views/Invoice/ListInvoices.cshtml +++ b/BTCPayServer/Views/Invoice/ListInvoices.cshtml @@ -1,4 +1,4 @@ -@model InvoicesModel +@model InvoicesModel @{ ViewData["Title"] = "Invoices"; } @@ -79,7 +79,7 @@ Last 7 days - Unfiltered + Unfiltered