@page "/media/collections/{Id:int}/edit" @page "/media/collections/add" @using ErsatzTV.Application.MediaCollections @implements IDisposable @inject NavigationManager NavigationManager @inject ILogger Logger @inject ISnackbar Snackbar @inject IMediator Mediator @(IsEdit ? "Save Collection" : "Add Collection")
Collection
Name
@code { private CancellationTokenSource _cts; [Parameter] public int Id { get; set; } private readonly CollectionEditViewModel _model = new(); private MudForm _form; private bool _success; public void Dispose() { _cts?.Cancel(); _cts?.Dispose(); } protected override async Task OnParametersSetAsync() { _cts?.Cancel(); _cts?.Dispose(); _cts = new CancellationTokenSource(); var token = _cts.Token; try { if (IsEdit) { Option maybeCollection = await Mediator.Send(new GetCollectionById(Id), token); maybeCollection.IfSome(collection => { _model.Id = collection.Id; _model.Name = collection.Name; }); } else { _model.Name = "New Collection"; } } catch (OperationCanceledException) { // do nothing } } private bool IsEdit => Id != 0; private async Task HandleSubmitAsync() { await _form.Validate(); if (_success) { Seq errorMessage = IsEdit ? (await Mediator.Send(new UpdateCollection(Id, _model.Name), _cts.Token)).LeftToSeq() : (await Mediator.Send(new CreateCollection(_model.Name), _cts.Token)).LeftToSeq(); errorMessage.HeadOrNone().Match( error => { Snackbar.Add(error.Value, Severity.Error); Logger.LogError("Error saving collection: {Error}", error.Value); }, () => NavigationManager.NavigateTo(_model.Id > 0 ? $"media/collections/{_model.Id}" : "media/collections")); } } }