* cleanup scanner project * cleanup infrastructure projects * cleanup ffmpeg project * cleanup core project * cleanup app project * cleanup main project * update dependencies * code cleanup
75 lines
1.7 KiB
C#
75 lines
1.7 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using ErsatzTV.Extensions;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.AspNetCore.Components.Routing;
|
|
using Microsoft.JSInterop;
|
|
|
|
namespace ErsatzTV.Pages;
|
|
|
|
public class FragmentNavigationBase : ComponentBase, IDisposable
|
|
{
|
|
private readonly CancellationTokenSource _cts = new();
|
|
|
|
private bool _disposedValue;
|
|
|
|
protected CancellationToken CancellationToken => _cts.Token;
|
|
|
|
[Inject]
|
|
private NavigationManager NavManager { get; set; }
|
|
|
|
[Inject]
|
|
private IJSRuntime JsRuntime { get; set; }
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
{
|
|
if (!_disposedValue)
|
|
{
|
|
if (disposing)
|
|
{
|
|
NavManager.LocationChanged -= TryFragmentNavigation;
|
|
|
|
_cts?.Cancel();
|
|
_cts?.Dispose();
|
|
}
|
|
|
|
_disposedValue = true;
|
|
}
|
|
}
|
|
|
|
protected override void OnInitialized() => NavManager.LocationChanged += TryFragmentNavigation;
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (firstRender)
|
|
{
|
|
try
|
|
{
|
|
await NavManager.NavigateToFragmentAsync(JsRuntime);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
// ignored
|
|
}
|
|
}
|
|
}
|
|
|
|
[SuppressMessage("ReSharper", "VSTHRD100")]
|
|
private async void TryFragmentNavigation(object sender, LocationChangedEventArgs args)
|
|
{
|
|
try
|
|
{
|
|
await NavManager.NavigateToFragmentAsync(JsRuntime);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
// ignored
|
|
}
|
|
}
|
|
}
|