KoogleApp/src/Koogle.Web/Components/Pages/Admin/Triggers.razor

161 lines
5.6 KiB
Plaintext

@page "/admin/triggers"
@attribute [Authorize(Roles = "SuperAdmin")]
@inherits Fluxor.Blazor.Web.Components.FluxorComponent
@using Fluxor
@using Koogle.Application.DTOs
@using Koogle.Domain.Enums
@using Koogle.Web.Store.TriggerState
@using Microsoft.AspNetCore.Authorization
@inject IState<TriggerState> TriggerState
@inject IDispatcher Dispatcher
@inject ISnackbar Snackbar
@inject IDialogService DialogService
<PageTitle>Ausloser (Global)</PageTitle>
<MudText Typo="Typo.h4" Class="mb-2">Ausloser-Verwaltung</MudText>
<MudText Typo="Typo.body2" Color="Color.Secondary" Class="mb-4">
Clubuebergreifende Verwaltung der Ausloser-Definitionen.
</MudText>
@if (TriggerState.Value.Error is not null)
{
<MudAlert Severity="Severity.Error" Class="mb-4" ShowCloseIcon="true" CloseIconClicked="ClearError">
@TriggerState.Value.Error
</MudAlert>
}
<MudPaper Class="pa-4 mb-4">
<MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
<MudText Typo="Typo.h6">Ausloser</MudText>
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
StartIcon="@Icons.Material.Filled.Add"
OnClick="OpenCreateDialog">
Neuer Ausloser
</MudButton>
</MudStack>
</MudPaper>
<MudTable Items="TriggerState.Value.Triggers" Dense="true" Hover="true" Loading="TriggerState.Value.IsLoading">
<HeaderContent>
<MudTh>Name</MudTh>
<MudTh>Beschreibung</MudTh>
<MudTh>Typ</MudTh>
<MudTh Style="width: 120px;">Aktionen</MudTh>
</HeaderContent>
<RowTemplate>
<MudTd DataLabel="Name">
<MudText Typo="Typo.body1"><strong>@context.Name</strong></MudText>
</MudTd>
<MudTd DataLabel="Beschreibung">
<MudText Typo="Typo.body2" Color="Color.Secondary">
@(string.IsNullOrEmpty(context.Description) ? "-" : context.Description)
</MudText>
</MudTd>
<MudTd DataLabel="Typ">
<MudChip T="string" Size="Size.Small" Color="Color.Default" Variant="Variant.Text">
@GetTypeName(context.ExpenseTriggerType)
</MudChip>
</MudTd>
<MudTd>
<MudStack Row="true" Spacing="1">
<MudTooltip Text="Bearbeiten">
<MudIconButton Icon="@Icons.Material.Filled.Edit"
Size="Size.Small"
OnClick="@(() => OpenEditDialog(context))"/>
</MudTooltip>
<MudTooltip Text="Loeschen">
<MudIconButton Icon="@Icons.Material.Filled.Delete"
Size="Size.Small"
Color="Color.Error"
OnClick="@(() => ConfirmDelete(context))"/>
</MudTooltip>
</MudStack>
</MudTd>
</RowTemplate>
<NoRecordsContent>
<MudText>Keine Ausloser vorhanden</MudText>
</NoRecordsContent>
</MudTable>
@code {
protected override void OnInitialized()
{
base.OnInitialized();
Dispatcher.Dispatch(new LoadTriggersAction());
}
private void ClearError()
{
Dispatcher.Dispatch(new ClearTriggerErrorAction());
}
private async Task OpenCreateDialog()
{
var dialog = await DialogService.ShowAsync<TriggerFormDialog>("Neuer Ausloser");
var result = await dialog.Result;
if (result != null && !result.Canceled && result.Data is CreateTriggerDto dto)
{
Dispatcher.Dispatch(new CreateTriggerAction(dto));
Snackbar.Add("Ausloser wird erstellt...", Severity.Info);
}
}
private async Task OpenEditDialog(TriggerDto trigger)
{
var parameters = new DialogParameters
{
{ "Trigger", trigger }
};
var dialog = await DialogService.ShowAsync<TriggerFormDialog>("Ausloser bearbeiten", parameters);
var result = await dialog.Result;
if (result != null && !result.Canceled && result.Data is UpdateTriggerDto dto)
{
Dispatcher.Dispatch(new UpdateTriggerAction(dto));
Snackbar.Add("Ausloser wird aktualisiert...", Severity.Info);
}
}
private async Task ConfirmDelete(TriggerDto trigger)
{
var parameters = new DialogParameters
{
{ "ContentText", $"Soll der Ausloser \"{trigger.Name}\" wirklich geloescht werden? Dies kann nicht rueckgaengig gemacht werden." },
{ "ButtonText", "Loeschen" },
{ "Color", Color.Error }
};
var dialog = await DialogService.ShowAsync<Koogle.Web.Components.Shared.ConfirmDialog>(
"Ausloser loeschen", parameters);
var result = await dialog.Result;
if (result != null && !result.Canceled)
{
Dispatcher.Dispatch(new DeleteTriggerAction(trigger.Id));
Snackbar.Add("Ausloser wird geloescht...", Severity.Info);
}
}
private static string GetTypeName(ExpenseTriggerType type) => type switch
{
ExpenseTriggerType.Gutter => "Gosse",
ExpenseTriggerType.Bell => "Klingel",
ExpenseTriggerType.NoWood => "Kein Holz",
ExpenseTriggerType.FirstThrowFail => "Anwurf",
ExpenseTriggerType.Circle => "Kranz",
ExpenseTriggerType.Strike => "Alle 9",
ExpenseTriggerType.FullGutter => "Anwurf-Gosse",
ExpenseTriggerType.Eliminated => "Ausgeschieden",
ExpenseTriggerType.Absent => "Abwesend",
ExpenseTriggerType.ExpensePoint => "Strafpunkt",
_ => type.ToString()
};
}