Browse Source

basic improvements on widget system

pull/1140/head
Yunus Emre Kalkan 7 years ago
parent
commit
b1582fdd6f
  1. 12
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/IWidgetRenderer.cs
  2. 27
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetRenderer.cs
  3. 2
      samples/DashboardDemo/DashboardDemo.sln
  4. 13
      samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs
  5. 10
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/Index.cshtml
  6. 6
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/MyWidgetViewComponent.cshtml
  7. 13
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/MyWidgetViewComponent.cshtml.cs

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

@ -1,18 +1,12 @@
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<object> RenderAsync(string mywidget);
}
public class WidgetRenderer : IWidgetRenderer
{
public Task<object> RenderAsync(string mywidget)
{
throw new System.NotImplementedException();
}
Task<IHtmlContent> RenderAsync(IViewComponentHelper component, string mywidget);
}
}

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

@ -0,0 +1,27 @@
using System;
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;
public WidgetRenderer(IOptions<WidgetOptions> widgetOptions)
{
_widgetOptions = widgetOptions.Value;
}
public async Task<IHtmlContent> RenderAsync(IViewComponentHelper component, string mywidget)
{
var componentType = _widgetOptions.Widgets.Single(w=>w.Name.Equals(mywidget)).ViewComponentType;
var args = new object();
return await component.InvokeAsync(componentType, args);
}
}
}

2
samples/DashboardDemo/DashboardDemo.sln

@ -19,7 +19,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DashboardDemo.Application.T
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DashboardDemo.Web.Tests", "test\DashboardDemo.Web.Tests\DashboardDemo.Web.Tests.csproj", "{5F1B28C6-8D0C-4155-92D0-252F7EA5F674}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DashboardDemo.EntityFrameworkCore.DbMigrations", "src\DashboardDemo.EntityFrameworkCore.DbMigrations\DashboardDemo.EntityFrameworkCore.DbMigrations.csproj", "{0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DashboardDemo.EntityFrameworkCore.DbMigrations", "src\DashboardDemo.EntityFrameworkCore.DbMigrations\DashboardDemo.EntityFrameworkCore.DbMigrations.csproj", "{0372FA84-C517-4EB3-9A9F-B9ACAC0CA5E0}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

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

@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection;
using DashboardDemo.EntityFrameworkCore;
using DashboardDemo.Localization.DashboardDemo;
using DashboardDemo.Menus;
using DashboardDemo.Pages.widgets;
using DashboardDemo.Permissions;
using Swashbuckle.AspNetCore.Swagger;
using Volo.Abp;
@ -18,6 +19,7 @@ using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic;
using Volo.Abp.AspNetCore.Mvc.UI.Dashboards;
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
using Volo.Abp.AspNetCore.Mvc.UI.Widgets;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Autofac;
using Volo.Abp.AutoMapper;
@ -36,7 +38,6 @@ using Volo.Abp.PermissionManagement;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.TenantManagement.Web;
namespace DashboardDemo
{
[DependsOn(
@ -69,6 +70,7 @@ namespace DashboardDemo
var hostingEnvironment = context.Services.GetHostingEnvironment();
var configuration = context.Services.GetConfiguration();
ConfigureWidgets();
ConfigureDatabaseServices();
ConfigureAutoMapper();
ConfigureVirtualFileSystem(hostingEnvironment);
@ -78,6 +80,15 @@ namespace DashboardDemo
ConfigureSwaggerServices(context.Services);
}
private void ConfigureWidgets()
{
Configure<WidgetOptions>(options =>
{
options.Widgets.Add(new WidgetDefinition("MyWidget", typeof(MyWidgetViewComponentModel),
new LocalizableString(typeof(DashboardDemoResource), "MyWidgett")));
});
}
private void ConfigureDatabaseServices()
{
Configure<AbpDbContextOptions>(options =>

10
samples/DashboardDemo/src/DashboardDemo.Web/Pages/Index.cshtml

@ -1,6 +1,8 @@
@page
@using DashboardDemo.Pages
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets
@inherits DashboardDemoPageBase
@inject IWidgetRenderer WidgetRenderer
@model IndexModel
@section styles {
<link href="~/pages/index.css" rel="stylesheet" />
@ -8,12 +10,6 @@
<abp-card>
<abp-card-header>@L["Welcome"]</abp-card-header>
<abp-card-body>
<p>@L["LongWelcomeMessage"]</p>
@if (!CurrentUser.IsAuthenticated)
{
<p><a abp-button="Primary" href="/Account/Login"><i class="fa fa-sign-in"></i> @L["Login"]</a></p>
}
<hr/>
<p class="text-right"><a href="http://abp.io?ref=tmpl" target="_blank">abp.io</a></p>
@await WidgetRenderer.RenderAsync(Component, "MyWidget")
</abp-card-body>
</abp-card>

6
samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/MyWidgetViewComponent.cshtml

@ -0,0 +1,6 @@
@page
@model DashboardDemo.Pages.widgets.MyWidgetViewComponentModel
@{
}
Hiiiiiii

13
samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/MyWidgetViewComponent.cshtml.cs

@ -0,0 +1,13 @@
using Microsoft.AspNetCore.Mvc;
namespace DashboardDemo.Pages.widgets
{
[ViewComponent]
public class MyWidgetViewComponentModel : ViewComponent
{
public IViewComponentResult Invoke()
{
return View("/Pages/widgets/MyWidgetViewComponent.cshtml", new MyWidgetViewComponentModel());
}
}
}
Loading…
Cancel
Save