@inject IJSRuntime JSRuntime
@if (!IconMenuActive) { } else { }
@code { [Parameter] public EventCallback ShowIconMenu { get; set; } private bool IconMenuActive { get; set; } = false; private bool collapseNavMenu = true; private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; private Dictionary subMenuStates = new Dictionary(); protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await JSRuntime.InvokeVoidAsync("setResizeCallback", DotNetObjectReference.Create(this)); } } [JSInvokable] public async Task OnResize(bool isBelowThreshold) { if (isBelowThreshold && IconMenuActive) { collapseNavMenu = true; await ToggleIconMenu(); await ShowIconMenu.InvokeAsync(IconMenuActive); await InvokeAsync(StateHasChanged); } } private void ToggleNavMenu() { collapseNavMenu = !collapseNavMenu; } private async Task ToggleIconMenu() { IconMenuActive = !IconMenuActive; await ShowIconMenu.InvokeAsync(IconMenuActive); } private void ToggleSubMenu(string subMenuKey) { if (subMenuStates.ContainsKey(subMenuKey) && subMenuStates[subMenuKey]) { subMenuStates[subMenuKey] = false; } else { foreach (var key in subMenuStates.Keys.ToList()) { subMenuStates[key] = false; } if (subMenuStates.ContainsKey(subMenuKey)) { subMenuStates[subMenuKey] = !subMenuStates[subMenuKey]; } else { subMenuStates[subMenuKey] = true; } } } private bool IsSubMenuOpen(string subMenuKey) { return subMenuStates.ContainsKey(subMenuKey) && subMenuStates[subMenuKey]; } }