From 126acf330d3f0c538535f3b1cdab42d2905f2c02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 5 May 2020 04:45:07 +0300 Subject: [PATCH] Add PageToolbar --- .../PageToolbars/AbpPageToolbarOptions.cs | 31 +++++++ .../PageToolbars/IPageToolbarContributor.cs | 9 ++ .../PageToolbars/IPageToolbarManager.cs | 9 ++ .../PageToolbars/PageToolbar.cs | 17 ++++ .../PageToolbarContributionContext.cs | 27 ++++++ .../PageToolbars/PageToolbarContributor.cs | 9 ++ .../PageToolbarContributorList.cs | 8 ++ .../PageToolbars/PageToolbarDictionary.cs | 9 ++ .../PageToolbars/PageToolbarExtensions.cs | 84 +++++++++++++++++++ .../PageToolbars/PageToolbarItem.cs | 26 ++++++ .../PageToolbars/PageToolbarItemList.cs | 9 ++ .../PageToolbars/PageToolbarManager.cs | 44 ++++++++++ .../SimplePageToolbarContributor.cs | 52 ++++++++++++ .../AbpPageToolbarViewComponent.cs | 22 +++++ .../AbpPageToolbarButtonViewComponent.cs | 82 ++++++++++++++++++ .../AbpPageToolbar/Button/Default.cshtml | 13 +++ .../Components/AbpPageToolbar/Default.cshtml | 5 ++ .../AbpPageToolbar/_ViewImports.cshtml | 4 + 18 files changed, 460 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/AbpPageToolbarOptions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarContributor.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarManager.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbar.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributionContext.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributor.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributorList.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarDictionary.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarExtensions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItem.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItemList.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/SimplePageToolbarContributor.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/AbpPageToolbarViewComponent.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/AbpPageToolbarButtonViewComponent.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/Default.cshtml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Default.cshtml create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/_ViewImports.cshtml diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/AbpPageToolbarOptions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/AbpPageToolbarOptions.cs new file mode 100644 index 0000000000..f033fbaeab --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/AbpPageToolbarOptions.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class AbpPageToolbarOptions + { + public PageToolbarDictionary Toolbars { get; } + + public AbpPageToolbarOptions() + { + Toolbars = new PageToolbarDictionary(); + } + + public void Configure([NotNull] Action configureAction) + { + // ReSharper disable once AssignNullToNotNullAttribute + Configure(typeof(TPage).FullName, configureAction); + } + + public void Configure([NotNull]string pageName, [NotNull]Action configureAction) + { + Check.NotNullOrWhiteSpace(pageName, nameof(pageName)); + Check.NotNull(configureAction, nameof(configureAction)); + + var toolbar = Toolbars.GetOrAdd(pageName, () => new PageToolbar(pageName)); + configureAction(toolbar); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarContributor.cs new file mode 100644 index 0000000000..1b373025b6 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarContributor.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public interface IPageToolbarContributor + { + Task ContributeAsync(PageToolbarContributionContext context); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarManager.cs new file mode 100644 index 0000000000..1a638e8901 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/IPageToolbarManager.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public interface IPageToolbarManager + { + Task GetItemsAsync(string pageName); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbar.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbar.cs new file mode 100644 index 0000000000..7362e54074 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbar.cs @@ -0,0 +1,17 @@ +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class PageToolbar + { + public string PageName { get; } + + public PageToolbarContributorList Contributors { get; set; } + + public PageToolbar([NotNull] string pageName) + { + PageName = Check.NotNullOrEmpty(pageName, nameof(pageName)); + Contributors = new PageToolbarContributorList(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributionContext.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributionContext.cs new file mode 100644 index 0000000000..2203559add --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributionContext.cs @@ -0,0 +1,27 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class PageToolbarContributionContext + { + [NotNull] + public string PageName { get; } + + [NotNull] + public IServiceProvider ServiceProvider { get; } + + [NotNull] + public PageToolbarItemList Items { get; } + + public PageToolbarContributionContext( + [NotNull] string pageName, + [NotNull] IServiceProvider serviceProvider) + { + PageName = Check.NotNull(pageName, nameof(pageName)); + ServiceProvider = Check.NotNull(serviceProvider, nameof(serviceProvider)); + + Items = new PageToolbarItemList(); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributor.cs new file mode 100644 index 0000000000..2cff729aa0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributor.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public abstract class PageToolbarContributor : IPageToolbarContributor + { + public abstract Task ContributeAsync(PageToolbarContributionContext context); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributorList.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributorList.cs new file mode 100644 index 0000000000..e1c7c09934 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarContributorList.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class PageToolbarContributorList : List + { + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarDictionary.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarDictionary.cs new file mode 100644 index 0000000000..30a868c5b1 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarDictionary.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class PageToolbarDictionary : Dictionary + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarExtensions.cs new file mode 100644 index 0000000000..794b923b48 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarExtensions.cs @@ -0,0 +1,84 @@ +using System; +using Localization.Resources.AbpUi; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar.Button; +using Volo.Abp.Localization; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public static class PageToolbarExtensions + { + public static PageToolbar AddComponent( + this PageToolbar toolbar, + object argument = null, + int order = 0, + string requiredPolicyName = null) + { + return toolbar.AddComponent( + typeof(TComponent), + argument, + order, + requiredPolicyName + ); + } + + public static PageToolbar AddComponent( + this PageToolbar toolbar, + Type componentType, + object argument = null, + int order = 0, + string requiredPolicyName = null) + { + toolbar.Contributors.Add( + new SimplePageToolbarContributor( + componentType, + argument, + order, + requiredPolicyName + ) + ); + + return toolbar; + } + + public static PageToolbar AddButton( + this PageToolbar toolbar, + ILocalizableString text, + string icon = null, + string name = null, + string id = null, + ILocalizableString busyText = null, + FontIconType iconType = FontIconType.FontAwesome, + AbpButtonType type = AbpButtonType.Primary, + AbpButtonSize size = AbpButtonSize.Small, + bool disabled = false, + int order = 0, + string requiredPolicyName = null) + { + if (busyText == null) + { + busyText = new LocalizableString(typeof(AbpUiResource), "ProcessingWithThreeDot"); + } + + toolbar.AddComponent( + new + { + text, + icon, + name, + id, + busyText, + iconType, + type, + size, + disabled + }, + order, + requiredPolicyName + ); + + return toolbar; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItem.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItem.cs new file mode 100644 index 0000000000..b73dc4d829 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItem.cs @@ -0,0 +1,26 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class PageToolbarItem + { + [NotNull] + public Type ComponentType { get; } + + [CanBeNull] + public object Arguments { get; set; } + + public int Order { get; set; } + + public PageToolbarItem( + [NotNull] Type componentType, + [CanBeNull] object arguments = null, + int order = 0) + { + ComponentType = Check.NotNull(componentType, nameof(componentType)); + Arguments = arguments; + Order = order; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItemList.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItemList.cs new file mode 100644 index 0000000000..69b943d376 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarItemList.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class PageToolbarItemList : List + { + + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs new file mode 100644 index 0000000000..f54365674f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class PageToolbarManager : IPageToolbarManager, ITransientDependency + { + protected AbpPageToolbarOptions Options { get; } + protected IHybridServiceScopeFactory ServiceScopeFactory { get; } + + public PageToolbarManager( + IOptions options, + IHybridServiceScopeFactory serviceScopeFactory) + { + Options = options.Value; + ServiceScopeFactory = serviceScopeFactory; + } + + public virtual async Task GetItemsAsync(string pageName) + { + var toolbar = Options.Toolbars.GetOrDefault(pageName); + if (toolbar == null || !toolbar.Contributors.Any()) + { + return Array.Empty(); + } + + using (var scope = ServiceScopeFactory.CreateScope()) + { + var context = new PageToolbarContributionContext(pageName, scope.ServiceProvider); + + foreach (var contributor in toolbar.Contributors) + { + await contributor.ContributeAsync(context); + } + + return context.Items.OrderBy(i => i.Order).ToArray(); + } + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/SimplePageToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/SimplePageToolbarContributor.cs new file mode 100644 index 0000000000..a07b357b42 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/SimplePageToolbarContributor.cs @@ -0,0 +1,52 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars +{ + public class SimplePageToolbarContributor : IPageToolbarContributor + { + public Type ComponentType { get; } + + public object Argument { get; set; } + + public int Order { get; } + + public string RequiredPolicyName { get; } + + public SimplePageToolbarContributor( + Type componentType, + object argument = null, + int order = 0, + string requiredPolicyName = null) + { + ComponentType = componentType; + Argument = argument; + Order = order; + RequiredPolicyName = requiredPolicyName; + } + + public async Task ContributeAsync(PageToolbarContributionContext context) + { + if(await ShouldAddComponentAsync(context)) + { + context.Items.Add(new PageToolbarItem(ComponentType, Argument, Order)); + } + } + + protected virtual async Task ShouldAddComponentAsync(PageToolbarContributionContext context) + { + if (RequiredPolicyName != null) + { + var authorizationService = context.ServiceProvider.GetRequiredService(); + if (!await authorizationService.IsGrantedAsync(RequiredPolicyName)) + { + return false; + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/AbpPageToolbarViewComponent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/AbpPageToolbarViewComponent.cs new file mode 100644 index 0000000000..b07bc69abb --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/AbpPageToolbarViewComponent.cs @@ -0,0 +1,22 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar +{ + public class AbpPageToolbarViewComponent : AbpViewComponent + { + private readonly IPageToolbarManager _toolbarManager; + + public AbpPageToolbarViewComponent(IPageToolbarManager toolbarManager) + { + _toolbarManager = toolbarManager; + } + + public async Task InvokeAsync(string pageName) + { + var items = await _toolbarManager.GetItemsAsync(pageName); + return View("~/Pages/Shared/Components/AbpPageToolbar/Default.cshtml", items); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/AbpPageToolbarButtonViewComponent.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/AbpPageToolbarButtonViewComponent.cs new file mode 100644 index 0000000000..894ade7005 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/AbpPageToolbarButtonViewComponent.cs @@ -0,0 +1,82 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Localization; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button; +using Volo.Abp.Localization; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar.Button +{ + public class AbpPageToolbarButtonViewComponent : AbpViewComponent + { + protected IStringLocalizerFactory StringLocalizerFactory { get; } + + public AbpPageToolbarButtonViewComponent(IStringLocalizerFactory stringLocalizerFactory) + { + StringLocalizerFactory = stringLocalizerFactory; + } + + public IViewComponentResult Invoke( + ILocalizableString text, + string name, + string icon, + string id, + ILocalizableString busyText, + FontIconType iconType, + AbpButtonType type, + AbpButtonSize size, + bool disabled) + { + Check.NotNull(text, nameof(text)); + + return View( + "~/Pages/Shared/Components/AbpPageToolbar/Button/Default.cshtml", + new AbpPageToolbarButtonViewModel( + text.Localize(StringLocalizerFactory), + name, + icon, + id, + busyText?.Localize(StringLocalizerFactory), + iconType, + type, + size, + disabled + ) + ); + } + + public class AbpPageToolbarButtonViewModel + { + public string Text { get; } + public string Name { get; } + public string Icon { get; } + public string Id { get; } + public string BusyText { get; } + public FontIconType IconType { get; } + public AbpButtonType Type { get; } + public AbpButtonSize Size { get; } + public bool Disabled { get; } + + public AbpPageToolbarButtonViewModel( + string text, + string name, + string icon, + string id, + string busyText, + FontIconType iconType, + AbpButtonType type, + AbpButtonSize size, + bool disabled) + { + Text = text; + Name = name; + Icon = icon; + Id = id; + BusyText = busyText; + IconType = iconType; + Type = type; + Size = size; + Disabled = disabled; + } + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/Default.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/Default.cshtml new file mode 100644 index 0000000000..10f2f7ceb2 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Button/Default.cshtml @@ -0,0 +1,13 @@ +@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Pages.Shared.Components.AbpPageToolbar.Button.AbpPageToolbarButtonViewComponent.AbpPageToolbarButtonViewModel + \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Default.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Default.cshtml new file mode 100644 index 0000000000..a5331abc9e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/Default.cshtml @@ -0,0 +1,5 @@ +@model Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars.PageToolbarItem[] +@foreach (var toolbarItem in Model) +{ + @(await Component.InvokeAsync(toolbarItem.ComponentType, toolbarItem.Arguments)) +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/_ViewImports.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/_ViewImports.cshtml new file mode 100644 index 0000000000..c1da1f5f10 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageToolbar/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling \ No newline at end of file