From d2151d347de12dd077857b0c53914bf566865a16 Mon Sep 17 00:00:00 2001 From: jschick04 Date: Fri, 5 Jan 2024 19:38:58 -0600 Subject: [PATCH] Applying filters from filter group modal will apply filters with highlighting --- .../Store/FilterColor/FilterColorAction.cs | 2 + .../Store/FilterColor/FilterColorReducers.cs | 50 +++++++++++++++++++ .../Store/FilterPane/FilterPaneEffects.cs | 9 ++++ .../Store/FilterPane/FilterPaneReducers.cs | 32 ++++++------ .../Components/Filters/FilterGroupModal.razor | 6 +-- .../Filters/FilterGroupModal.razor.cs | 5 +- 6 files changed, 82 insertions(+), 22 deletions(-) diff --git a/src/EventLogExpert.UI/Store/FilterColor/FilterColorAction.cs b/src/EventLogExpert.UI/Store/FilterColor/FilterColorAction.cs index a049bb7e..eca69628 100644 --- a/src/EventLogExpert.UI/Store/FilterColor/FilterColorAction.cs +++ b/src/EventLogExpert.UI/Store/FilterColor/FilterColorAction.cs @@ -12,4 +12,6 @@ public sealed record ClearAllFilters; public sealed record RemoveFilter(Guid Id); public sealed record SetFilter(FilterModel Filter); + + public sealed record SetFilters(IEnumerable Filters); } diff --git a/src/EventLogExpert.UI/Store/FilterColor/FilterColorReducers.cs b/src/EventLogExpert.UI/Store/FilterColor/FilterColorReducers.cs index 59e6c006..57916380 100644 --- a/src/EventLogExpert.UI/Store/FilterColor/FilterColorReducers.cs +++ b/src/EventLogExpert.UI/Store/FilterColor/FilterColorReducers.cs @@ -44,4 +44,54 @@ public static FilterColorState ReduceSetFilter(FilterColorState state, FilterCol }) }; } + + [ReducerMethod] + public static FilterColorState ReduceSetFilters(FilterColorState state, FilterColorAction.SetFilters action) + { + if (state.Filters.IsEmpty) + { + return state with + { + Filters = state.Filters.AddRange( + action.Filters.Select(filter => + new FilterColorModel + { + Id = filter.Id, + Color = filter.Color, + Comparison = filter.Comparison with { } + })) + }; + } + + var updatedFilters = state.Filters; + + foreach (var newFilter in action.Filters) + { + foreach (var filter in state.Filters) + { + if (filter.Id == newFilter.Id) + { + updatedFilters = updatedFilters + .Remove(filter) + .Add(filter with + { + Color = newFilter.Color, + Comparison = newFilter.Comparison with { } + }); + } + else + { + updatedFilters = updatedFilters.Add( + new FilterColorModel + { + Id = newFilter.Id, + Color = newFilter.Color, + Comparison = newFilter.Comparison with { } + }); + } + } + } + + return state with { Filters = updatedFilters }; + } } diff --git a/src/EventLogExpert.UI/Store/FilterPane/FilterPaneEffects.cs b/src/EventLogExpert.UI/Store/FilterPane/FilterPaneEffects.cs index 2cad032a..e4c26eab 100644 --- a/src/EventLogExpert.UI/Store/FilterPane/FilterPaneEffects.cs +++ b/src/EventLogExpert.UI/Store/FilterPane/FilterPaneEffects.cs @@ -55,6 +55,15 @@ public async Task HandleAddCachedFilter(FilterPaneAction.AddCachedFilter action, dispatcher.Dispatch(new FilterColorAction.SetFilter(action.FilterModel)); } + [EffectMethod(typeof(FilterPaneAction.ApplyFilterGroup))] + public async Task HandleApplyFilterGroup(IDispatcher dispatcher) + { + await UpdateEventTableFiltersAsync(filterPaneState.Value, dispatcher); + + dispatcher.Dispatch(new FilterColorAction.SetFilters( + filterPaneState.Value.AdvancedFilters.Where(filter => filter is { IsEditing: false, IsEnabled: true }))); + } + [EffectMethod(typeof(FilterPaneAction.ClearAllFilters))] public async Task HandleClearAllFilters(IDispatcher dispatcher) { diff --git a/src/EventLogExpert.UI/Store/FilterPane/FilterPaneReducers.cs b/src/EventLogExpert.UI/Store/FilterPane/FilterPaneReducers.cs index 0e89d421..e5bdca84 100644 --- a/src/EventLogExpert.UI/Store/FilterPane/FilterPaneReducers.cs +++ b/src/EventLogExpert.UI/Store/FilterPane/FilterPaneReducers.cs @@ -64,8 +64,23 @@ public static FilterPaneState ReduceAddSubFilter(FilterPaneState state, FilterPa return state with { BasicFilters = [.. updatedList] }; } + [ReducerMethod] + public static FilterPaneState ReduceApplyFilterGroup(FilterPaneState state, FilterPaneAction.ApplyFilterGroup action) + { + if (!action.FilterGroup.Filters.Any()) { return state; } + + List updatedList = []; + + foreach (var filter in action.FilterGroup.Filters) + { + updatedList.Add(filter with { IsEnabled = true }); + } + + return state with { AdvancedFilters = state.AdvancedFilters.AddRange(updatedList) }; + } + [ReducerMethod(typeof(FilterPaneAction.ClearAllFilters))] - public static FilterPaneState ReduceClearFilters(FilterPaneState state) => new(); + public static FilterPaneState ReduceClearFilters(FilterPaneState state) => new() { IsEnabled = state.IsEnabled }; [ReducerMethod] public static FilterPaneState ReduceRemoveAdvancedFilter( @@ -265,19 +280,4 @@ public static FilterPaneState ReduceToggleIsEnabled(FilterPaneState state) => [ReducerMethod(typeof(FilterPaneAction.ToggleIsLoading))] public static FilterPaneState ReduceToggleIsLoading(FilterPaneState state) => state with { IsLoading = !state.IsLoading }; - - [ReducerMethod] - public FilterPaneState ReduceApplyFilterGroup(FilterPaneState state, FilterPaneAction.ApplyFilterGroup action) - { - if (!action.FilterGroup.Filters.Any()) { return state; } - - List updatedList = []; - - foreach (var filter in action.FilterGroup.Filters) - { - updatedList.Add(filter); - } - - return state with { AdvancedFilters = state.AdvancedFilters.AddRange(updatedList) }; - } } diff --git a/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor b/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor index 00e951d3..a1a6e32e 100644 --- a/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor +++ b/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor @@ -1,5 +1,4 @@ @using EventLogExpert.Shared.Base -@using EventLogExpert.UI @inherits BaseModal @@ -19,10 +18,7 @@ @foreach (var filter in group.Filters) {
- @if (filter.Color != FilterColor.None) - { -
- } +
@filter.Comparison.Value
} diff --git a/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor.cs b/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor.cs index ddaa8c8a..6dddd8b1 100644 --- a/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor.cs +++ b/src/EventLogExpert/Shared/Components/Filters/FilterGroupModal.razor.cs @@ -23,8 +23,11 @@ protected override void OnInitialized() base.OnInitialized(); } - private void ApplyFilters(FilterGroupModel model) => + private void ApplyFilters(FilterGroupModel model) + { Dispatcher.Dispatch(new FilterPaneAction.ApplyFilterGroup(model)); + Close().AndForget(); + } private void CreateGroup() => Dispatcher.Dispatch(new FilterGroupAction.AddGroup());