1
0
mirror of https://github.com/akpaevj/onecmonitor.git synced 2026-06-13 21:18:17 +02:00
Files

66 lines
1.9 KiB
Plaintext

<CascadingValue Value="@(this)" IsFixed="true">
<MudStack Spacing="0" Class="@Class">
@if (ShowAddButton)
{
<MudStack Row AlignItems="AlignItems.Start" Class="mb-3">
<MudButton Color="Color.Primary" Variant="Variant.Filled" @onclick="OnClickAddButton">Добавить
</MudButton>
</MudStack>
}
<MudPaper Class="w-100 h-100 pa-3">
<MudStack Spacing="0" AlignItems="AlignItems.Stretch" StretchItems="StretchItems.All">
@foreach (var item in Items)
{
<TreeViewItem IsSelected="SelectedItem?.Id == item.Id" Item="item"/>
}
</MudStack>
</MudPaper>
</MudStack>
</CascadingValue>
@code
{
private readonly List<TreeViewItem> _leafs = [];
[Parameter] public IReadOnlyCollection<TreeItem> Items { get; set; } = [];
[Parameter] public EventCallback<IReadOnlyCollection<TreeItem>?> ItemsChanged { get; set; }
[Parameter] public TreeItem? SelectedItem { get; set; }
[Parameter] public EventCallback<TreeItem?> SelectedItemChanged { get; set; }
[Parameter] public string? Class { get; set; }
[Parameter] public bool ShowAddButton { get; set; }
[Parameter] public Func<Task>? AddButtonCallback { get; set; }
public async Task SelectItem(TreeItem item)
{
foreach (var treeViewItem in _leafs)
{
treeViewItem.Item.IsSelected = treeViewItem.Item.Id == item.Id;
await treeViewItem.UpdateVisualState();
}
SelectedItem = item;
await SelectedItemChanged.InvokeAsync(SelectedItem);
}
public void RegisterItem(TreeViewItem item)
{
_leafs.Add(item);
}
public void UnregisterItem(TreeViewItem item)
{
_leafs.Remove(item);
}
private async Task OnClickAddButton()
{
if (AddButtonCallback != null)
await AddButtonCallback();
}
}