Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 17 additions & 3 deletions src/BootstrapBlazor.Server/Components/Samples/TreeViews.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,21 @@ private Task OnDragItemEndAsync(TreeViewDragContext<TreeFoo> context)
source.ParentId = context.IsChildren ? target.Id : target.ParentId;
}
}
DraggableItems = TreeFoo.CascadingTree(items);

var expandNodeIds = new List<string>();
Action<TreeViewItem<TreeFoo>>? cb = null;
if (context.IsChildren)
{
// 自动展开目标节点
cb = item =>
{
if (item.Value.Id == context.Target.Value.Id)
{
item.IsExpand = true;
}
};
}
DraggableItems = TreeFoo.CascadingTree(items, cb);
DraggableItems[0].IsExpand = true;
if (DraggableItems.Count > 1)
{
Expand Down Expand Up @@ -184,9 +198,9 @@ private static List<TreeFoo> GetDraggableItems()
new() { Text = "Item D", Id = "4", ParentId = "1", Icon = "fa-solid fa-font-awesome" },
new() { Text = "Item E", Id = "5", ParentId = "1", Icon = "fa-solid fa-font-awesome" },

new() { Text = "Item B (Drop inside blocked)", Id = "2", Icon = "fa-solid fa-font-awesome" },
new() { Text = "Item B", Id = "2", Icon = "fa-solid fa-font-awesome" },
new() { Text = "Item F", Id = "6", ParentId = "2", Icon = "fa-solid fa-font-awesome" },
new() { Text = "Item G (Can not move out)", Id = "9", ParentId = "2", Icon = "fa-solid fa-font-awesome" },
new() { Text = "Item G", Id = "9", ParentId = "2", Icon = "fa-solid fa-font-awesome" },

new() { Text = "Item C", Id = "3", Icon = "fa-solid fa-font-awesome" },
new() { Text = "Item H", Id = "7", ParentId = "3", Icon = "fa-solid fa-font-awesome" },
Expand Down
5 changes: 3 additions & 2 deletions src/BootstrapBlazor.Server/Data/TreeFoo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -177,10 +177,11 @@ public static List<TreeViewItem<TreeFoo>> GetCheckedTreeItems(string? parentId =
/// 树状数据层次化方法
/// </summary>
/// <param name="items">数据集合</param>
public static List<TreeViewItem<TreeFoo>> CascadingTree(IEnumerable<TreeFoo> items) => items.CascadingTree(null, (foo, parent) => foo.ParentId == parent?.Value.Id, foo => new TreeViewItem<TreeFoo>(foo)
/// <param name="treeviewItemCallback">节点状态回调方法</param>
public static List<TreeViewItem<TreeFoo>> CascadingTree(IEnumerable<TreeFoo> items, Action<TreeViewItem<TreeFoo>>? treeviewItemCallback = null) => items.CascadingTree(null, (foo, parent) => foo.ParentId == parent?.Value.Id, foo => new TreeViewItem<TreeFoo>(foo)
{
Text = foo.Text,
Icon = foo.Icon,
IsActive = foo.IsActive
});
}, treeviewItemCallback);
}
19 changes: 11 additions & 8 deletions src/BootstrapBlazor/Extensions/ExpandableNodeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,16 @@ public static void SetParentExpand<TNode, TItem>(this TNode node, bool expand) w
/// <param name="parent">父级节点</param>
/// <param name="predicate">查找子节点 Lambda 表达式</param>
/// <param name="valueFactory"></param>
public static List<TreeViewItem<TItem>> CascadingTree<TItem>(this IEnumerable<TItem> items, TreeViewItem<TItem>? parent, Func<TItem, TreeViewItem<TItem>?, bool> predicate, Func<TItem, TreeViewItem<TItem>> valueFactory) => items
.Where(i => predicate(i, parent))
.Select(i =>
/// <param name="treeViewItemCallback">节点是否展开回调方法 默认 null 未设置</param>
public static List<TreeViewItem<TItem>> CascadingTree<TItem>(this IEnumerable<TItem> items, TreeViewItem<TItem>? parent, Func<TItem, TreeViewItem<TItem>?, bool> predicate, Func<TItem, TreeViewItem<TItem>> valueFactory, Action<TreeViewItem<TItem>>? treeViewItemCallback = null) => [.. items.Where(i => predicate(i, parent)).Select(i =>
{
var item = valueFactory(i);
item.Items = items.CascadingTree(item, predicate, valueFactory, treeViewItemCallback);
item.Parent = parent;
if (treeViewItemCallback != null)
{
var item = valueFactory(i);
item.Items = items.CascadingTree(item, predicate, valueFactory);
item.Parent = parent;
return item;
}).ToList();
treeViewItemCallback(item);
}
return item;
})];
}
Loading