From 871609988053b93885dad63e7146652630ba07cd Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 29 Oct 2020 22:25:59 +0800 Subject: [PATCH 1/5] Use user-defined menus in Blazor's LoginDisplay. Fix #5970 --- .../Themes/Basic/LoginDisplay.razor | 20 +++++--- .../Themes/Basic/LoginDisplay.razor.cs | 21 +++----- .../MyProjectNameBlazorModule.cs | 2 +- .../MyProjectNameMenuContributor.cs | 49 +++++++++++++++++-- 4 files changed, 66 insertions(+), 26 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index e4767cc031..b76f11ec5f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -1,6 +1,8 @@ @using Microsoft.AspNetCore.Components.WebAssembly.Authentication @using Volo.Abp.Users @using Volo.Abp.MultiTenancy +@using Volo.Abp.UI.Navigation +@inject IJSRuntime JsRuntime @inject ICurrentUser CurrentUser @inject ICurrentTenant CurrentTenant @inject NavigationManager Navigation @@ -23,12 +25,9 @@ { @foreach (var menuItem in Menu.Items) { - @menuItem.DisplayName + @menuItem.DisplayName } } - - @UiLocalizer["ManageYourAccount"] - Logout @@ -40,14 +39,21 @@ @code{ - private void NavigateTo(string uri) + private async Task NavigateToAsync(string uri, string target = "_self") { - Navigation.NavigateTo(uri); + if (target == "_blank") + { + await JsRuntime.InvokeVoidAsync("open", uri, "_blank"); + } + else + { + Navigation.NavigateTo(uri); + } } private async Task BeginSignOut() { await SignOutManager.SetSignOutState(); - NavigateTo("authentication/logout"); + await NavigateToAsync("authentication/logout"); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index 17718dbcfb..c3737bafdb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -12,39 +12,32 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic { public partial class LoginDisplay : IDisposable { - [Inject] + [Inject] protected IMenuManager MenuManager { get; set; } - + [Inject] protected IStringLocalizer UiLocalizer { get; set; } - + [Inject] protected IOptions RemoteServiceOptions { get; set; } - - protected ApplicationMenu Menu { get; set; } - protected string ServerUrl { get; set; } - protected string ServerAccountUrl { get; set; } + protected ApplicationMenu Menu { get; set; } protected override async Task OnInitializedAsync() { Menu = await MenuManager.GetAsync(StandardMenus.User); - - ServerUrl = RemoteServiceOptions.Value.RemoteServices.Default?.BaseUrl?.TrimEnd('/'); - ServerAccountUrl = ServerUrl + "/Account/Manage?returnUrl=" + Navigation.Uri; - + Navigation.LocationChanged += OnLocationChanged; } protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e) { - ServerAccountUrl = ServerUrl + "/Account/Manage?returnUrl=" + Navigation.Uri; StateHasChanged(); } - + public void Dispose() { Navigation.LocationChanged -= OnLocationChanged; } } -} \ No newline at end of file +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index 8097475d64..f93193670b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -55,7 +55,7 @@ namespace MyCompanyName.MyProjectName.Blazor { Configure(options => { - options.MenuContributors.Add(new MyProjectNameMenuContributor()); + options.MenuContributors.Add(new MyProjectNameMenuContributor(context.Services.GetConfiguration())); }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs index 9dda814d93..003d882da6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameMenuContributor.cs @@ -1,18 +1,37 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; using MyCompanyName.MyProjectName.Localization; +using Volo.Abp.Account.Localization; using Volo.Abp.UI.Navigation; +using Volo.Abp.Users; namespace MyCompanyName.MyProjectName.Blazor { public class MyProjectNameMenuContributor : IMenuContributor { - public Task ConfigureMenuAsync(MenuConfigurationContext context) + private readonly IConfiguration _configuration; + + public MyProjectNameMenuContributor(IConfiguration configuration) { - if(context.Menu.DisplayName != StandardMenus.Main) + _configuration = configuration; + } + + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) { - return Task.CompletedTask; + await ConfigureMainMenuAsync(context); } + else if (context.Menu.Name == StandardMenus.User) + { + await ConfigureUserMenuAsync(context); + } + } + private Task ConfigureMainMenuAsync(MenuConfigurationContext context) + { var l = context.GetLocalizer(); context.Menu.Items.Insert( @@ -27,5 +46,27 @@ namespace MyCompanyName.MyProjectName.Blazor return Task.CompletedTask; } + + private Task ConfigureUserMenuAsync(MenuConfigurationContext context) + { + var accountStringLocalizer = context.GetLocalizer(); + var currentUser = context.ServiceProvider.GetRequiredService(); + + var identityServerUrl = _configuration["AuthServer:Authority"] ?? ""; + + if (currentUser.IsAuthenticated) + { + context.Menu.AddItem(new ApplicationMenuItem( + "Account.Manage", + accountStringLocalizer["ManageYourProfile"], + $"{identityServerUrl.EnsureEndsWith('/')}Account/Manage", + icon: "fa fa-cog", + order: 1000, + null, + "_blank")); + } + + return Task.CompletedTask; + } } } From e8a2188398e80621177e99335bde1b835958fe39 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 08:46:22 +0800 Subject: [PATCH 2/5] Open the profile management page in the same window. --- .../Themes/Basic/LoginDisplay.razor | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index b76f11ec5f..38b0663f71 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -25,7 +25,7 @@ { @foreach (var menuItem in Menu.Items) { - @menuItem.DisplayName + @menuItem.DisplayName } } @@ -39,21 +39,14 @@ @code{ - private async Task NavigateToAsync(string uri, string target = "_self") + private void NavigateTo(string uri, string target = "_self") { - if (target == "_blank") - { - await JsRuntime.InvokeVoidAsync("open", uri, "_blank"); - } - else - { - Navigation.NavigateTo(uri); - } + Navigation.NavigateTo(uri); } private async Task BeginSignOut() { await SignOutManager.SetSignOutState(); - await NavigateToAsync("authentication/logout"); + NavigateTo("authentication/logout"); } } From 82dedbe17dd21670290199304a1109cb372f231a Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 08:47:42 +0800 Subject: [PATCH 3/5] Remove target parameter. --- .../Themes/Basic/LoginDisplay.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index 38b0663f71..d17add9281 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -39,7 +39,7 @@ @code{ - private void NavigateTo(string uri, string target = "_self") + private void NavigateTo(string uri) { Navigation.NavigateTo(uri); } From b059ccfd22a2a9f77b345ac53d997e0aeb6b8128 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 09:08:44 +0800 Subject: [PATCH 4/5] Remove inject properties. --- .../Themes/Basic/LoginDisplay.razor.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index c3737bafdb..71b3d7d6a4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -15,12 +15,6 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic [Inject] protected IMenuManager MenuManager { get; set; } - [Inject] - protected IStringLocalizer UiLocalizer { get; set; } - - [Inject] - protected IOptions RemoteServiceOptions { get; set; } - protected ApplicationMenu Menu { get; set; } protected override async Task OnInitializedAsync() From 4a77eaac35d8f873daeec594ee0a7d09e0986426 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 3 Nov 2020 09:15:36 +0800 Subject: [PATCH 5/5] Remove unused namespaces. --- .../Themes/Basic/LoginDisplay.razor | 2 -- .../Themes/Basic/LoginDisplay.razor.cs | 4 ---- 2 files changed, 6 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index d17add9281..58d4d5753e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -1,8 +1,6 @@ @using Microsoft.AspNetCore.Components.WebAssembly.Authentication @using Volo.Abp.Users @using Volo.Abp.MultiTenancy -@using Volo.Abp.UI.Navigation -@inject IJSRuntime JsRuntime @inject ICurrentUser CurrentUser @inject ICurrentTenant CurrentTenant @inject NavigationManager Navigation diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index 71b3d7d6a4..3238483cfb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -1,11 +1,7 @@ using System; using System.Threading.Tasks; -using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Routing; -using Microsoft.Extensions.Localization; -using Microsoft.Extensions.Options; -using Volo.Abp.Http.Client; using Volo.Abp.UI.Navigation; namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic