refactor(ui): replace manual area tree rendering with TreeView component
This commit is contained in:
@@ -96,31 +96,27 @@
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (_areas.Count == 0)
|
<TreeView TItem="Area" Items="@_rootAreas"
|
||||||
{
|
ChildrenSelector='a => a.Children.OrderBy(c => c.Name).ToList()'
|
||||||
<div class="text-muted">No areas configured for this site.</div>
|
HasChildrenSelector="a => a.Children.Any()"
|
||||||
}
|
KeySelector="a => (object)a.Id"
|
||||||
else
|
StorageKey="areas-tree">
|
||||||
{
|
<NodeContent Context="area">
|
||||||
<div class="card">
|
<span>@area.Name</span>
|
||||||
<div class="card-body p-2">
|
</NodeContent>
|
||||||
@foreach (var node in BuildFlatTree())
|
<ContextMenu Context="area">
|
||||||
{
|
<button class="dropdown-item" @onclick="() => EditArea(area)">
|
||||||
<div class="d-flex align-items-center py-1 border-bottom"
|
Edit
|
||||||
style="padding-left: @(node.Depth * 24 + 8)px;">
|
</button>
|
||||||
<span class="me-2 text-muted small">
|
<div class="dropdown-divider"></div>
|
||||||
@(node.HasChildren ? "[+]" : " -")
|
<button class="dropdown-item text-danger" @onclick="() => DeleteArea(area)">
|
||||||
</span>
|
Delete
|
||||||
<span class="flex-grow-1">@node.Area.Name</span>
|
</button>
|
||||||
<button class="btn btn-outline-primary btn-sm py-0 px-1 me-1"
|
</ContextMenu>
|
||||||
@onclick="() => EditArea(node.Area)">Edit</button>
|
<EmptyContent>
|
||||||
<button class="btn btn-outline-danger btn-sm py-0 px-1"
|
<span class="text-muted fst-italic">No areas for this site. Add one above.</span>
|
||||||
@onclick="() => DeleteArea(node.Area)">Delete</button>
|
</EmptyContent>
|
||||||
</div>
|
</TreeView>
|
||||||
}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -176,25 +172,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private record AreaTreeNode(Area Area, int Depth, bool HasChildren);
|
private List<Area> _rootAreas => _areas.Where(a => a.ParentAreaId == null).OrderBy(a => a.Name).ToList();
|
||||||
|
|
||||||
private List<AreaTreeNode> BuildFlatTree()
|
|
||||||
{
|
|
||||||
var result = new List<AreaTreeNode>();
|
|
||||||
AddChildren(null, 0, result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AddChildren(int? parentId, int depth, List<AreaTreeNode> result)
|
|
||||||
{
|
|
||||||
var children = _areas.Where(a => a.ParentAreaId == parentId).OrderBy(a => a.Name);
|
|
||||||
foreach (var child in children)
|
|
||||||
{
|
|
||||||
var hasChildren = _areas.Any(a => a.ParentAreaId == child.Id);
|
|
||||||
result.Add(new AreaTreeNode(child, depth, hasChildren));
|
|
||||||
AddChildren(child.Id, depth + 1, result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetAreaPath(Area area)
|
private string GetAreaPath(Area area)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user