Browse Source

Complete initial toolbar manager

pull/279/head
Halil İbrahim Kalkan 9 years ago
parent
commit
601a27f059
  1. 7
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/AbpAspNetCoreMvcUIBasicThemeModule.cs
  2. 22
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/ToolbarManager.cs
  3. 23
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Toolbars/BasicThemeMainTopToolbarContributor.cs
  4. 9
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarConfigurationContext.cs
  5. 9
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarContributor.cs
  6. 17
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarConfigurationContext.cs
  7. 37
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs
  8. 16
      src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarOptions.cs
  9. 3
      src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IMenuConfigurationContext.cs
  10. 2
      src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuConfigurationContext.cs

7
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/AbpAspNetCoreMvcUIBasicThemeModule.cs

@ -1,5 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Toolbars;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
@ -17,6 +19,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic
options.FileSets.AddEmbedded<AbpAspNetCoreMvcUiBasicThemeModule>("Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic");
});
services.Configure<ToolbarOptions>(options =>
{
options.Contributors.Add(new BasicThemeMainTopToolbarContributor());
});
services.AddAssemblyOf<AbpAspNetCoreMvcUiBasicThemeModule>();
}
}

22
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/ToolbarManager.cs

@ -1,22 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Views.Shared.Components.Theme.MainNavbar.Toolbar.Items.LanguageSwitch;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Views.Shared.Components.Theme.MainNavbar.Toolbar.Items.UserMenu;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars
{
public class ToolbarManager : IToolbarManager, ITransientDependency
{
public async Task<Toolbar> GetAsync(string name)
{
return new Toolbar(name)
{
Items =
{
new ToolbarItem(typeof(LanguageSwitchViewComponent)),
new ToolbarItem(typeof(UserMenuViewComponent))
}
};
}
}
}

23
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Toolbars/BasicThemeMainTopToolbarContributor.cs

@ -0,0 +1,23 @@
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Views.Shared.Components.Theme.MainNavbar.Toolbar.Items.LanguageSwitch;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Views.Shared.Components.Theme.MainNavbar.Toolbar.Items.UserMenu;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Toolbars
{
public class BasicThemeMainTopToolbarContributor : IToolbarContributor
{
public Task ConfigureToolbarAsync(IToolbarConfigurationContext context)
{
if (context.Toolbar.Name != StandardToolbars.Main)
{
return Task.CompletedTask;
}
context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitchViewComponent)));
context.Toolbar.Items.Add(new ToolbarItem(typeof(UserMenuViewComponent)));
return Task.CompletedTask;
}
}
}

9
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarConfigurationContext.cs

@ -0,0 +1,9 @@
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars
{
public interface IToolbarConfigurationContext : IServiceProviderAccessor
{
Toolbar Toolbar { get; }
}
}

9
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/IToolbarContributor.cs

@ -0,0 +1,9 @@
using System.Threading.Tasks;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars
{
public interface IToolbarContributor
{
Task ConfigureToolbarAsync(IToolbarConfigurationContext context);
}
}

17
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarConfigurationContext.cs

@ -0,0 +1,17 @@
using System;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars
{
public class ToolbarConfigurationContext : IToolbarConfigurationContext
{
public Toolbar Toolbar { get; }
public IServiceProvider ServiceProvider { get; }
public ToolbarConfigurationContext(Toolbar toolbar, IServiceProvider serviceProvider)
{
Toolbar = toolbar;
ServiceProvider = serviceProvider;
}
}
}

37
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarManager.cs

@ -0,0 +1,37 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars
{
public class ToolbarManager : IToolbarManager, ITransientDependency
{
protected ToolbarOptions Options { get; }
protected IServiceProvider ServiceProvider { get; }
public ToolbarManager(IOptions<ToolbarOptions> options, IServiceProvider serviceProvider)
{
ServiceProvider = serviceProvider;
Options = options.Value;
}
public async Task<Toolbar> GetAsync(string name)
{
var menu = new Toolbar(name);
using (var scope = ServiceProvider.CreateScope())
{
var context = new ToolbarConfigurationContext(menu, scope.ServiceProvider);
foreach (var contributor in Options.Contributors)
{
await contributor.ConfigureToolbarAsync(context);
}
}
return menu;
}
}
}

16
src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Toolbars/ToolbarOptions.cs

@ -0,0 +1,16 @@
using System.Collections.Generic;
using JetBrains.Annotations;
namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Toolbars
{
public class ToolbarOptions
{
[NotNull]
public List<IToolbarContributor> Contributors { get; }
public ToolbarOptions()
{
Contributors = new List<IToolbarContributor>();
}
}
}

3
src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/IMenuConfigurationContext.cs

@ -1,10 +1,11 @@
using System;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.UI.Navigation
{
public interface IMenuConfigurationContext : IServiceProviderAccessor
{
ApplicationMenu Menu { get; set; }
ApplicationMenu Menu { get; }
//TODO: Add Localization, Authorization components since they are most used components on menu creation!
}

2
src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuConfigurationContext.cs

@ -4,7 +4,7 @@ namespace Volo.Abp.UI.Navigation
{
public class MenuConfigurationContext : IMenuConfigurationContext
{
public ApplicationMenu Menu { get; set; }
public ApplicationMenu Menu { get; }
public IServiceProvider ServiceProvider { get; }

Loading…
Cancel
Save