63 lines
2.1 KiB
Plaintext
63 lines
2.1 KiB
Plaintext
@using Microsoft.FluentUI.AspNetCore.Components.Extensions
|
|
@typeparam TEnum where TEnum : struct, Enum
|
|
<FluentSelect
|
|
TOption="Option<int>"
|
|
Items="_enumOptions"
|
|
Label="@Label"
|
|
OptionText="@(i => i.Text)"
|
|
OptionValue="@(i => i.Value.ToString())"
|
|
OptionSelected="@(i => i.Selected)"
|
|
@bind-Value="_selectedValue"
|
|
Placeholder="@Placeholder"
|
|
AdditionalAttributes="@AdditionalAttributes"
|
|
/>
|
|
@code {
|
|
[Parameter] public TEnum? EnumSelectedValue { get; set; }
|
|
[Parameter] public EventCallback<TEnum?> EnumSelectedValueChanged { get; set; }
|
|
[Parameter] public TEnum[] ExcludeEnumItems { get; set; } = [];
|
|
[Parameter] public string? Placeholder { get; set; }
|
|
[Parameter] public string? Label { get; set; }
|
|
[Parameter(CaptureUnmatchedValues = true)]
|
|
public Dictionary<string, object> AdditionalAttributes { get; set; } = new();
|
|
|
|
private List<Option<int>> _enumOptions = [];
|
|
private string? _selectedValue
|
|
{
|
|
get { return _enumOptions.FirstOrDefault(e => e.Value.Equals(GetEnumInt(EnumSelectedValue)))?.Value.ToString(); }
|
|
set
|
|
{
|
|
if (value is null || !Enum.TryParse<TEnum>(value, out var result)) return;
|
|
EnumSelectedValue = result;
|
|
EnumSelectedValueChanged.InvokeAsync(result);
|
|
}
|
|
}
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
if (!typeof(TEnum).IsEnum)
|
|
{
|
|
throw new InvalidOperationException($"{typeof(TEnum).Name} is not an enum type");
|
|
}
|
|
}
|
|
|
|
protected override void OnParametersSet()
|
|
{
|
|
_enumOptions = Enum.GetValues(typeof(TEnum))
|
|
.Cast<TEnum>()
|
|
.Where(e => !ExcludeEnumItems.Contains(e))
|
|
.Select(e => new Option<int>
|
|
{
|
|
Value = GetEnumInt(e).GetValueOrDefault(),
|
|
Text = e.GetDescription(false),
|
|
Selected = e.Equals(EnumSelectedValue)
|
|
})
|
|
.ToList();
|
|
}
|
|
|
|
private static int? GetEnumInt(TEnum? value)
|
|
{
|
|
if (!typeof(TEnum).IsEnum || value is null)
|
|
return null;
|
|
return (int)Convert.ChangeType(value, typeof(TEnum));
|
|
}
|
|
} |