@typeparam TBind
@CurrentIcon
@if (Visible)
{
}
@code {
private TBind _value = default!;
[Parameter] [EditorRequired] public required IEnumerable> Elements { get; set; }
[Parameter]
[EditorRequired]
#pragma warning disable BL0007 // While this implementation is suboptimal, this is technically fine. Should be reworked.
public required TBind Value
{
get => _value;
set
{
_value = value;
CurrentSelection = Elements.First(element => element.Selection != null && element.Selection.Equals(value));
CurrentIcon = CurrentSelection.Icon;
}
}
#pragma warning restore BL0007
[Parameter] public EventCallback ValueChanged { get; set; }
private DropdownElement? CurrentSelection { get; set; }
private RenderFragment? CurrentIcon { get; set; }
private bool Visible { get; set; } = false;
private void UpdateSelected(DropdownElement element)
{
CurrentSelection = element;
CurrentIcon = CurrentSelection.Icon;
ValueChanged.InvokeAsync(element.Selection);
Visible = false;
}
private void Toggle()
{
Visible = !Visible;
}
protected override void OnInitialized()
{
UpdateSelected(Elements.FirstOrDefault() ?? throw new InvalidOperationException());
}
}