@using ErsatzTV.Application.Scheduling @implements IDisposable @inject IMediator Mediator @inject ISnackbar Snackbar @inject ILogger Logger
Select a group for the new template
@foreach (TemplateGroupViewModel templateGroup in _templateGroups) { @templateGroup.Name }
Enter a name for the new template
Cancel Copy Template
@code { private CancellationTokenSource _cts; [CascadingParameter] IMudDialogInstance MudDialog { get; set; } [Parameter] public int TemplateId { get; set; } private record DummyModel; private readonly DummyModel _dummyModel = new(); private List _templateGroups = []; private TemplateGroupViewModel _selectedTemplateGroup; private string _newName; public void Dispose() { _cts?.Cancel(); _cts?.Dispose(); } protected override async Task OnParametersSetAsync() { _cts?.Cancel(); _cts?.Dispose(); _cts = new CancellationTokenSource(); var token = _cts.Token; try { _templateGroups = await Mediator.Send(new GetAllTemplateGroups(), token); } catch (OperationCanceledException) { // do nothing } } private bool CanSubmit() => _selectedTemplateGroup != null && !string.IsNullOrWhiteSpace(_newName); private async Task Submit() { if (!CanSubmit()) { return; } Either maybeResult = await Mediator.Send(new CopyTemplate(TemplateId, _selectedTemplateGroup.Id, _newName), _cts.Token); maybeResult.Match( schedule => { MudDialog.Close(DialogResult.Ok(schedule)); }, error => { Snackbar.Add(error.Value, Severity.Error); Logger.LogError("Error copying template: {Error}", error.Value); MudDialog.Close(DialogResult.Cancel()); }); } private void Cancel(MouseEventArgs e) => MudDialog.Cancel(); }