@implements IDisposable @inject NavigationManager NavigationManager
@if (BrandContent is null) { RM Rolemaster DB Reference and lookup workspace } else { @BrandContent }
@if (OmniboxContent is not null) { @OmniboxContent }
@UtilityContent
@if (ShortcutContent is not null) { }
@ChildContent
@if (isNavMenuOpen) { }
@code { [Parameter] public RenderFragment? ChildContent { get; set; } [Parameter] public RenderFragment? BrandContent { get; set; } [Parameter] public RenderFragment? PrimaryNavContent { get; set; } [Parameter] public RenderFragment? OmniboxContent { get; set; } [Parameter] public RenderFragment? ShortcutContent { get; set; } [Parameter] public RenderFragment? UtilityContent { get; set; } private bool isNavMenuOpen; private ElementReference navMenuCloseButton; private bool shouldFocusNavMenuCloseButton; protected override void OnInitialized() { NavigationManager.LocationChanged += HandleLocationChanged; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (!shouldFocusNavMenuCloseButton || !isNavMenuOpen) { return; } shouldFocusNavMenuCloseButton = false; await navMenuCloseButton.FocusAsync(); } private void ToggleNavMenu() { isNavMenuOpen = !isNavMenuOpen; shouldFocusNavMenuCloseButton = isNavMenuOpen; } private void CloseNavMenu() { isNavMenuOpen = false; shouldFocusNavMenuCloseButton = false; } private void HandleLocationChanged(object? sender, LocationChangedEventArgs args) { isNavMenuOpen = false; _ = InvokeAsync(StateHasChanged); } public void Dispose() { NavigationManager.LocationChanged -= HandleLocationChanged; } private Task HandleNavMenuKeyDownAsync(KeyboardEventArgs args) { if (string.Equals(args.Key, "Escape", StringComparison.Ordinal)) { CloseNavMenu(); } return Task.CompletedTask; } }