// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using Aspire.Dashboard.Model;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.FluentUI.AspNetCore.Components;
namespace Aspire.Dashboard.Components;
public partial class AspireMenuButton : FluentComponentBase
{
private static readonly Icon s_defaultIcon = new Icons.Regular.Size24.ChevronDown();
private bool _visible;
private Icon? _icon;
[Parameter]
public string? Text { get; set; }
[Parameter]
public Icon? Icon { get; set; }
[Parameter]
public required IList<MenuButtonItem> Items { get; set; }
[Parameter]
public Appearance? ButtonAppearance { get; set; }
[Parameter]
public string? Title { get; set; }
public string MenuButtonId { get; } = Identifier.NewId();
protected override void OnParametersSet()
{
_icon = Icon ?? s_defaultIcon;
}
private void ToggleMenu()
{
_visible = !_visible;
}
private async Task HandleItemClicked(MenuButtonItem item)
{
if (item.OnClick is {} onClick)
{
await onClick();
}
_visible = false;
}
private void OnKeyDown(KeyboardEventArgs args)
{
if (args is not null && args.Key == "Escape")
{
_visible = false;
}
}
}
|