48 lines
No EOL
1.6 KiB
Text
48 lines
No EOL
1.6 KiB
Text
@typeparam TItem where TItem : LANCommander.SDK.Models.IKeyedModel
|
|
@namespace LANCommander.UI.Components
|
|
|
|
<Transfer
|
|
Style="@Style"
|
|
DataSource="TransferItems"
|
|
TargetKeys="TargetKeys"
|
|
OnChange="OnChange"
|
|
Titles="new[] { LeftTitle, RightTitle }"
|
|
ShowSearch="@Searchable"
|
|
/>
|
|
|
|
@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<TItem, string> TitleSelector { get; set; }
|
|
[Parameter] public IEnumerable<TItem> DataSource { get; set; }
|
|
[Parameter] public ICollection<TItem> Values { get; set; } = new List<TItem>();
|
|
[Parameter] public EventCallback<ICollection<TItem>> ValuesChanged { get; set; }
|
|
|
|
IEnumerable<TransferItem> TransferItems { get; set; } = new List<TransferItem>();
|
|
List<string> 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);
|
|
}
|
|
} |