@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(); } }