Browse Source

feat: Refactor LoginDisplay and BasicThemeToolbarContributor for improved URL handling and culture prefixing

pull/25174/head
maliming 6 months ago
parent
commit
0d239d4a2c
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 4
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BasicThemeToolbarContributor.cs
  2. 34
      modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs

4
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BasicThemeToolbarContributor.cs

@ -14,8 +14,6 @@ public class BasicThemeToolbarContributor : IToolbarContributor
{ {
if (context.Toolbar.Name == StandardToolbars.Main) if (context.Toolbar.Name == StandardToolbars.Main)
{ {
context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitch)));
//TODO: Can we find a different way to understand if authentication was configured or not? //TODO: Can we find a different way to understand if authentication was configured or not?
var authenticationStateProvider = context.ServiceProvider var authenticationStateProvider = context.ServiceProvider
.GetService<AuthenticationStateProvider>(); .GetService<AuthenticationStateProvider>();
@ -24,6 +22,8 @@ public class BasicThemeToolbarContributor : IToolbarContributor
{ {
context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay)));
} }
context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitch)));
} }
return Task.CompletedTask; return Task.CompletedTask;

34
modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs

@ -28,22 +28,22 @@ public partial class LoginDisplay : IDisposable
private ApplicationConfigurationDto _config; private ApplicationConfigurationDto _config;
protected string LoginUrl protected string LoginUrl => PrependCulturePrefix(AuthenticationOptions.Value.LoginUrl);
protected string LogoutUrl => PrependCulturePrefix(AuthenticationOptions.Value.LogoutUrl);
protected string PrependCulturePrefix(string url)
{ {
get if (_config?.Localization.UseRouteBasedCulture != true)
{ {
var loginUrl = AuthenticationOptions.Value.LoginUrl; return url;
if (_config?.Localization.UseRouteBasedCulture != true) }
{
return loginUrl;
}
var currentCulture = CultureInfo.CurrentCulture.Name; var currentCulture = CultureInfo.CurrentCulture.Name;
var isKnownCulture = _config.Localization.Languages var isKnownCulture = _config.Localization.Languages
.Any(l => string.Equals(l.CultureName, currentCulture, StringComparison.OrdinalIgnoreCase)); .Any(l => string.Equals(l.CultureName, currentCulture, StringComparison.OrdinalIgnoreCase));
return isKnownCulture ? $"{currentCulture}/{loginUrl}" : loginUrl; return isKnownCulture ? $"{currentCulture}/{url}" : url;
}
} }
protected async override Task OnInitializedAsync() protected async override Task OnInitializedAsync()
@ -76,13 +76,15 @@ public partial class LoginDisplay : IDisposable
private async Task NavigateToAsync(string uri, string target = null) private async Task NavigateToAsync(string uri, string target = null)
{ {
uri = uri?.TrimStart('~', '/') ?? uri;
if (target == "_blank") if (target == "_blank")
{ {
await JsRuntime.InvokeVoidAsync("open", uri, target); await JsRuntime.InvokeVoidAsync("open", Navigation.ToAbsoluteUri(uri).ToString(), target);
} }
else else
{ {
Navigation.NavigateTo(uri?.TrimStart('~', '/') ?? uri); Navigation.NavigateTo(uri);
} }
} }
@ -90,11 +92,11 @@ public partial class LoginDisplay : IDisposable
{ {
if (AbpAspNetCoreComponentsWebOptions.Value.IsBlazorWebApp) if (AbpAspNetCoreComponentsWebOptions.Value.IsBlazorWebApp)
{ {
Navigation.NavigateTo(AuthenticationOptions.Value.LogoutUrl, forceLoad: true); Navigation.NavigateTo(LogoutUrl, forceLoad: true);
} }
else else
{ {
Navigation.NavigateToLogout(AuthenticationOptions.Value.LogoutUrl); Navigation.NavigateToLogout(LogoutUrl);
} }
} }
} }

Loading…
Cancel
Save