@using ErsatzTV.Application.FFmpegProfiles @implements IDisposable @inject IMediator Mediator @inject ISnackbar Snackbar @inject ILogger Logger Enter a name for the new FFmpeg Profile Cancel Copy Profile @code { private readonly CancellationTokenSource _cts = new(); [CascadingParameter] IMudDialogInstance MudDialog { get; set; } [Parameter] public int FFmpegProfileId { get; set; } private record DummyModel; private readonly DummyModel _dummyModel = new(); private string _newFFmpegProfileName; public void Dispose() { _cts.Cancel(); _cts.Dispose(); } private bool CanSubmit() => !string.IsNullOrWhiteSpace(_newFFmpegProfileName); private async Task Submit() { if (!CanSubmit()) { return; } Either maybeResult = await Mediator.Send(new CopyFFmpegProfile(FFmpegProfileId, _newFFmpegProfileName), _cts.Token); maybeResult.Match( ffmpegProfile => { MudDialog.Close(DialogResult.Ok(ffmpegProfile)); }, error => { Snackbar.Add(error.Value, Severity.Error); Logger.LogError("Error copying FFmpeg Profile: {Error}", error.Value); MudDialog.Close(DialogResult.Cancel()); }); } private void Cancel(MouseEventArgs e) => MudDialog.Cancel(); }