From c7f5a33e467e2a4ec8c2cf519661025f737135dc Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 15 Apr 2025 16:24:42 +0800 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=20Value=20?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E8=BF=87=E6=BB=A4=E5=80=99?= =?UTF-8?q?=E9=80=89=E9=A1=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AutoComplete/AutoComplete.razor.cs | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs index e8f836b7d0b..08680e90f5b 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs @@ -93,6 +93,17 @@ protected override void OnInitialized() base.OnInitialized(); SkipRegisterEnterEscJSInvoke = true; + + Items ??= []; + + if (!string.IsNullOrEmpty(Value)) + { + _filterItems = GetFilterItemsByValue(Value); + if (DisplayCount != null) + { + _filterItems = [.. _filterItems.Take(DisplayCount.Value)]; + } + } } /// @@ -106,8 +117,6 @@ protected override void OnParametersSet() PlaceHolder ??= Localizer[nameof(PlaceHolder)]; Icon ??= IconTheme.GetIconByKey(ComponentIcons.AutoCompleteIcon); LoadingIcon ??= IconTheme.GetIconByKey(ComponentIcons.LoadingIcon); - - Items ??= []; } private bool _render = true; @@ -151,11 +160,7 @@ public override async Task TriggerFilter(string val) } else { - var comparison = IgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; - var items = IsLikeMatch - ? Items.Where(s => s.Contains(val, comparison)) - : Items.Where(s => s.StartsWith(val, comparison)); - _filterItems = [.. items]; + _filterItems = GetFilterItemsByValue(val); } if (DisplayCount != null) @@ -166,6 +171,15 @@ public override async Task TriggerFilter(string val) await TriggerChange(val); } + private List GetFilterItemsByValue(string val) + { + var comparison = IgnoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + var items = IsLikeMatch + ? Items.Where(s => s.Contains(val, comparison)) + : Items.Where(s => s.StartsWith(val, comparison)); + return [.. items]; + } + /// /// TriggerChange method /// From 14e5ac9e2a0e4526b8abbb85087896e7e7f69d06 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 15 Apr 2025 16:26:24 +0800 Subject: [PATCH 2/3] chore: bump version 9.5.6-beta05 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 1d839a367a7..cbab8bfd3b0 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 9.5.6-beta04 + 9.5.6-beta05 From fdd5428eb02416fee6c0e734655c10114342f6e9 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Tue, 15 Apr 2025 16:36:18 +0800 Subject: [PATCH 3/3] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/AutoCompleteTest.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/UnitTest/Components/AutoCompleteTest.cs b/test/UnitTest/Components/AutoCompleteTest.cs index 821b5f79eb5..a0c5caaef66 100644 --- a/test/UnitTest/Components/AutoCompleteTest.cs +++ b/test/UnitTest/Components/AutoCompleteTest.cs @@ -40,6 +40,23 @@ public async Task Items_Ok() Assert.Equal("Test", cut.Instance.Value); } + [Fact] + public void Value_Ok() + { + var cut = Context.RenderComponent(pb => + { + pb.Add(a => a.Items, new List() { "test1", "test12", "test123", "test1234" }); + pb.Add(a => a.Value, "test12"); + pb.Add(a => a.DisplayCount, 2); + }); + var menus = cut.FindAll(".dropdown-item"); + + // 由于 Value = test12 + // 并且设置了 DisplayCount = 2 + // 候选项只有 2 个 + Assert.Equal(2, menus.Count); + } + [Fact] public void Debounce_Ok() {