@page "/watermarks" @using ErsatzTV.Application.Watermarks @implements IDisposable @inject IDialogService Dialog @inject IMediator Mediator @inject NavigationManager NavigationManager Add Watermark
Watermarks Name Image Mode Location @context.Name @if (!string.IsNullOrWhiteSpace(context.Image?.Path)) { } else if (context.ImageSource == ChannelWatermarkImageSource.ChannelLogo) { [channel logo] } @context.Mode @context.Location
@code { private CancellationTokenSource _cts; private List _watermarks = []; public void Dispose() { _cts?.Cancel(); _cts?.Dispose(); } protected override async Task OnParametersSetAsync() { _cts?.Cancel(); _cts?.Dispose(); _cts = new CancellationTokenSource(); var token = _cts.Token; try { _watermarks = await Mediator.Send(new GetAllWatermarks(), token); } catch (OperationCanceledException) { // do nothing } } private async Task DeleteWatermarkAsync(WatermarkViewModel watermark) { var parameters = new DialogParameters { { "EntityType", "watermark" }, { "EntityName", watermark.Name } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; IDialogReference dialog = await Dialog.ShowAsync("Delete Watermark", parameters, options); DialogResult result = await dialog.Result; if (result is { Canceled: false }) { await Mediator.Send(new DeleteWatermark(watermark.Id), _cts.Token); _watermarks = await Mediator.Send(new GetAllWatermarks(), _cts.Token); } } private async Task CopyWatermarkAsync(WatermarkViewModel watermark) { var parameters = new DialogParameters { { "WatermarkId", watermark.Id } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; IDialogReference dialog = await Dialog.ShowAsync("Copy Watermark", parameters, options); DialogResult dialogResult = await dialog.Result; if (dialogResult is { Canceled: false, Data: WatermarkViewModel data }) { NavigationManager.NavigateTo($"/watermarks/{data.Id}"); } } }