ant-design-blazor/components/modal/confirmDialog/ConfirmService.cs
zxyao ef4701b6ed refactor(module: modal): refactor the code of Modal, Confirm (#914)
* refactor(module: modal): refactor the code of Modal, Confirm and Dialog

refactor details:
- Add DialogWrapper compontent to control the logic of dialog removal from DOM
- Add the appropriate folders for Dialog, Modal, and Confirm
- Remove methods with the same logic but different names in ConfirmService
- Split Title into Title (string) and Titletemplate (renderfragment)
- Add comments to code
- Rename ConfirmDialog to Confirm
- Specification of method name in ConfirmService
- Adjust the time of throttle function for draggabe modal
- Extract the common part of ModalOptions, ConfirmOptions and DialogOptions as DialogOptionsBase

* refactor: move DefaultCloseIcon etc. static members to DialogOptionsBase

* docs(module: modal): update docs

* fix: dialog incorrect waiting

* fix: pickup missing pr/7
2020-12-26 21:39:04 +08:00

95 lines
3.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
using OneOf;
namespace AntDesign
{
/// <summary>
/// show a simple Confirm dialog like MessageBox of Windows, it's different from ModalService. ModalService can only create OK-Cancel Confirm dialog and return ConfirmRef, but ConfirmService return ConfirmResult
/// </summary>
public class ConfirmService
{
internal event Func<ConfirmRef, Task> OnOpenEvent;
/// <summary>
/// show a confirm dialog like MessageBox of Windows
/// </summary>
/// <param name="content">the content of dialog</param>
/// <param name="title">the title of dialog</param>
/// <param name="confirmButtons">the buttons of dialog</param>
/// <param name="confirmIcon">the icon of dialog</param>
/// <param name="options">the configuration options for dialog</param>
/// <returns></returns>
public async Task<ConfirmResult> Show(
OneOf<string, RenderFragment> content,
OneOf<string, RenderFragment> title,
ConfirmButtons confirmButtons,
ConfirmIcon confirmIcon,
ConfirmButtonOptions options)
{
if (options == null) throw new ArgumentNullException(nameof(options));
ConfirmOptions confirmOptions = new ConfirmOptions()
{
Content = content,
ConfirmButtons = confirmButtons,
ConfirmIcon = confirmIcon,
};
if (title.IsT0)
{
confirmOptions.Title = title.AsT0;
}
else
{
confirmOptions.TitleTemplate = title.AsT1;
}
#region config button default properties
if (options.Button1Props != null)
{
confirmOptions.Button1Props = options.Button1Props;
}
if (options.Button2Props != null)
{
confirmOptions.Button2Props = options.Button2Props;
}
if (options.Button3Props != null)
{
confirmOptions.Button3Props = options.Button3Props;
}
#endregion
var confirmRef = new ConfirmRef(confirmOptions)
{
TaskCompletionSource = new TaskCompletionSource<ConfirmResult>()
};
if (OnOpenEvent != null)
{
await OnOpenEvent.Invoke(confirmRef);
}
return await confirmRef.TaskCompletionSource.Task;
}
/// <summary>
/// show a confirm dialog like MessageBox of Windows
/// </summary>
/// <param name="content">the content of dialog</param>
/// <param name="title">the title of dialog</param>
/// <param name="confirmButtons">the buttons of dialog</param>
/// <param name="confirmIcon">the icon of dialog</param>
/// <returns></returns>
public Task<ConfirmResult> Show
(OneOf<string, RenderFragment> content,
OneOf<string, RenderFragment> title,
ConfirmButtons confirmButtons = ConfirmButtons.OKCancel,
ConfirmIcon confirmIcon = ConfirmIcon.Info)
{
return Show(content, title, confirmButtons, confirmIcon, new ConfirmButtonOptions());
}
}
}