Browse Source

widget & dashboard enhancements

pull/1142/head
Yunus Emre Kalkan 7 years ago
parent
commit
e8831a1cac
  1. 0
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/DashboardOptions.cs
  2. 12
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/DashboardOptionsExtensions.cs
  3. 7
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/DashboardWidgetConfiguration.cs
  4. 9
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/IDashboardDefinitionProvider.cs
  5. 19
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/WidgetLocation.cs
  6. 3
      framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetOptionsExtensions.cs
  7. 10
      samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs
  8. 35
      samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardDefinitionProvider.cs
  9. 14
      samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardNames.cs
  10. 12
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/Index.cshtml
  11. 24
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.cshtml
  12. 37
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.cshtml.cs
  13. 6
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/DemoStatisticsViewComponent.cshtml
  14. 13
      samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/DemoStatisticsViewComponent.cshtml.cs
  15. 5
      samples/DashboardDemo/src/DashboardDemo.Web/Widgets/WidgetDefinitionProvider.cs
  16. 1
      samples/DashboardDemo/src/DashboardDemo.Web/Widgets/WidgetNames.cs

0
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/WidgetOptions.cs → framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/DashboardOptions.cs

12
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/DashboardOptionsExtensions.cs

@ -0,0 +1,12 @@
namespace Volo.Abp.AspNetCore.Mvc.UI.Dashboards
{
public static class WidgetOptionsExtensions
{
public static void AddDashboards<T>(this DashboardOptions options)
where T : IDashboardDefinitionProvider, new()
{
var widgets = new T().GetDefinitions();
options.Dashboards.AddRange(widgets);
}
}
}

7
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/DashboardWidgetConfiguration.cs

@ -11,13 +11,18 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Dashboards
[CanBeNull]
public WidgetDimensions Dimensions { get; set; }
[CanBeNull]
public WidgetLocation Location { get; set; }
public DashboardWidgetConfiguration(
[NotNull] string widgetName,
[CanBeNull] WidgetDimensions dimensions
[CanBeNull] WidgetDimensions dimensions = null,
[CanBeNull] WidgetLocation location = null
)
{
WidgetName = Check.NotNullOrWhiteSpace(widgetName, nameof(widgetName));
Dimensions = dimensions;
Location = location;
}
}
}

9
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/IDashboardDefinitionProvider.cs

@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace Volo.Abp.AspNetCore.Mvc.UI.Dashboards
{
public interface IDashboardDefinitionProvider
{
List<DashboardDefinition> GetDefinitions();
}
}

19
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Dashboards/Volo/Abp/AspNetCore/Mvc/UI/Dashboards/WidgetLocation.cs

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Volo.Abp.AspNetCore.Mvc.UI.Dashboards
{
public class WidgetLocation
{
public int X { get; set; }
public int Y { get; set; }
public WidgetLocation(int x, int y)
{
X = x;
Y = y;
}
}
}

3
framework/src/Volo.Abp.AspNetCore.Mvc.UI.Widgets/Volo/Abp/AspNetCore/Mvc/UI/Widgets/WidgetOptionsExtensions.cs

@ -5,8 +5,7 @@
public static void AddWidgets<T>(this WidgetOptions options)
where T : IWidgetDefinitionProvider, new()
{
var provider = new T();
var widgets = provider.GetDefinitions();
var widgets = new T().GetDefinitions();
options.Widgets.AddRange(widgets);
}
}

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

@ -1,5 +1,6 @@
using System.IO;
using System.Linq;
using DashboardDemo.Dashboards;
using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
@ -72,6 +73,7 @@ namespace DashboardDemo
var configuration = context.Services.GetConfiguration();
ConfigureWidgets();
ConfigureDashboards();
ConfigureDatabaseServices();
ConfigureAutoMapper();
ConfigureVirtualFileSystem(hostingEnvironment);
@ -89,6 +91,14 @@ namespace DashboardDemo
});
}
private void ConfigureDashboards()
{
Configure<DashboardOptions>(options =>
{
options.AddDashboards<DashboardDefinitionProvider>();
});
}
private void ConfigureDatabaseServices()
{
Configure<AbpDbContextOptions>(options =>

35
samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardDefinitionProvider.cs

@ -0,0 +1,35 @@
using System.Collections.Generic;
using DashboardDemo.Localization.DashboardDemo;
using DashboardDemo.Widgets;
using Volo.Abp.AspNetCore.Mvc.UI.Dashboards;
using Volo.Abp.AspNetCore.Mvc.UI.Widgets;
using Volo.Abp.Localization;
namespace DashboardDemo.Dashboards
{
public class DashboardDefinitionProvider : IDashboardDefinitionProvider
{
public List<DashboardDefinition> GetDefinitions()
{
var myDashboard = new DashboardDefinition(
DashboardNames.MyDashboard,
new LocalizableString(typeof(DashboardDemoResource), "MyDashboard")
);
myDashboard.AvailableWidgets.Add(
new DashboardWidgetConfiguration(WidgetNames.MyWidget)
);
myDashboard.AvailableWidgets.Add(
new DashboardWidgetConfiguration(WidgetNames.DemoStatistics, new WidgetDimensions(8,2))
);
var dashboards = new List<DashboardDefinition>
{
myDashboard
};
return dashboards;
}
}
}

14
samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardNames.cs

@ -0,0 +1,14 @@
using Volo.Abp.Reflection;
namespace DashboardDemo.Dashboards
{
public static class DashboardNames
{
public const string MyDashboard = "MyDashboard";
public static string[] GetAll()
{
return ReflectionHelper.GetPublicConstantsRecursively(typeof(DashboardNames));
}
}
}

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

@ -1,6 +1,11 @@
@page
@inject IOptions<DashboardOptions> OptionsDashboadOptions
@inject IStringLocalizerFactory localizer
@using Microsoft.Extensions.Options
@using Volo.Abp.AspNetCore.Mvc.UI.Dashboards
@using DashboardDemo.Pages
@using DashboardDemo.Widgets
@using Microsoft.Extensions.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets
@inherits DashboardDemoPageBase
@inject IWidgetRenderer WidgetRenderer
@ -13,4 +18,9 @@
<abp-card-body>
@await WidgetRenderer.RenderAsync(Component, WidgetNames.MyWidget)
</abp-card-body>
</abp-card>
</abp-card>
@foreach (var dashboard in OptionsDashboadOptions.Value.Dashboards)
{
<a href="/@dashboard.Name">Go to @dashboard.DisplayName.Localize(localizer)</a>
}

24
samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.cshtml

@ -0,0 +1,24 @@
@page
@using Microsoft.Extensions.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Widgets
@inject IWidgetRenderer WidgetRenderer
@inject IStringLocalizerFactory localizer
@model DashboardDemo.Pages.MyDashboardModel
@{
}
<h2>@Model.Dashboard.DisplayName.Localize(localizer)</h2>
<abp-row>
@foreach (var widgetConfiguration in Model.Dashboard.AvailableWidgets)
{
var widgetDefinition = Model.GetWidget(widgetConfiguration.WidgetName);
widgetDefinition.DefaultDimensions = widgetConfiguration.Dimensions ?? widgetDefinition.DefaultDimensions ?? new WidgetDimensions(5,5);
<abp-column class="col-@widgetDefinition.DefaultDimensions.Width"
style="height: @(widgetDefinition.DefaultDimensions.Height * 100)px"
abp-border="Danger">
@await WidgetRenderer.RenderAsync(Component, widgetDefinition.Name)
</abp-column>
}
</abp-row>

37
samples/DashboardDemo/src/DashboardDemo.Web/Pages/MyDashboard.cshtml.cs

@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DashboardDemo.Dashboards;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.UI.Dashboards;
using Volo.Abp.AspNetCore.Mvc.UI.Widgets;
namespace DashboardDemo.Pages
{
public class MyDashboardModel : DashboardDemoPageModelBase
{
public DashboardDefinition Dashboard { get; set; }
private readonly DashboardOptions _dashboardOptions;
private readonly WidgetOptions _widgetOptions;
public MyDashboardModel(IOptions<DashboardOptions> dashboardOptions, IOptions<WidgetOptions> widgetOptions)
{
_dashboardOptions = dashboardOptions.Value;
_widgetOptions = widgetOptions.Value;
}
public void OnGet()
{
Dashboard = _dashboardOptions.Dashboards.Single(d => d.Name.Equals(DashboardNames.MyDashboard));
}
public WidgetDefinition GetWidget(string name)
{
return _widgetOptions.Widgets.Single(d => d.Name.Equals(name));
}
}
}

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

@ -0,0 +1,6 @@
@page
@model DashboardDemo.Pages.widgets.DemoStatisticsViewComponentModel
@{
}
Demo statistics

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

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

5
samples/DashboardDemo/src/DashboardDemo.Web/Widgets/WidgetDefinitionProvider.cs

@ -16,6 +16,11 @@ namespace DashboardDemo.Widgets
WidgetNames.MyWidget,
typeof(MyWidgetViewComponentModel),
new LocalizableString(typeof(DashboardDemoResource), "MyWidgett")
),
new WidgetDefinition(
WidgetNames.DemoStatistics,
typeof(DemoStatisticsViewComponentModel),
new LocalizableString(typeof(DashboardDemoResource), "DemoStatistics")
)
};
}

1
samples/DashboardDemo/src/DashboardDemo.Web/Widgets/WidgetNames.cs

@ -5,6 +5,7 @@ namespace DashboardDemo.Widgets
public static class WidgetNames
{
public const string MyWidget = "MyWidget";
public const string DemoStatistics = "DemoStatistics";
public static string[] GetAll()
{

Loading…
Cancel
Save