From ff88a310a4f5d4363a04410dfbb360b6115a1452 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:10:32 +0800 Subject: [PATCH 01/16] refactor: update html element tag name --- src/BootstrapBlazor/Components/Dropdown/Dropdown.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor index 5df35546499..c735da5155b 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor @@ -8,7 +8,7 @@ }
- @if (ButtonTemplate == null) { From 91dcd718448a7e374d7362919fae9d103a5537ed Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:10:50 +0800 Subject: [PATCH 02/16] =?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/DropdownTest.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/test/UnitTest/Components/DropdownTest.cs b/test/UnitTest/Components/DropdownTest.cs index 878ca416f92..970c997f7be 100644 --- a/test/UnitTest/Components/DropdownTest.cs +++ b/test/UnitTest/Components/DropdownTest.cs @@ -8,13 +8,29 @@ namespace UnitTest.Components; public class DropdownTest : BootstrapBlazorTestBase { [Fact] - public void ShowSplit_OK() + public async Task ShowSplit_OK() { + var clicked = false; + var clickedWithoutRender = false; var cut = Context.RenderComponent>(pb => { pb.Add(a => a.ShowSplit, true); + pb.Add(a => a.OnClick, () => + { + clicked = true; + }); + pb.Add(a => a.OnClickWithoutRender, () => + { + clickedWithoutRender = true; + return Task.CompletedTask; + }); }); Assert.Contains(" dropdown-toggle-split", cut.Markup); + + var button = cut.Find("button"); + await cut.InvokeAsync(() => button.Click()); + Assert.True(clicked); + Assert.True(clickedWithoutRender); } [Fact] From 08c93b3c0534a5b054663b6a868a65d6d33ab058 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:13:52 +0800 Subject: [PATCH 03/16] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs index bf9e226662d..865cb7a8672 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs @@ -106,12 +106,14 @@ public partial class Dropdown /// /// 获得/设置 OnClick 事件 + /// 为 true 时生效 /// [Parameter] public EventCallback OnClick { get; set; } /// /// 获得/设置 OnClick 事件不刷新父组件 + /// 为 true 时生效 /// [Parameter] public Func? OnClickWithoutRender { get; set; } From 27e9ba47ee90d82e38d028b2eb15f1c62ed293fc Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:14:05 +0800 Subject: [PATCH 04/16] feat(Dropdown): add IsAsync parameter --- src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs index 865cb7a8672..ccbf68b686f 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs @@ -118,6 +118,13 @@ public partial class Dropdown [Parameter] public Func? OnClickWithoutRender { get; set; } + /// + /// 获得/设置 是否为异步按钮,默认为 false 如果为 true 表示是异步按钮,点击按钮后禁用自身并且等待异步完成,过程中显示 loading 动画 + /// 为 true 时生效 + /// + [Parameter] + public bool IsAsync { get; set; } + /// /// 获得/设置 获取菜单对齐方式 默认 none 未设置 /// From 6e14ff18ac6295518b79a3486bddade3c541326f Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:28:22 +0800 Subject: [PATCH 05/16] =?UTF-8?q?refactor:=20=E7=B2=BE=E7=AE=80=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 提高代码可读性 --- .../Components/Button/Button.razor.cs | 62 +++++++------------ .../Components/Button/CountButton.cs | 23 +++---- 2 files changed, 31 insertions(+), 54 deletions(-) diff --git a/src/BootstrapBlazor/Components/Button/Button.razor.cs b/src/BootstrapBlazor/Components/Button/Button.razor.cs index c501bca497f..c2648928ab6 100644 --- a/src/BootstrapBlazor/Components/Button/Button.razor.cs +++ b/src/BootstrapBlazor/Components/Button/Button.razor.cs @@ -18,26 +18,11 @@ public partial class Button : ButtonBase [Parameter] public bool IsAutoFocus { get; set; } - /// - /// 按钮点击回调方法,内置支持 IsAsync 开关 - /// - protected EventCallback OnClickButton { get; set; } - /// /// 获得/设置 html button 实例 /// protected ElementReference ButtonElement { get; set; } - /// - /// OnInitialized 方法 - /// - protected override void OnInitialized() - { - base.OnInitialized(); - - SetClickHandler(); - } - /// /// OnAfterRenderAsync 方法 /// @@ -57,36 +42,33 @@ protected override async Task OnAfterRenderAsync(bool firstRender) } /// - /// 设置 OnClickButton 方法 + /// OnClickButton 方法 /// - protected virtual void SetClickHandler() + protected virtual async Task OnClickButton() { - OnClickButton = EventCallback.Factory.Create(this, async () => + if (IsAsync && ButtonType == ButtonType.Button) { - if (IsAsync && ButtonType == ButtonType.Button) - { - IsAsyncLoading = true; - ButtonIcon = LoadingIcon; - IsDisabled = true; - } + IsAsyncLoading = true; + ButtonIcon = LoadingIcon; + IsDisabled = true; + } - if (IsAsync) - { - await Task.Run(() => InvokeAsync(HandlerClick)); - } - else - { - await HandlerClick(); - } + if (IsAsync) + { + await Task.Run(() => InvokeAsync(HandlerClick)); + } + else + { + await HandlerClick(); + } - // 恢复按钮 - if (IsAsync && ButtonType == ButtonType.Button) - { - ButtonIcon = Icon; - IsDisabled = IsKeepDisabled; - IsAsyncLoading = false; - } - }); + // 恢复按钮 + if (IsAsync && ButtonType == ButtonType.Button) + { + ButtonIcon = Icon; + IsDisabled = IsKeepDisabled; + IsAsyncLoading = false; + } } /// diff --git a/src/BootstrapBlazor/Components/Button/CountButton.cs b/src/BootstrapBlazor/Components/Button/CountButton.cs index b585069610f..13252a6a38e 100644 --- a/src/BootstrapBlazor/Components/Button/CountButton.cs +++ b/src/BootstrapBlazor/Components/Button/CountButton.cs @@ -3,8 +3,6 @@ // See the LICENSE file in the project root for more information. // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone -using Microsoft.AspNetCore.Components.Web; - namespace BootstrapBlazor.Components; /// @@ -33,21 +31,18 @@ public class CountButton : Button /// /// /// - protected override void SetClickHandler() + protected override async Task OnClickButton() { - OnClickButton = EventCallback.Factory.Create(this, async () => - { - IsAsyncLoading = true; - ButtonIcon = LoadingIcon; - IsDisabled = true; + IsAsyncLoading = true; + ButtonIcon = LoadingIcon; + IsDisabled = true; - await Task.Run(() => InvokeAsync(HandlerClick)); - await UpdateCount(); + await Task.Run(() => InvokeAsync(HandlerClick)); + await UpdateCount(); - IsDisabled = false; - ButtonIcon = Icon; - IsAsyncLoading = false; - }); + IsDisabled = false; + ButtonIcon = Icon; + IsAsyncLoading = false; } /// From 652d60ab368b861f36c6f4a2c25013f532b9b87c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:41:15 +0800 Subject: [PATCH 06/16] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Button/Button.razor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Button/Button.razor.cs b/src/BootstrapBlazor/Components/Button/Button.razor.cs index c2648928ab6..4c123da58f0 100644 --- a/src/BootstrapBlazor/Components/Button/Button.razor.cs +++ b/src/BootstrapBlazor/Components/Button/Button.razor.cs @@ -89,7 +89,7 @@ protected virtual async Task HandlerClick() { IsNotRender = true; } - await OnClickWithoutRender.Invoke(); + await OnClickWithoutRender(); } if (OnClick.HasDelegate) { From 5c199142c181c93625a864458287c3e6775caaac Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:41:37 +0800 Subject: [PATCH 07/16] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=20IsAsync=20?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Dropdown/Dropdown.razor.cs | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs index ccbf68b686f..9e8d92cef02 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs @@ -125,6 +125,26 @@ public partial class Dropdown [Parameter] public bool IsAsync { get; set; } + /// + /// 获得/设置 是否异步结束后是否保持禁用状态,默认为 false + /// + /// 开启时有效 + [Parameter] + public bool IsKeepDisabled { get; set; } + + /// + /// 获得/设置 显示图标 + /// + [Parameter] + public string? Icon { get; set; } + + /// + /// 获得/设置 正在加载动画图标 默认为 fa-solid fa-spin fa-spinner + /// + [Parameter] + [NotNull] + public string? LoadingIcon { get; set; } + /// /// 获得/设置 获取菜单对齐方式 默认 none 未设置 /// @@ -173,6 +193,13 @@ public partial class Dropdown [Parameter] public Func? OnSelectedItemChanged { get; set; } + /// + /// 获得 IconTheme 实例 + /// + [Inject] + [NotNull] + protected IIconTheme? IconTheme { get; set; } + [NotNull] private List? DataSource { get; set; } @@ -181,6 +208,16 @@ public partial class Dropdown /// private SelectedItem? SelectedItem { get; set; } + /// + /// 获得/设置 是否当前正在异步执行操作 + /// + private bool _isAsyncLoading; + + /// + /// 获得/设置 实际按钮渲染图标 + /// + protected string? _buttonIcon { get; set; } + /// /// OnParametersSet 方法 /// @@ -203,6 +240,7 @@ protected override void OnParametersSet() ?? DataSource.FirstOrDefault(); FixedButtonText ??= SelectedItem?.Text; + LoadingIcon ??= IconTheme.GetIconByKey(ComponentIcons.ButtonLoadingIcon); } private IEnumerable GetItems() => (IsFixedButtonText && !ShowFixedButtonTextInDropdown) @@ -228,9 +266,45 @@ protected async Task OnItemClick(SelectedItem item) private string? ButtonText => IsFixedButtonText ? FixedButtonText : SelectedItem?.Text; private async Task OnClickButton() + { + if (IsAsync) + { + _isAsyncLoading = true; + _buttonIcon = LoadingIcon; + IsDisabled = true; + } + + if (IsAsync) + { + await Task.Run(() => InvokeAsync(HandlerClick)); + } + else + { + await HandlerClick(); + } + + // 恢复按钮 + if (IsAsync) + { + _buttonIcon = Icon; + IsDisabled = IsKeepDisabled; + _isAsyncLoading = false; + } + } + + + /// + /// 处理点击方法 + /// + /// + private async Task HandlerClick() { if (OnClickWithoutRender != null) { + if (!IsAsync) + { + IsNotRender = true; + } await OnClickWithoutRender(); } if (OnClick.HasDelegate) @@ -238,4 +312,5 @@ private async Task OnClickButton() await OnClick.InvokeAsync(); } } + } From 1ccc62483a21f5fdf4258d9f6cb064b72b55b04a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:45:57 +0800 Subject: [PATCH 08/16] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=20IsAsync=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Samples/Dropdowns.razor.cs | 8 ++++++++ src/BootstrapBlazor.Server/Locales/en-US.json | 1 + src/BootstrapBlazor.Server/Locales/zh-CN.json | 1 + 3 files changed, 10 insertions(+) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs index 5e51ff48194..a1e202d305a 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs @@ -220,6 +220,14 @@ private AttributeItem[] GetAttributes() => DefaultValue = " false " }, new() + { + Name = "IsAsync", + Description = Localizer["AttributeIsAsync"], + Type = "boolean", + ValueList = " — ", + DefaultValue = "false" + }, + new() { Name = "Size", Description = Localizer["AttributeSize"], diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 43afeeb8947..c003119a1c7 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -1788,6 +1788,7 @@ "AttributeMenuItem": "Menu item rendering label", "AttributeResponsive": "Menu alignment", "AttributeShowSplit": "Split button drop-down menu", + "AttributeIsAsync": "whether it is an asynchronous button", "AttributeSize": "Size", "AttributeTagName": "Label", "AttributeButtonTemplate": "The template of button", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index a4e851896d0..394f53d4ebc 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -1788,6 +1788,7 @@ "AttributeMenuItem": "菜单项渲染标签", "AttributeResponsive": "菜单对齐", "AttributeShowSplit": "分裂式按钮下拉菜单", + "AttributeIsAsync": "是否为异步按钮", "AttributeSize": "尺寸", "AttributeTagName": "标签", "AttributeButtonTemplate": "按钮模板", From 922d792dcb43bc92f510cd164ab97f2be1b4acc1 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 00:58:06 +0800 Subject: [PATCH 09/16] =?UTF-8?q?feat:=20=E5=88=86=E7=A6=BB=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=94=AF=E6=8C=81=E9=BB=98=E8=AE=A4=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Dropdown/Dropdown.razor.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs index 9e8d92cef02..cb282d3cfe5 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs @@ -38,10 +38,11 @@ public partial class Dropdown /// /// private string? ClassName => CssBuilder.Default("btn dropdown-toggle") - .AddClass("dropdown-toggle-split") - .AddClass($"btn-{Color.ToDescriptionString()}", Color != Color.None) - .AddClass($"btn-{Size.ToDescriptionString()}", Size != Size.None) - .Build(); + .AddClass("dropdown-toggle-split") + .AddClass($"btn-primary", Color == Color.None) + .AddClass($"btn-{Color.ToDescriptionString()}", Color != Color.None) + .AddClass($"btn-{Size.ToDescriptionString()}", Size != Size.None) + .Build(); /// /// 获得 是否分裂式按钮 From ccb42a0e430ec24b20f288ae2b6405ac5b695229 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 01:11:02 +0800 Subject: [PATCH 10/16] =?UTF-8?q?feat:=20=E5=BC=82=E6=AD=A5=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E6=98=BE=E7=A4=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Dropdown/Dropdown.razor | 6 +++++- .../Components/Dropdown/Dropdown.razor.cs | 18 +++++------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor index c735da5155b..c8359123b79 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor @@ -5,13 +5,17 @@ @if (IsShowLabel) { - + }
@if (ButtonTemplate == null) { + @if (!string.IsNullOrEmpty(_buttonIcon)) + { + + } @ButtonText } else diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs index cb282d3cfe5..f46ea1b75cd 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs @@ -273,16 +273,11 @@ private async Task OnClickButton() _isAsyncLoading = true; _buttonIcon = LoadingIcon; IsDisabled = true; + StateHasChanged(); + await Task.Yield(); } - if (IsAsync) - { - await Task.Run(() => InvokeAsync(HandlerClick)); - } - else - { - await HandlerClick(); - } + await HandlerClick(); // 恢复按钮 if (IsAsync) @@ -291,6 +286,7 @@ private async Task OnClickButton() IsDisabled = IsKeepDisabled; _isAsyncLoading = false; } + StateHasChanged(); } @@ -300,12 +296,9 @@ private async Task OnClickButton() /// private async Task HandlerClick() { + IsNotRender = true; if (OnClickWithoutRender != null) { - if (!IsAsync) - { - IsNotRender = true; - } await OnClickWithoutRender(); } if (OnClick.HasDelegate) @@ -313,5 +306,4 @@ private async Task HandlerClick() await OnClick.InvokeAsync(); } } - } From 4b7eadad11bf92614f4ab73300a58915511a7a2a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 01:12:52 +0800 Subject: [PATCH 11/16] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=20span=20?= =?UTF-8?q?=E5=8C=85=E8=A3=B9=E5=85=83=E7=B4=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Dropdown/Dropdown.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor index c8359123b79..354740d440d 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor @@ -16,7 +16,7 @@ { } - @ButtonText + @ButtonText } else { From 33cefa9a8403860731a03861ac2858a9fce386a3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 01:25:08 +0800 Subject: [PATCH 12/16] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Samples/Dropdowns.razor | 4 ++++ .../Components/Samples/Dropdowns.razor.cs | 12 ++++++++++++ src/BootstrapBlazor.Server/Locales/en-US.json | 4 +++- src/BootstrapBlazor.Server/Locales/zh-CN.json | 2 ++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor b/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor index 9a564769028..b69af811212 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor @@ -48,6 +48,10 @@
+ + + +
diff --git a/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs index a1e202d305a..15b016ab120 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Dropdowns.razor.cs @@ -10,6 +10,9 @@ namespace BootstrapBlazor.Server.Components.Samples; ///
public sealed partial class Dropdowns { + [Inject, NotNull] + private ToastService? ToastService { get; set; } + [NotNull] private ConsoleLogger? Logger { get; set; } @@ -142,6 +145,15 @@ private async Task OnCascadeBindSelectClick(SelectedItem item) StateHasChanged(); } + private async Task OnIsAsyncClick() + { + // 模拟异步延时 + await Task.Delay(1000); + + // 提示任务完成 + await ToastService.Success("Dropdown IsAsync", "Job done!"); + } + /// /// GetAttributes /// diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index c003119a1c7..39c19942614 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -1763,6 +1763,8 @@ "SplitIntro": "You can create a split drop-down menu with tags similar to a single button drop-down menu, and add ShowSplit='true' when you use a split component. Insert this symbol as a drop-down The options are handled at appropriate intervals (distance).", "SizeTitle": "Size definition", "SizeIntro": "The drop-down menu has a variety of size specifications to choose from Size attributes, including preset and split button drop-down menus.", + "IsAsyncTitle": "Asynchronous request button", + "IsAsyncIntro": "By setting whether the isAsync property button is asynchronous request button by setting whether the is false by default", "DirectionTitle": "Expanding direction", "DirectionIntro": "Add the style of Direction='Direction.Dropup' to make the drop-down menu expand upward.", "AlignmentTitle": "Menu alignment", @@ -2227,7 +2229,7 @@ "Block8Title": "Secondary encapsulation button", "Block8Intro": "The button display text is set by setting the Text property of the winButton component, and the click button is the text on the right that shows the clicked button", "Block9Title": "Asynchronous request button", - "Block9Intro": "By setting whether the isAsync property button is asynchronous request button by setting whether the is false by default", + "Block9Intro": "By setting whether the isAsync property button is asynchronous request button by setting whether the is false by default. Note This will only take effect when ShowSplit=\"true\" is set", "ButtonAsyncDescription": "When the button is an asynchronous request button, the button is changed to disabled, and the loading small icon is displayed, returning to normal after the asynchronous request ends, in this case, after clicking the asynchronous button, the request load animation is displayed and returns to normal after 5 seconds", "EventDesc1": "This event is triggered when the button is clicked", "EventDesc2": "This event is triggered when the button is clicked and the current component is not refreshed for performance improvement", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index 394f53d4ebc..c0011c53a9a 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -1761,6 +1761,8 @@ "ColorIntro": "提供各种颜色的警告信息框 引用 Color='Color.Primary' 等颜色及样式类来定义下拉菜单的外在表现", "SplitTitle": "分裂式按钮下拉菜单", "SplitIntro": "可用与单个按钮下拉菜单近似的标记创建分裂式下拉菜单,添加 ShowSplit='true' 插入此符号为下拉选项作适当的间隔(距)处理。", + "IsAsyncTitle": "异步按钮", + "IsAsyncIntro": "通过设置 IsAsync 属性按钮是否为 异步请求按钮,默认为 false注意 需要设置 ShowSplit=\"true\" 时才生效", "SizeTitle": "尺寸大小定义", "SizeIntro": "下拉菜单有各种大小规格可以选用 Size 属性,包括预设及分裂式按钮下拉菜单。", "DirectionTitle": "展开方向", From 53fe46bdae4edacb556219d9dd7b7927df552a22 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 01:35:51 +0800 Subject: [PATCH 13/16] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E8=B5=8B=E5=80=BC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs index f46ea1b75cd..c64c8a3a384 100644 --- a/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs +++ b/src/BootstrapBlazor/Components/Dropdown/Dropdown.razor.cs @@ -242,6 +242,11 @@ protected override void OnParametersSet() FixedButtonText ??= SelectedItem?.Text; LoadingIcon ??= IconTheme.GetIconByKey(ComponentIcons.ButtonLoadingIcon); + + if (_isAsyncLoading == false) + { + _buttonIcon = Icon; + } } private IEnumerable GetItems() => (IsFixedButtonText && !ShowFixedButtonTextInDropdown) From b19ed0cb4bca48a0ec9cbe58ee70a3b495fa95dc Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 01:36:06 +0800 Subject: [PATCH 14/16] =?UTF-8?q?refactor:=20=E4=BD=BF=E7=94=A8=E7=88=B6?= =?UTF-8?q?=E7=B1=BB=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Filters/FilterButton.razor.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Filters/FilterButton.razor.cs b/src/BootstrapBlazor/Components/Filters/FilterButton.razor.cs index bea392b73b4..396d0249353 100644 --- a/src/BootstrapBlazor/Components/Filters/FilterButton.razor.cs +++ b/src/BootstrapBlazor/Components/Filters/FilterButton.razor.cs @@ -28,10 +28,6 @@ public partial class FilterButton : Dropdown [Parameter] public string? ClearIcon { get; set; } - [Inject] - [NotNull] - private IIconTheme? IconTheme { get; set; } - /// /// /// From 32650d6d3809ddbd23e20ac42dc573bbc7d46e60 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 01:36:16 +0800 Subject: [PATCH 15/16] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=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/DropdownTest.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/test/UnitTest/Components/DropdownTest.cs b/test/UnitTest/Components/DropdownTest.cs index 970c997f7be..aad1347ccca 100644 --- a/test/UnitTest/Components/DropdownTest.cs +++ b/test/UnitTest/Components/DropdownTest.cs @@ -33,6 +33,25 @@ public async Task ShowSplit_OK() Assert.True(clickedWithoutRender); } + [Fact] + public async Task IsAsync_Ok() + { + var cut = Context.RenderComponent>(pb => + { + pb.Add(a => a.ShowSplit, true); + pb.Add(a => a.IsAsync, true); + pb.Add(a => a.IsKeepDisabled, false); + pb.Add(a => a.Icon, "fa-solid fa-test-icon"); + pb.Add(a => a.OnClickWithoutRender, () => + { + return Task.CompletedTask; + }); + }); + cut.Contains(""); + var button = cut.Find("button"); + await cut.InvokeAsync(() => button.Click()); + } + [Fact] public void ShowSize_OK() { From fd15859480c784a8dc1731fb067bee7056a9e693 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 9 Feb 2025 01:39:19 +0800 Subject: [PATCH 16/16] chore: bump version 9.3.1-beta10 --- 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 08ca21995af..569ead45b1f 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 9.3.1-beta09 + 9.3.1-beta10