@namespace LANCommander.UI.Components
@typeparam TItem
@foreach (var item in DataSource)
{
}
@code {
[Parameter] public IEnumerable DataSource { get; set; }
[Parameter] public TItem Value { get; set; } = default!;
[Parameter] public EventCallback ValueChanged { get; set; }
[Parameter] public IEnumerable Values { get; set; } = null!;
[Parameter] public EventCallback> ValuesChanged { get; set; }
[Parameter] public RenderFragment ChildContent { get; set; }
[Parameter] public RenderFragment ItemTemplate { get; set; }
[Parameter] public FlexGap Gap { get; set; } = FlexGap.Middle;
bool _radio;
bool _checkbox;
List _selectedValues = new();
protected override void OnInitialized()
{
if (ValueChanged.HasDelegate)
_radio = true;
else if (ValuesChanged.HasDelegate)
_checkbox = true;
if (ChildContent == null && ItemTemplate != null)
ChildContent = ItemTemplate;
}
async Task SelectionChanged(TItem item, bool selected)
{
if (_radio && selected)
{
Value = item;
await ValueChanged.InvokeAsync(Value);
}
else if (_checkbox)
{
_selectedValues.Remove(item);
if (selected)
_selectedValues.Add(item);
Values = _selectedValues;
await ValuesChanged.InvokeAsync(Values);
}
}
}