@using ErsatzTV.Application.MediaSources @using Unit = LanguageExt.Unit @inject NavigationManager _navigationManager @inject ILogger _logger @inject ISnackbar _snackbar @inject IMediator _mediator @_source.Name Path Replacements @Name Path Local Path @context.RemotePath @context.LocalPath Add Path Replacement Save Changes @if (_selectedItem is not null) {
}
@code { [Parameter] public int Id { get; set; } [Parameter] public string Name { get; set; } [Parameter] public Func>> GetMediaSourceById { get; set; } [Parameter] public Func>> GetPathReplacementsBySourceId { get; set; } [Parameter] public Func, IRequest>> GetUpdatePathReplacementsRequest { get; set; } private RemoteMediaSourceViewModel _source; private List _pathReplacements; private RemoteMediaSourcePathReplacementEditViewModel _selectedItem; protected override Task OnParametersSetAsync() => LoadData(); private async Task LoadData() { Option maybeSource = await GetMediaSourceById(Id); await maybeSource.Match( async source => { _source = source; _pathReplacements = await GetPathReplacementsBySourceId(Id); }, () => { _navigationManager.NavigateTo("404"); return Task.CompletedTask; }); } private void AddPathReplacement() { var item = new RemoteMediaSourcePathReplacementEditViewModel(); _pathReplacements.Add(item); _selectedItem = item; } private void RemovePathReplacement(RemoteMediaSourcePathReplacementEditViewModel item) { _selectedItem = null; _pathReplacements.Remove(item); } private async Task SaveChanges() { Seq errorMessages = await _mediator.Send(GetUpdatePathReplacementsRequest(_pathReplacements)) .Map(e => e.LeftToSeq()); errorMessages.HeadOrNone().Match( error => { _snackbar.Add($"Unexpected error saving path replacements: {error.Value}", Severity.Error); _logger.LogError("Unexpected error saving path replacements: {Error}", error.Value); }, () => _navigationManager.NavigateTo($"/media/sources/{Name.ToLowerInvariant()}")); } }