From a07ab5e69fa0832740cd57103470d4b08c3a4f1e Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 10 Jul 2019 08:23:07 +0300 Subject: [PATCH] Dashboard global filter sample --- .../DashboardDemoWebModule.cs | 10 +++++++ .../Dashboards/DashboardDefinitionProvider.cs | 4 ++- .../GlobalFilterDefinitionProvider.cs | 29 +++++++++++++++++++ .../widgets/Filters/DateRangeGlobalFilter.js | 6 ++++ .../DateRangeGlobalFilterScriptContributor.cs | 12 ++++++++ .../DateRangeGlobalFilterViewComponent.cshtml | 10 +++++++ ...teRangeGlobalFilterViewComponent.cshtml.cs | 17 +++++++++++ .../Pages/widgets/UserCountWidget.js | 16 ++++++---- .../UserCountWidgetScriptBundleContributor.cs | 2 ++ .../UserCountWidgetStyleBundleContributor.cs | 1 + 10 files changed, 100 insertions(+), 7 deletions(-) create mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/GlobalFilters/GlobalFilterDefinitionProvider.cs create mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilter.js create mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterScriptContributor.cs create mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml create mode 100644 samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml.cs diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs index c8d7bcc18b..1e395b978b 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs +++ b/samples/DashboardDemo/src/DashboardDemo.Web/DashboardDemoWebModule.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using DashboardDemo.EntityFrameworkCore; +using DashboardDemo.GlobalFilters; using DashboardDemo.Localization.DashboardDemo; using DashboardDemo.Menus; using DashboardDemo.Pages; @@ -75,6 +76,7 @@ namespace DashboardDemo var configuration = context.Services.GetConfiguration(); ConfigureWidgets(); + ConfigureGlobalFilters(); ConfigureDashboards(); ConfigureDatabaseServices(); ConfigureAutoMapper(); @@ -93,6 +95,14 @@ namespace DashboardDemo }); } + private void ConfigureGlobalFilters() + { + Configure(options => + { + options.GlobalFilters.AddRange(GlobalFilterDefinitionProvider.GetDefinitions()); + }); + } + private void ConfigureDashboards() { Configure(options => diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardDefinitionProvider.cs b/samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardDefinitionProvider.cs index 583424c6c3..84ce31f341 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardDefinitionProvider.cs +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Dashboards/DashboardDefinitionProvider.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using DashboardDemo.Localization.DashboardDemo; using DashboardDemo.Pages.widgets; +using DashboardDemo.Pages.widgets.Filters; using DashboardDemo.Widgets; using Volo.Abp.AspNetCore.Mvc.UI.Dashboards; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; @@ -17,7 +18,8 @@ namespace DashboardDemo.Dashboards LocalizableString.Create("MyDashboard") ) .WithWidget(RoleListWidgetViewComponent.WidgetName) - .WithWidget(UserCountWidgetViewComponent.WidgetName); + .WithWidget(UserCountWidgetViewComponent.WidgetName) + .WithGlobalFilter(DateRangeGlobalFilterViewComponent.GlobalFilterName); return new List { diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/GlobalFilters/GlobalFilterDefinitionProvider.cs b/samples/DashboardDemo/src/DashboardDemo.Web/GlobalFilters/GlobalFilterDefinitionProvider.cs new file mode 100644 index 0000000000..d6a51a8612 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Web/GlobalFilters/GlobalFilterDefinitionProvider.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using DashboardDemo.Localization.DashboardDemo; +using DashboardDemo.Pages.widgets; +using DashboardDemo.Pages.widgets.Filters; +using Volo.Abp.AspNetCore.Mvc.UI.Dashboards; +using Volo.Abp.Localization; + +namespace DashboardDemo.GlobalFilters +{ + public static class GlobalFilterDefinitionProvider + { + public static List GetDefinitions() + { + var dateRangeFilter = new GlobalFilterDefinition( + DateRangeGlobalFilterViewComponent.GlobalFilterName, + LocalizableString.Create("DateRangeFilter"), + typeof(DateRangeGlobalFilterViewComponent) + ); + + return new List + { + dateRangeFilter + }; + } + } +} diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilter.js b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilter.js new file mode 100644 index 0000000000..0aaf09886a --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilter.js @@ -0,0 +1,6 @@ +(function ($) { + var $container = $('#DateRangeGlobalFilterContainer'); + if ($container.length > 0) { + console.log("GlobalRefreshButton loaded"); + } +})(jQuery); diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterScriptContributor.cs b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterScriptContributor.cs new file mode 100644 index 0000000000..2af313857c --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterScriptContributor.cs @@ -0,0 +1,12 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace DashboardDemo.Pages.widgets.Filters +{ + public class DateRangeGlobalFilterScriptContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.Add("/Pages/widgets/Filters/DateRangeGlobalFilter.js"); + } + } +} diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml new file mode 100644 index 0000000000..0b2cfdbc05 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml @@ -0,0 +1,10 @@ +@inject IHtmlLocalizer L +@using DashboardDemo.Localization.DashboardDemo +@using Microsoft.AspNetCore.Mvc.Localization +@model DashboardDemo.Pages.widgets.Filters.DateRangeGlobalFilterViewComponent +@{ +} +
+ +
+ diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml.cs b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml.cs new file mode 100644 index 0000000000..e9ad22e994 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Mvc; + +namespace DashboardDemo.Pages.widgets.Filters +{ + [ViewComponent] + public class DateRangeGlobalFilterViewComponent : ViewComponent + { + public const string GlobalFilterName = "DateRangeGlobalFilter"; + + public const string DisplayName = "Date Range Filter"; + + public IViewComponentResult Invoke() + { + return View("/Pages/widgets/Filters/DateRangeGlobalFilterViewComponent.cshtml", new DateRangeGlobalFilterViewComponent()); + } + } +} \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidget.js b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidget.js index c256d451be..f55a8ec891 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidget.js +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidget.js @@ -2,14 +2,11 @@ var $container = $('#UserCountWidgetContainer'); if ($container.length > 0) { - var _identityUserAppService = volo.abp.identity.identityUser; - _identityUserAppService.getList({}).then(function (result) { - $container.find('#UserCount').text(result.items.length); - }); + var $DateRangeGlobalFilterContainer = $("#DateRangeGlobalFilterContainer"); - var createChart = function() { + + var createChart = function () { dashboardDemo.userStatistic.getNewUserPerDayStatistic().then(function (result) { - console.log(result.data); var chart = new Chart($container.find('#UserStatistics'), { type: 'bar', @@ -34,6 +31,13 @@ }); }; + if ($DateRangeGlobalFilterContainer.length > 0) { + $DateRangeGlobalFilterContainer.find('#GlobalRefreshButton').on('click', + function () { + createChart(); + }); + } + createChart(); } })(jQuery); diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetScriptBundleContributor.cs b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetScriptBundleContributor.cs index 7e7c24f304..65a54f4837 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetScriptBundleContributor.cs +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetScriptBundleContributor.cs @@ -1,4 +1,5 @@ using DashboardDemo.Pages.widgets.Chartjs; +using DashboardDemo.Pages.widgets.Filters; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Packages.Clipboard; using Volo.Abp.AspNetCore.Mvc.UI.Packages.JQuery; @@ -9,6 +10,7 @@ namespace DashboardDemo.Pages.widgets [DependsOn(typeof(JQueryScriptContributor))] [DependsOn(typeof(ClipboardScriptBundleContributor))] [DependsOn(typeof(ChartjsScriptContributor))] + [DependsOn(typeof(DateRangeGlobalFilterScriptContributor))] public class UserCountWidgetScriptBundleContributor : BundleContributor { public override void ConfigureBundle(BundleConfigurationContext context) diff --git a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetStyleBundleContributor.cs b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetStyleBundleContributor.cs index cbe93c0b46..b9a4679b0b 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetStyleBundleContributor.cs +++ b/samples/DashboardDemo/src/DashboardDemo.Web/Pages/widgets/UserCountWidgetStyleBundleContributor.cs @@ -1,4 +1,5 @@ using DashboardDemo.Pages.widgets.Chartjs; +using DashboardDemo.Pages.widgets.Filters; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Packages.Bootstrap; using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs;