diff --git a/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs b/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs index 69ce5cd3952fb791873b19d1e2f3fdad0f383254..cc54f5c250794c5fc000e86626fa7955a2ccaf7f 100644 --- a/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs +++ b/src/BootstrapBlazor.Shared/Samples/Modals.razor.cs @@ -79,6 +79,13 @@ public sealed partial class Modals /// private static IEnumerable GetAttributes() => new AttributeItem[] { + new AttributeItem() { + Name = "FirstAfterRenderCallbackAsync", + Description = "Modal first after render callback", + Type = "Func", + ValueList = " — ", + DefaultValue = " — " + }, new AttributeItem() { Name = "HeaderTemplate", Description = "Modal body ModalHeader template", diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 8b3a3145ddb94867a79ca8d67bc44e7f9c8fbec2..8f202b1a651d8c29ccc89e853aa3aa9512c3ac6a 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 7.0.5 + 7.0.6-beta01 diff --git a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs index f6fb6d5fc20e87c21494cb8a17c753987651f516..f0a6490d1ca0f83edef3dae171c10bb3d523bac2 100644 --- a/src/BootstrapBlazor/Components/Modal/Modal.razor.cs +++ b/src/BootstrapBlazor/Components/Modal/Modal.razor.cs @@ -47,12 +47,10 @@ public partial class Modal public RenderFragment? ChildContent { get; set; } /// - /// 获得/设置 弹窗已显示时回调此方法 + /// 获得/设置 组件已经渲染完毕回调方法 /// [Parameter] - [Obsolete("Call OnShownAsync")] - [ExcludeFromCodeCoverage] - public Func? ShownCallbackAsync { get; set; } + public Func? FirstAfterRenderCallbackAsync { get; set; } /// /// 获得/设置 弹窗已显示时回调此方法 @@ -73,6 +71,21 @@ public partial class Modal private string? KeyboardString => IsKeyboard ? "true" : "false"; + /// + /// + /// + /// + /// + protected override async Task OnAfterRenderAsync(bool firstRender) + { + await base.OnAfterRenderAsync(firstRender); + + if (firstRender && FirstAfterRenderCallbackAsync != null) + { + await FirstAfterRenderCallbackAsync(); + } + } + /// /// /// diff --git a/test/UnitTest/Components/ModalTest.cs b/test/UnitTest/Components/ModalTest.cs index 9d0c0a57be5b70f90856beb30c74e00bfc3133e3..5ac9d6aef7cc34979da84a9f005d19cf85bf6857 100644 --- a/test/UnitTest/Components/ModalTest.cs +++ b/test/UnitTest/Components/ModalTest.cs @@ -97,6 +97,23 @@ public class ModalTest : BootstrapBlazorTestBase Assert.True(cut.Instance.Value); } + [Fact] + public async Task FirstAfterRenderAsync_Ok() + { + var render = false; + var cut = Context.RenderComponent(pb => + { + pb.Add(a => a.FirstAfterRenderCallbackAsync, () => + { + render = true; + return Task.CompletedTask; + }); + pb.AddChildContent(); + }); + Assert.True(render); + + } + private class MockComponent : ComponentBase { public bool Value { get; set; }