@typeparam TItem where TItem : LANCommander.SDK.Models.IKeyedModel
@namespace LANCommander.UI.Components
@code {
[Parameter] public string LeftTitle { get; set; } = "";
[Parameter] public string RightTitle { get; set; } = "";
[Parameter] public string Style { get; set; } = "";
[Parameter] public bool Searchable { get; set; }
[Parameter] public Func TitleSelector { get; set; }
[Parameter] public IEnumerable DataSource { get; set; }
[Parameter] public ICollection Values { get; set; } = new List();
[Parameter] public EventCallback> ValuesChanged { get; set; }
IEnumerable TransferItems { get; set; } = new List();
List TargetKeys { get; set; } = new();
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
TransferItems = DataSource.Select(i => new TransferItem()
{
Key = i.Id.ToString(),
Title = TitleSelector.Invoke(i)
});
if (Values != null)
TargetKeys = Values.Select(i => i.Id.ToString()).ToList();
}
}
async Task OnChange(TransferChangeArgs e)
{
Values = DataSource.Where(i => e.TargetKeys.Contains(i.Id.ToString())).ToList();
if (ValuesChanged.HasDelegate)
await ValuesChanged.InvokeAsync(Values);
}
}