@inject IJSRuntime JSRuntime
@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];
}
}