From e70a8dda6e069660942e82beff6395db9ed0d130 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Zieli=C5=84ski?= Date: Tue, 2 Dec 2025 13:23:03 +0100 Subject: [PATCH] Remember list filters --- .../Components/DataInboxListComponent.razor.cs | 4 ++++ .../Components/LayerListComponent.razor.cs | 6 +++++- .../Extensions/ServiceCollectionExtensions.cs | 4 ++++ DiunaBI.UI.Shared/Pages/LayerDetailPage.razor | 1 + .../Pages/LayerDetailPage.razor.cs | 5 +++++ .../Services/DataInboxFilterStateService.cs | 18 ++++++++++++++++++ .../Services/LayerFilterStateService.cs | 18 ++++++++++++++++++ 7 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 DiunaBI.UI.Shared/Services/DataInboxFilterStateService.cs create mode 100644 DiunaBI.UI.Shared/Services/LayerFilterStateService.cs diff --git a/DiunaBI.UI.Shared/Components/DataInboxListComponent.razor.cs b/DiunaBI.UI.Shared/Components/DataInboxListComponent.razor.cs index 6209ba5..64ef64d 100644 --- a/DiunaBI.UI.Shared/Components/DataInboxListComponent.razor.cs +++ b/DiunaBI.UI.Shared/Components/DataInboxListComponent.razor.cs @@ -11,6 +11,7 @@ public partial class DataInboxListComponent : ComponentBase [Inject] private DataInboxService DataInboxService { get; set; } = default!; [Inject] private ISnackbar Snackbar { get; set; } = default!; [Inject] private NavigationManager NavigationManager { get; set; } = default!; + [Inject] private DataInboxFilterStateService FilterStateService { get; set; } = default!; private PagedResult dataInbox = new(); @@ -19,6 +20,7 @@ public partial class DataInboxListComponent : ComponentBase protected override async Task OnInitializedAsync() { + filterRequest = FilterStateService.FilterRequest; await LoadDataInbox(); } @@ -28,6 +30,7 @@ public partial class DataInboxListComponent : ComponentBase try { + FilterStateService.UpdateFilter(filterRequest); dataInbox = await DataInboxService.GetDataInboxAsync(filterRequest); } catch (Exception ex) @@ -55,6 +58,7 @@ public partial class DataInboxListComponent : ComponentBase private async Task ClearFilters() { filterRequest = new DataInboxFilterRequest(); + FilterStateService.ClearFilter(); await LoadDataInbox(); } diff --git a/DiunaBI.UI.Shared/Components/LayerListComponent.razor.cs b/DiunaBI.UI.Shared/Components/LayerListComponent.razor.cs index 8e923a5..28ad763 100644 --- a/DiunaBI.UI.Shared/Components/LayerListComponent.razor.cs +++ b/DiunaBI.UI.Shared/Components/LayerListComponent.razor.cs @@ -11,14 +11,16 @@ public partial class LayerListComponent : ComponentBase [Inject] private LayerService LayerService { get; set; } = default!; [Inject] private ISnackbar Snackbar { get; set; } = default!; [Inject] private NavigationManager NavigationManager { get; set; } = default!; + [Inject] private LayerFilterStateService FilterStateService { get; set; } = default!; private PagedResult layers = new(); private LayerFilterRequest filterRequest = new(); private bool isLoading = false; - + protected override async Task OnInitializedAsync() { + filterRequest = FilterStateService.FilterRequest; await LoadLayers(); } @@ -28,6 +30,7 @@ public partial class LayerListComponent : ComponentBase try { + FilterStateService.UpdateFilter(filterRequest); layers = await LayerService.GetLayersAsync(filterRequest); } catch (Exception ex) @@ -55,6 +58,7 @@ public partial class LayerListComponent : ComponentBase private async Task ClearFilters() { filterRequest = new LayerFilterRequest(); + FilterStateService.ClearFilter(); await LoadLayers(); } diff --git a/DiunaBI.UI.Shared/Extensions/ServiceCollectionExtensions.cs b/DiunaBI.UI.Shared/Extensions/ServiceCollectionExtensions.cs index 45877fe..9f8fbba 100644 --- a/DiunaBI.UI.Shared/Extensions/ServiceCollectionExtensions.cs +++ b/DiunaBI.UI.Shared/Extensions/ServiceCollectionExtensions.cs @@ -39,6 +39,10 @@ public static class ServiceCollectionExtensions services.AddScoped(); services.AddScoped(); + // Filter state services (scoped to maintain state during user session) + services.AddScoped(); + services.AddScoped(); + return services; } } \ No newline at end of file diff --git a/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor b/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor index fe6043d..5aae0b1 100644 --- a/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor +++ b/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor @@ -21,6 +21,7 @@ { Process Layer } + Back to List diff --git a/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor.cs b/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor.cs index b079785..72b9b0c 100644 --- a/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor.cs +++ b/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor.cs @@ -148,6 +148,11 @@ public partial class LayerDetailPage : ComponentBase Snackbar.Add("Process layer functionality coming soon", Severity.Error); } + private void GoBack() + { + NavigationManager.NavigateTo("/layers"); + } + // Record editing methods private void StartEdit(RecordDto record) { diff --git a/DiunaBI.UI.Shared/Services/DataInboxFilterStateService.cs b/DiunaBI.UI.Shared/Services/DataInboxFilterStateService.cs new file mode 100644 index 0000000..758a1d8 --- /dev/null +++ b/DiunaBI.UI.Shared/Services/DataInboxFilterStateService.cs @@ -0,0 +1,18 @@ +using DiunaBI.Application.DTOModels; + +namespace DiunaBI.UI.Shared.Services; + +public class DataInboxFilterStateService +{ + public DataInboxFilterRequest FilterRequest { get; set; } = new(); + + public void UpdateFilter(DataInboxFilterRequest request) + { + FilterRequest = request; + } + + public void ClearFilter() + { + FilterRequest = new DataInboxFilterRequest(); + } +} diff --git a/DiunaBI.UI.Shared/Services/LayerFilterStateService.cs b/DiunaBI.UI.Shared/Services/LayerFilterStateService.cs new file mode 100644 index 0000000..a0f3385 --- /dev/null +++ b/DiunaBI.UI.Shared/Services/LayerFilterStateService.cs @@ -0,0 +1,18 @@ +using DiunaBI.Application.DTOModels; + +namespace DiunaBI.UI.Shared.Services; + +public class LayerFilterStateService +{ + public LayerFilterRequest FilterRequest { get; set; } = new(); + + public void UpdateFilter(LayerFilterRequest request) + { + FilterRequest = request; + } + + public void ClearFilter() + { + FilterRequest = new LayerFilterRequest(); + } +}