@typeparam TItem where TItem : class
@using System.Linq.Expressions
@using System.Reflection
@using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers
@typeparam TMember where TMember : struct, Enum
    @foreach (var value in enumValues)
    {
        
    }
@code {
    [Parameter, EditorRequired] public TItem Model { get; set; } = default!;
    [Parameter, EditorRequired] public Expression> EnumProperty { get; set; } = null!;
    [Parameter] public Action? OnChanged { get; set; }
    private Dictionary enumValues = new();
    private PropertyInfo modelMemberInfo = null!;
    private TMember selected;
    protected override void OnInitialized()
    {
        var modelMemberName = ((MemberExpression)EnumProperty.Body).Member.Name;
        modelMemberInfo = typeof(TItem).GetProperty(modelMemberName)!;
        foreach (var value in Enum.GetValues())
        {
            enumValues.Add(value, value.GetDisplayName());
        }
    }
    protected override void OnAfterRender(bool firstRender)
    {
        var current = (TMember)modelMemberInfo.GetValue(Model)!;
        if (!current.Equals(selected))
        {
            OnValueChanged();
        }
    }
    private void OnValueChanged()
    {
        modelMemberInfo.SetValue(Model, selected);
        OnChanged?.Invoke();
    }
}