diff --git a/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor b/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor index 75a54c1cc53..db8af09f299 100644 --- a/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor +++ b/src/BootstrapBlazor/Components/Button/PopConfirmButton.razor @@ -31,6 +31,7 @@ else + ShowCloseButton="@ShowCloseButton" OnClose="@OnClose" + ShowConfirmButton="@ShowConfirmButton" OnConfirm="@OnClickConfirm" ChildContent="@BodyTemplate" /> ; } diff --git a/src/BootstrapBlazor/Components/Button/PopConfirmButtonBase.cs b/src/BootstrapBlazor/Components/Button/PopConfirmButtonBase.cs index 623de23331b..89bbe4cf629 100644 --- a/src/BootstrapBlazor/Components/Button/PopConfirmButtonBase.cs +++ b/src/BootstrapBlazor/Components/Button/PopConfirmButtonBase.cs @@ -21,7 +21,7 @@ public abstract class PopConfirmButtonBase : ButtonBase protected override string? TriggerString => Trigger == "click" ? null : Trigger; /// - /// 获得/设置 是否为 A 标签 默认 false 使用 button 渲染 + /// 获得/设置 是否为 A 标签 默认 false 使用 button 渲染 /// [Parameter] public bool IsLink { get; set; } @@ -58,6 +58,12 @@ public abstract class PopConfirmButtonBase : ButtonBase [NotNull] public Func? OnConfirm { get; set; } + /// + /// 获得/设置 是否显示确认按钮 + /// + [Parameter] + public bool ShowConfirmButton { get; set; } = true; + /// /// 获得/设置 点击关闭时回调方法 /// @@ -65,6 +71,12 @@ public abstract class PopConfirmButtonBase : ButtonBase [NotNull] public Func? OnClose { get; set; } + /// + /// 获得/设置 是否显示关闭按钮 + /// + [Parameter] + public bool ShowCloseButton { get; set; } = true; + /// /// 获得/设置 点击确认弹窗前回调方法 返回真时弹出弹窗 返回假时不弹出 默认 null /// diff --git a/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor b/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor index f4c69075170..507c7ccfa08 100644 --- a/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor +++ b/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor @@ -10,7 +10,11 @@

@if (ChildContent != null) { - @ChildContent + + + @ChildContent + + } else { @@ -19,12 +23,18 @@ }

-
- @CloseButtonText -
-
- @ConfirmButtonText -
+ @if (ShowCloseButton) + { +
+ @CloseButtonText +
+ } + @if (ShowConfirmButton) + { +
+ @ConfirmButtonText +
+ }
diff --git a/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor.cs b/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor.cs index 8e773a64b45..23071f3e329 100644 --- a/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor.cs +++ b/src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor.cs @@ -27,6 +27,18 @@ public partial class PopConfirmButtonContent .AddClass(Icon) .Build(); + /// + /// 获得/设置 是否显示确认按钮 + /// + [Parameter] + public bool ShowConfirmButton { get; set; } = true; + + /// + /// 获得/设置 是否显示关闭按钮 + /// + [Parameter] + public bool ShowCloseButton { get; set; } = true; + /// /// 获得/设置 显示标题 /// diff --git a/test/UnitTest/Components/PopConfirmButtonTest.cs b/test/UnitTest/Components/PopConfirmButtonTest.cs index dd48f59c22e..2a33be83130 100644 --- a/test/UnitTest/Components/PopConfirmButtonTest.cs +++ b/test/UnitTest/Components/PopConfirmButtonTest.cs @@ -55,43 +55,36 @@ await cut.InvokeAsync(() => var close = false; var beforeClose = false; - await cut.InvokeAsync(() => + var popButton = cut.FindComponent(); + popButton.SetParametersAndRender(pb => { - var popButton = cut.FindComponent(); - popButton.SetParametersAndRender(pb => + pb.Add(a => a.Content, "Test_Content"); + pb.Add(a => a.ConfirmButtonText, "Test_Confirm_Text"); + pb.Add(a => a.CloseButtonText, "Test_Close_Text"); + pb.Add(a => a.CustomClass, "test-custom-class"); + pb.Add(a => a.OnConfirm, () => { - pb.Add(a => a.Content, "Test_Content"); - pb.Add(a => a.ConfirmButtonText, "Test_Confirm_Text"); - pb.Add(a => a.CloseButtonText, "Test_Close_Text"); - pb.Add(a => a.CustomClass, "test-custom-class"); - pb.Add(a => a.OnConfirm, () => - { - confirm = true; - return Task.CompletedTask; - }); - pb.Add(a => a.OnClose, () => - { - close = true; - return Task.CompletedTask; - }); - pb.Add(a => a.OnBeforeClick, () => - { - beforeClose = true; - return Task.FromResult(true); - }); + confirm = true; + return Task.CompletedTask; + }); + pb.Add(a => a.OnClose, () => + { + close = true; + return Task.CompletedTask; + }); + pb.Add(a => a.OnBeforeClick, () => + { + beforeClose = true; + return Task.FromResult(true); }); }); // 默认设置增加 shadow 样式 Assert.Contains("data-bs-custom-class=\"test-custom-class shadow\"", cut.Markup); - var popButton = cut.FindComponent(); - await cut.InvokeAsync(() => + // 移除 shadow 样式 + popButton.SetParametersAndRender(pb => { - // 移除 shadow 样式 - popButton.SetParametersAndRender(pb => - { - pb.Add(a => a.ShowShadow, false); - }); + pb.Add(a => a.ShowShadow, false); }); Assert.Contains("data-bs-custom-class=\"test-custom-class\"", cut.Markup); @@ -125,13 +118,9 @@ await cut.InvokeAsync(() => Assert.True(confirm); // Submit - popButton = cut.FindComponent(); - await cut.InvokeAsync(() => + popButton.SetParametersAndRender(pb => { - popButton.SetParametersAndRender(pb => - { - pb.Add(a => a.ButtonType, ButtonType.Submit); - }); + pb.Add(a => a.ButtonType, ButtonType.Submit); }); // Show @@ -150,17 +139,13 @@ await cut.InvokeAsync(() => // IsAsync var tcs = new TaskCompletionSource(); - popButton = cut.FindComponent(); - await cut.InvokeAsync(() => + popButton.SetParametersAndRender(pb => { - popButton.SetParametersAndRender(pb => + pb.Add(a => a.IsAsync, true); + pb.Add(a => a.OnConfirm, () => { - pb.Add(a => a.IsAsync, true); - pb.Add(a => a.OnConfirm, () => - { - tcs.TrySetResult(); - return Task.CompletedTask; - }); + tcs.TrySetResult(); + return Task.CompletedTask; }); }); @@ -179,13 +164,9 @@ await cut.InvokeAsync(() => }); await tcs.Task; - popButton = cut.FindComponent(); - await cut.InvokeAsync(() => + popButton.SetParametersAndRender(pb => { - popButton.SetParametersAndRender(pb => - { - pb.Add(a => a.ButtonType, ButtonType.Button); - }); + pb.Add(a => a.ButtonType, ButtonType.Button); }); // Show @@ -203,39 +184,53 @@ await cut.InvokeAsync(() => }); // IsLink - popButton = cut.FindComponent(); - await cut.InvokeAsync(() => + popButton.SetParametersAndRender(pb => { - popButton.SetParametersAndRender(pb => - { - pb.Add(a => a.IsLink, true); - }); + pb.Add(a => a.IsLink, true); }); - popButton = cut.FindComponent(); await cut.InvokeAsync(() => { popButton.Contains(""); + + // 级联参数 + popButton.SetParametersAndRender(pb => + { + pb.Add(a => a.ShowCloseButton, true); + pb.Add(a => a.ShowConfirmButton, true); + pb.Add(a => a.BodyTemplate, builder => + { + builder.OpenComponent(0); + builder.CloseComponent(); + }); + }); + + var mockContent = cut.FindComponent(); + Assert.True(mockContent.Instance.Close()); + Assert.True(mockContent.Instance.Confirm()); } [Fact] @@ -293,4 +288,17 @@ public void TooltipText_Ok() }); cut.Contains("data-bs-original-title=\"pop-tooltip\""); } + + public class MockContent : ComponentBase + { + [CascadingParameter(Name = "PopoverConfirmButtonCloseAsync")] + private Func? OnCloseAsync { get; set; } + + [CascadingParameter(Name = "PopoverConfirmButtonConfirmAsync")] + private Func? OnConfirmAsync { get; set; } + + public bool Close() => OnCloseAsync != null; + + public bool Confirm() => OnConfirmAsync != null; + } }