@inherits AliasVault.Client.Main.Pages.MainBase
@using Microsoft.Extensions.Localization
@implements IDisposable
@inject LanguageService LanguageService
@code {
private IStringLocalizer Localizer => LocalizerFactory.Create("Layout.TopMenu", "AliasVault.Client");
private bool IsUserMenuOpen { get; set; } = false;
private bool IsMobileMenuOpen { get; set; } = false;
private string Username { get; set; } = string.Empty;
private bool IsDarkMode { get; set; } = false;
///
/// Close the menu.
///
[JSInvokable]
public void CloseUserMenu()
{
IsUserMenuOpen = false;
StateHasChanged();
}
///
/// Close the menu.
///
[JSInvokable]
public void CloseMobileMenu()
{
IsMobileMenuOpen = false;
StateHasChanged();
}
///
/// Callback for theme changes from JavaScript.
///
[JSInvokable]
public void OnThemeChanged(bool isDark)
{
IsDarkMode = isDark;
StateHasChanged();
}
///
/// Dispose method.
///
public void Dispose()
{
NavigationManager.LocationChanged -= LocationChanged;
LanguageService.LanguageChanged -= OnLanguageChanged;
}
///
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
Username = await GetUsernameAsync();
NavigationManager.LocationChanged += LocationChanged;
LanguageService.LanguageChanged += OnLanguageChanged;
}
///
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
{
DotNetObjectReference objRef = DotNetObjectReference.Create(this);
await JsInteropService.RegisterDarkModeCallback(objRef);
await JsInteropService.InitTopMenu();
await JsInteropService.TopMenuClickOutsideHandler(objRef);
}
}
///
/// Handles language change events and triggers component refresh.
///
/// The new language code.
private void OnLanguageChanged(string languageCode)
{
InvokeAsync(StateHasChanged);
}
private void LocationChanged(object? sender, LocationChangedEventArgs e)
{
bool hadChanges = false;
if (IsUserMenuOpen)
{
IsUserMenuOpen = false;
hadChanges = true;
}
if (IsMobileMenuOpen)
{
IsMobileMenuOpen = false;
hadChanges = true;
}
if (hadChanges)
{
StateHasChanged();
}
}
private void ToggleMobileMenu()
{
IsMobileMenuOpen = !IsMobileMenuOpen;
StateHasChanged();
}
}