From 8d5a68b49b24b9b820d938971f0cd69867cd998b Mon Sep 17 00:00:00 2001 From: iTob Date: Thu, 19 Sep 2024 19:33:05 +0200 Subject: [PATCH] move filter to switch with badge --- .../Components/Controls/SwitchWithBadge.razor | 11 ++- RBLNews.Shared/Components/Pages/Feeds.razor | 72 +++++++++++++------ RBLNews.Shared/Models/FilterFeedEventArg.cs | 13 ++++ 3 files changed, 71 insertions(+), 25 deletions(-) create mode 100644 RBLNews.Shared/Models/FilterFeedEventArg.cs diff --git a/RBLNews.Shared/Components/Controls/SwitchWithBadge.razor b/RBLNews.Shared/Components/Controls/SwitchWithBadge.razor index 6a3f3ff..6fd9366 100644 --- a/RBLNews.Shared/Components/Controls/SwitchWithBadge.razor +++ b/RBLNews.Shared/Components/Controls/SwitchWithBadge.razor @@ -1,6 +1,7 @@ @using RBLFeederCommon.Enums +@using RBLNews.Shared.Models - + @code { @@ -20,13 +21,17 @@ public int Count { get; set; } [Parameter] - public EventCallback OnClickedCallback { get; set; } + public EventCallback OnFilterChanged { get; set; } Task SwitchChanged(bool value) { this._filter = value; - OnClickedCallback.InvokeAsync(Source); + OnFilterChanged.InvokeAsync(new FilterFeedEventArg + { + Source = this.Source, + Value = value + }); return Task.CompletedTask; } diff --git a/RBLNews.Shared/Components/Pages/Feeds.razor b/RBLNews.Shared/Components/Pages/Feeds.razor index ede84a6..21fb863 100644 --- a/RBLNews.Shared/Components/Pages/Feeds.razor +++ b/RBLNews.Shared/Components/Pages/Feeds.razor @@ -4,6 +4,7 @@ @using RBLFeederCommon.Models.RssFeed @using RBLNews.Shared.Services @using RBLNews.Shared.Components.Controls +@using RBLNews.Shared.Models @inject IFeedDataService feedDataService @inject AppLifecycleService appLifecycleService @@ -19,15 +20,19 @@ else
- @foreach (IGrouping sGrouping in SourceGroupings) - { - - - } +
+ @foreach (IGrouping sGrouping in SourceGroupings) + { +
+ + +
+ } +
@foreach (FeedGroupVM feedGrp in FeedGroups) @@ -37,7 +42,7 @@ else @foreach (FeedVM feed in feedGrp.Feeds) { -
+
@feed.Title @@ -78,7 +83,7 @@ else private IEnumerable> SourceGroupings { get; set; } = new List>(); - private List activeFilters = new List(); + private List activeFeedSources = new List(); protected override void OnInitialized() @@ -89,6 +94,19 @@ else } + private void SetFilter() + { + this.activeFeedSources.Clear(); + + IEnumerable enumerable = this.SourceGroupings.Select(grp => grp.Key).Distinct(); + + foreach (int i in enumerable) + { + this.activeFeedSources.Add((RssFeedSources)i); + } + } + + private async void LoadFeeds() { // Copy feed list to keep original list @@ -99,6 +117,10 @@ else SourceGroupings = listTmp.SelectMany(fg => fg.Feeds.Select(f => f.Source)).GroupBy(sources => sources); + SetFilter(); + + this.FilterFeeds(); + StateHasChanged(); } @@ -126,24 +148,32 @@ else } - private void OnClicked(RssFeedSources source, bool value) + private void OnFilterChanged(FilterFeedEventArg eventArg) { - if (activeFilters.Contains(source)) + if (eventArg.Value && !this.activeFeedSources.Contains(eventArg.Source)) { - activeFilters.Remove(source); + activeFeedSources.Add(eventArg.Source); } - else + else if (this.activeFeedSources.Contains(eventArg.Source)) { - activeFilters.Add(source); + activeFeedSources.Remove(eventArg.Source); } - FeedGroups = new List(); - foreach (FeedGroupVM fg in FeedDataService.Feeds.FeedGroups) + this.FilterFeeds(); + + StateHasChanged(); + } + + + private void FilterFeeds() + { + this.FeedGroups = new List(); + foreach (FeedGroupVM fg in this.FeedDataService.Feeds.FeedGroups) { - List feeds = fg.Feeds.Where(f => activeFilters.Contains((RssFeedSources)f.Source)).ToList(); + List feeds = fg.Feeds.Where(f => this.activeFeedSources.Contains((RssFeedSources)f.Source)).ToList(); if (feeds.Any()) { - FeedGroups.Add( + this.FeedGroups.Add( new FeedGroupVM { Feeds = feeds, @@ -151,8 +181,6 @@ else }); } } - - StateHasChanged(); } diff --git a/RBLNews.Shared/Models/FilterFeedEventArg.cs b/RBLNews.Shared/Models/FilterFeedEventArg.cs new file mode 100644 index 0000000..cb61e7a --- /dev/null +++ b/RBLNews.Shared/Models/FilterFeedEventArg.cs @@ -0,0 +1,13 @@ +using RBLFeederCommon.Enums; + +namespace RBLNews.Shared.Models; + +public class FilterFeedEventArg +{ + public RssFeedSources Source { get; set; } + + /// + /// Value of the switch control + /// + public bool Value { get; set; } +} \ No newline at end of file