Skip to content

Commit f8cced0

Browse files
Merge pull request #100 from CodebreakerApp/79-reports-add-a-filter
79 reports add a filter
2 parents 6de861d + 1271f2f commit f8cced0

5 files changed

Lines changed: 97 additions & 5 deletions

File tree

src/CodeBreaker.Blazor.Client/Pages/ReportsPage.razor

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,26 @@
66
<h2>@Loc["ReportsPage_Title"]</h2>
77

88
<FluentGrid Class="align-items-end">
9-
<FluentGridItem xs="12" md="8">
10-
<FluentDatePicker Class="full-width" Label="@Loc["ReportsPage_SelectDate_Label"]" @bind-Value="@_selectedDate" />
9+
<FluentGridItem xs="12" md="3">
10+
<FluentDatePicker Class="full-width" Label="@Loc["ReportsPage_SelectDate_Label"]" @bind-Value="@_selectedDate" Required />
1111
</FluentGridItem>
12-
<FluentGridItem xs="12" md="4">
13-
<FluentButton Class="full-width" Disabled="_isLoadingGames" OnClick="GetGamesAsync" Loading="_isLoadingGames">@Loc["ReportsPage_LoadGames_Action"]</FluentButton>
12+
<FluentGridItem xs="12" md="3">
13+
<FluentSelect
14+
Label="@Loc["ReportsPage_SelectGameType_Label"]"
15+
Items="_gameTypes"
16+
Class="full-width"
17+
OptionText="@(x => x.Key)"
18+
@bind-Value="_selectedGameTypeKey" />
19+
</FluentGridItem>
20+
<FluentGridItem xs="12" md="3">
21+
<FluentTextField
22+
Class="full-width"
23+
Label="@Loc["ReportsPage_GamerName_Label"]"
24+
Placeholder="@Loc["ReportsPage_GamerName_Placeholder"]"
25+
@bind-Value="_enteredPlayerName" />
26+
</FluentGridItem>
27+
<FluentGridItem xs="12" md="3">
28+
<FluentButton Appearance="Appearance.Accent" Class="full-width" Disabled="_isLoadingGames" OnClick="GetGamesAsync" Loading="_isLoadingGames">@Loc["ReportsPage_LoadGames_Action"]</FluentButton>
1429
</FluentGridItem>
1530
@if (_games is not null && !_isLoadingGames)
1631
{

src/CodeBreaker.Blazor.Client/Pages/ReportsPage.razor.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Extensions.Localization;
77
using Microsoft.FluentUI.AspNetCore.Components;
88
using Microsoft.FluentUI.AspNetCore.Components.Extensions;
9+
using System.Collections.Frozen;
910

1011
namespace CodeBreaker.Blazor.Client.Pages;
1112

@@ -14,6 +15,11 @@ public partial class ReportsPage
1415
private GameInfo[]? _games;
1516
private bool _isLoadingGames = false;
1617
private DateTime? _selectedDate = DateTime.Now;
18+
private string? _selectedGameTypeKey = null;
19+
private string? _enteredPlayerName = null;
20+
private IDictionary<string, GameType?> _gameTypes = null!;
21+
22+
private GameType? SelectedGameType => string.IsNullOrEmpty(_selectedGameTypeKey) ? null : _gameTypes[_selectedGameTypeKey];
1723

1824
[Inject] private IDialogService DialogService { get; set; } = default!;
1925

@@ -25,6 +31,17 @@ public partial class ReportsPage
2531

2632
private string[] Headers => [.. Loc.GetString("ReportsPage_Table_Headers").Value.Split(",")];
2733

34+
protected override void OnInitialized()
35+
{
36+
_gameTypes = new Dictionary<string, GameType?>() {
37+
{ Loc["ReportsPage_GameType_All"], null },
38+
{ "6x4", GameType.Game6x4 },
39+
{ "6x4 Mini", GameType.Game6x4Mini },
40+
{ "8x5", GameType.Game8x5 },
41+
{ "5x5x4", GameType.Game5x5x4 },
42+
}.ToFrozenDictionary();
43+
}
44+
2845
public async Task GetGamesAsync()
2946
{
3047
var date = _selectedDate.ToDateOnly();
@@ -33,7 +50,7 @@ public async Task GetGamesAsync()
3350
_isLoadingGames = true;
3451
try
3552
{
36-
var query = new GamesQuery(Date: date, Ended: true);
53+
var query = new GamesQuery(Date: date, Ended: true, GameType: SelectedGameType, PlayerName: _enteredPlayerName);
3754
var response = await GameClient.GetGamesAsync(query);
3855
Logger?.LogDebug("Got response: {response}", response);
3956
_games = [..response ?? []];

src/CodeBreaker.Blazor.Client/Resources/Resource.Designer.cs

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/CodeBreaker.Blazor.Client/Resources/Resource.de.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,4 +380,16 @@
380380
<data name="GamePage_NameInput_Placeholder" xml:space="preserve">
381381
<value>Wählen Sie Ihren Spielernamen</value>
382382
</data>
383+
<data name="ReportsPage_SelectGameType_Label" xml:space="preserve">
384+
<value>Wähle einen Spieltyp (optional)</value>
385+
</data>
386+
<data name="ReportsPage_GamerName_Label" xml:space="preserve">
387+
<value>Gib einen Spielernamen ein (optional)</value>
388+
</data>
389+
<data name="ReportsPage_GameType_Placeholder" xml:space="preserve">
390+
<value>Alle</value>
391+
</data>
392+
<data name="ReportsPage_GamerName_Placeholder" xml:space="preserve">
393+
<value>Alle</value>
394+
</data>
383395
</root>

src/CodeBreaker.Blazor.Client/Resources/Resource.resx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,4 +392,16 @@
392392
<data name="GamePage_NameInput_Placeholder" xml:space="preserve">
393393
<value>Choose your gamername</value>
394394
</data>
395+
<data name="ReportsPage_SelectGameType_Label" xml:space="preserve">
396+
<value>Select a gametype (optional)</value>
397+
</data>
398+
<data name="ReportsPage_GamerName_Label" xml:space="preserve">
399+
<value>Enter a gamer name (optional)</value>
400+
</data>
401+
<data name="ReportsPage_GameType_All" xml:space="preserve">
402+
<value>All</value>
403+
</data>
404+
<data name="ReportsPage_GamerName_Placeholder" xml:space="preserve">
405+
<value>All</value>
406+
</data>
395407
</root>

0 commit comments

Comments
 (0)