Skip to content

Commit 441532b

Browse files
authored
feat(PopConfirmButton): add CloseButtonIcon/ConfirmButtonIcon parameter (#5455)
* refactor: 精简代码 * refactor: 移除 dismiss 处理方法 * chore: 更新图标 * feat: 增加弹窗内按钮图标参数 * chore: 增加按钮图标参数 * test: 增加单元测试 * test: 更新单元测试 * chore: bump version 9.4.0 * chore: bump version 9.4.0
1 parent c174ff7 commit 441532b

11 files changed

+69
-60
lines changed

src/BootstrapBlazor/BootstrapBlazor.csproj

+1-1
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.3.1-beta39</Version>
4+
<Version>9.4.0</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/Button/PopConfirmButton.razor

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ else
3333
@ChildContent
3434
</CascadingValue>
3535
<PopConfirmButtonContent Title="@Title" Content="@Content" Icon="@ConfirmIcon"
36-
CloseButtonColor="@CloseButtonColor" CloseButtonText="@CloseButtonText"
37-
ConfirmButtonColor="@ConfirmButtonColor" ConfirmButtonText="@ConfirmButtonText"
36+
CloseButtonColor="@CloseButtonColor" CloseButtonText="@CloseButtonText" CloseButtonIcon="@CloseButtonIcon"
37+
ConfirmButtonColor="@ConfirmButtonColor" ConfirmButtonText="@ConfirmButtonText" ConfirmButtonIcon="@ConfirmButtonIcon"
3838
ShowCloseButton="@ShowCloseButton" OnClose="@OnClose"
3939
ShowConfirmButton="@ShowConfirmButton" OnConfirm="@OnClickConfirm" ChildContent="@BodyTemplate" />
4040
</DynamicElement>;

src/BootstrapBlazor/Components/Button/PopConfirmButtonBase.cs

+12
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ public abstract class PopConfirmButtonBase : ButtonBase
105105
[NotNull]
106106
public string? CloseButtonText { get; set; }
107107

108+
/// <summary>
109+
/// 获得/设置 关闭按钮显示图标
110+
/// </summary>
111+
[Parameter]
112+
public string? CloseButtonIcon { get; set; }
113+
108114
/// <summary>
109115
/// 获得/设置 确认按钮显示文字 默认为 确定
110116
/// </summary>
@@ -118,6 +124,12 @@ public abstract class PopConfirmButtonBase : ButtonBase
118124
[Parameter]
119125
public Color ConfirmButtonColor { get; set; } = Color.Primary;
120126

127+
/// <summary>
128+
/// 获得/设置 确认按钮显示图标
129+
/// </summary>
130+
[Parameter]
131+
public string? ConfirmButtonIcon { get; set; }
132+
121133
/// <summary>
122134
/// 获得/设置 确认框图标
123135
/// </summary>

src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor

+6-4
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,17 @@
2727
<div class="popover-confirm-buttons">
2828
@if (ShowCloseButton)
2929
{
30-
<div class="@CloseButtonClass" @onclick="@OnCloseClick">
30+
<button class="@CloseButtonClass" @onclick="@OnCloseClick">
31+
<i class="@CloseButtonIcon"></i>
3132
<span>@CloseButtonText</span>
32-
</div>
33+
</button>
3334
}
3435
@if (ShowConfirmButton)
3536
{
36-
<div class="@ConfirmButtonClass" @onclick="@OnConfirmClick">
37+
<button class="@ConfirmButtonClass" @onclick="@OnConfirmClick">
38+
<i class="@ConfirmButtonIcon"></i>
3739
<span>@ConfirmButtonText</span>
38-
</div>
40+
</button>
3941
}
4042
</div>
4143
}

src/BootstrapBlazor/Components/Button/PopConfirmButtonContent.razor.cs

+14-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ public partial class PopConfirmButtonContent
5959
[Parameter]
6060
public RenderFragment? ChildContent { get; set; }
6161

62+
/// <summary>
63+
/// 获得/设置 关闭按钮显示图标
64+
/// </summary>
65+
[Parameter]
66+
public string? CloseButtonIcon { get; set; }
67+
6268
/// <summary>
6369
/// 获得/设置 关闭按钮显示文字
6470
/// </summary>
@@ -71,6 +77,12 @@ public partial class PopConfirmButtonContent
7177
[Parameter]
7278
public Color CloseButtonColor { get; set; } = Color.Secondary;
7379

80+
/// <summary>
81+
/// 获得/设置 确认按钮显示图标
82+
/// </summary>
83+
[Parameter]
84+
public string? ConfirmButtonIcon { get; set; }
85+
7486
/// <summary>
7587
/// 获得/设置 确认按钮显示文字
7688
/// </summary>
@@ -87,7 +99,6 @@ public partial class PopConfirmButtonContent
8799
/// 获得/设置 确认框图标
88100
/// </summary>
89101
[Parameter]
90-
[NotNull]
91102
public string? Icon { get; set; }
92103

93104
/// <summary>
@@ -114,6 +125,8 @@ protected override void OnParametersSet()
114125
base.OnParametersSet();
115126

116127
Icon ??= IconTheme.GetIconByKey(ComponentIcons.PopConfirmButtonConfirmIcon);
128+
CloseButtonIcon ??= IconTheme.GetIconByKey(ComponentIcons.PopConfirmButtonContentCloseButtonIcon);
129+
ConfirmButtonIcon ??= IconTheme.GetIconByKey(ComponentIcons.PopConfirmButtonContentConfirmButtonIcon);
117130
}
118131

119132
/// <summary>

src/BootstrapBlazor/Enums/ComponentIcons.cs

+10
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,16 @@ public enum ComponentIcons
410410
/// </summary>
411411
PopConfirmButtonConfirmIcon,
412412

413+
/// <summary>
414+
/// PopConfirmButton 组件弹窗中 CloseButtonIcon 图标
415+
/// </summary>
416+
PopConfirmButtonContentCloseButtonIcon,
417+
418+
/// <summary>
419+
/// PopConfirmButton 组件弹窗中 ConfirmButtonIcon 图标
420+
/// </summary>
421+
PopConfirmButtonContentConfirmButtonIcon,
422+
413423
/// <summary>
414424
/// Rate 组件 StarIcon 图标
415425
/// </summary>

src/BootstrapBlazor/Icons/BootstrapIcons.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ internal static class BootstrapIcons
9797
{ ComponentIcons.PaginationPrevEllipsisPageIcon, "bi bi-three-dots" },
9898
{ ComponentIcons.PaginationNextEllipsisPageIcon, "bi bi-three-dots" },
9999

100-
{ ComponentIcons.PopConfirmButtonConfirmIcon, "bi bi-exclamation-circle" },
100+
{ ComponentIcons.PopConfirmButtonConfirmIcon, "bi bi-exclamation-circle-fill" },
101+
{ ComponentIcons.PopConfirmButtonContentCloseButtonIcon, "bi bi-x" },
102+
{ ComponentIcons.PopConfirmButtonContentConfirmButtonIcon, "bi bi-check" },
101103

102104
{ ComponentIcons.RateStarIcon, "bi bi-star-fill" },
103105
{ ComponentIcons.RateUnStarIcon, "bi bi-star" },

src/BootstrapBlazor/Icons/FontAwesomeIcons.cs

+2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ internal static class FontAwesomeIcons
9696
{ ComponentIcons.PaginationNextEllipsisPageIcon, "fa-solid fa-ellipsis" },
9797

9898
{ ComponentIcons.PopConfirmButtonConfirmIcon, "fa-solid fa-circle-exclamation" },
99+
{ ComponentIcons.PopConfirmButtonContentCloseButtonIcon, "fa-solid fa-xmark" },
100+
{ ComponentIcons.PopConfirmButtonContentConfirmButtonIcon, "fa-solid fa-check" },
99101

100102
{ ComponentIcons.RateStarIcon, "fa-solid fa-star" },
101103
{ ComponentIcons.RateUnStarIcon, "fa-regular fa-star" },

src/BootstrapBlazor/Icons/MaterialDesignIcons.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ internal static class MaterialDesignIcons
9797
{ ComponentIcons.PaginationPrevEllipsisPageIcon, "mdi mdi-dots-horizontal" },
9898
{ ComponentIcons.PaginationNextEllipsisPageIcon, "mdi mdi-dots-horizontal" },
9999

100-
{ ComponentIcons.PopConfirmButtonConfirmIcon, "mdi mdi-exclamation" },
100+
{ ComponentIcons.PopConfirmButtonConfirmIcon, "mdi mdi-alert-circle" },
101+
{ ComponentIcons.PopConfirmButtonContentCloseButtonIcon, "mdi mdi-close" },
102+
{ ComponentIcons.PopConfirmButtonContentConfirmButtonIcon, "mdi mdi-check" },
101103

102104
{ ComponentIcons.RateStarIcon, "mdi mdi-star" },
103105
{ ComponentIcons.RateUnStarIcon, "mdi mdi-star-outline" },

test/UnitTest/Components/PopConfirmButtonTest.cs

+15-8
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,14 @@ public async Task Show_Ok()
2222
pb.Add(a => a.ConfirmButtonColor, Color.Danger);
2323
pb.Add(a => a.Icon, "fa-solid fa-font-awesome");
2424
pb.Add(a => a.Text, "Test_Text");
25+
pb.Add(a => a.CloseButtonIcon, "fa-solid fa-xmark");
26+
pb.Add(a => a.ConfirmButtonIcon, "fa-solid fa-check");
2527
});
2628
});
2729

30+
cut.Contains("fa-solid fa-xmark");
31+
cut.Contains("fa-solid fa-check");
32+
2833
// Show
2934
var button = cut.Find("div");
3035
await cut.InvokeAsync(() =>
@@ -33,7 +38,7 @@ await cut.InvokeAsync(() =>
3338
});
3439

3540
// Close
36-
var buttons = cut.FindAll(".popover-confirm-buttons div");
41+
var buttons = cut.FindAll(".popover-confirm-buttons button");
3742
await cut.InvokeAsync(() =>
3843
{
3944
buttons[0].Click();
@@ -45,7 +50,7 @@ await cut.InvokeAsync(() =>
4550
{
4651
button.Click();
4752
});
48-
buttons = cut.FindAll(".popover-confirm-buttons div");
53+
buttons = cut.FindAll(".popover-confirm-buttons button");
4954
await cut.InvokeAsync(() =>
5055
{
5156
buttons[1].Click();
@@ -97,7 +102,7 @@ await cut.InvokeAsync(() =>
97102
});
98103

99104
// Close
100-
buttons = cut.FindAll(".popover-confirm-buttons div");
105+
buttons = cut.FindAll(".popover-confirm-buttons button");
101106
await cut.InvokeAsync(() =>
102107
{
103108
buttons[0].Click();
@@ -111,7 +116,7 @@ await cut.InvokeAsync(() =>
111116
{
112117
button.Click();
113118
});
114-
buttons = cut.FindAll(".popover-confirm-buttons div");
119+
buttons = cut.FindAll(".popover-confirm-buttons button");
115120
await cut.InvokeAsync(() =>
116121
{
117122
buttons[1].Click();
@@ -132,7 +137,7 @@ await cut.InvokeAsync(() =>
132137
});
133138

134139
// Confirm
135-
buttons = cut.FindAll(".popover-confirm-buttons div");
140+
buttons = cut.FindAll(".popover-confirm-buttons button");
136141
await cut.InvokeAsync(() =>
137142
{
138143
buttons[1].Click();
@@ -158,7 +163,7 @@ await cut.InvokeAsync(() =>
158163
});
159164

160165
// async confirm
161-
buttons = cut.FindAll(".popover-confirm-buttons div");
166+
buttons = cut.FindAll(".popover-confirm-buttons button");
162167
_ = cut.InvokeAsync(() =>
163168
{
164169
buttons[1].Click();
@@ -178,7 +183,7 @@ await cut.InvokeAsync(() =>
178183
});
179184

180185
// async confirm
181-
buttons = cut.FindAll(".popover-confirm-buttons div");
186+
buttons = cut.FindAll(".popover-confirm-buttons button");
182187
await cut.InvokeAsync(() =>
183188
{
184189
buttons[1].Click();
@@ -248,10 +253,12 @@ public void Trigger_Ok()
248253
}
249254

250255
[Fact]
251-
public void ConfirmIcon_Ok()
256+
public void Icon_Ok()
252257
{
253258
var cut = Context.RenderComponent<PopConfirmButtonContent>();
254259
cut.Contains("text-info fa-solid fa-circle-exclamation");
260+
cut.Contains("fa-solid fa-xmark");
261+
cut.Contains("fa-solid fa-check");
255262
}
256263

257264
[Fact]

test/UnitTest/Components/TableTest.cs

+1-42
Original file line numberDiff line numberDiff line change
@@ -5538,49 +5538,8 @@ public async Task OnAfterCancelSaveAsync_EditForm()
55385538
await cut.InvokeAsync(() => button[0].Click());
55395539

55405540
// 取消按钮
5541-
var cancelButton = cut.Find(".form-footer .btn-secondary");
5542-
await cut.InvokeAsync(() => cancelButton.Click());
5543-
Assert.True(afterCancelSave);
5544-
}
5545-
5546-
[Fact]
5547-
public async Task OnAfterCancelSaveAsync_InCell()
5548-
{
5549-
var localizer = Context.Services.GetRequiredService<IStringLocalizer<Foo>>();
5550-
var items = Foo.GenerateFoo(localizer, 2);
5551-
var afterCancelSave = false;
5552-
var cut = Context.RenderComponent<BootstrapBlazorRoot>(pb =>
5553-
{
5554-
pb.AddChildContent<Table<Foo>>(pb =>
5555-
{
5556-
pb.Add(a => a.RenderMode, TableRenderMode.Table);
5557-
pb.Add(a => a.Items, items);
5558-
pb.Add(a => a.IsMultipleSelect, true);
5559-
pb.Add(a => a.ShowToolbar, true);
5560-
pb.Add(a => a.ShowExtendButtons, true);
5561-
pb.Add(a => a.EditMode, EditMode.EditForm);
5562-
pb.Add(a => a.OnAfterCancelSaveAsync, () =>
5563-
{
5564-
afterCancelSave = true;
5565-
return Task.CompletedTask;
5566-
});
5567-
pb.Add(a => a.TableColumns, foo => builder =>
5568-
{
5569-
builder.OpenComponent<TableColumn<Foo, string>>(0);
5570-
builder.AddAttribute(1, "Field", "Name");
5571-
builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, "Name", typeof(string)));
5572-
builder.CloseComponent();
5573-
});
5574-
});
5575-
});
5576-
5577-
// test edit button
5578-
var button = cut.FindAll("tbody tr button");
5541+
button = cut.FindAll("tbody tr.is-editform button");
55795542
await cut.InvokeAsync(() => button[0].Click());
5580-
5581-
// 取消按钮
5582-
button = cut.FindAll("tbody tr button");
5583-
await cut.InvokeAsync(() => button[1].Click());
55845543
Assert.True(afterCancelSave);
55855544
}
55865545

0 commit comments

Comments
 (0)