Skip to content

Commit 9b51e50

Browse files
authored
fix(Select): trigger OnSelectedItemsChanged after clear (#6234)
* feat: trigger OnSelectedItemChanged callback * feat: 增加 OnSelectedItemsChanged 回调逻辑 * refactor: 触发 OnSelectedItemChanged 回调 * refactor: 增加 OnSelectedItemChanged 回调方法 * test: 更新单元测试 * chore: bump version 9.7.4-beta05
1 parent 6850f1a commit 9b51e50

File tree

8 files changed

+35
-4
lines changed

8 files changed

+35
-4
lines changed

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.7.4-beta04</Version>
4+
<Version>9.7.4-beta05</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/Select/MultiSelect.razor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ protected override async Task OnClearValue()
286286
await base.OnClearValue();
287287

288288
SelectedItems.Clear();
289+
await SetValue();
289290
}
290291

291292
/// <summary>
@@ -459,7 +460,7 @@ private async Task SetValue()
459460

460461
if (OnSelectedItemsChanged != null)
461462
{
462-
await OnSelectedItemsChanged.Invoke(SelectedItems);
463+
await OnSelectedItemsChanged(SelectedItems);
463464
}
464465

465466
_lastSelectedValueString = CurrentValueAsString;

src/BootstrapBlazor/Components/Select/Select.razor.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,10 @@ protected override async Task OnClearValue()
406406
await base.OnClearValue();
407407

408408
SelectedItem = null;
409-
_lastSelectedValueString = "";
409+
if (OnSelectedItemChanged != null)
410+
{
411+
await OnSelectedItemChanged(new SelectedItem("", ""));
412+
}
410413
}
411414

412415
private string? ReadonlyString => IsEditable ? null : "readonly";

src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ protected override async Task OnClearValue()
328328
await base.OnClearValue();
329329

330330
SelectedItems.Clear();
331+
await SetValue();
331332
}
332333

333334
private bool _isToggle;
@@ -435,7 +436,7 @@ private async Task SetValue()
435436

436437
if (OnSelectedItemsChanged != null)
437438
{
438-
await OnSelectedItemsChanged.Invoke(SelectedItems);
439+
await OnSelectedItemsChanged(SelectedItems);
439440
}
440441

441442
CurrentValue = [.. SelectedItems.Select(i => i.Value)];

src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,10 @@ protected override async Task OnClearValue()
474474
await VirtualizeElement.RefreshDataAsync();
475475
}
476476
SelectedItem = new SelectedItem<TValue>(default!, "");
477+
if (OnSelectedItemChanged != null)
478+
{
479+
await OnSelectedItemChanged(SelectedItem);
480+
}
477481
}
478482

479483
private string? ReadonlyString => IsEditable ? null : "readonly";

test/UnitTest/Components/MultiSelectTest.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,7 @@ public void DefaultVirtualizeItemText_Ok()
690690
[Fact]
691691
public async Task IsVirtualize_Items_Clearable_Ok()
692692
{
693+
IEnumerable<SelectedItem>? selectedItems = null;
693694
var cut = Context.RenderComponent<MultiSelect<string>>(pb =>
694695
{
695696
pb.Add(a => a.Items, new SelectedItem[]
@@ -703,6 +704,11 @@ public async Task IsVirtualize_Items_Clearable_Ok()
703704
pb.Add(a => a.OverscanCount, 4);
704705
pb.Add(a => a.IsClearable, true);
705706
pb.Add(a => a.ShowSearch, true);
707+
pb.Add(a => a.OnSelectedItemsChanged, items =>
708+
{
709+
selectedItems = items;
710+
return Task.CompletedTask;
711+
});
706712
});
707713

708714
// 覆盖有搜索条件时,点击清空按钮
@@ -718,6 +724,8 @@ public async Task IsVirtualize_Items_Clearable_Ok()
718724
// 点击 Clear 按钮
719725
var button = cut.Find(".clear-icon");
720726
await cut.InvokeAsync(() => button.Click());
727+
Assert.NotNull(selectedItems);
728+
Assert.Empty(selectedItems);
721729

722730
// 下拉框显示所有选项
723731
items = cut.FindAll(".dropdown-item");

test/UnitTest/Components/SelectGenericTest.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,15 @@ public void Disabled_Ok()
132132
public void IsClearable_Ok()
133133
{
134134
var val = "Test2";
135+
string? selectedValue = "Test2";
135136
var cut = Context.RenderComponent<SelectGeneric<string>>(pb =>
136137
{
137138
pb.Add(a => a.IsClearable, true);
139+
pb.Add(a => a.OnSelectedItemChanged, item =>
140+
{
141+
selectedValue = item.Value;
142+
return Task.CompletedTask;
143+
});
138144
pb.Add(a => a.Items, new List<SelectedItem<string>>()
139145
{
140146
new("", "请选择"),
@@ -151,6 +157,7 @@ public void IsClearable_Ok()
151157
var clearButton = cut.Find(".clear-icon");
152158
cut.InvokeAsync(() => clearButton.Click());
153159
Assert.Null(val);
160+
Assert.Null(selectedValue);
154161

155162
// 提高代码覆盖率
156163
var select = cut;

test/UnitTest/Components/SelectTest.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,16 @@ public void Select_Lookup()
135135
[Fact]
136136
public async Task IsClearable_Ok()
137137
{
138+
var selectedValue = "Test2";
138139
var val = "Test2";
139140
var cut = Context.RenderComponent<Select<string>>(pb =>
140141
{
141142
pb.Add(a => a.IsClearable, true);
143+
pb.Add(a => a.OnSelectedItemChanged, item =>
144+
{
145+
selectedValue = item.Value;
146+
return Task.CompletedTask;
147+
});
142148
pb.Add(a => a.Items, new List<SelectedItem>()
143149
{
144150
new("", "请选择"),
@@ -155,6 +161,7 @@ public async Task IsClearable_Ok()
155161
var clearButton = cut.Find(".clear-icon");
156162
await cut.InvokeAsync(() => clearButton.Click());
157163
Assert.Null(val);
164+
Assert.Equal("", selectedValue);
158165

159166
// 提高代码覆盖率
160167
var select = cut;

0 commit comments

Comments
 (0)