diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 2b0ae939bd76ca19c6c889c343ed23e2b23f753b..ae54977e0827bf8b24195dc5ac4748de4f26d19a 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 6.3.2 + 6.3.3-beta01 diff --git a/src/BootstrapBlazor/Components/Tree/Tree.razor b/src/BootstrapBlazor/Components/Tree/Tree.razor index de70727ed85c566b5fafb06b4d4d1b5eb940442f..31bb14f31c894adbc56607ce4e4eaa5d0ba3dfae 100644 --- a/src/BootstrapBlazor/Components/Tree/Tree.razor +++ b/src/BootstrapBlazor/Components/Tree/Tree.razor @@ -49,8 +49,7 @@ private RenderFragment RenderTreeItem => item => { + OnClick="p => OnRadioClick(item)" State="@Tree.CheckState(item)" /> }
@if (ShowIcon) diff --git a/src/BootstrapBlazor/Components/Tree/Tree.razor.cs b/src/BootstrapBlazor/Components/Tree/Tree.razor.cs index 6abcbe4fc1815cc8d6e596f5a44750058c3e9ed5..9e3d797aaf558d311a044b6f322b1c30e438e029 100644 --- a/src/BootstrapBlazor/Components/Tree/Tree.razor.cs +++ b/src/BootstrapBlazor/Components/Tree/Tree.razor.cs @@ -230,20 +230,27 @@ public partial class Tree t.AddRange(item.GetAllSubItems()); return t; }); - await OnTreeItemChecked(checkedItems.Where(i => i.Checked).ToList()); + await OnTreeItemChecked(checkedItems); } } private async Task OnRadioClick(TreeItem item) { - item.CascadeSetCheck(item.Checked); + if (ActiveItem != null) + { + ActiveItem.Checked = false; + } + ActiveItem = item; + ActiveItem.Checked = true; + + // 其他设置为 false if (OnTreeItemChecked != null) { - await OnTreeItemChecked.Invoke(new List { item }); + await OnTreeItemChecked(new List { item }); } } - private CheckboxState CheckState(TreeItem item) + private static CheckboxState CheckState(TreeItem item) { return item.Checked ? CheckboxState.Checked : CheckboxState.UnChecked; } diff --git a/src/BootstrapBlazor/Components/Tree/TreeItem.cs b/src/BootstrapBlazor/Components/Tree/TreeItem.cs index 53080f35d0282ebbc2cd5f11184b0637c9693886..b86f89961ef4e3e2ec209510ac3bf432c0b4ee29 100644 --- a/src/BootstrapBlazor/Components/Tree/TreeItem.cs +++ b/src/BootstrapBlazor/Components/Tree/TreeItem.cs @@ -67,18 +67,18 @@ public class TreeItem : NodeItem } } - /// - /// 级联设置展开状态方法 - /// - public void CollapseOtherNodes() - { - //if (!string.IsNullOrEmpty(ParentId)) - //{ - // var parent = Items.FirstOrDefault(i => i.Id) - // foreach (var node in Parent.Items.Where(p => p.IsExpanded && p != this)) - // { - // node.IsExpanded = false; - // } - //} - } + ///// + ///// 级联设置展开状态方法 + ///// + //public void CollapseOtherNodes() + //{ + // if (!string.IsNullOrEmpty(ParentId)) + // { + // var parent = Items.FirstOrDefault(i => i.Id) + // foreach (var node in Parent.Items.Where(p => p.IsExpanded && p != this)) + // { + // node.IsExpanded = false; + // } + // } + //} } diff --git a/test/UnitTest/Components/TreeTest.cs b/test/UnitTest/Components/TreeTest.cs index 4ec4b26daeb3c47cf00619488daf2d3f6d5aac3a..853a88dc27f4df69532c03fb0ec1da114493eaac 100644 --- a/test/UnitTest/Components/TreeTest.cs +++ b/test/UnitTest/Components/TreeTest.cs @@ -96,12 +96,30 @@ public class TreeTest : BootstrapBlazorTestBase }); pb.Add(a => a.Items, new List() { - new TreeItem() { Text = "Test1", Icon = "fa fa-fa", CssClass = "Test-Class" } + new TreeItem() + { + Text = "Test1", + Icon = "fa fa-fa", + CssClass = "Test-Class", + Items = new List() + { + new() + { + Text = "Test1-1", + Items = new List() + { + new() + { + Text = "Test1-1-1" + } + } + } + } + } }); }); cut.InvokeAsync(() => cut.Find("[type=\"checkbox\"]").Click()); - Assert.Single(checkedLists); cut.DoesNotContain("fa fa-fa"); cut.Contains("Test-Class"); @@ -183,4 +201,35 @@ public class TreeTest : BootstrapBlazorTestBase var subs = data.First().GetAllSubItems(); Assert.Equal(2, subs.Count()); } + + [Fact] + public void ShowRadio_Ok() + { + List? checkedLists = null; + var cut = Context.RenderComponent(pb => + { + pb.Add(a => a.ShowRadio, true); + pb.Add(a => a.OnTreeItemChecked, items => + { + checkedLists = items; + return Task.CompletedTask; + }); + pb.Add(a => a.Items, new List() + { + new() { Text = "Test1", Icon = "fa fa-fa" }, + new() { Text = "Test2", Icon = "fa fa-fa" } + }); + }); + cut.Find("[type=\"radio\"]").Click(); + Assert.Single(checkedLists); + Assert.Equal("Test1", checkedLists![0].Text); + + cut.FindAll("[type=\"radio\"]")[1].Click(); + Assert.Equal("Test2", checkedLists![0].Text); + + cut.SetParametersAndRender(pb => + { + pb.Add(a => a.ShowSkeleton, false); + }); + } }