Skip to content
This repository was archived by the owner on Apr 6, 2024. It is now read-only.

Commit 03b52c4

Browse files
committed
(GH-31) Add report using DevExtreme DataGrid
1 parent 8423385 commit 03b52c4

File tree

5 files changed

+100
-1
lines changed

5 files changed

+100
-1
lines changed

src/Cake.Issues.Reporting.Generic.Tests/GenericIssueReportGeneratorTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public sealed class TheInternalCreateReportMethod
4242
[Theory]
4343
[InlineData(GenericIssueReportTemplate.HtmlDiagnostic)]
4444
[InlineData(GenericIssueReportTemplate.HtmlDataTable)]
45+
[InlineData(GenericIssueReportTemplate.HtmlDxDataGrid)]
4546
public void Should_Generate_Report_From_Embedded_Template(GenericIssueReportTemplate template)
4647
{
4748
// Given

src/Cake.Issues.Reporting.Generic/Cake.Issues.Reporting.Generic.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
<None Include="FodyWeavers.xml" />
8686
<None Include="packages.config" />
8787
<EmbeddedResource Include="Templates\DataTable.cshtml" />
88+
<EmbeddedResource Include="Templates\DxDataGrid.cshtml" />
8889
</ItemGroup>
8990
<ItemGroup>
9091
<Analyzer Include="..\packages\Microsoft.CodeQuality.Analyzers.2.6.0\analyzers\dotnet\cs\Microsoft.CodeQuality.Analyzers.dll" />

src/Cake.Issues.Reporting.Generic/GenericIssueReportTemplate.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ public enum GenericIssueReportTemplate
1313
/// <summary>
1414
/// Template for a HTML report containing a rich data table view with sorting and search functionality.
1515
/// </summary>
16-
HtmlDataTable
16+
HtmlDataTable,
17+
18+
/// <summary>
19+
/// Template for a HTML report containing a rich data grid with sorting, filtering, grouping and search capabilities.
20+
/// </summary>
21+
HtmlDxDataGrid
1722
}
1823
}

src/Cake.Issues.Reporting.Generic/GenericIssueReportTemplateExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public static string GetTemplateResourceName(this GenericIssueReportTemplate tem
2222
case GenericIssueReportTemplate.HtmlDataTable:
2323
return "DataTable.cshtml";
2424

25+
case GenericIssueReportTemplate.HtmlDxDataGrid:
26+
return "DxDataGrid.cshtml";
27+
2528
default:
2629
throw new ArgumentOutOfRangeException(nameof(template));
2730
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
@model IEnumerable<Cake.Issues.IIssue>
2+
3+
<!DOCTYPE html>
4+
5+
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
6+
<head>
7+
<meta charset="utf-8" />
8+
<title>Issues Report</title>
9+
10+
@* DevExtreme dependencies *@
11+
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.1.0.min.js"></script>
12+
@* DevExtreme themes *@
13+
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/18.1.3/css/dx.common.css" />
14+
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/18.1.3/css/dx.light.css" />
15+
@* DevExtreme library *@
16+
<script type="text/javascript" src="https://cdn3.devexpress.com/jslib/18.1.3/js/dx.all.js"></script>
17+
</head>
18+
<body class="dx-viewport">
19+
<h1>Issues Report</h1>
20+
21+
<div class="container">
22+
<div id="gridContainer"></div>
23+
</div>
24+
25+
<script type="text/javascript">
26+
var issues = [];
27+
@foreach (var issue in Model)
28+
{
29+
@:issues.push({ProviderName: "@issue.ProviderName", ProviderType: "@issue.ProviderType", Priority: "@issue.Priority", PriorityName: "@issue.PriorityName", Project: "@issue.Project", Path: "@if (issue.AffectedFileRelativePath != null) { @issue.AffectedFileRelativePath.GetDirectory() }", File: "@if (issue.AffectedFileRelativePath != null) { @issue.AffectedFileRelativePath.GetFilename() }", Line: "@issue.Line", Rule: "@issue.Rule", RuleUrl: "@issue.RuleUrl", Message: "@issue.Message"});
30+
}
31+
</script>
32+
<script type="text/javascript">
33+
$(function(){
34+
$("#gridContainer").dxDataGrid({
35+
dataSource: issues,
36+
loadPanel: {
37+
enabled: true
38+
},
39+
searchPanel: {
40+
visible: true
41+
},
42+
groupPanel: {
43+
visible: true
44+
},
45+
headerFilter: {
46+
visible: true
47+
},
48+
rowAlternationEnabled: true,
49+
allowColumnResizing: true,
50+
columns: [
51+
{
52+
dataField: "ProviderName",
53+
groupIndex: 0
54+
},
55+
{
56+
caption: "Severity",
57+
dataField: "PriorityName",
58+
calculateSortValue: "Priority",
59+
width: "90px"
60+
},
61+
"Project",
62+
"Path",
63+
"File",
64+
{
65+
dataField: "Line",
66+
allowFiltering: false,
67+
allowGrouping: false,
68+
width: "70px"
69+
},
70+
"Rule",
71+
"Message"
72+
],
73+
summary: {
74+
groupItems: [{
75+
column: "ProviderType",
76+
summaryType: "count",
77+
displayFormat: "{0} issues",
78+
}],
79+
totalItems: [{
80+
column: "Severity",
81+
summaryType: "count",
82+
displayFormat: "{0} issues"
83+
}]
84+
}
85+
});
86+
});
87+
</script>
88+
</body>
89+
</html>

0 commit comments

Comments
 (0)