@using MudBlazor
@using Microsoft.AspNetCore.Components.Web
@using Tasks.Module.Models
OnClick(Item))"
@oncontextmenu:preventDefault="true"
@oncontextmenu="@OnContextMenuHandler"
@ondragstart="@OnDragStartLocal"
@ondragend="@OnDragEndLocal"
@ondragenter="@OnDragEnter"
@ondragenter:preventDefault="true"
@ondragover="@OnDragOver"
@ondragover:preventDefault="true"
@ondragleave="@OnDragLeave"
@ondrop="@OnDrop"
@ondrop:preventDefault="true"
style="width: 100%; cursor: pointer;">
@if (Item.Type == TreeItemType.Folder)
{
}
else
{
}
@Item.Name
@if (Item.IsExpanded && Item.Children.Any())
{
@foreach (var child in Item.Children)
{
}
}
@code {
[Parameter] public TreeItemDto Item { get; set; } = null!;
[Parameter] public EventCallback OnItemClick { get; set; }
[Parameter] public EventCallback OnItemExpand { get; set; }
[Parameter] public EventCallback<(TreeItemDto, MouseEventArgs)> OnContextMenuWithArgs { get; set; }
[Parameter] public EventCallback OnDragStart { get; set; }
[Parameter] public EventCallback OnDragEnd { get; set; }
[Parameter] public EventCallback OnItemDrop { get; set; }
private Task OnClick(TreeItemDto item)
{
return OnItemClick.InvokeAsync(item);
}
private async Task OnContextMenuHandler(MouseEventArgs args)
{
await OnContextMenuWithArgs.InvokeAsync((Item, args));
}
private async Task OnDragStartRecursive(TreeItemDto item)
{
await OnDragStart.InvokeAsync(item);
}
private async Task OnDragEndRecursive()
{
await OnDragEnd.InvokeAsync(Item);
}
private async Task OnItemDropRecursive(TreeItemDto item)
{
await OnItemDrop.InvokeAsync(item);
}
private async Task OnDragStartLocal()
{
await OnDragStart.InvokeAsync(Item);
}
private async Task OnDragEndLocal()
{
await OnDragEnd.InvokeAsync(Item);
}
private void OnDragEnter()
{
if (Item.Type == TreeItemType.Folder)
{
Item.IsDragOver = true;
}
}
private void OnDragOver(DragEventArgs args)
{
if (Item.Type == TreeItemType.Folder)
{
Item.IsDragOver = true;
}
}
private void OnDragLeave()
{
Item.IsDragOver = false;
}
private async Task OnDrop()
{
Item.IsDragOver = false;
await OnItemDrop.InvokeAsync(Item);
}
}