Skip to content

Commit 3b2af83

Browse files
ArgoZhangceladaris
andauthored
refactor(AutoComplete): redesign value change logic (#5130)
* doc: 增加本地化 * doc: 增加验证方法示例代码 * feat: 增加 TriggerChange 方法 * test: 更新单元测试 * doc: 更新示例 * chore: bump version 9.2.8-beta04 * chore: bump version 9.2.8-beta05 Co-Authored-By: celadaris <[email protected]> --------- Co-authored-by: celadaris <[email protected]> Co-Authored-By: Argo Zhang <[email protected]>
1 parent b149582 commit 3b2af83

File tree

6 files changed

+31
-15
lines changed

6 files changed

+31
-15
lines changed

src/BootstrapBlazor.Server/Components/Samples/AutoCompletes.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<DemoBlock Title="@Localizer["Block1Title"]" Introduction="@Localizer["Block1Intro"]" Name="Normal">
99
<section ignore>@Localizer["NormalDescription"]</section>
1010
<div style="width: 200px;">
11-
<AutoComplete Items="@StaticItems" IsSelectAllTextOnFocus="true" />
11+
<AutoComplete Items="@StaticItems" IsSelectAllTextOnFocus="true" Value="@Value"></AutoComplete>
1212
</div>
1313
</DemoBlock>
1414

src/BootstrapBlazor.Server/Components/Samples/AutoCompletes.razor.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ public sealed partial class AutoCompletes
1818

1919
private IEnumerable<string> Items => _items;
2020

21+
private string Value { get; set; } = "";
22+
2123
private Task OnValueChanged(string val)
2224
{
2325
_items.Clear();

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>9.2.8-beta03</Version>
4+
<Version>9.2.8-beta04</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ private async Task OnClickItem(string val)
133133
private List<string> Rows => FilterItems ?? Items.ToList();
134134

135135
/// <summary>
136-
/// TriggerOnChange 方法
136+
/// TriggerFilter 方法
137137
/// </summary>
138138
/// <param name="val"></param>
139139
[JSInvokable]
140-
public async Task TriggerOnChange(string val)
140+
public async Task TriggerFilter(string val)
141141
{
142142
if (OnCustomFilter != null)
143143
{
@@ -161,11 +161,21 @@ public async Task TriggerOnChange(string val)
161161
{
162162
FilterItems = FilterItems.Take(DisplayCount.Value).ToList();
163163
}
164+
StateHasChanged();
165+
}
164166

167+
/// <summary>
168+
/// TriggerChange 方法
169+
/// </summary>
170+
/// <param name="val"></param>
171+
[JSInvokable]
172+
public Task TriggerChange(string val)
173+
{
165174
CurrentValue = val;
166175
if (!ValueChanged.HasDelegate)
167176
{
168177
StateHasChanged();
169178
}
179+
return Task.CompletedTask;
170180
}
171181
}

src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,18 @@ export function init(id, invoke) {
5454
delete el.triggerEnter;
5555
});
5656

57+
EventHandler.on(input, 'change', e => {
58+
invoke.invokeMethodAsync('TriggerChange', e.target.value);
59+
});
60+
5761
Input.composition(input, async v => {
5862
const useInput = input.getAttribute('data-bb-input') !== 'false';
5963
if (isPopover === false && useInput) {
6064
el.classList.add('show');
6165
}
6266

6367
el.classList.add('is-loading');
64-
await invoke.invokeMethodAsync('TriggerOnChange', v);
68+
await invoke.invokeMethodAsync('TriggerFilter', v);
6569
el.classList.remove('is-loading');
6670
});
6771

test/UnitTest/Components/AutoCompleteTest.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public async Task OnCustomFilter_Test()
5353
builder.Add(a => a.OnCustomFilter, _ => Task.FromResult<IEnumerable<string>>(["test2", "test3", "test4"]));
5454
});
5555

56-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("t"));
56+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t"));
5757
var menus = cut.FindAll(".dropdown-item");
5858
Assert.Equal(3, menus.Count);
5959
}
@@ -68,7 +68,7 @@ public async Task IsLikeMatch_Test()
6868
});
6969

7070
// 正常匹配 无结果显示 NoDataTip
71-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("a"));
71+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("a"));
7272
var menus = cut.FindAll(".dropdown-item");
7373
Assert.Single(menus);
7474

@@ -77,15 +77,15 @@ public async Task IsLikeMatch_Test()
7777
{
7878
pb.Add(a => a.IsLikeMatch, true);
7979
});
80-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("as"));
80+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("as"));
8181
menus = cut.FindAll(".dropdown-item");
8282
Assert.Equal(2, menus.Count);
8383

84-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("k1"));
84+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("k1"));
8585
menus = cut.FindAll(".dropdown-item");
8686
Assert.Single(menus);
8787

88-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange(""));
88+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter(""));
8989
menus = cut.FindAll(".dropdown-item");
9090
Assert.Equal(2, menus.Count);
9191
}
@@ -101,7 +101,7 @@ public async Task IgnoreCase_Ok()
101101
});
102102

103103
// 大小写敏感
104-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("t"));
104+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t"));
105105
var menus = cut.FindAll(".dropdown-item");
106106
Assert.Single(menus);
107107

@@ -110,7 +110,7 @@ public async Task IgnoreCase_Ok()
110110
{
111111
pb.Add(a => a.IgnoreCase, true);
112112
});
113-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("t"));
113+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t"));
114114
menus = cut.FindAll(".dropdown-item");
115115
Assert.Equal(2, menus.Count);
116116
}
@@ -125,7 +125,7 @@ public async Task DisplayCount_Ok()
125125
builder.Add(a => a.DisplayCount, 2);
126126
});
127127

128-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("t"));
128+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t"));
129129
var menus = cut.FindAll(".dropdown-item");
130130
Assert.Equal(2, menus.Count);
131131
}
@@ -140,7 +140,7 @@ public async Task OnCustomFilter_Ok()
140140
pb.Add(a => a.OnCustomFilter, _ => Task.FromResult<IEnumerable<string>>(["test3", "test4", "test5"]));
141141
});
142142

143-
await cut.InvokeAsync(() => cut.Instance.TriggerOnChange("t"));
143+
await cut.InvokeAsync(() => cut.Instance.TriggerFilter("t"));
144144
var menus = cut.FindAll(".dropdown-item");
145145
Assert.Equal(3, menus.Count);
146146
}
@@ -210,7 +210,7 @@ public async Task ValidateForm_Ok()
210210

211211
// Trigger js invoke
212212
var comp = cut.FindComponent<AutoComplete>().Instance;
213-
await cut.InvokeAsync(() => comp.TriggerOnChange("v"));
213+
await cut.InvokeAsync(() => comp.TriggerChange("v"));
214214

215215
Assert.Equal("v", comp.Value);
216216
}

0 commit comments

Comments
 (0)