From 63c87a106e9f40dde8c4df29da05af18e5123370 Mon Sep 17 00:00:00 2001 From: Mladen Macanovic Date: Wed, 7 Oct 2020 10:07:03 +0200 Subject: [PATCH] Options are now sent with the message. Cleaned and optimized the code. --- .../WebAssembly/IUiMessageNotifierService.cs | 21 +++++--------- .../WebAssembly/IUiMessageService.cs | 18 ++++++------ .../WebAssembly/NullUiMessageService.cs | 10 +++---- .../WebAssembly/UiMessageOptions.cs | 29 +++++++++++++++++++ .../WebAssembly/UiMessageService.cs | 14 ++++----- .../Components/WebAssembly/UiMessageType.cs | 14 +++++++++ .../BlazoriseUiMessageService.cs | 20 ++++++------- .../Components/UiMessageAlert.razor.cs | 4 ++- .../UiMessageNotifierService.cs | 11 ++----- .../Pages/Index.razor.cs | 7 ++++- 10 files changed, 92 insertions(+), 56 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageNotifierService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageNotifierService.cs index 309b73337b..456eb1bed7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageNotifierService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageNotifierService.cs @@ -7,25 +7,25 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly { event EventHandler MessageReceived; - Task NotifyMessageReceivedAsync(UiMessageType messageType, string message, string title = null); - - Task NotifyConfirmationReceivedAsync(string message, string title, TaskCompletionSource callback); + Task NotifyMessageReceivedAsync(UiMessageType messageType, string message, string title, UiMessageOptions options, TaskCompletionSource callback = null); } public class UiMessageEventArgs : EventArgs { - public UiMessageEventArgs(UiMessageType messageType, string message, string title) + public UiMessageEventArgs(UiMessageType messageType, string message, string title, UiMessageOptions options) { MessageType = messageType; Message = message; Title = title; + Options = options; } - public UiMessageEventArgs(UiMessageType messageType, string message, string title, TaskCompletionSource callback) + public UiMessageEventArgs(UiMessageType messageType, string message, string title, UiMessageOptions options, TaskCompletionSource callback) { MessageType = messageType; Message = message; Title = title; + Options = options; Callback = callback; } @@ -35,15 +35,8 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly public string Title { get; } - public TaskCompletionSource Callback { get; } - } + public UiMessageOptions Options { get; } - public enum UiMessageType - { - Info, - Success, - Warning, - Error, - Confirmation, + public TaskCompletionSource Callback { get; } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs index 2c834ddc87..ff86c1c867 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs @@ -4,14 +4,14 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly { public interface IUiMessageService { - Task InfoAsync(string message, string title = null); - - Task SuccessAsync(string message, string title = null); - - Task WarnAsync(string message, string title = null); - - Task ErrorAsync(string message, string title = null); - - Task ConfirmAsync(string message, string title = null); + Task InfoAsync(string message, string title = null, UiMessageOptions options = null); + + Task SuccessAsync(string message, string title = null, UiMessageOptions options = null); + + Task WarnAsync(string message, string title = null, UiMessageOptions options = null); + + Task ErrorAsync(string message, string title = null, UiMessageOptions options = null); + + Task ConfirmAsync(string message, string title = null, UiMessageOptions options = null); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs index 59830b0480..0c7df5780d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs @@ -5,27 +5,27 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly { public class NullUiMessageService : IUiMessageService, ITransientDependency { - public Task InfoAsync(string message, string title = null) + public Task InfoAsync(string message, string title = null, UiMessageOptions options = null) { return Task.CompletedTask; } - public Task SuccessAsync(string message, string title = null) + public Task SuccessAsync(string message, string title = null, UiMessageOptions options = null) { return Task.CompletedTask; } - public Task WarnAsync(string message, string title = null) + public Task WarnAsync(string message, string title = null, UiMessageOptions options = null) { return Task.CompletedTask; } - public Task ErrorAsync(string message, string title = null) + public Task ErrorAsync(string message, string title = null, UiMessageOptions options = null) { return Task.CompletedTask; } - public Task ConfirmAsync(string message, string title = null) + public Task ConfirmAsync(string message, string title = null, UiMessageOptions options = null) { return Task.FromResult(true); } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs index 7909911c7e..85b26bc4b6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs @@ -1,19 +1,48 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly { + /// + /// Options to override message dialog appearance. + /// public class UiMessageOptions { + /// + /// If true, the message dialog will show the large icon for the current message type. + /// public bool ShowMessageIcon { get; set; } = true; + /// + /// Overrides the build-in message icon. + /// + public object MessageIcon { get; set; } + + /// + /// Custom text for the Ok button. + /// public string OkButtonText { get; set; } + /// + /// Custom icon for the Ok button. + /// public object OkButtonIcon { get; set; } + /// + /// Custom text for the Confirmation button. + /// public string ConfirmButtonText { get; set; } + /// + /// Custom icon for the Confirmation button. + /// public object ConfirmButtonIcon { get; set; } + /// + /// Custom text for the Cancel button. + /// public string CancelButtonText { get; set; } + /// + /// Custom icon for the Cancel button. + /// public object CancelButtonIcon { get; set; } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs index 16fe041de4..dfdc09f55d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs @@ -14,27 +14,27 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly JsRuntime = jsRuntime; } - public async Task InfoAsync(string message, string title = null) + public async Task InfoAsync(string message, string title = null, UiMessageOptions options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - public async Task SuccessAsync(string message, string title = null) + public async Task SuccessAsync(string message, string title = null, UiMessageOptions options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - public async Task WarnAsync(string message, string title = null) + public async Task WarnAsync(string message, string title = null, UiMessageOptions options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - - public async Task ErrorAsync(string message, string title = null) + + public async Task ErrorAsync(string message, string title = null, UiMessageOptions options = null) { await JsRuntime.InvokeVoidAsync("alert", message); } - - public async Task ConfirmAsync(string message, string title = null) + + public async Task ConfirmAsync(string message, string title = null, UiMessageOptions options = null) { return await JsRuntime.InvokeAsync("confirm", message); } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs new file mode 100644 index 0000000000..5e3a77a3c5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + /// + /// Defines the possible ui message types with predefined actions. + /// + public enum UiMessageType + { + Info, + Success, + Warning, + Error, + Confirmation, + } +} diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs index e7795f928d..2c3481f313 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs @@ -20,31 +20,31 @@ namespace Volo.Abp.BlazoriseUI Logger = NullLogger.Instance; } - public Task InfoAsync(string message, string title = null) + public Task InfoAsync(string message, string title = null, UiMessageOptions options = null) { - return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Info, message, title); + return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Info, message, title, options); } - public Task SuccessAsync(string message, string title = null) + public Task SuccessAsync(string message, string title = null, UiMessageOptions options = null) { - return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Success, message, title); + return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Success, message, title, options); } - public Task WarnAsync(string message, string title = null) + public Task WarnAsync(string message, string title = null, UiMessageOptions options = null) { - return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Warning, message, title); + return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Warning, message, title, options); } - public Task ErrorAsync(string message, string title = null) + public Task ErrorAsync(string message, string title = null, UiMessageOptions options = null) { - return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Error, message, title); + return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Error, message, title, options); } - public async Task ConfirmAsync(string message, string title = null) + public async Task ConfirmAsync(string message, string title = null, UiMessageOptions options = null) { var callback = new TaskCompletionSource(); - await uiMessageNotifierService.NotifyConfirmationReceivedAsync(message, title, callback); + await uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Confirmation, message, title, options, callback); return await callback.Task; } diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs index 4d543174e0..a3cd3f8f1e 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs @@ -21,6 +21,7 @@ namespace Volo.Abp.BlazoriseUI.Components MessageType = e.MessageType; Message = e.Message; Title = e.Title; + Options = e.Options; Callback = e.Callback; ModalRef.Show(); @@ -73,7 +74,7 @@ namespace Volo.Abp.BlazoriseUI.Components protected virtual bool ShowMessageIcon => Options?.ShowMessageIcon ?? true; - protected virtual object MessageIcon => MessageType switch + protected virtual object MessageIcon => Options?.MessageIcon ?? MessageType switch { UiMessageType.Info => IconName.Info, UiMessageType.Success => IconName.Check, @@ -85,6 +86,7 @@ namespace Volo.Abp.BlazoriseUI.Components protected virtual string MessageIconColor => MessageType switch { + // gets the color in the order of importance: Blazorise > Bootstrap > fallback color UiMessageType.Info => "var(--b-theme-info, var(--info, #17a2b8))", UiMessageType.Success => "var(--b-theme-success, var(--success, #28a745))", UiMessageType.Warning => "var(--b-theme-warning, var(--warning, #ffc107))", diff --git a/framework/src/Volo.Abp.BlazoriseUI/UiMessageNotifierService.cs b/framework/src/Volo.Abp.BlazoriseUI/UiMessageNotifierService.cs index 3b97045a93..c8ae0ecb0d 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/UiMessageNotifierService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/UiMessageNotifierService.cs @@ -10,16 +10,9 @@ namespace Volo.Abp.BlazoriseUI { public event EventHandler MessageReceived; - public Task NotifyMessageReceivedAsync(UiMessageType messageType, string message, string title = null) + public Task NotifyMessageReceivedAsync(UiMessageType messageType, string message, string title, UiMessageOptions options, TaskCompletionSource callback) { - MessageReceived?.Invoke(this, new UiMessageEventArgs(messageType, message, title)); - - return Task.CompletedTask; - } - - public Task NotifyConfirmationReceivedAsync(string message, string title, TaskCompletionSource callback) - { - MessageReceived?.Invoke(this, new UiMessageEventArgs(UiMessageType.Confirmation, message, title, callback)); + MessageReceived?.Invoke(this, new UiMessageEventArgs(messageType, message, title, options, callback)); return Task.CompletedTask; } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs index 8c5440e747..730da74983 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; +using Blazorise; using Microsoft.AspNetCore.Components; using Volo.Abp.AspNetCore.Components.WebAssembly; @@ -23,7 +24,11 @@ namespace MyCompanyName.MyProjectName.Blazor.Pages Task OnInfoTestClicked() { - return UiMessageService.InfoAsync( "This is the Info message", "Info" ); + return UiMessageService.InfoAsync( "This is the Info message", "Info", new UiMessageOptions + { + OkButtonIcon = IconName.InfoCircle, + OkButtonText = "Hello info" + } ); } Task OnSuccessTestClicked()