Browse Source

Merge pull request #5712 from abpframework/dev-stsrki-messageservice

Created UiMessageAlert for Blazorise implementation
pull/5740/head
Halil İbrahim Kalkan 6 years ago
committed by GitHub
parent
commit
7729bd5223
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 28
      framework/Volo.Abp.sln
  2. 6
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor
  3. 2
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/_Imports.razor
  4. 18
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiMessageService.cs
  5. 33
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs
  6. 35
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageEventArgs.cs
  7. 48
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs
  8. 14
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageService.cs
  9. 14
      framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs
  10. 4
      framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs
  11. 52
      framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs
  12. 48
      framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor
  13. 137
      framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs
  14. 20
      framework/src/Volo.Abp.BlazoriseUI/UiMessageNotifierService.cs
  15. 2
      framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj
  16. 2
      framework/src/Volo.Abp.BlazoriseUI/_Imports.razor
  17. 44
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor
  18. 66
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs
  19. 2
      templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor

28
framework/Volo.Abp.sln

@ -319,33 +319,33 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aliyun
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aliyun.Tests", "test\Volo.Abp.BlobStoring.Aliyun.Tests\Volo.Abp.BlobStoring.Aliyun.Tests.csproj", "{8E49687A-E69F-49F2-8DB0-428D0883A937}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Aws", "src\Volo.Abp.BlobStoring.Aws\Volo.Abp.BlobStoring.Aws.csproj", "{50968CDE-1029-4051-B2E5-B69D0ECF2A18}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aws", "src\Volo.Abp.BlobStoring.Aws\Volo.Abp.BlobStoring.Aws.csproj", "{50968CDE-1029-4051-B2E5-B69D0ECF2A18}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlobStoring.Aws.Tests", "test\Volo.Abp.BlobStoring.Aws.Tests\Volo.Abp.BlobStoring.Aws.Tests.csproj", "{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlobStoring.Aws.Tests", "test\Volo.Abp.BlobStoring.Aws.Tests\Volo.Abp.BlobStoring.Aws.Tests.csproj", "{2CD3B26A-CA81-4279-8D5D-6A594517BB3F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Kafka", "src\Volo.Abp.Kafka\Volo.Abp.Kafka.csproj", "{2A864049-9CD5-4493-8CDB-C408474D43D4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Kafka", "src\Volo.Abp.Kafka\Volo.Abp.Kafka.csproj", "{2A864049-9CD5-4493-8CDB-C408474D43D4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.EventBus.Kafka", "src\Volo.Abp.EventBus.Kafka\Volo.Abp.EventBus.Kafka.csproj", "{C1D891B0-AE83-42CB-987D-425A2787DE78}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.EventBus.Kafka", "src\Volo.Abp.EventBus.Kafka\Volo.Abp.EventBus.Kafka.csproj", "{C1D891B0-AE83-42CB-987D-425A2787DE78}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.GlobalFeatures", "src\Volo.Abp.GlobalFeatures\Volo.Abp.GlobalFeatures.csproj", "{04F44063-C952-403A-815F-EFB778BDA125}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.GlobalFeatures", "src\Volo.Abp.GlobalFeatures\Volo.Abp.GlobalFeatures.csproj", "{04F44063-C952-403A-815F-EFB778BDA125}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.GlobalFeatures.Tests", "test\Volo.Abp.GlobalFeatures.Tests\Volo.Abp.GlobalFeatures.Tests.csproj", "{231F1581-AA21-44C3-BF27-51EB3AD5355C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.GlobalFeatures.Tests", "test\Volo.Abp.GlobalFeatures.Tests\Volo.Abp.GlobalFeatures.Tests.csproj", "{231F1581-AA21-44C3-BF27-51EB3AD5355C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Http.Client.IdentityModel.WebAssembly", "src\Volo.Abp.Http.Client.IdentityModel.WebAssembly\Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj", "{3D35A1E0-A9A1-404F-9B55-5F1A7EB6D5B8}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Http.Client.IdentityModel.WebAssembly", "src\Volo.Abp.Http.Client.IdentityModel.WebAssembly\Volo.Abp.Http.Client.IdentityModel.WebAssembly.csproj", "{3D35A1E0-A9A1-404F-9B55-5F1A7EB6D5B8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.Client.Common", "src\Volo.Abp.AspNetCore.Mvc.Client.Common\Volo.Abp.AspNetCore.Mvc.Client.Common.csproj", "{8A22D962-016E-474A-8BB7-F831F0ABF3AC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.Client.Common", "src\Volo.Abp.AspNetCore.Mvc.Client.Common\Volo.Abp.AspNetCore.Mvc.Client.Common.csproj", "{8A22D962-016E-474A-8BB7-F831F0ABF3AC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Components.WebAssembly", "src\Volo.Abp.AspNetCore.Components.WebAssembly\Volo.Abp.AspNetCore.Components.WebAssembly.csproj", "{E1A62D10-F2FB-4040-BD60-11A3934058DF}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Components.WebAssembly", "src\Volo.Abp.AspNetCore.Components.WebAssembly\Volo.Abp.AspNetCore.Components.WebAssembly.csproj", "{E1A62D10-F2FB-4040-BD60-11A3934058DF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.BlazoriseUI", "src\Volo.Abp.BlazoriseUI\Volo.Abp.BlazoriseUI.csproj", "{4EBDDB1B-D6C5-4FAE-B5A7-2171B18CDFA5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.BlazoriseUI", "src\Volo.Abp.BlazoriseUI\Volo.Abp.BlazoriseUI.csproj", "{4EBDDB1B-D6C5-4FAE-B5A7-2171B18CDFA5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme", "src\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj", "{ABC27C10-C0FF-44CB-B4FF-A09C0B79F695}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme", "src\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme\Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.csproj", "{ABC27C10-C0FF-44CB-B4FF-A09C0B79F695}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Components.WebAssembly.Theming", "src\Volo.Abp.AspNetCore.Components.WebAssembly.Theming\Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj", "{29CA7471-4E3E-4E75-8B33-001DDF682F01}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Components.WebAssembly.Theming", "src\Volo.Abp.AspNetCore.Components.WebAssembly.Theming\Volo.Abp.AspNetCore.Components.WebAssembly.Theming.csproj", "{29CA7471-4E3E-4E75-8B33-001DDF682F01}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Autofac.WebAssembly", "src\Volo.Abp.Autofac.WebAssembly\Volo.Abp.Autofac.WebAssembly.csproj", "{37F89B0B-1C6B-426F-A5EE-676D1956D9E9}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Autofac.WebAssembly", "src\Volo.Abp.Autofac.WebAssembly\Volo.Abp.Autofac.WebAssembly.csproj", "{37F89B0B-1C6B-426F-A5EE-676D1956D9E9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Authentication.OpenIdConnect", "src\Volo.Abp.AspNetCore.Authentication.OpenIdConnect\Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj", "{DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Authentication.OpenIdConnect", "src\Volo.Abp.AspNetCore.Authentication.OpenIdConnect\Volo.Abp.AspNetCore.Authentication.OpenIdConnect.csproj", "{DEFE3DB2-EA4F-4F90-87FC-B25D64427BC5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.ExceptionHandling", "src\Volo.Abp.ExceptionHandling\Volo.Abp.ExceptionHandling.csproj", "{B9D1ADCB-D552-4626-A1F1-78FF72C1E822}"
EndProject

6
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor

@ -11,12 +11,14 @@
</button>
<div class="collapse navbar-collapse" id="main-navbar-collapse">
<ul class="navbar-nav mx-auto">
<NavMenu/>
<NavMenu />
</ul>
<NavToolbar/>
<NavToolbar />
</div>
</div>
</nav>
<div class="container">
@Body
<UiMessageAlert />
</div>

2
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/_Imports.razor

@ -8,3 +8,5 @@
@using Volo.Abp.AspNetCore.Components.WebAssembly
@using Blazorise
@using Blazorise.DataGrid
@using Volo.Abp.BlazoriseUI;
@using Volo.Abp.BlazoriseUI.Components;

18
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<bool> 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<bool> ConfirmAsync(string message, string title = null, UiMessageOptions options = null);
}
}

33
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiMessageService.cs

@ -0,0 +1,33 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Components.WebAssembly
{
public class NullUiMessageService : IUiMessageService, ITransientDependency
{
public Task InfoAsync(string message, string title = null, UiMessageOptions options = null)
{
return Task.CompletedTask;
}
public Task SuccessAsync(string message, string title = null, UiMessageOptions options = null)
{
return Task.CompletedTask;
}
public Task WarnAsync(string message, string title = null, UiMessageOptions options = null)
{
return Task.CompletedTask;
}
public Task ErrorAsync(string message, string title = null, UiMessageOptions options = null)
{
return Task.CompletedTask;
}
public Task<bool> ConfirmAsync(string message, string title = null, UiMessageOptions options = null)
{
return Task.FromResult(true);
}
}
}

35
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageEventArgs.cs

@ -0,0 +1,35 @@
using System;
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Components.WebAssembly
{
public class UiMessageEventArgs : EventArgs
{
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, UiMessageOptions options, TaskCompletionSource<bool> callback)
{
MessageType = messageType;
Message = message;
Title = title;
Options = options;
Callback = callback;
}
public UiMessageType MessageType { get; set; }
public string Message { get; }
public string Title { get; }
public UiMessageOptions Options { get; }
public TaskCompletionSource<bool> Callback { get; }
}
}

48
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageOptions.cs

@ -0,0 +1,48 @@
namespace Volo.Abp.AspNetCore.Components.WebAssembly
{
/// <summary>
/// Options to override message dialog appearance.
/// </summary>
public class UiMessageOptions
{
/// <summary>
/// If true, the message dialog will show the large icon for the current message type.
/// </summary>
public bool ShowMessageIcon { get; set; } = true;
/// <summary>
/// Overrides the build-in message icon.
/// </summary>
public object MessageIcon { get; set; }
/// <summary>
/// Custom text for the Ok button.
/// </summary>
public string OkButtonText { get; set; }
/// <summary>
/// Custom icon for the Ok button.
/// </summary>
public object OkButtonIcon { get; set; }
/// <summary>
/// Custom text for the Confirmation button.
/// </summary>
public string ConfirmButtonText { get; set; }
/// <summary>
/// Custom icon for the Confirmation button.
/// </summary>
public object ConfirmButtonIcon { get; set; }
/// <summary>
/// Custom text for the Cancel button.
/// </summary>
public string CancelButtonText { get; set; }
/// <summary>
/// Custom icon for the Cancel button.
/// </summary>
public object CancelButtonIcon { get; set; }
}
}

14
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<bool> ConfirmAsync(string message, string title = null)
public async Task<bool> ConfirmAsync(string message, string title = null, UiMessageOptions options = null)
{
return await JsRuntime.InvokeAsync<bool>("confirm", message);
}

14
framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/UiMessageType.cs

@ -0,0 +1,14 @@
namespace Volo.Abp.AspNetCore.Components.WebAssembly
{
/// <summary>
/// Defines the possible ui message types with predefined actions.
/// </summary>
public enum UiMessageType
{
Info,
Success,
Warning,
Error,
Confirmation,
}
}

4
framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs

@ -225,7 +225,7 @@ namespace Volo.Abp.BlazoriseUI
{
if (reference == null)
{
reference = (TRef) ScopedServices.GetRequiredService(serviceType);
reference = (TRef)ScopedServices.GetRequiredService(serviceType);
}
return reference;
@ -266,7 +266,7 @@ namespace Volo.Abp.BlazoriseUI
var input = await CreateGetListInputAsync();
var result = await AppService.GetListAsync(input);
Entities = MapToListViewModel(result.Items);
TotalCount = (int?) result.TotalCount;
TotalCount = (int?)result.TotalCount;
}
private IReadOnlyList<TListViewModel> MapToListViewModel(IReadOnlyList<TGetListOutputDto> dtos)

52
framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiMessageService.cs

@ -0,0 +1,52 @@
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BlazoriseUI
{
[Dependency(ReplaceServices = true)]
public class BlazoriseUiMessageService : IUiMessageService, IScopedDependency
{
private readonly UiMessageNotifierService uiMessageNotifierService;
public ILogger<BlazoriseUiMessageService> Logger { get; set; }
public BlazoriseUiMessageService(UiMessageNotifierService uiMessageNotifierService)
{
this.uiMessageNotifierService = uiMessageNotifierService;
Logger = NullLogger<BlazoriseUiMessageService>.Instance;
}
public Task InfoAsync(string message, string title = null, UiMessageOptions options = null)
{
return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Info, message, title, options);
}
public Task SuccessAsync(string message, string title = null, UiMessageOptions options = null)
{
return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Success, message, title, options);
}
public Task WarnAsync(string message, string title = null, UiMessageOptions options = null)
{
return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Warning, message, title, options);
}
public Task ErrorAsync(string message, string title = null, UiMessageOptions options = null)
{
return uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Error, message, title, options);
}
public async Task<bool> ConfirmAsync(string message, string title = null, UiMessageOptions options = null)
{
var callback = new TaskCompletionSource<bool>();
await uiMessageNotifierService.NotifyMessageReceivedAsync(UiMessageType.Confirmation, message, title, options, callback);
return await callback.Task;
}
}
}

48
framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor

@ -0,0 +1,48 @@
<Modal @ref="@ModalRef">
<ModalBackdrop />
<ModalContent Centered="true">
<ModalHeader>
<ModalTitle>
@Title
</ModalTitle>
</ModalHeader>
<ModalBody>
@if ( ShowMessageIcon )
{
<DisplayHeading Size="DisplayHeadingSize.Is2" Style="text-align:center;">
<Icon Name="@MessageIcon" Style="@MessageIconStyle" />
</DisplayHeading>
}
@Message
</ModalBody>
<ModalFooter>
@if ( IsConfirmation )
{
<Button Color="Color.Danger" Padding="Padding.Is2.OnX" Margin="Margin.IsAuto.FromRight" Clicked="@OnCancelClicked">
@if ( Options?.CancelButtonIcon != null )
{
<Icon Name="@Options.CancelButtonIcon" Margin="Margin.Is2.FromRight" />
}
@CancelButtonText
</Button>
<Button Color="Color.Primary" Padding="Padding.Is2.OnX" Clicked="@OnConfirmClicked">
@if ( Options?.ConfirmButtonIcon != null )
{
<Icon Name="@Options.ConfirmButtonIcon" Margin="Margin.Is2.FromRight" />
}
@ConfirmButtonText
</Button>
}
else
{
<Button Color="Color.Primary" Padding="Padding.Is2.OnX" Clicked="@OnOkClicked">
@if ( Options?.OkButtonIcon != null )
{
<Icon Name="@Options.OkButtonIcon" Margin="Margin.Is2.FromRight" />
}
@OkButtonText
</Button>
}
</ModalFooter>
</ModalContent>
</Modal>

137
framework/src/Volo.Abp.BlazoriseUI/Components/UiMessageAlert.razor.cs

@ -0,0 +1,137 @@
using System;
using System.Text;
using System.Threading.Tasks;
using Blazorise;
using Microsoft.AspNetCore.Components;
using Volo.Abp.AspNetCore.Components.WebAssembly;
namespace Volo.Abp.BlazoriseUI.Components
{
public partial class UiMessageAlert : ComponentBase, IDisposable
{
protected override void OnInitialized()
{
UiMessageNotifierService.MessageReceived += OnMessageReceived;
base.OnInitialized();
}
private void OnMessageReceived(object sender, UiMessageEventArgs e)
{
MessageType = e.MessageType;
Message = e.Message;
Title = e.Title;
Options = e.Options;
Callback = e.Callback;
ModalRef.Show();
}
public void Dispose()
{
if (UiMessageNotifierService != null)
{
UiMessageNotifierService.MessageReceived -= OnMessageReceived;
}
}
protected Task OnOkClicked()
{
ModalRef.Hide();
return Okayed.InvokeAsync(null);
}
protected Task OnConfirmClicked()
{
ModalRef.Hide();
if (IsConfirmation && Callback != null)
{
Callback.SetResult(true);
}
return Confirmed.InvokeAsync(null);
}
protected Task OnCancelClicked()
{
ModalRef.Hide();
if (IsConfirmation && Callback != null)
{
Callback.SetResult(false);
}
return Canceled.InvokeAsync(null);
}
protected Modal ModalRef { get; set; }
protected virtual bool IsConfirmation
=> MessageType == UiMessageType.Confirmation;
protected virtual bool ShowMessageIcon
=> Options?.ShowMessageIcon ?? true;
protected virtual object MessageIcon => Options?.MessageIcon ?? MessageType switch
{
UiMessageType.Info => IconName.Info,
UiMessageType.Success => IconName.Check,
UiMessageType.Warning => IconName.Exclamation,
UiMessageType.Error => IconName.Times,
UiMessageType.Confirmation => IconName.QuestionCircle,
_ => null,
};
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))",
UiMessageType.Error => "var(--b-theme-danger, var(--danger, #dc3545))",
UiMessageType.Confirmation => "var(--b-theme-secondary, var(--secondary, #6c757d))",
_ => null,
};
protected virtual string MessageIconStyle
{
get
{
var sb = new StringBuilder();
sb.Append($"color:{MessageIconColor}");
return sb.ToString();
}
}
protected virtual string OkButtonText
=> Options?.OkButtonText ?? "OK";
protected virtual string ConfirmButtonText
=> Options?.ConfirmButtonText ?? "Confirm";
protected virtual string CancelButtonText
=> Options?.CancelButtonText ?? "Cancel";
[Parameter] public UiMessageType MessageType { get; set; }
[Parameter] public string Title { get; set; }
[Parameter] public string Message { get; set; }
[Parameter] public TaskCompletionSource<bool> Callback { get; set; }
[Parameter] public UiMessageOptions Options { get; set; }
[Parameter] public EventCallback Okayed { get; set; } // TODO: ?
[Parameter] public EventCallback Confirmed { get; set; }
[Parameter] public EventCallback Canceled { get; set; }
[Inject] protected UiMessageNotifierService UiMessageNotifierService { get; set; }
}
}

20
framework/src/Volo.Abp.BlazoriseUI/UiMessageNotifierService.cs

@ -0,0 +1,20 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Components.WebAssembly;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BlazoriseUI
{
[Dependency(ReplaceServices = true)]
public class UiMessageNotifierService : IScopedDependency
{
public event EventHandler<UiMessageEventArgs> MessageReceived;
public Task NotifyMessageReceivedAsync(UiMessageType messageType, string message, string title, UiMessageOptions options, TaskCompletionSource<bool> callback = null)
{
MessageReceived?.Invoke(this, new UiMessageEventArgs(messageType, message, title, options, callback));
return Task.CompletedTask;
}
}
}

2
framework/src/Volo.Abp.BlazoriseUI/Volo.Abp.BlazoriseUI.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">
<Project Sdk="Microsoft.NET.Sdk.Razor">
<Import Project="..\..\..\configureawait.props" />
<Import Project="..\..\..\common.props" />

2
framework/src/Volo.Abp.BlazoriseUI/_Imports.razor

@ -0,0 +1,2 @@
@using Microsoft.AspNetCore.Components.Web
@using Blazorise

44
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor

@ -1,7 +1,6 @@
@page "/"
@using Volo.Abp.Users
@using Volo.Abp.MultiTenancy
@using System.Security.Claims
@using Microsoft.Extensions.Localization
@using MyCompanyName.MyProjectName.Localization
@inject ICurrentUser CurrentUser
@ -14,16 +13,39 @@
<h5 class="m-1"> <i class="fas fa-rocket"></i> Congratulations, <strong>MyProjectName</strong> is successfully running!</h5>
</Badge>
<Card>
<CardHeader>
<CardTitle>UI Message Tests</CardTitle>
</CardHeader>
<CardBody>
<Button Color="Color.Info" Clicked="@OnInfoTestClicked">
INFO
</Button>
<Button Color="Color.Success" Clicked="@OnSuccessTestClicked">
SUCCESS
</Button>
<Button Color="Color.Warning" Clicked="@OnWarningTestClicked">
WARNING
</Button>
<Button Color="Color.Danger" Clicked="@OnErrorTestClicked">
DANGER
</Button>
<Button Color="Color.Secondary" Clicked="@OnConfirmTestClicked">
CONFIRM
</Button>
</CardBody>
</Card>
<h1>Welcome to the Application</h1>
<p class="lead px-lg-5 mx-lg-5">@L["LongWelcomeMessage"]</p>
@if (!CurrentUser.IsAuthenticated)
@if ( !CurrentUser.IsAuthenticated )
{
<a class="btn btn-primary" href="/authentication/login">
<i class="fa fa-sign-in-alt"></i> @L["Login"]
</a>
}
}
</div>
<div class="my-3 text-center">
@ -157,18 +179,4 @@
<a href="https://github.com/abpframework/abp" target="_blank" class="mx-2"><i class="fab fa-github"></i><span class="text-secondary"> abpframework</span></a>
</p>
</div>
</div>
@code
{
private IEnumerable<Claim> _claims;
protected override async Task OnInitializedAsync()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
if (authState.User.Identity.IsAuthenticated)
{
_claims = authState.User.Claims;
}
}
}
</div>

66
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor.cs

@ -0,0 +1,66 @@
using System;
using System.Collections.Generic;
using System.Security.Claims;
using System.Threading.Tasks;
using Blazorise;
using Microsoft.AspNetCore.Components;
using Volo.Abp.AspNetCore.Components.WebAssembly;
namespace MyCompanyName.MyProjectName.Blazor.Pages
{
public partial class Index
{
private IEnumerable<Claim> _claims;
protected override async Task OnInitializedAsync()
{
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
if ( authState.User.Identity.IsAuthenticated )
{
_claims = authState.User.Claims;
}
}
Task OnInfoTestClicked()
{
return UiMessageService.InfoAsync( "This is the Info message", "Info", new UiMessageOptions
{
OkButtonIcon = IconName.InfoCircle,
OkButtonText = "Hello info"
} );
}
Task OnSuccessTestClicked()
{
return UiMessageService.SuccessAsync( "This is the Success message", "Success" );
}
Task OnWarningTestClicked()
{
return UiMessageService.WarnAsync( "This is the Warning message", "Warning" );
}
Task OnErrorTestClicked()
{
return UiMessageService.ErrorAsync( "This is the Error message", "Error" );
}
Task OnConfirmTestClicked()
{
return UiMessageService.ConfirmAsync( "This is the Confirm message", "Confirm" )
.ContinueWith( result =>
{
if ( result.Result )
{
Console.WriteLine( "Confirmed" );
}
else
{
Console.WriteLine( "Cancelled" );
}
} );
}
[Inject] IUiMessageService UiMessageService { get; set; }
}
}

2
templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor

@ -9,3 +9,5 @@
@using MyCompanyName.MyProjectName.Blazor
@using Blazorise
@using Blazorise.DataGrid
@using Volo.Abp.BlazoriseUI;
@using Volo.Abp.BlazoriseUI.Components;
Loading…
Cancel
Save