KoogleApp/src/GoodWood.Web/Components/Game/CompletedGamesList.razor

144 lines
4.6 KiB
Plaintext

@using Fluxor
@using GoodWood.Domain.Enums
@using GoodWood.Web.Store.GameState
@using MudBlazor
@inherits Fluxor.Blazor.Web.Components.FluxorComponent
@inject IState<GameState> GameState
@inject IDispatcher Dispatcher
<MudPaper Class="pa-4">
<MudStack Row="true" AlignItems="AlignItems.Center" Justify="Justify.SpaceBetween" Class="mb-4">
<MudStack Row="true" AlignItems="AlignItems.Center" Spacing="2">
<MudIcon Icon="@Icons.Material.Filled.History" />
<MudText Typo="Typo.h6">Abgeschlossene Spiele</MudText>
</MudStack>
@if (GameState.Value.CompletedGames.Count > 0)
{
<MudChip T="string" Size="Size.Small" Color="Color.Default">
@GameState.Value.CompletedGames.Count
</MudChip>
}
</MudStack>
@if (GameState.Value.IsLoading)
{
<MudProgressLinear Indeterminate="true" Class="mb-4" />
}
@if (GameState.Value.CompletedGames.Count == 0)
{
<MudAlert Severity="Severity.Info" Dense="true">
Noch keine abgeschlossenen Spiele an diesem Spieltag.
</MudAlert>
}
else
{
<MudTable Items="@GameState.Value.CompletedGames"
Dense="true"
Hover="true"
Striped="true"
Breakpoint="Breakpoint.Sm">
<HeaderContent>
<MudTh>Spieltyp</MudTh>
<MudTh>Gestartet</MudTh>
<MudTh>Beendet</MudTh>
<MudTh>Spieler</MudTh>
<MudTh>Status</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Spieltyp">
<MudStack Row="true" AlignItems="AlignItems.Center" Spacing="2">
<MudIcon Icon="@GetGameIcon(context.GameTypeName)" Size="Size.Small" />
<MudText>@GetGameDisplayName(context.GameTypeName)</MudText>
</MudStack>
</MudTd>
<MudTd DataLabel="Gestartet">
@(context.StartedAt?.ToLocalTime().ToString("HH:mm") ?? "-")
</MudTd>
<MudTd DataLabel="Beendet">
@(context.CompletedAt?.ToLocalTime().ToString("HH:mm") ?? "-")
</MudTd>
<MudTd DataLabel="Spieler">
@context.ParticipantCount
</MudTd>
<MudTd DataLabel="Status">
<MudChip T="string"
Size="Size.Small"
Color="@GetStatusColor(context.Status)"
Icon="@GetStatusIcon(context.Status)">
@GetStatusLabel(context.Status)
</MudChip>
</MudTd>
</RowTemplate>
</MudTable>
}
</MudPaper>
@code {
/// <summary>
/// ID of the day to load completed games for.
/// </summary>
[Parameter]
public Guid DayId { get; set; }
protected override void OnInitialized()
{
base.OnInitialized();
if (DayId != Guid.Empty)
{
Dispatcher.Dispatch(new LoadCompletedGamesAction(DayId));
}
}
protected override void OnParametersSet()
{
base.OnParametersSet();
if (DayId != Guid.Empty)
{
Dispatcher.Dispatch(new LoadCompletedGamesAction(DayId));
}
}
private static string GetGameIcon(string gameTypeName) => gameTypeName switch
{
"Training" => Icons.Material.Filled.FitnessCenter,
"Shit" => Icons.Material.Filled.Casino,
_ => Icons.Material.Filled.SportsScore
};
private static string GetGameDisplayName(string gameTypeName) => gameTypeName switch
{
"Training" => "Training",
"Shit" => "Scheiss-Spiel",
_ => gameTypeName
};
private static Color GetStatusColor(GameStatus status) => status switch
{
GameStatus.Completed => Color.Success,
GameStatus.Aborted => Color.Warning,
GameStatus.Active => Color.Info,
_ => Color.Default
};
private static string GetStatusIcon(GameStatus status) => status switch
{
GameStatus.Completed => Icons.Material.Filled.CheckCircle,
GameStatus.Aborted => Icons.Material.Filled.Cancel,
GameStatus.Active => Icons.Material.Filled.PlayCircle,
_ => Icons.Material.Filled.Circle
};
private static string GetStatusLabel(GameStatus status) => status switch
{
GameStatus.Completed => "Beendet",
GameStatus.Aborted => "Abgebrochen",
GameStatus.Active => "Aktiv",
_ => status.ToString()
};
}