Skip to content

Commit 5570f97

Browse files
authored
MessageService: fix sizing when showing modal (#6530)
1 parent 5a810f7 commit 5570f97

3 files changed

Lines changed: 68 additions & 8 deletions

File tree

Source/Blazorise/Components/MessageProvider/MessageProvider.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
@namespace Blazorise
22
@inherits BaseComponent
3-
<Modal @ref="@ModalRef" Closing="@OnModalClosing" Centered="@CenterMessage" Scrollable="@ScrollableMessage" Size="@Size">
3+
<Modal @ref="@ModalRef" @bind-Visible="@ModalVisible" Closing="@OnModalClosing" Centered="@CenterMessage" Scrollable="@ScrollableMessage" Size="@Size">
44
<ModalContent>
55
<ModalHeader>
66
<ModalTitle Class="@TitleClass">

Source/Blazorise/Components/MessageProvider/MessageProvider.razor.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,17 @@ protected override void Dispose( bool disposing )
4040

4141
private async void OnMessageReceived( object sender, MessageEventArgs e )
4242
{
43-
MessageType = e.MessageType;
44-
Message = e.Message;
45-
Title = e.Title;
46-
Options = e.Options;
47-
Callback = e.Callback;
48-
49-
await InvokeAsync( ModalRef.Show );
43+
await InvokeAsync( () =>
44+
{
45+
MessageType = e.MessageType;
46+
Message = e.Message;
47+
Title = e.Title;
48+
Options = e.Options;
49+
Callback = e.Callback;
50+
ModalVisible = true;
51+
52+
StateHasChanged();
53+
} );
5054
}
5155

5256
/// <summary>
@@ -142,6 +146,11 @@ protected virtual Task OnModalClosing( ModalClosingEventArgs eventArgs )
142146
/// </summary>
143147
protected Modal ModalRef { get; set; }
144148

149+
/// <summary>
150+
/// Gets or sets whether the message modal is visible.
151+
/// </summary>
152+
protected bool ModalVisible { get; set; }
153+
145154
/// <summary>
146155
/// If true, modal will act as a prompt dialog.
147156
/// </summary>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Bunit;
4+
using Microsoft.Extensions.DependencyInjection;
5+
using Xunit;
6+
7+
namespace Blazorise.Tests.Components;
8+
9+
public class MessageProviderComponentTest : TestContext
10+
{
11+
public MessageProviderComponentTest()
12+
{
13+
Services.AddBlazoriseTests().AddBootstrapProviders().AddEmptyIconProvider();
14+
JSInterop
15+
.AddBlazoriseButton()
16+
.AddBlazoriseModal()
17+
.AddBlazoriseClosable();
18+
}
19+
20+
[Fact]
21+
public async Task InfoAppliesRequestedSizeBeforeOpening()
22+
{
23+
var component = RenderComponent<MessageProvider>();
24+
25+
await ShowInfoMessage( component, options => options.Size = ModalSize.Large );
26+
27+
component.WaitForAssertion( () => Assert.Contains( "modal-lg", component.Find( ".modal-dialog" ).ClassName ) );
28+
}
29+
30+
[Fact]
31+
public async Task InfoDoesNotReusePreviousSize()
32+
{
33+
var component = RenderComponent<MessageProvider>();
34+
35+
await ShowInfoMessage( component, options => options.Size = ModalSize.Large );
36+
component.WaitForAssertion( () => Assert.Contains( "modal-lg", component.Find( ".modal-dialog" ).ClassName ) );
37+
38+
await component.Find( "button" ).ClickAsync();
39+
40+
await ShowInfoMessage( component );
41+
42+
component.WaitForAssertion( () => Assert.DoesNotContain( "modal-lg", component.Find( ".modal-dialog" ).ClassName ) );
43+
}
44+
45+
private Task ShowInfoMessage( IRenderedComponent<MessageProvider> component, Action<MessageOptions> options = null )
46+
{
47+
var messageService = Services.GetRequiredService<IMessageService>();
48+
49+
return component.InvokeAsync( () => messageService.Info( "Message", "Title", options ) );
50+
}
51+
}

0 commit comments

Comments
 (0)