Files
qbtmud/Lantean.QBTMudBlade/Layout/MainLayout.razor.cs
2024-04-22 14:15:07 +01:00

90 lines
2.5 KiB
C#

using Lantean.QBitTorrentClient;
using Microsoft.AspNetCore.Components;
using MudBlazor;
using MudBlazor.Services;
namespace Lantean.QBTMudBlade.Layout
{
public partial class MainLayout : IBrowserViewportObserver, IAsyncDisposable
{
private bool _disposedValue;
[Inject]
protected NavigationManager NavigationManager { get; set; } = default!;
[Inject]
private IBrowserViewportService BrowserViewportService { get; set; } = default!;
[Inject]
private IApiClient ApiClient { get; set; } = default!;
protected bool DrawerOpen { get; set; } = true;
protected bool ShowMenu { get; set; } = false;
public Guid Id => Guid.NewGuid();
ResizeOptions IBrowserViewportObserver.ResizeOptions { get; } = new()
{
ReportRate = 50,
NotifyOnBreakpointOnly = true
};
protected void ToggleDrawer()
{
DrawerOpen = !DrawerOpen;
}
protected override async Task OnParametersSetAsync()
{
if (!ShowMenu)
{
ShowMenu = await ApiClient.CheckAuthState();
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await BrowserViewportService.SubscribeAsync(this, fireImmediately: true);
}
await base.OnAfterRenderAsync(firstRender);
}
public async Task NotifyBrowserViewportChangeAsync(BrowserViewportEventArgs browserViewportEventArgs)
{
if (browserViewportEventArgs.Breakpoint == Breakpoint.Sm && DrawerOpen)
{
DrawerOpen = false;
}
else if (browserViewportEventArgs.Breakpoint > Breakpoint.Sm && !DrawerOpen)
{
DrawerOpen = true;
}
await InvokeAsync(StateHasChanged);
}
protected virtual async Task DisposeAsync(bool disposing)
{
if (!_disposedValue)
{
if (disposing)
{
await BrowserViewportService.UnsubscribeAsync(this);
}
_disposedValue = true;
}
}
public async ValueTask DisposeAsync()
{
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
await DisposeAsync(disposing: true);
GC.SuppressFinalize(this);
}
}
}