@page "/channels/numbers" @using ErsatzTV.Application.Channels @implements IDisposable @inject IMediator Mediator @inject NavigationManager NavigationManager @inject ISnackbar Snackbar @inject ILogger Logger
Save Channels Reset Channels
Edit Channel Numbers
@context.Number @context.Name (@context.OriginalNumber)
@code { private CancellationTokenSource _cts; private List _channels = []; private List _channelNumbers = []; public void Dispose() { _cts?.Cancel(); _cts?.Dispose(); } protected override async Task OnParametersSetAsync() { await ReloadAllChannels(); } private async Task ReloadAllChannels() { _cts?.Cancel(); _cts?.Dispose(); _cts = new CancellationTokenSource(); var token = _cts.Token; try { _channels = await Mediator.Send(new GetAllChannelsForSort(), token); _channelNumbers = _channels.Map(c => c.Number).ToList(); } catch (OperationCanceledException) { // do nothing } } private async Task SaveChannels() { var changedChannels = _channels.Where(c => c.HasChanged).ToList(); Option maybeError = await Mediator.Send(new UpdateChannelNumbers(changedChannels), _cts.Token); maybeError.Match( error => { Snackbar.Add(error.Value, Severity.Error); Logger.LogError("Unexpected error saving channel numbers: {Error}", error.Value); }, () => NavigationManager.NavigateTo("channels")); } private void OnUpdate(SortableEventArgs obj) { for (var i = 0; i < _channels.Count; i++) { _channels[i].Number = _channelNumbers[i]; } StateHasChanged(); } }