Skip to content

Commit 15ea3ca

Browse files
committed
feat(Dialog): add ShowLiteralConfirmModal method
1 parent d35150c commit 15ea3ca

File tree

5 files changed

+70
-2
lines changed

5 files changed

+70
-2
lines changed

src/BootstrapBlazor.Server/Components/Samples/Dialogs.razor

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,8 @@ private async Task OnClick()
205205
</div>
206206
</DemoBlock>
207207

208+
<DemoBlock Title="@Localizer["LiteralConfirmDialogTitle"]" Introduction="@Localizer["LiteralConfirmDialogIntro"]" Name="LiteralConfirmModal">
209+
<Button Text="@Localizer["LiteralConfirmDialogButton"]" OnClick="@OnLiteralConfirmModalClick"></Button>
210+
</DemoBlock>
211+
208212
<AttributeTable Items="@GetAttributes()" Title="@Localizer["Attribute"]" />

src/BootstrapBlazor.Server/Components/Samples/Dialogs.razor.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,11 @@ private async Task OnEmailButtonClick()
303303
}
304304
}
305305

306+
private async Task OnLiteralConfirmModalClick()
307+
{
308+
var result = await DialogService.ShowLiteralConfirmModal(Localizer["LiteralConfirmDialogModalContent"], Localizer["LiteralConfirmDialogModalTitle"]);
309+
}
310+
306311
/// <summary>
307312
/// 获得属性方法
308313
/// </summary>

src/BootstrapBlazor.Server/Locales/en-US.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,12 @@
902902
"ExportPdfDialogTitle": "Pop up window with export Pdf function",
903903
"ExportPdfDialogIntro": "Set <code>ShowExportPdfButtonInHeader</code> to display an export PDF button on the <code>Header</code>",
904904
"ExportPdfDialogTip": "More parameters can be set by setting <code>ExportPdfButtonOptions</code>",
905-
"ExportPdfButton": "Export Pdf"
905+
"ExportPdfButton": "Export Pdf",
906+
"LiteralConfirmDialogTitle": "Literal Confirmation Modal",
907+
"LiteralConfirmDialogIntro": "By passing in the string <code>content</code> , you can pop up a confirmation modal without creating a razor component.",
908+
"LiteralConfirmDialogButton": "Popup Modal",
909+
"LiteralConfirmDialogModalTitle": "Literal Confirmation Modal",
910+
"LiteralConfirmDialogModalContent": "this is the prompt message."
906911
},
907912
"BootstrapBlazor.Server.Components.Samples.Dispatches": {
908913
"Title": "Dispatch message distribution",

src/BootstrapBlazor.Server/Locales/zh-CN.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -902,7 +902,12 @@
902902
"ExportPdfDialogTitle": "带导出 Pdf 功能的弹窗",
903903
"ExportPdfDialogIntro": "通过设置 <code>ShowExportPdfButtonInHeader</code> 使 <code>Header</code> 上显示一个导出 pdf 按钮",
904904
"ExportPdfDialogTip": "可通过设置 <code>ExportPdfButtonOptions</code> 对更多参数进行设置",
905-
"ExportPdfButton": "导出 Pdf 弹窗"
905+
"ExportPdfButton": "导出 Pdf 弹窗",
906+
"LiteralConfirmDialogTitle": "文字确认模态框",
907+
"LiteralConfirmDialogIntro": "通过传入字符串 <code>content</code> ,无需创建razor组件即可弹出确认模态框",
908+
"LiteralConfirmDialogButton": "弹出模态框",
909+
"LiteralConfirmDialogModalTitle": "文字确认模态框",
910+
"LiteralConfirmDialogModalContent": "这是一个文字确认模态框,这是提示信息"
906911
},
907912
"BootstrapBlazor.Server.Components.Samples.Dispatches": {
908913
"Title": "Dispatch 消息分发",

src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,53 @@ public static async Task ShowValidateFormDialog<TComponent>(this DialogService s
176176
configureOption?.Invoke(option);
177177
await service.Show(option, dialog);
178178
}
179+
180+
/// <summary>
181+
/// 弹出带确认结果的文本对话框
182+
/// </summary>
183+
/// <param name="service">DialogService 服务实例</param>
184+
/// <param name="content">对话框文本参数</param>
185+
/// <param name="title">对话框标题,优先级低于ResultDialogOption</param>
186+
/// <param name="elementType">文本的html标签</param>
187+
/// <param name="isMarkUpString">文本是否为MarkupString</param>
188+
/// <param name="option">对话框参数</param>
189+
/// <param name="dialog">指定弹窗组件 默认为 null 使用 <see cref="BootstrapBlazorRoot"/> 组件内置弹窗组件</param>
190+
/// <returns></returns>
191+
public static async Task<DialogResult> ShowLiteralConfirmModal(this DialogService service, string content, string? title = null, string elementType = "text", bool isMarkUpString = false, ResultDialogOption? option = null, Dialog? dialog = null)
192+
{
193+
IResultDialog? resultDialog = null;
194+
option ??= new();
195+
option.Title ??= title;
196+
option.GetDialog = () => resultDialog;
197+
option.BodyTemplate = builder =>
198+
{
199+
var index = 0;
200+
builder.OpenElement(index++, elementType);
201+
if (option.ComponentParameters != null)
202+
{
203+
builder.AddMultipleAttributes(1, option.ComponentParameters);
204+
}
205+
if (isMarkUpString) builder.AddMarkupContent(index++, content); else builder.AddContent(index++, content);
206+
builder.CloseElement();
207+
};
208+
209+
option.FooterTemplate = BootstrapDynamicComponent.CreateComponent<ResultDialogFooter>(new Dictionary<string, object?>
210+
{
211+
[nameof(ResultDialogFooter.ButtonNoText)] = option.ButtonNoText,
212+
[nameof(ResultDialogFooter.ButtonYesText)] = option.ButtonYesText,
213+
[nameof(ResultDialogFooter.ShowYesButton)] = option.ShowYesButton,
214+
[nameof(ResultDialogFooter.ButtonYesColor)] = option.ButtonYesColor,
215+
[nameof(ResultDialogFooter.ButtonYesIcon)] = option.ButtonYesIcon,
216+
[nameof(ResultDialogFooter.ShowNoButton)] = option.ShowNoButton,
217+
[nameof(ResultDialogFooter.ButtonNoColor)] = option.ButtonNoColor,
218+
[nameof(ResultDialogFooter.ButtonNoIcon)] = option.ButtonNoIcon
219+
}).Render();
220+
221+
if (option.ResultTask.Task.IsCompleted)
222+
{
223+
option.ResultTask = new();
224+
}
225+
await service.Show(option, dialog);
226+
return await option.ResultTask.Task;
227+
}
179228
}

0 commit comments

Comments
 (0)