diff --git a/src/BootstrapBlazor/Components/SweetAlert/SwalOption.cs b/src/BootstrapBlazor/Components/SweetAlert/SwalOption.cs index c627551cf1e..a129390dd23 100644 --- a/src/BootstrapBlazor/Components/SweetAlert/SwalOption.cs +++ b/src/BootstrapBlazor/Components/SweetAlert/SwalOption.cs @@ -102,7 +102,7 @@ public class SwalOption : PopupOptionBase public Func? OnConfirmAsync { get; set; } /// - /// + /// 构造函数 /// public SwalOption() { diff --git a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs index 0ab45a866f5..c7952b1a36e 100644 --- a/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs +++ b/src/BootstrapBlazor/Components/SweetAlert/SweetAlert.razor.cs @@ -88,10 +88,16 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { if (DelayToken.IsCancellationRequested) { + DelayToken.Dispose(); DelayToken = new(); } await Task.Delay(Delay, DelayToken.Token); await ModalContainer.Close(); + + if (OnCloseCallbackAsync != null) + { + await OnCloseCallbackAsync(); + } } catch (TaskCanceledException) { } } @@ -100,6 +106,8 @@ protected override async Task OnAfterRenderAsync(bool firstRender) private bool AutoHideCheck() => IsAutoHide && Delay > 0; + private Func? OnCloseCallbackAsync = null; + private async Task Show(SwalOption option) { if (!IsShowDialog) @@ -121,6 +129,8 @@ private async Task Show(SwalOption option) DialogParameter = parameters; + OnCloseCallbackAsync = AutoHideCheck() ? option.OnCloseAsync : null; + // 渲染 UI 准备弹窗 Dialog await InvokeAsync(StateHasChanged); } diff --git a/src/BootstrapBlazor/Components/SweetAlert/SweetContext.cs b/src/BootstrapBlazor/Components/SweetAlert/SweetContext.cs index 88941d12c69..03f58f8647a 100644 --- a/src/BootstrapBlazor/Components/SweetAlert/SweetContext.cs +++ b/src/BootstrapBlazor/Components/SweetAlert/SweetContext.cs @@ -16,9 +16,5 @@ internal class SweetContext /// 获得/设置 弹窗任务上下文 /// [NotNull] -#if NET7_0_OR_GREATER - public required TaskCompletionSource? ConfirmTask { get; init; } -#else - public TaskCompletionSource? ConfirmTask { get; set; } -#endif + public TaskCompletionSource? ConfirmTask { get; init; } } diff --git a/test/UnitTest/Components/SwalTest.cs b/test/UnitTest/Components/SwalTest.cs index 1f742046be0..6432ebee86a 100644 --- a/test/UnitTest/Components/SwalTest.cs +++ b/test/UnitTest/Components/SwalTest.cs @@ -271,7 +271,11 @@ public void Show_Ok() Content = "I am auto hide", IsAutoHide = true, ForceDelay = true, - Delay = 500 + Delay = 500, + OnCloseAsync = () => + { + return Task.CompletedTask; + } })); Thread.Sleep(150); // 弹窗显示