21
21
@this()
22
22
23
23
24
- @(vulnerabilities: Seq[TotalVulnerabilityCount],
25
- teams : Seq[GitHubTeam],
26
- form : Form[VulnerabilitiesCountFilter]
24
+ @(curationStatus : CurationStatus,
25
+ vulnerabilityCounts: Seq[TotalVulnerabilityCount],
26
+ teams : Seq[GitHubTeam],
27
+ form : Form[VulnerabilitiesCountFilter]
27
28
)(implicit
28
- messages : Messages,
29
- request : RequestHeader
29
+ messages : Messages,
30
+ request : RequestHeader
30
31
)
31
32
32
33
@implicitField: FieldConstructor = @{ FieldConstructor(catalogueFieldConstructor.f) }
@@ -38,7 +39,7 @@ <h1 class="page-heading mt-4">Service Vulnerabilities</h1>
38
39
< div id ="service-list ">
39
40
< form id ="form " method ="get ">
40
41
< div class ="row ">
41
- < div class ="col-md-6 ">
42
+ < div class ="col-md-5 ">
42
43
< dl >
43
44
< dt >
44
45
< label for ="search " class ="form-label "> Service</ label >
@@ -59,7 +60,7 @@ <h1 class="page-heading mt-4">Service Vulnerabilities</h1>
59
60
Symbol("class") -> "form-select"
60
61
)
61
62
</ div >
62
- < div class ="col-md-3 ">
63
+ < div class ="col-md-2 ">
63
64
@select(
64
65
field = form("flag"),
65
66
options = SlugInfoFlag.values.toSeq.filterNot(_ == SlugInfoFlag.ForEnvironment(Environment.Integration)).map(env => env.asString -> env.displayString),
@@ -69,20 +70,36 @@ <h1 class="page-heading mt-4">Service Vulnerabilities</h1>
69
70
Symbol("class") -> "form-select"
70
71
)
71
72
</ div >
73
+ < div class ="col-md-2 ">
74
+ @select(
75
+ field = form("curationStatus"),
76
+ options = CurationStatus.values.toSeq.map(cs => cs.asString -> cs.displayString),
77
+ Symbol("_label") -> "Curation status:",
78
+ Symbol("_labelClass") -> "form-label",
79
+ Symbol("id") -> "curation-status-filter",
80
+ Symbol("class") -> "form-select"
81
+ )
82
+ </ div >
72
83
</ div >
73
84
</ form >
74
85
< table class ="table table-striped sticky-header ">
75
86
< thead >
76
87
< tr >
77
88
< th class ="col-6 "> < button class ="sort no-border fw-bold " data-sort ="service "> Service</ button > </ th >
78
- < th class ="col-2 text-center "> < button class ="sort no-border fw-bold " data-sort ="action-required "> Action Required</ button > </ th >
79
- < th class ="col-2 text-center "> < button class ="sort no-border fw-bold " data-sort ="investigation-ongoing "> Investigation Ongoing</ button > </ th >
80
- < th class ="col-2 text-center "> < button class ="sort no-border fw-bold " data-sort ="no-action-required "> No Action Required</ button > </ th >
81
- < th class ="col-2 text-center "> < button class ="sort no-border fw-bold " data-sort ="uncurated "> Uncurated</ button > </ th >
89
+ < th class ="col-2 text-center ">
90
+ < button class ="sort no-border fw-bold " data-sort ="count ">
91
+ @curationStatus match {
92
+ case CurationStatus.ActionRequired => { Action Required }
93
+ case CurationStatus.InvestigationOngoing => { Investigation Ongoing }
94
+ case CurationStatus.NoActionRequired => { No Action Required }
95
+ case CurationStatus.Uncurated => { Uncurated }
96
+ }
97
+ </ button >
98
+ </ th >
82
99
</ tr >
83
100
</ thead >
84
101
< tbody class ="list ">
85
- @vulnerabilities .map(vulnerabilitiesCountForService)
102
+ @vulnerabilityCounts .map(vulnerabilitiesCountForService)
86
103
</ tbody >
87
104
</ table >
88
105
</ div >
@@ -92,17 +109,24 @@ <h1 class="page-heading mt-4">Service Vulnerabilities</h1>
92
109
@vulnerabilitiesCountForService(tvc: TotalVulnerabilityCount) = {
93
110
< tr >
94
111
< td > < a class ="
service "
id ="
[email protected] "
href ="
@uk.gov.hmrc.cataloguefrontend.routes.CatalogueController.service(tvc.service) "
> @tvc.service.asString
</ a > </ td >
95
- < td class ="text-center "> < a class ="action-required " id ="@tvc.service-action-required-vulnerabilities " href ="@vulnerabilitiesListHref(tvc.service, CurationStatus.ActionRequired) "> @tvc.actionRequired</ a > </ td >
96
- < td class ="text-center "> < a class ="investigation-ongoing " id ="@tvc.service-investigation-ongoing-vulnerabilities " href ="@vulnerabilitiesListHref(tvc.service, CurationStatus.InvestigationOngoing) "> @tvc.investigationOngoing</ a > </ td >
97
- < td class ="text-center "> < a class ="no-action-required " id ="@tvc.service-no-action-required-vulnerabilities " href ="@vulnerabilitiesListHref(tvc.service, CurationStatus.NoActionRequired) "> @tvc.noActionRequired</ a > </ td >
98
- < td class ="text-center "> < a class ="uncurated " id ="@tvc.service-uncurated-required-vulnerabilities " href ="@vulnerabilitiesListHref(tvc.service, CurationStatus.Uncurated) "> @tvc.uncurated</ a > </ td >
112
+ < td class ="text-center ">
113
+ < a class ="count " id ="@tvc.service-count " href ="@vulnerabilitiesListHref(tvc.service, curationStatus) ">
114
+ @curationStatus match {
115
+ case CurationStatus.ActionRequired => { @tvc.actionRequired }
116
+ case CurationStatus.InvestigationOngoing => { @tvc.investigationOngoing }
117
+ case CurationStatus.NoActionRequired => { @tvc.noActionRequired }
118
+ case CurationStatus.Uncurated => { @tvc.uncurated }
119
+ }
120
+ </ a >
121
+ </ td >
122
+
99
123
</ tr >
100
124
}
101
125
102
126
@vulnerabilitiesListHref(service: ServiceName, curationStatus: CurationStatus) = {
103
127
@uk.gov.hmrc.cataloguefrontend.vulnerabilities.routes.VulnerabilitiesController.vulnerabilitiesList(
104
128
vulnerability = None,
105
- curationStatus = Some(curationStatus.asString ),
129
+ curationStatus = Some(curationStatus),
106
130
service = Some(s"\"${service.asString}\""),
107
131
team = form("team").value.map(TeamName.apply),
108
132
flag = form("flag").value
@@ -113,12 +137,14 @@ <h1 class="page-heading mt-4">Service Vulnerabilities</h1>
113
137
<!-- listjs configuration -->
114
138
< script @CSPNonce.attr >
115
139
let options = {
116
- valueNames : [ 'service' , 'action-required' , 'investigation-ongoing' , 'no-action-required' , 'uncurated ' ] ,
140
+ valueNames : [ 'service' , 'count ' ] ,
117
141
searchColumns : [ 'service' ] ,
118
142
searchDelay : 350
119
143
} ;
120
144
121
145
let serviceList = new List ( 'service-list' , options ) ;
146
+ serviceList . sort ( 'service' , { order : "asc" } ) ;
147
+ serviceList . sort ( 'count' , { order : "desc" } ) ;
122
148
123
149
let searchBox = document . getElementById ( "search" ) ;
124
150
// set autofocus cursor to right of text in search box
@@ -129,7 +155,7 @@ <h1 class="page-heading mt-4">Service Vulnerabilities</h1>
129
155
serviceList . search ( searchBox . value ) ;
130
156
</ script >
131
157
< script @CSPNonce.attr >
132
- [ "team-filter" , "flag-filter" ]
158
+ [ "team-filter" , "flag-filter" , "curation-status-filter" ]
133
159
. forEach ( function ( id ) {
134
160
document . getElementById ( id ) . addEventListener ( "change" , function ( ) {
135
161
document . getElementById ( "form" ) . submit ( ) ;
0 commit comments