Browse Source

Move menu items under the new administration menu

pull/892/head
Halil ibrahim Kalkan 8 years ago
parent
commit
03246e0791
  1. 13
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenu.cs
  2. 34
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuExtensions.cs
  3. 10
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuItem.cs
  4. 46
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuItemList.cs
  5. 4
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IHasMenuItems.cs
  6. 11
      framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs
  7. 9
      framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/MenuManager_Tests.cs
  8. 11
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs
  9. 9
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMenuNames.cs

13
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenu.cs

@ -1,5 +1,5 @@
using System.Collections.Generic;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Ui.Navigation;
namespace Volo.Abp.UI.Navigation namespace Volo.Abp.UI.Navigation
{ {
@ -29,11 +29,11 @@ namespace Volo.Abp.UI.Navigation
/// <inheritdoc cref="IHasMenuItems.Items"/> /// <inheritdoc cref="IHasMenuItems.Items"/>
[NotNull] [NotNull]
public IList<ApplicationMenuItem> Items { get; } //TODO: Create a specialized collection (that can contain AddAfter for example) public ApplicationMenuItemList Items { get; }
/// <summary> /// <summary>
/// Can be used to store a custom object related to this menu. /// Can be used to store a custom object related to this menu.
/// TODO: Conver to dictionary! /// TODO: Convert to dictionary!
/// </summary> /// </summary>
[CanBeNull] [CanBeNull]
public object CustomData { get; set; } public object CustomData { get; set; }
@ -47,7 +47,7 @@ namespace Volo.Abp.UI.Navigation
Name = name; Name = name;
DisplayName = displayName ?? Name; DisplayName = displayName ?? Name;
Items = new List<ApplicationMenuItem>(); Items = new ApplicationMenuItemList();
} }
/// <summary> /// <summary>
@ -60,5 +60,10 @@ namespace Volo.Abp.UI.Navigation
Items.Add(menuItem); Items.Add(menuItem);
return this; return this;
} }
public override string ToString()
{
return $"[ApplicationMenu] Name = {Name}";
}
} }
} }

34
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuExtensions.cs

@ -1,5 +1,5 @@
using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using System.Linq;
using Volo.Abp.Ui.Navigation; using Volo.Abp.Ui.Navigation;
namespace Volo.Abp.UI.Navigation namespace Volo.Abp.UI.Navigation
@ -7,13 +7,18 @@ namespace Volo.Abp.UI.Navigation
public static class ApplicationMenuExtensions public static class ApplicationMenuExtensions
{ {
[NotNull] [NotNull]
public static ApplicationMenuItem GetAdministration(this ApplicationMenu applicationMenu) public static ApplicationMenuItem GetAdministration(
[NotNull] this ApplicationMenu applicationMenu)
{ {
return applicationMenu.GetMenuItem(DefaultMenuNames.Application.Main.Administration); return applicationMenu.GetMenuItem(
DefaultMenuNames.Application.Main.Administration
);
} }
[NotNull] [NotNull]
public static ApplicationMenuItem GetMenuItem(this IHasMenuItems menuWithItems, string menuItemName) public static ApplicationMenuItem GetMenuItem(
[NotNull] this IHasMenuItems menuWithItems,
string menuItemName)
{ {
var menuItem = menuWithItems.GetMenuItemOrNull(menuItemName); var menuItem = menuWithItems.GetMenuItemOrNull(menuItemName);
if (menuItem == null) if (menuItem == null)
@ -26,10 +31,29 @@ namespace Volo.Abp.UI.Navigation
[CanBeNull] [CanBeNull]
public static ApplicationMenuItem GetMenuItemOrNull( public static ApplicationMenuItem GetMenuItemOrNull(
this IHasMenuItems menuWithItems, [NotNull] this IHasMenuItems menuWithItems,
string menuItemName) string menuItemName)
{ {
Check.NotNull(menuWithItems, nameof(menuWithItems));
return menuWithItems.Items.FirstOrDefault(mi => mi.Name == menuItemName); return menuWithItems.Items.FirstOrDefault(mi => mi.Name == menuItemName);
} }
[NotNull]
public static IHasMenuItems SetSubItemOrder(
[NotNull] this IHasMenuItems menuWithItems,
string menuItemName,
int order)
{
Check.NotNull(menuWithItems, nameof(menuWithItems));
var menuItem = menuWithItems.GetMenuItemOrNull(menuItemName);
if (menuItem != null)
{
menuItem.Order = order;
}
return menuWithItems;
}
} }
} }

10
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuItem.cs

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Ui.Navigation;
namespace Volo.Abp.UI.Navigation namespace Volo.Abp.UI.Navigation
{ {
@ -68,7 +69,7 @@ namespace Volo.Abp.UI.Navigation
/// <inheritdoc cref="IHasMenuItems.Items"/> /// <inheritdoc cref="IHasMenuItems.Items"/>
[NotNull] [NotNull]
public IList<ApplicationMenuItem> Items { get; } public ApplicationMenuItemList Items { get; }
/// <summary> /// <summary>
/// Can be used to store a custom object related to this menu item. Optional. /// Can be used to store a custom object related to this menu item. Optional.
@ -109,7 +110,7 @@ namespace Volo.Abp.UI.Navigation
ElementId = elementId ?? GetDefaultElementId(); ElementId = elementId ?? GetDefaultElementId();
CssClass = cssClass; CssClass = cssClass;
Items = new List<ApplicationMenuItem>(); Items = new ApplicationMenuItemList();
} }
/// <summary> /// <summary>
@ -127,5 +128,10 @@ namespace Volo.Abp.UI.Navigation
{ {
return "MenuItem_" + Name; return "MenuItem_" + Name;
} }
public override string ToString()
{
return $"[ApplicationMenuItem] Name = {Name}";
}
} }
} }

46
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/ApplicationMenuItemList.cs

@ -0,0 +1,46 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.UI.Navigation;
namespace Volo.Abp.Ui.Navigation
{
public class ApplicationMenuItemList : List<ApplicationMenuItem>
{
public ApplicationMenuItemList()
{
}
public ApplicationMenuItemList(int capacity)
: base(capacity)
{
}
public ApplicationMenuItemList(IEnumerable<ApplicationMenuItem> collection)
: base(collection)
{
}
public void Normalize()
{
RemoveEmptyItems();
Order();
}
private void RemoveEmptyItems()
{
RemoveAll(item => item.IsLeaf && item.Url.IsNullOrEmpty());
}
private void Order()
{
//TODO: Is there any way that is more performant?
var orderedItems = this.OrderBy(item => item.Order).ToArray();
Clear();
AddRange(orderedItems);
}
}
}

4
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IHasMenuItems.cs

@ -1,4 +1,4 @@
using System.Collections.Generic; using Volo.Abp.Ui.Navigation;
namespace Volo.Abp.UI.Navigation namespace Volo.Abp.UI.Navigation
{ {
@ -7,6 +7,6 @@ namespace Volo.Abp.UI.Navigation
/// <summary> /// <summary>
/// Menu items. /// Menu items.
/// </summary> /// </summary>
IList<ApplicationMenuItem> Items { get; } ApplicationMenuItemList Items { get; }
} }
} }

11
framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -38,10 +39,14 @@ namespace Volo.Abp.UI.Navigation
return menu; return menu;
} }
protected virtual void NormalizeMenu(ApplicationMenu menu) protected virtual void NormalizeMenu(IHasMenuItems menuWithItems)
{ {
//TODO: Should also consider sub menus, recursively, bottom to top! foreach (var menuItem in menuWithItems.Items)
menu.Items.RemoveAll(item => item.IsLeaf && item.Url.IsNullOrEmpty()); {
NormalizeMenu(menuItem);
}
menuWithItems.Items.Normalize();
} }
} }
} }

9
framework/test/Volo.Abp.UI.Navigation.Tests/Volo/Abp/Ui/Navigation/MenuManager_Tests.cs

@ -29,6 +29,9 @@ namespace Volo.Abp.UI.Navigation
mainMenu.Items[1].Items[0].Name.ShouldBe("Administration.UserManagement"); mainMenu.Items[1].Items[0].Name.ShouldBe("Administration.UserManagement");
mainMenu.Items[1].Items[1].Name.ShouldBe("Administration.RoleManagement"); mainMenu.Items[1].Items[1].Name.ShouldBe("Administration.RoleManagement");
mainMenu.Items[1].Items[2].Name.ShouldBe("Administration.DashboardSettings"); mainMenu.Items[1].Items[2].Name.ShouldBe("Administration.DashboardSettings");
mainMenu.Items[1].Items[3].Name.ShouldBe("Administration.SubMenu1");
mainMenu.Items[1].Items[3].Items[0].Name.ShouldBe("Administration.SubMenu1.1");
mainMenu.Items[1].Items[3].Items[1].Name.ShouldBe("Administration.SubMenu1.2");
} }
[DependsOn(typeof(AbpUiNavigationModule))] [DependsOn(typeof(AbpUiNavigationModule))]
@ -89,6 +92,12 @@ namespace Volo.Abp.UI.Navigation
administration.AddItem(new ApplicationMenuItem("Administration.DashboardSettings", "Dashboard Settings", url: "/admin/settings/dashboard")); administration.AddItem(new ApplicationMenuItem("Administration.DashboardSettings", "Dashboard Settings", url: "/admin/settings/dashboard"));
administration.AddItem(
new ApplicationMenuItem("Administration.SubMenu1", "Sub menu 1")
.AddItem(new ApplicationMenuItem("Administration.SubMenu1.1", "Sub menu 1.1", url: "/submenu1/submenu1_1"))
.AddItem(new ApplicationMenuItem("Administration.SubMenu1.2", "Sub menu 1.2", url: "/submenu1/submenu1_2"))
);
return Task.CompletedTask; return Task.CompletedTask;
} }
} }

11
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs

@ -25,7 +25,16 @@ namespace Volo.Abp.SettingManagement.Web.Navigation
//TODO: Localize //TODO: Localize
//var l = context.ServiceProvider.GetRequiredService<IStringLocalizer<IdentityResource>>(); //var l = context.ServiceProvider.GetRequiredService<IStringLocalizer<IdentityResource>>();
context.Menu.AddItem(new ApplicationMenuItem(SettingManagementMenuNames.GroupName, "Settings", "/SettingManagement", icon: "fa fa-cog", order: int.MaxValue - 1000)); context.Menu
.GetAdministration()
.AddItem(
new ApplicationMenuItem(
SettingManagementMenuNames.GroupName,
"Settings",
"/SettingManagement",
icon: "fa fa-cog"
)
);
return Task.CompletedTask; return Task.CompletedTask;
} }

9
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMenuNames.cs

@ -1,14 +1,7 @@
using System; namespace Volo.Abp.SettingManagement.Web.Navigation
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Volo.Abp.SettingManagement.Web.Navigation
{ {
public class SettingManagementMenuNames public class SettingManagementMenuNames
{ {
public const string GroupName = "SettingManagement"; public const string GroupName = "SettingManagement";
public const string Settings = GroupName + ".Settings";
} }
} }

Loading…
Cancel
Save