Browse Source

Remove WidgetRenreder and decorate DefaultViewComponentHelper instead.

pull/1520/head
Halil İbrahim Kalkan 7 years ago
parent
commit
fb9b39452f
  1. 3
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/Components/Dashboard/Default.cshtml
  2. 6
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpAspNetCoreMvcUiWidgetsModule.cs
  3. 58
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpViewComponentHelper.cs
  4. 12
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/IWidgetRenderer.cs
  5. 27
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetRenderer.cs
  6. 2
      samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs
  7. 6
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/Components/MySimpleWidget/MySimpleWidgetViewComponent.cs
  8. 11
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyWidgets.cshtml
  9. 5
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyWidgets.cshtml.cs
  10. 3
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/_ViewImports.cshtml

3
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/Components/Dashboard/Default.cshtml

@ -5,7 +5,6 @@
@using Volo.Abp.AspNetCore.Mvc.UI.Dashboards
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets
@inject IAuthorizationService AuthorizationService
@inject IWidgetRenderer WidgetRenderer
@inject IGlobalFilterRenderer GlobalFilteRenderer
@inject IHtmlLocalizer<AbpUiResource> L
@model Volo.Abp.AspNetCore.Mvc.UI.Dashboards.Components.Dashboard.DashboardViewModel
@ -47,7 +46,7 @@
<abp-column class="col-@(widgetDefinition.DefaultDimensions.Width) p-2"
style="height: @(widgetDefinition.DefaultDimensions.Height * 100)px">
@await WidgetRenderer.RenderAsync(Component, widgetDefinition.Name)
@await Component.InvokeAsync(widgetDefinition.Name)
</abp-column>
}
}

6
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpAspNetCoreMvcUiWidgetsModule.cs

@ -1,4 +1,6 @@
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Microsoft.AspNetCore.Mvc.ViewComponents;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
@ -13,6 +15,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddTransient<DefaultViewComponentHelper>();
Configure<VirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpAspNetCoreMvcUiWidgetsModule>();

58
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/AbpViewComponentHelper.cs

@ -0,0 +1,58 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewComponents;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets
{
[Dependency(ReplaceServices = true)]
public class AbpViewComponentHelper : IViewComponentHelper, IViewContextAware, ITransientDependency
{
protected WidgetOptions Options { get; }
protected IPageWidgetManager PageWidgetManager { get; }
protected DefaultViewComponentHelper DefaultViewComponentHelper { get; }
public AbpViewComponentHelper(
DefaultViewComponentHelper defaultViewComponentHelper,
IOptions<WidgetOptions> widgetOptions,
IPageWidgetManager pageWidgetManager)
{
DefaultViewComponentHelper = defaultViewComponentHelper;
PageWidgetManager = pageWidgetManager;
Options = widgetOptions.Value;
}
public Task<IHtmlContent> InvokeAsync(string name, object arguments)
{
var widget = Options.Widgets.FirstOrDefault(w => w.Name == name); //Optimize using a dictionary by name
if (widget != null)
{
PageWidgetManager.TryAdd(widget);
}
return DefaultViewComponentHelper.InvokeAsync(name, arguments);
}
public Task<IHtmlContent> InvokeAsync(Type componentType, object arguments)
{
var widget = Options.Widgets.FirstOrDefault(w => w.ViewComponentType == componentType); //Optimize using a dictionary by type
if (widget != null)
{
PageWidgetManager.TryAdd(widget);
}
return DefaultViewComponentHelper.InvokeAsync(componentType, arguments);
}
public void Contextualize(ViewContext viewContext)
{
DefaultViewComponentHelper.Contextualize(viewContext);
}
}
}

12
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/IWidgetRenderer.cs

@ -1,12 +0,0 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets
{
public interface IWidgetRenderer : ITransientDependency
{
Task<IHtmlContent> RenderAsync(IViewComponentHelper componentHelper, string widgetName, object args = null);
}
}

27
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetRenderer.cs

@ -1,27 +0,0 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace Volo.Abp.AspNetCore.Mvc.UI.Widgets
{
public class WidgetRenderer : IWidgetRenderer
{
private readonly WidgetOptions _widgetOptions;
private readonly IPageWidgetManager _pageWidgetManager;
public WidgetRenderer(IOptions<WidgetOptions> widgetOptions, IPageWidgetManager pageWidgetManager)
{
_pageWidgetManager = pageWidgetManager;
_widgetOptions = widgetOptions.Value;
}
public async Task<IHtmlContent> RenderAsync(IViewComponentHelper componentHelper, string widgetName, object args = null)
{
var widget = _widgetOptions.Widgets.Single(w=>w.Name.Equals(widgetName));
_pageWidgetManager.TryAdd(widget);
return await componentHelper.InvokeAsync(widget.ViewComponentType, args ?? new object());
}
}
}

2
samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs

@ -178,7 +178,7 @@ namespace DashboardDemo.Web
{
options.Widgets.Add(
new WidgetDefinition(
"MySimpleWidget",
"MyCustomNameWidget",
typeof(MySimpleWidgetViewComponent))
.WithStyles("/Pages/Components/MySimpleWidget/Default.css")
.WithScripts("/Pages/Components/MySimpleWidget/Default.js")

6
samples/DashboardDemo/src/DashboardDemo.Web/Pages/Components/MySimpleWidget/MySimpleWidgetViewComponent.cs

@ -5,12 +5,12 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
namespace DashboardDemo.Web.Pages.Components.MySimpleWidget
{
[ViewComponent(Name = "MyCustomNameWidget")]
public class MySimpleWidgetViewComponent : AbpViewComponent
{
public IViewComponentResult Invoke()
{
return View();
return View("~/Pages/Components/MySimpleWidget/Default.cshtml");
}
}
@ -18,7 +18,7 @@ namespace DashboardDemo.Web.Pages.Components.MySimpleWidget
{
public override void ConfigureBundle(BundleConfigurationContext context)
{
context.Files.AddIfNotContains("~/Pages/Components/MySimpleWidget/Default.css");
context.Files.AddIfNotContains("/Pages/Components/MySimpleWidget/Default.css");
}
}
}

11
samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyWidgets.cshtml

@ -1,6 +1,11 @@
@page
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets
@using DashboardDemo.Web.Pages.Components.MySimpleWidget
@model DashboardDemo.Web.Pages.MyWidgetsModel
@inject IWidgetRenderer WidgetRenderer
@await WidgetRenderer.RenderAsync(Component, "MySimpleWidget")
@await Component.InvokeAsync(typeof(MySimpleWidgetViewComponent))
<hr />
@await Component.InvokeAsync("MyCustomNameWidget")
<hr />
<vc:my-custom-name-widget></vc:my-custom-name-widget>
@*<hr />
@await WidgetRenderer.RenderAsync(Component, "MySimpleWidget")*@

5
samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyWidgets.cshtml.cs

@ -1,8 +1,3 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace DashboardDemo.Web.Pages

3
samples/DashboardDemo/src/DashboardDemo.Web/Pages/_ViewImports.cshtml

@ -1,4 +1,5 @@
@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
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling
@addTagHelper *, DashboardDemo.Web

Loading…
Cancel
Save