diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule.cs index 049d10e49d..d564fc4686 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule.cs +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule.cs @@ -5,6 +5,7 @@ using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme; using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.Modularity; +using BlazorStandardBundles = Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor.Bundling.BlazorStandardBundles; namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; @@ -28,7 +29,7 @@ public class AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule : AbpModule .Add(BlazorMudBlazorBasicThemeBundles.Styles.Global, bundle => { bundle - .AddBaseBundles(BlazorServerStandardBundles.Styles.Global) + .AddBaseBundles(BlazorStandardBundles.Styles.Global) .AddContributors(typeof(BlazorServerMudBlazorBasicThemeStyleContributor)); }); @@ -37,7 +38,7 @@ public class AbpAspNetCoreComponentsServerMudBlazorBasicThemeModule : AbpModule .Add(BlazorMudBlazorBasicThemeBundles.Scripts.Global, bundle => { bundle - .AddBaseBundles(BlazorServerStandardBundles.Scripts.Global) + .AddBaseBundles(BlazorStandardBundles.Scripts.Global) .AddContributors(typeof(BlazorServerMudBlazorBasicThemeScriptContributor)); }); }); diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeStyleContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeStyleContributor.cs index e717faf75c..8e9ce50bee 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeStyleContributor.cs +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Bundling/BlazorServerMudBlazorBasicThemeStyleContributor.cs @@ -1,3 +1,4 @@ +using System.Collections.Generic; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Bundling; @@ -6,6 +7,6 @@ public class BlazorServerMudBlazorBasicThemeStyleContributor : BundleContributor { public override void ConfigureBundle(BundleConfigurationContext context) { - context.Files.AddIfNotContains("/themes/basic/main.css"); + context.Files.AddIfNotContains("/_content/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/themes/basic/main.css"); } } diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs index b9f6447955..0ba46719c4 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs @@ -1,7 +1,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme.Themes.Basic; using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; -using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic; namespace Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme; @@ -12,6 +12,7 @@ public class MudBlazorBasicThemeToolbarContributor : IToolbarContributor if (context.Toolbar.Name == StandardToolbars.Main) { context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); + context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitch))); } return Task.CompletedTask; diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/App.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/App.razor new file mode 100644 index 0000000000..fedd98d739 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/App.razor @@ -0,0 +1,28 @@ +@using Microsoft.Extensions.Options +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing +@using MudBlazor +@inject IOptions RouterOptions + + + + + + @if (!context.User.Identity.IsAuthenticated) + { + + } + else + { + You are not authorized to access this resource. + } + + + + + + Sorry, there's nothing at this address. + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/AppWithoutAuth.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/AppWithoutAuth.razor new file mode 100644 index 0000000000..580feaa3fa --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/AppWithoutAuth.razor @@ -0,0 +1,15 @@ +@using Microsoft.Extensions.Options +@using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing +@using MudBlazor +@inject IOptions RouterOptions + + + + + + + Sorry, there's nothing at this address. + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/Branding.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/Branding.razor index 9877b84559..74c3ec441c 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/Branding.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/Branding.razor @@ -1,4 +1,5 @@ @using Volo.Abp.Ui.Branding +@using MudBlazor @inject IBrandingProvider BrandingProvider @BrandingProvider.AppName diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor new file mode 100644 index 0000000000..c5b8afa4e0 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor @@ -0,0 +1,77 @@ +@using Volo.Abp.UI.Navigation +@using MudBlazor +@using Microsoft.AspNetCore.Components +@using Microsoft.AspNetCore.Components.Routing +@using System +@{ + var customComponentType = MenuItem.GetComponentTypeOrDefault(); +} + +@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) +{ + +} +else +{ + + @foreach (var item in MenuItem.Items) + { + @if (item.Items.Any()) + { + + } + else + { + + @if (!string.IsNullOrEmpty(item.Icon)) + { + + } + @item.DisplayName + + } + } + +} + +@code { + [Parameter] + public ApplicationMenuItem MenuItem { get; set; } = default!; + + [Inject] + private NavigationManager NavigationManager { get; set; } = default!; + + protected override void OnInitialized() + { + NavigationManager.LocationChanged += OnLocationChanged; + } + + protected virtual void OnLocationChanged(object? sender, LocationChangedEventArgs e) + { + // Menu will close automatically on navigation + } + + public void Dispose() + { + NavigationManager.LocationChanged -= OnLocationChanged; + } + + private string? GetIcon(string? icon) + { + if (string.IsNullOrEmpty(icon)) + { + return null; + } + + // Convert FontAwesome icons to Material icons if needed + if (icon.StartsWith("fa")) + { + // Map common FontAwesome icons to Material icons + return icon.Replace("fa-", "").Replace("-", "_"); + } + + return icon; + } +} + +@implements IDisposable diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor index 7e896d5b1d..fcfc63fabb 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor @@ -1,6 +1,10 @@ @using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components @using Volo.Abp.Users +@using MudBlazor +@using Microsoft.Extensions.Localization +@using global::Localization.Resources.AbpUi @inject ICurrentUser CurrentUser +@inject IStringLocalizer L @if (CurrentUser.IsAuthenticated) { @@ -19,9 +23,8 @@ else [Inject] protected NavigationManager NavigationManager { get; set; } = default!; [Inject] protected IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!; - protected async Task Logout() + protected void Logout() { - // TODO: Implement logout logic NavigationManager.NavigateTo("/Account/Logout", forceLoad: true); } } diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor index 0b21ab7bfd..0ac87def8c 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor @@ -2,6 +2,7 @@ @using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components.LayoutHooks @using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components @using Volo.Abp.AspNetCore.Components.Web.Theming.Layout +@using MudBlazor @inherits LayoutComponentBase @@ -48,5 +49,3 @@ _drawerOpen = !_drawerOpen; } } - -@implements IDisposable diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor index bf11fd1e72..bdb64e1bfa 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenu.razor @@ -1,4 +1,6 @@ @using Volo.Abp.UI.Navigation +@using MudBlazor +@using Microsoft.AspNetCore.Components.Routing @inject IMenuManager MenuManager @@ -9,25 +11,33 @@ @if (!string.IsNullOrEmpty(menuItem.Icon)) { - + } @menuItem.DisplayName } else { - - @foreach (var childItem in menuItem.Items) - { - - @if (!string.IsNullOrEmpty(childItem.Icon)) - { - - } - @childItem.DisplayName - - } - + } } + +@code { + private string? GetIcon(string? icon) + { + if (string.IsNullOrEmpty(icon)) + { + return null; + } + + // Convert FontAwesome icons to Material icons if needed + if (icon.StartsWith("fa")) + { + // Map common FontAwesome icons to Material icons + return icon.Replace("fa-", "").Replace("-", "_"); + } + + return icon; + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavToolbar.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavToolbar.razor index 0b04c22dc7..039de58e52 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavToolbar.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavToolbar.razor @@ -3,6 +3,7 @@ @using System.Collections.Generic @using System @using Microsoft.AspNetCore.Components +@using MudBlazor @implements IDisposable diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NullLayout.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NullLayout.razor index 6cebcca35a..5febe493c6 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NullLayout.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NullLayout.razor @@ -1,6 +1,7 @@ @using Volo.Abp.Ui.LayoutHooks @using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Components.LayoutHooks @using Volo.Abp.AspNetCore.Components.Web.Theming.Layout +@using MudBlazor @inherits LayoutComponentBase diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/RedirectToLogin.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/RedirectToLogin.razor new file mode 100644 index 0000000000..d241d93470 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/RedirectToLogin.razor @@ -0,0 +1,9 @@ +@inject NavigationManager Navigation +@using System + +@code { + protected override void OnInitialized() + { + Navigation.NavigateTo($"account/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}", true); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor new file mode 100644 index 0000000000..8961e74d61 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor @@ -0,0 +1,70 @@ +@using Volo.Abp.UI.Navigation +@using MudBlazor +@using Microsoft.AspNetCore.Components +@using Microsoft.AspNetCore.Components.Routing +@using System +@{ + var customComponentType = MenuItem.GetComponentTypeOrDefault(); +} + +@if (customComponentType != null && typeof(ComponentBase).IsAssignableFrom(customComponentType)) +{ + +} +else +{ + + @foreach (var item in MenuItem.Items) + { + + @if (!string.IsNullOrEmpty(item.Icon)) + { + + } + @item.DisplayName + + } + +} + +@code { + [Parameter] + public ApplicationMenuItem MenuItem { get; set; } = default!; + + [Inject] + private NavigationManager NavigationManager { get; set; } = default!; + + protected override void OnInitialized() + { + NavigationManager.LocationChanged += OnLocationChanged; + } + + protected virtual void OnLocationChanged(object? sender, LocationChangedEventArgs e) + { + // Menu will close automatically on navigation + } + + public void Dispose() + { + NavigationManager.LocationChanged -= OnLocationChanged; + } + + private string? GetIcon(string? icon) + { + if (string.IsNullOrEmpty(icon)) + { + return null; + } + + // Convert FontAwesome icons to Material icons if needed + if (icon.StartsWith("fa")) + { + // Map common FontAwesome icons to Material icons + return icon.Replace("fa-", "").Replace("-", "_"); + } + + return icon; + } +} + +@implements IDisposable diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule.cs new file mode 100644 index 0000000000..c3424e641e --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule.cs @@ -0,0 +1,22 @@ +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Bundling; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.Modularity; +using BlazorWebAssemblyStandardBundles = Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Bundling.BlazorWebAssemblyStandardBundles; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; + +[DependsOn( + typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule) +)] +public class AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + var globalStyles = options.StyleBundles.Get(BlazorWebAssemblyStandardBundles.Styles.Global); + globalStyles.AddContributors(typeof(WebAssemblyMudBlazorBasicThemeBundleStyleContributor)); + }); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj new file mode 100644 index 0000000000..a911db3606 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling.csproj @@ -0,0 +1,14 @@ + + + + + + + net10.0 + + + + + + + diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/WebAssemblyMudBlazorBasicThemeBundleStyleContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/WebAssemblyMudBlazorBasicThemeBundleStyleContributor.cs new file mode 100644 index 0000000000..3fed44f2a0 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling/WebAssemblyMudBlazorBasicThemeBundleStyleContributor.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; + +public class WebAssemblyMudBlazorBasicThemeBundleStyleContributor : BundleContributor +{ + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("_content/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/themes/basic/main.css"); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule.cs index 8eb9a14efc..907dba6e43 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule.cs +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeModule.cs @@ -3,6 +3,7 @@ using Volo.Abp.AspNetCore.Components.Web; using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme; using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Routing; using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Bundling; using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor; using Volo.Abp.Http.Client.IdentityModel.WebAssembly; using Volo.Abp.Modularity; @@ -10,6 +11,7 @@ using Volo.Abp.Modularity; namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; [DependsOn( + typeof(AbpAspNetCoreComponentsWebAssemblyMudBlazorBasicThemeBundlingModule), typeof(AbpAspNetCoreComponentsWebMudBlazorBasicThemeModule), typeof(AbpAspNetCoreComponentsWebAssemblyThemingMudBlazorModule), typeof(AbpHttpClientIdentityModelWebAssemblyModule) diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs index a6394bdb78..794042cd7e 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/MudBlazorBasicThemeToolbarContributor.cs @@ -1,7 +1,11 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Components; -using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; +using Microsoft.AspNetCore.Components.Authorization; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic; +using Volo.Abp.AspNetCore.Components.Web.Theming.MudBlazor.Toolbars; +using Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.Themes.Basic; +using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme; @@ -11,7 +15,16 @@ public class MudBlazorBasicThemeToolbarContributor : IToolbarContributor { if (context.Toolbar.Name == StandardToolbars.Main) { - context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); + context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitch))); + + //TODO: Can we find a different way to understand if authentication was configured or not? + var authenticationStateProvider = context.ServiceProvider + .GetService(); + + if (authenticationStateProvider != null) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); + } } return Task.CompletedTask; diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Pages/Authentication.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Pages/Authentication.razor new file mode 100644 index 0000000000..9242f16923 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Pages/Authentication.razor @@ -0,0 +1,18 @@ +@page "/authentication/{action}" +@using Microsoft.AspNetCore.Components.WebAssembly.Authentication +@using Volo.Abp.AspNetCore.Components.Web.Security + +@inject WebAssemblyCachedApplicationConfigurationClient WebAssemblyCachedApplicationConfigurationClient +@code{ + [Parameter] public string? Action { get; set; } + + private async Task OnLogInSucceeded(RemoteAuthenticationState state) + { + await WebAssemblyCachedApplicationConfigurationClient.InitializeAsync(); + } + + private async Task OnLogOutSucceeded(RemoteAuthenticationState state) + { + await WebAssemblyCachedApplicationConfigurationClient.InitializeAsync(); + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor index ee3b2f531d..66a0f8376d 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor @@ -52,6 +52,9 @@ { ApplicationConfigurationChangedService.Changed -= ApplicationConfigurationChanged; } +} + +@implements IDisposable private async Task NavigateToAsync(string? uri, string? target = null) { diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor new file mode 100644 index 0000000000..4f8fc981f4 --- /dev/null +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/WebAssemblyRedirectToLogin.razor @@ -0,0 +1,25 @@ +@inject NavigationManager Navigation +@using Volo.Abp.DependencyInjection +@using Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme.Themes.Basic +@using Microsoft.AspNetCore.Components.WebAssembly.Authentication +@using Microsoft.Extensions.Options +@using Volo.Abp.AspNetCore.Components.Web +@inherits RedirectToLogin +@attribute [ExposeServices(typeof(RedirectToLogin))] +@attribute [Dependency(ReplaceServices = true)] +@inject IOptions AuthenticationOptions +@inject IOptions AbpAspNetCoreComponentsWebOptions + +@code { + protected override void OnInitialized() + { + if (AbpAspNetCoreComponentsWebOptions.Value.IsBlazorWebApp) + { + Navigation.NavigateTo(AuthenticationOptions.Value.LoginUrl, forceLoad: true); + } + else + { + Navigation.NavigateToLogin(AuthenticationOptions.Value.LoginUrl); + } + } +} diff --git a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.csproj b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.csproj index d895ce3b32..ef36174d1b 100644 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.csproj +++ b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme.csproj @@ -12,6 +12,7 @@ +