@using ErsatzTV.Application.Scheduling @implements IDisposable @inject IMediator Mediator @inject ISnackbar Snackbar @inject ILogger Logger
Select a group for the new block
@foreach (BlockGroupViewModel blockGroup in _blockGroups) { @blockGroup.Name }
Enter a name for the new block
Cancel Copy Block
@code { private CancellationTokenSource _cts; [CascadingParameter] IMudDialogInstance MudDialog { get; set; } [Parameter] public int BlockId { get; set; } private record DummyModel; private readonly DummyModel _dummyModel = new(); private List _blockGroups = []; private BlockGroupViewModel _selectedBlockGroup; 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 { _blockGroups = await Mediator.Send(new GetAllBlockGroups(), token); } catch (OperationCanceledException) { // do nothing } } private bool CanSubmit() => _selectedBlockGroup != null && !string.IsNullOrWhiteSpace(_newName); private async Task Submit() { if (!CanSubmit()) { return; } Either maybeResult = await Mediator.Send(new CopyBlock(BlockId, _selectedBlockGroup.Id, _newName), _cts.Token); maybeResult.Match( schedule => { MudDialog.Close(DialogResult.Ok(schedule)); }, error => { Snackbar.Add(error.Value, Severity.Error); Logger.LogError("Error copying block: {Error}", error.Value); MudDialog.Close(DialogResult.Cancel()); }); } private void Cancel(MouseEventArgs e) => MudDialog.Cancel(); }