From 8b62569453973c04fc82cadfdda9b09db614a0d8 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 9 Feb 2026 12:23:38 +0800 Subject: [PATCH] Refactor navigation components. --- .../MudBlazorBasicThemeToolbarContributor.cs | 2 +- .../Themes/Basic/Branding.razor | 5 -- .../Themes/Basic/MainLayout.razor | 2 - .../Themes/Basic/NavMenu.razor | 22 +++++--- ...velNavMenuItem.razor => NavMenuItem.razor} | 20 ++++++- .../Themes/Basic/SecondLevelNavMenuItem.razor | 56 ------------------- 6 files changed, 32 insertions(+), 75 deletions(-) delete mode 100644 modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/Branding.razor rename modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/{FirstLevelNavMenuItem.razor => NavMenuItem.razor} (73%) delete mode 100644 modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor 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 0ba46719c4..d0c9390a62 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 @@ -11,8 +11,8 @@ 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))); + context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); } return Task.CompletedTask; 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 deleted file mode 100644 index 74c3ec441c..0000000000 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/Branding.razor +++ /dev/null @@ -1,5 +0,0 @@ -@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/MainLayout.razor b/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/MainLayout.razor index c1db9951af..0fe9afa36c 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 @@ -15,14 +15,12 @@ Color="Color.Inherit" Edge="Edge.Start" OnClick="@ToggleDrawer" /> - 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 90c4e73797..49cea6c059 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,10 +1,14 @@ -@using Microsoft.AspNetCore.Components.Routing -@if (Menu != null) -{ - - @foreach (var menuItem in Menu.Items) +@using Volo.Abp.Ui.Branding +@inject IBrandingProvider BrandingProvider + + + @BrandingProvider.AppName + + @if(Menu != null && !Menu.Items.IsNullOrEmpty()) + { + foreach (var menuItem in Menu.Items) { - @if (menuItem.Items.IsNullOrEmpty()) + if (menuItem.Items.IsNullOrEmpty()) { @@ -13,8 +17,8 @@ } else { - + } } - -} + } + 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/NavMenuItem.razor similarity index 73% rename from modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/FirstLevelNavMenuItem.razor rename to modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/NavMenuItem.razor index 57827f06a6..68cd499dc5 100644 --- 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/NavMenuItem.razor @@ -13,7 +13,7 @@ } else { - + @MenuItem.DisplayName @@ -23,7 +23,7 @@ else { @if (item.Items.Any()) { - + } else { @@ -54,6 +54,22 @@ else // Menu will close automatically on navigation } + protected virtual bool IsExpanded(ApplicationMenuItem item) + { + if (!item.Url.IsNullOrEmpty()) + { + var menuItemPath = item.Url.Replace("~/", string.Empty).Trim('/'); + var currentPagePath = new Uri(NavigationManager.Uri.TrimEnd('/')).AbsolutePath.Trim('/'); + + if (menuItemPath.TrimEnd('/').Equals(currentPagePath, StringComparison.OrdinalIgnoreCase)) + { + return true; + } + } + + return item.Items.Any(IsExpanded); + } + public void Dispose() { NavigationManager.LocationChanged -= OnLocationChanged; 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 deleted file mode 100644 index 589e8d644f..0000000000 --- a/modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Web.MudBlazorBasicTheme/Themes/Basic/SecondLevelNavMenuItem.razor +++ /dev/null @@ -1,56 +0,0 @@ -@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 -{ - - - - @MenuItem.DisplayName - - - @foreach (var item in MenuItem.Items) - { - - - @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; - } -} - -@implements IDisposable