diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs index 7f93f1ade1..6f90a74d7c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/CmsKitPublicMenuContributor.cs @@ -1,5 +1,12 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.GlobalFeatures; using Volo.Abp.UI.Navigation; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Menus; +using Volo.CmsKit.Public.Menus; namespace Volo.CmsKit.Public.Web.Menus { @@ -13,11 +20,54 @@ namespace Volo.CmsKit.Public.Web.Menus } } - private Task ConfigureMainMenuAsync(MenuConfigurationContext context) + private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) { - //Add main menu items. + if (GlobalFeatureManager.Instance.IsEnabled()) + { + var menuAppService = context.ServiceProvider.GetRequiredService(); + + var mainMenu = await menuAppService.GetMainMenuAsync(); + + if (mainMenu != null) + { + // TODO: Consider about not to remove existing static menus. + context.Menu.Items.Clear(); + + foreach (var menuItemDto in mainMenu.Items.Where(x => x.ParentId == null)) + { + var applicationMenuItem = CreateApplicationMenu(menuItemDto); + context.Menu.Items.Add(applicationMenuItem); + AddChildItems(applicationMenuItem, menuItemDto, mainMenu.Items); + } + } + } + } + + private ApplicationMenuItem CreateApplicationMenu(MenuItemDto menuItem) + { + return new ApplicationMenuItem( + menuItem.DisplayName, + menuItem.DisplayName, + menuItem.Url, + menuItem.Icon, + menuItem.Order, + customData: null, + menuItem.Target, + menuItem.ElementId, + menuItem.CssClass, + menuItem.RequiredPermissionName + ); + } + + private void AddChildItems(ApplicationMenuItem parent, MenuItemDto menuItem, List source) + { + var applicationMenuItem = CreateApplicationMenu(menuItem); + parent.Items.Add(applicationMenuItem); - return Task.CompletedTask; + foreach (var item in source.Where(x => x.ParentId == menuItem.Id)) + { + AddChildItems(applicationMenuItem, item, source); + } } } } \ No newline at end of file