Skip to content

Commit c673833

Browse files
authored
fix(Dropdown): not show dropdown menu after toggle IsDisabled parameter (#4848)
* fix: 修复切换禁用状态后无法弹出下拉框问题 * chore: bump version 9.1.3 * feat: 增加 Item 禁用样式 * test: 增加单元测试 * refactor: 更改禁用样式 * test: 更新单元测试 * refactor: 同步代码 * test: 更新单元测试 * test: 更新单元测试 --------- Signed-off-by: Argo Zhang <[email protected]>
1 parent 24fc677 commit c673833

File tree

7 files changed

+33
-37
lines changed

7 files changed

+33
-37
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.1.3-beta08</Version>
4+
<Version>9.1.3</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public partial class Dropdown<TValue>
6868
/// <param name="item"></param>
6969
/// <returns></returns>
7070
protected string? DisableItem(SelectedItem item) => CssBuilder.Default("dropdown-item")
71-
.AddClass("is-disabled", item.IsDisabled)
71+
.AddClass("disabled", item.IsDisabled)
7272
.Build();
7373

7474
/// <summary>

src/BootstrapBlazor/Components/SelectGeneric/SelectGeneric.razor

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,15 @@
3131
<span class="@ClearClassString" @onclick="OnClearValue"><i class="@ClearIcon"></i></span>
3232
}
3333
<div class="dropdown-menu">
34+
@if (ShowSearch)
35+
{
36+
<div class="@SearchClassString">
37+
<input type="text" class="search-text form-control" autocomplete="off" value="@SearchText" aria-label="Search">
38+
<i class="@SearchIconString"></i>
39+
</div>
40+
}
3441
@if (IsVirtualize)
3542
{
36-
@if (ShowSearch)
37-
{
38-
<div class="@SearchClassString">
39-
<input type="text" class="search-text form-control" autocomplete="off" value="@SearchText" @oninput="EventCallback.Factory.CreateBinder<string>(this, async v => await SearchTextChanged(v), SearchText)" aria-label="Search">
40-
<i class="@SearchIconString"></i>
41-
</div>
42-
}
4343
<div class="dropdown-virtual">
4444
@if (OnQueryAsync == null)
4545
{
@@ -53,13 +53,6 @@
5353
}
5454
else
5555
{
56-
@if (ShowSearch)
57-
{
58-
<div class="@SearchClassString">
59-
<input type="text" class="search-text form-control" autocomplete="off" value="@SearchText" @oninput="EventCallback.Factory.CreateBinder<string>(this, async v => await SearchTextChanged(v), SearchText)" aria-label="Search">
60-
<i class="@SearchIconString"></i>
61-
</div>
62-
}
6356
@foreach (var itemGroup in Rows.GroupBy(i => i.GroupName))
6457
{
6558
if (!string.IsNullOrEmpty(itemGroup.Key))

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ private async Task SearchTextChanged(string val)
391391
/// <inheritdoc/>
392392
/// </summary>
393393
/// <returns></returns>
394-
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(ConfirmSelectedItem));
394+
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new { ConfirmMethodCallback = nameof(ConfirmSelectedItem), SearchMethodCallback = nameof(TriggerOnSearch) });
395395

396396
/// <summary>
397397
/// 客户端回车回调方法
@@ -408,6 +408,18 @@ public async Task ConfirmSelectedItem(int index)
408408
}
409409
}
410410

411+
/// <summary>
412+
/// 客户端搜索栏回调方法
413+
/// </summary>
414+
/// <param name="searchText"></param>
415+
/// <returns></returns>
416+
[JSInvokable]
417+
public async Task TriggerOnSearch(string searchText)
418+
{
419+
await SearchTextChanged(searchText);
420+
StateHasChanged();
421+
}
422+
411423
/// <summary>
412424
/// 下拉框选项点击时调用此方法
413425
/// </summary>

test/UnitTest/Components/DropdownTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ public void Disabled_Ok()
233233
new("2", "Test2")
234234
});
235235
});
236-
cut.Contains("<div class=\"dropdown-item is-disabled\">Test1</div>");
236+
cut.Contains("<div class=\"dropdown-item disabled\">Test1</div>");
237237
}
238238

239239
[Fact]

test/UnitTest/Components/SelectGenericTest.cs

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,6 @@ namespace UnitTest.Components;
1313

1414
public class SelectGenericTest : BootstrapBlazorTestBase
1515
{
16-
[Fact]
17-
public void SeletectedItem_Ok()
18-
{
19-
var item = new SelectedItem(null!, "Text");
20-
Assert.Equal(item.Value, string.Empty);
21-
}
22-
2316
[Fact]
2417
public async Task OnSearchTextChanged_Null()
2518
{
@@ -42,7 +35,7 @@ await ctx.InvokeAsync(async () =>
4235
await ctx.Instance.ConfirmSelectedItem(0);
4336

4437
// 搜索 T
45-
ctx.Find(".search-text").Input("T");
38+
await ctx.Instance.TriggerOnSearch("T");
4639
await ctx.Instance.ConfirmSelectedItem(0);
4740
});
4841

@@ -68,9 +61,9 @@ await ctx.InvokeAsync(async () =>
6861
});
6962
});
7063

71-
await ctx.InvokeAsync(() =>
64+
await ctx.InvokeAsync(async () =>
7265
{
73-
ctx.Find(".search-text").Input("T");
66+
await ctx.Instance.TriggerOnSearch("T");
7467
});
7568
cut.DoesNotContain("Test2");
7669
}
@@ -672,8 +665,7 @@ public async Task IsVirtualize_Items_Clearable_Ok()
672665
// 覆盖有搜索条件时,点击清空按钮
673666
// 期望 UI 显示值为默认值
674667
// 期望 下拉框为全数据
675-
var input = cut.Find(".search-text");
676-
await cut.InvokeAsync(() => input.Input("2"));
668+
await cut.InvokeAsync(() => cut.Instance.TriggerOnSearch("2"));
677669

678670
// 下拉框仅显示一个选项 Test2
679671
var items = cut.FindAll(".dropdown-item");
@@ -730,8 +722,7 @@ public async Task IsVirtualize_OnQueryAsync_Clearable_Ok()
730722
// 覆盖有搜索条件时,点击清空按钮
731723
// 期望 UI 显示值为默认值
732724
// 期望 下拉框为全数据
733-
var input = cut.Find(".search-text");
734-
await cut.InvokeAsync(() => input.Input("2"));
725+
await cut.InvokeAsync(() => cut.Instance.TriggerOnSearch("2"));
735726

736727
// 下拉框仅显示一个选项 Test2
737728
var items = cut.FindAll(".dropdown-item");

test/UnitTest/Components/SelectTest.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ await ctx.InvokeAsync(async () =>
3535
await ctx.Instance.ConfirmSelectedItem(0);
3636

3737
// 搜索 T
38-
ctx.Find(".search-text").Input("T");
38+
await ctx.Instance.TriggerOnSearch("T");
3939
await ctx.Instance.ConfirmSelectedItem(0);
4040
});
4141

@@ -61,9 +61,9 @@ await ctx.InvokeAsync(async () =>
6161
});
6262
});
6363

64-
await ctx.InvokeAsync(() =>
64+
await ctx.InvokeAsync(async () =>
6565
{
66-
ctx.Find(".search-text").Input("T");
66+
await ctx.Instance.TriggerOnSearch("T");
6767
});
6868
cut.DoesNotContain("Test2");
6969
}
@@ -663,7 +663,7 @@ public async Task IsVirtualize_Items_Clearable_Ok()
663663
// 期望 UI 显示值为默认值
664664
// 期望 下拉框为全数据
665665
var input = cut.Find(".search-text");
666-
await cut.InvokeAsync(() => input.Input("2"));
666+
await cut.InvokeAsync(() => cut.Instance.TriggerOnSearch("2"));
667667

668668
// 下拉框仅显示一个选项 Test2
669669
var items = cut.FindAll(".dropdown-item");
@@ -721,7 +721,7 @@ public async Task IsVirtualize_OnQueryAsync_Clearable_Ok()
721721
// 期望 UI 显示值为默认值
722722
// 期望 下拉框为全数据
723723
var input = cut.Find(".search-text");
724-
await cut.InvokeAsync(() => input.Input("2"));
724+
await cut.InvokeAsync(() => cut.Instance.TriggerOnSearch("2"));
725725

726726
// 下拉框仅显示一个选项 Test2
727727
var items = cut.FindAll(".dropdown-item");

0 commit comments

Comments
 (0)