@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 @inject IDispatcher Dispatcher @inject ISnackbar Snackbar @inject IDialogService DialogService Ausloser (Global) Ausloser-Verwaltung Clubuebergreifende Verwaltung der Ausloser-Definitionen. @if (TriggerState.Value.Error is not null) { @TriggerState.Value.Error } Ausloser Neuer Ausloser Name Beschreibung Typ Aktionen @context.Name @(string.IsNullOrEmpty(context.Description) ? "-" : context.Description) @GetTypeName(context.ExpenseTriggerType) Keine Ausloser vorhanden @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("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("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( "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() }; }