@@ -19,56 +19,45 @@ import { ScanVulnerabilitiesTableProps, VulnerabilityType } from '../Types'
19
19
import './scanVulnerabilities.css'
20
20
import { SortableTableHeaderCell } from '@Common/SortableTableHeaderCell'
21
21
import { SortingOrder } from '@Common/Constants'
22
- import { useState } from 'react'
23
- import { numberComparatorBySortOrder } from '@Shared/Helpers'
24
-
25
- const sortPriority = {
26
- 'critical' : 1 ,
27
- 'high' : 2 ,
28
- 'medium' : 3 ,
29
- 'low' : 4 ,
30
- 'unknown' : 5
31
- }
32
-
33
- export enum SortBy {
34
- SEVERITY = 'severity' ,
35
- PACKAGE = 'package'
36
- }
22
+ import { useMemo , useState } from 'react'
23
+ import { numberComparatorBySortOrder , stringComparatorBySortOrder } from '@Shared/Helpers'
24
+ import { SortBy , SortConfig } from './types'
25
+ import { sortPriority } from './constants'
37
26
38
27
// To be replaced with Scan V2 Modal Table
39
28
export default function ScanVulnerabilitiesTable ( {
40
29
vulnerabilities,
41
30
hidePolicy,
42
31
shouldStick,
43
32
} : ScanVulnerabilitiesTableProps ) {
44
-
45
- const [ sortConfig , setSortConfig ] = useState ( {
33
+ const [ sortConfig , setSortConfig ] = useState < SortConfig > ( {
46
34
sortBy : SortBy . SEVERITY ,
47
35
sortOrder : SortingOrder . ASC ,
48
36
} )
49
37
50
- const sortedVulnerabilities = vulnerabilities . sort ( ( a , b ) => {
51
- return numberComparatorBySortOrder ( sortPriority [ a . severity ] , sortPriority [ b . severity ] , sortConfig . sortOrder )
52
- } )
53
-
54
- // const critical = vulnerabilities.filter((v) => v.severity === 'critical')
55
- // const high = vulnerabilities.filter((v) => v.severity === 'high')
56
- // const medium = vulnerabilities.filter((v) => v.severity === 'medium')
57
- // const low = vulnerabilities.filter((v) => v.severity === 'low')
58
- // const unknown = vulnerabilities.filter((v) => v.severity === 'unknown')
38
+ const sortedVulnerabilities = useMemo ( ( ) => {
39
+ return vulnerabilities . sort ( ( a , b ) => {
40
+ if ( sortConfig . sortBy === SortBy . PACKAGE ) {
41
+ return stringComparatorBySortOrder ( a . package , b . package , sortConfig . sortOrder )
42
+ }
59
43
60
- // const ascVulnerabilities = [...critical, ...high, ...medium, ...low, ...unknown]
61
- // const descVulnerabilities = [...unknown, ...low, ...medium, ...high, ...critical]
44
+ return numberComparatorBySortOrder ( sortPriority [ a . severity ] , sortPriority [ b . severity ] , sortConfig . sortOrder )
45
+ } )
46
+ } , [ sortConfig ] )
62
47
63
- const triggerSeveritySorting = ( ) => setSortConfig ( { sortBy : SortBy . SEVERITY , sortOrder : sortConfig . sortOrder === SortingOrder . ASC ? SortingOrder . DESC : SortingOrder . DESC } )
48
+ const triggerSorting = ( sortBy : SortBy ) => {
49
+ setSortConfig ( {
50
+ sortBy : sortBy ,
51
+ sortOrder : sortConfig . sortOrder === SortingOrder . ASC ? SortingOrder . DESC : SortingOrder . ASC ,
52
+ } )
53
+ }
64
54
65
55
const renderRow = ( vulnerability : VulnerabilityType ) => (
66
56
< tr
67
57
className = "dc__security-tab__table-row cursor"
68
58
onClick = { ( e ) => {
69
59
window . open ( `https://cve.mitre.org/cgi-bin/cvename.cgi?name=${ vulnerability . name } ` , '_blank' )
70
60
} }
71
- key = { vulnerability . name }
72
61
>
73
62
< td className = "security-tab__cell-cve dc__cve-cell" >
74
63
< a
@@ -117,14 +106,23 @@ export default function ScanVulnerabilitiesTable({
117
106
< th className = "security-cell-header security-tab__cell-severity" >
118
107
< SortableTableHeaderCell
119
108
title = "Severity"
120
- isSorted
109
+ isSorted = { sortConfig . sortBy === SortBy . SEVERITY }
110
+ isSortable
111
+ sortOrder = { sortConfig . sortOrder }
112
+ triggerSorting = { ( ) => triggerSorting ( SortBy . SEVERITY ) }
113
+ disabled = { false }
114
+ />
115
+ </ th >
116
+ < th className = "security-cell-header security-tab__cell-package" >
117
+ < SortableTableHeaderCell
118
+ title = "Package"
119
+ isSorted = { sortConfig . sortBy === SortBy . PACKAGE }
121
120
isSortable
122
121
sortOrder = { sortConfig . sortOrder }
123
- triggerSorting = { triggerSeveritySorting }
122
+ triggerSorting = { ( ) => triggerSorting ( SortBy . PACKAGE ) }
124
123
disabled = { false }
125
124
/>
126
125
</ th >
127
- < th className = "security-cell-header security-tab__cell-package" > Package</ th >
128
126
< th className = "security-cell-header security-tab__cell-current-ver" > Current Version</ th >
129
127
< th className = "security-cell-header security-tab__cell-fixed-ver" > Fixed In Version</ th >
130
128
{ ! hidePolicy && < th className = "security-cell-header security-tab__cell-policy" > Policy</ th > }
0 commit comments