ant-design-blazor/components/modal/confirmDialog/ComfirmContainer.razor.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

121 lines
3.6 KiB
C#

using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Components;
namespace AntDesign
{
public partial class ComfirmContainer
{
[Inject]
private ModalService ModalService { get; set; }
[Inject]
private ConfirmService ConfirmService { get; set; }
private readonly List<ConfirmRef> _confirmRefs = new List<ConfirmRef>();
#region override
/// <summary>
/// Registration events
/// </summary>
protected override void OnInitialized()
{
ModalService.OnConfirmOpenEvent += OnConfirmOpen;
ModalService.OnConfirmCloseEvent += OnConfirmClose;
ModalService.OnConfirmCloseAllEvent += OnConfirmCloseAll;
ModalService.OnConfirmUpdateEvent += OnConfirmUpdate;
ConfirmService.OnOpenEvent += OnConfirmOpen;
}
#endregion
/// <summary>
/// create and open a Confirm dialog
/// </summary>
private async Task OnConfirmOpen(ConfirmRef confirmRef)
{
confirmRef.Config.Visible = true;
if (!_confirmRefs.Contains(confirmRef))
{
confirmRef.Config.BuildButtonsDefaultOptions();
_confirmRefs.Add(confirmRef);
}
await InvokeAsync(StateHasChanged);
}
/// <summary>
/// update Confirm dialog
/// </summary>
/// <param name="confirmRef"></param>
/// <returns></returns>
private async Task OnConfirmUpdate(ConfirmRef confirmRef)
{
if (confirmRef.Config.Visible)
{
await InvokeAsync(StateHasChanged);
}
}
/// <summary>
/// destroy Confirm dialog
/// </summary>
/// <param name="confirmRef"></param>
/// <returns></returns>
private async Task OnConfirmClose(ConfirmRef confirmRef)
{
confirmRef.Config.Visible = false;
await InvokeAsync(StateHasChanged);
if (confirmRef.OnClose != null)
{
await confirmRef.OnClose.Invoke();
}
}
/// <summary>
/// after Confirm dialog remove from DOM, to remove it from _confirmRefs
/// </summary>
/// <param name="confirmRef"></param>
/// <returns></returns>
private Task OnConfirmRemove(ConfirmRef confirmRef)
{
if (_confirmRefs.Contains(confirmRef))
{
_confirmRefs.Remove(confirmRef);
}
return Task.CompletedTask;
}
/// <summary>
/// destroy all Confirm dialog
/// </summary>
/// <returns></returns>
private async Task OnConfirmCloseAll()
{
// avoid iterations the change of _confirmRefs affects the iterative process
var confirmRefsTemp = new List<ConfirmRef>(_confirmRefs);
foreach (var confirmRef in confirmRefsTemp)
{
await OnConfirmClose(confirmRef);
}
}
/// <summary>
/// Unregister events
/// </summary>
/// <param name="disposing"></param>
protected override void Dispose(bool disposing)
{
ModalService.OnConfirmOpenEvent -= OnConfirmOpen;
ModalService.OnConfirmCloseEvent -= OnConfirmClose;
ModalService.OnConfirmCloseAllEvent -= OnConfirmCloseAll;
ModalService.OnConfirmUpdateEvent -= OnConfirmUpdate;
ConfirmService.OnOpenEvent -= OnConfirmOpen;
base.Dispose(disposing);
}
}
}