|
|
|
@ -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<MenuFeature>()) |
|
|
|
{ |
|
|
|
var menuAppService = context.ServiceProvider.GetRequiredService<IMenuPublicAppService>(); |
|
|
|
|
|
|
|
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<MenuItemDto> 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); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |