52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @typeparam TItem where TItem : class
 | |
| @using System.Linq.Expressions
 | |
| @using System.Reflection
 | |
| @using BlazorWebAssemblyVisaApiClient.Infrastructure.Helpers
 | |
| @typeparam TMember where TMember : struct, Enum
 | |
| 
 | |
| <InputSelect TValue="TMember" @bind-Value="selected">
 | |
|     @foreach (var value in enumValues)
 | |
|     {
 | |
|         <option value="@value.Key">@value.Value</option>
 | |
|     }
 | |
| </InputSelect><br/>
 | |
| 
 | |
| @code {
 | |
|     [Parameter, EditorRequired] public TItem Model { get; set; } = default!;
 | |
| 
 | |
|     [Parameter, EditorRequired] public Expression<Func<TItem, TMember>> EnumProperty { get; set; } = null!;
 | |
| 
 | |
|     [Parameter] public Action? OnChanged { get; set; }
 | |
| 
 | |
|     private Dictionary<TMember, string> 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<TMember>())
 | |
|         {
 | |
|             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();
 | |
|     }
 | |
| 
 | |
| }
 |