From e8b3cd1e0ad4694f46534976577dc82a436cea6c Mon Sep 17 00:00:00 2001 From: Tobias Wohlleben Date: Wed, 18 Sep 2024 17:19:01 +0200 Subject: [PATCH] filter buttons --- RBLNews.Maui/RBLNews.Maui.csproj | 4 +- .../Controls/BadgeWithCounter.razor | 38 ++++++++++++++ RBLNews.Shared/Components/Pages/Feeds.razor | 49 +++++++++++++++++-- RBLNews.Shared/wwwroot/css/app.css | 6 ++- 4 files changed, 89 insertions(+), 8 deletions(-) create mode 100644 RBLNews.Shared/Components/Controls/BadgeWithCounter.razor diff --git a/RBLNews.Maui/RBLNews.Maui.csproj b/RBLNews.Maui/RBLNews.Maui.csproj index 534e0e3..bdcb172 100644 --- a/RBLNews.Maui/RBLNews.Maui.csproj +++ b/RBLNews.Maui/RBLNews.Maui.csproj @@ -21,10 +21,10 @@ enable - RBLNews.Maui + RBL News - com.companyname.rblnews.maui + com.wohlleben.rblnews.app 1.0 diff --git a/RBLNews.Shared/Components/Controls/BadgeWithCounter.razor b/RBLNews.Shared/Components/Controls/BadgeWithCounter.razor new file mode 100644 index 0000000..85da339 --- /dev/null +++ b/RBLNews.Shared/Components/Controls/BadgeWithCounter.razor @@ -0,0 +1,38 @@ +@using RBLFeederCommon.Enums +@if (ShowCount) +{ + +} +else +{ + +} + +@code { + + [Parameter] + public RssFeedSources Source { get; set; } + + [Parameter] + public string Text { get; set; } + + [Parameter] + public bool ShowCount { get; set; } + + [Parameter] + public int Count { get; set; } + + [Parameter] + public EventCallback OnClickedCallback { get; set; } + + protected override void OnInitialized() + { + base.OnInitialized(); + } + + private async Task OnClicked() + { + await OnClickedCallback.InvokeAsync(Source); + } + +} diff --git a/RBLNews.Shared/Components/Pages/Feeds.razor b/RBLNews.Shared/Components/Pages/Feeds.razor index d6beea3..61a1518 100644 --- a/RBLNews.Shared/Components/Pages/Feeds.razor +++ b/RBLNews.Shared/Components/Pages/Feeds.razor @@ -2,24 +2,31 @@ @page "/" @using RBLFeederCommon.Enums @using RBLFeederCommon.Models.RssFeed +@using RBLNews.Shared.Components.Controls @using RBLNews.Shared.Services @inject IFeedDataService feedDataService @inject AppLifecycleService appLifecycleService -@if (FeedDataService.Feeds == null) +@if (FeedGroups == null) {
- Lade Feeds ...

+ Lade Feeds ...

} else { -
+
- @foreach (FeedGroupVM feedGrp in this.FeedDataService.Feeds.FeedGroups) +
+ @foreach (IGrouping sGrouping in SourceGroupings) + { + @* *@ + } +
+ @foreach (FeedGroupVM feedGrp in FeedGroups) {

@feedGrp.PublishDate.ToLocalTime().ToString("dd.MM.yyyy")

@foreach (FeedVM feed in feedGrp.Feeds) @@ -50,13 +57,17 @@ else
} @code { - + [Inject] private IFeedDataService FeedDataService { get; set; } [Inject] private AppLifecycleService AppLifecycleService { get; set; } + private List? FeedGroups { get; set; } + + private IEnumerable> SourceGroupings { get; set; } = new List>(); + protected override void OnInitialized() { AppLifecycleService.OnActivated = LoadFeeds; @@ -66,7 +77,14 @@ else private async void LoadFeeds() { + // Copy feed list to keep original list await FeedDataService.LoadFeeds(); + FeedGroups = [..FeedDataService.Feeds.FeedGroups]; + + List listTmp = [.. FeedDataService.Feeds.FeedGroups]; + + SourceGroupings = listTmp.SelectMany(fg => fg.Feeds.Select(f => f.Source)).GroupBy(sources => sources); + StateHasChanged(); } @@ -91,5 +109,26 @@ else return "?"; } } + + private void OnClicked(RssFeedSources source) + { + FeedGroups = new List(); + + foreach (FeedGroupVM fg in FeedDataService.Feeds.FeedGroups) + { + List feeds = fg.Feeds.Where(f => (RssFeedSources)f.Source == source).ToList(); + if (feeds.Any()) + { + FeedGroups.Add(new FeedGroupVM + { + Feeds = feeds, + PublishDate = fg.PublishDate + }); + + } + } + + StateHasChanged(); + } } diff --git a/RBLNews.Shared/wwwroot/css/app.css b/RBLNews.Shared/wwwroot/css/app.css index f465b47..7abf838 100644 --- a/RBLNews.Shared/wwwroot/css/app.css +++ b/RBLNews.Shared/wwwroot/css/app.css @@ -214,7 +214,11 @@ nav .top-row { } } -#feeds-page h4, h5{ +.FilterButtons { + margin: 10px; +} + +#feeds-page h4, h5 { color: rgb(221, 7, 65) !important; text-transform: uppercase; }