From f3700c39e33964482bb3d415580983974c1bd06d Mon Sep 17 00:00:00 2001 From: "nicolas.dorier" Date: Fri, 17 Jul 2020 13:24:41 +0900 Subject: [PATCH 1/2] Save the latest search on invoices --- .../Controllers/InvoiceController.UI.cs | 33 +++++++++++++++++-- .../Views/Invoice/ListInvoices.cshtml | 2 +- 2 files changed, 32 insertions(+), 3 deletions(-) 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..418229fb2 100644 --- a/BTCPayServer/Views/Invoice/ListInvoices.cshtml +++ b/BTCPayServer/Views/Invoice/ListInvoices.cshtml @@ -1,4 +1,4 @@ -@model InvoicesModel +@model InvoicesModel @{ ViewData["Title"] = "Invoices"; } From 9fb83f268bd1d063c9b1e700fe94e0a1f7698452 Mon Sep 17 00:00:00 2001 From: rockstardev Date: Fri, 17 Jul 2020 04:32:33 -0500 Subject: [PATCH 2/2] Fixing Unfiltered link to leverage empty string for clear --- BTCPayServer/Views/Invoice/ListInvoices.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BTCPayServer/Views/Invoice/ListInvoices.cshtml b/BTCPayServer/Views/Invoice/ListInvoices.cshtml index 418229fb2..1556cebc7 100644 --- a/BTCPayServer/Views/Invoice/ListInvoices.cshtml +++ b/BTCPayServer/Views/Invoice/ListInvoices.cshtml @@ -79,7 +79,7 @@ Last 7 days - Unfiltered + Unfiltered