1
- import React , { Component } from 'react' ;
1
+ import React from 'react' ;
2
2
import propTypes from 'prop-types' ;
3
3
import { addNotification } from '@redhat-cloud-services/frontend-components-notifications/redux' ;
4
4
import RemediationButton from '@redhat-cloud-services/frontend-components-remediations/RemediationButton' ;
5
- import { AnsibeTowerIcon } from '@patternfly/react-icons' ;
5
+ import { AnsibeTowerIcon } from '@patternfly/react-icons' ;
6
6
import routerParams from '@redhat-cloud-services/frontend-components-utilities/RouterParams' ;
7
7
import { connect } from 'react-redux' ;
8
8
import messages from '../../../Messages' ;
9
9
import { FormattedMessage } from 'react-intl' ;
10
10
import { mergeObjectPropertyBy } from '../../../Helpers/MiscHelper' ;
11
- class Remediation extends Component {
12
- static propTypes = {
13
- cves : propTypes . oneOfType ( [
14
- propTypes . array ,
15
- propTypes . string
16
- ] ) ,
17
- systems : propTypes . oneOfType ( [
18
- propTypes . array ,
19
- propTypes . string
20
- ] ) ,
21
- addNotification : propTypes . func ,
22
- manyRules : propTypes . bool
23
- } ;
24
-
25
- shouldComponentUpdate ( nextProps ) {
26
- if ( nextProps . cves !== this . props . cves ) {
27
- return true ;
28
- }
29
-
30
- if ( nextProps . systems !== this . props . systems ) {
31
- return true ;
32
- }
33
11
34
- return false ;
35
- }
12
+ const Remediation = ( { cves, systems, manyRules, addNotification : dispatchNotification } ) => {
13
+ const baseIssueTemplate = ( cve , system ) => ( {
14
+ id : `vulnerabilities:${ cve } ` ,
15
+ description : cve ,
16
+ systems : [ system ]
17
+ } ) ;
36
18
37
- baseIssueTemplate = ( cve , system ) => (
38
- {
39
- id : `vulnerabilities:${ cve } ` ,
40
- description : cve ,
41
- systems : [ system ]
42
- }
43
- )
44
-
45
- remediationProvider = ( cvesProvider = [ ] , systemsProvider = [ ] , manyRules = false ) => {
19
+ const remediationProvider = ( cvesProvider = [ ] , systemsProvider = [ ] , manyRules = false ) => {
46
20
let cves = [ ] . concat ( cvesProvider ) ;
47
21
let systems = [ ] . concat ( systemsProvider ) ;
48
22
let issues = [ ] ;
49
23
50
24
// CVE Details page where cves === 1 and systems > 1...N and cves linked rules > 1...N
51
25
if ( manyRules && cves . length === 1 ) {
52
-
53
26
issues = systems . reduce ( ( prev , { id : systemID , cve : cveID , rule } ) => {
54
- let issue = this . baseIssueTemplate ( cveID , systemID ) ;
27
+ let issue = baseIssueTemplate ( cveID , systemID ) ;
55
28
56
29
if ( rule ) {
57
30
issue . id = `${ issue . id } :${ rule ?. rule ?. rule_id } ` ;
@@ -61,44 +34,53 @@ class Remediation extends Component {
61
34
} , [ ] ) ;
62
35
63
36
issues = mergeObjectPropertyBy ( issues , 'systems' ) ;
64
-
65
37
}
66
38
67
39
// System cves where systems === 1 & cves > 1..N and cves linked rules === 1
68
40
if ( ! manyRules && systems ?. length === 1 ) {
69
41
const [ systemID ] = systems ;
70
42
71
43
issues = cves . reduce ( ( acc , { id : cveID , rules } ) => {
72
- let issue = this . baseIssueTemplate ( cveID , systemID ) ;
44
+ let issue = baseIssueTemplate ( cveID , systemID ) ;
73
45
74
46
if ( rules ?. rule_id ) {
75
47
issue . id = `${ issue . id } :${ rules . rule_id } ` ;
76
48
}
77
49
78
50
return [ ...acc , issue ] ;
79
51
} , [ ] ) ;
80
-
81
52
}
82
53
83
54
return cves . length && systems . length ? { issues } : false ;
84
55
} ;
85
56
86
- render ( ) {
87
- const { cves, systems, manyRules, addNotification : dispatchNotification } = this . props ;
88
- return (
89
- < div >
90
- < RemediationButton
91
- dataProvider = { ( ) => this . remediationProvider ( cves , systems , manyRules ) }
92
- isDisabled = { cves . length === 0 || systems . length === 0 }
93
- onRemediationCreated = { result => dispatchNotification ( result . getNotification ( ) ) }
94
- >
95
- < AnsibeTowerIcon size = "sm" color = { 'var(--pf-global--BackgroundColor--100)' } />
96
- { < FormattedMessage { ...messages . remediateLabel } /> }
97
- </ RemediationButton >
98
- </ div >
99
- ) ;
100
- }
101
- }
57
+ return (
58
+ < div >
59
+ < RemediationButton
60
+ dataProvider = { ( ) => remediationProvider ( cves , systems , manyRules ) }
61
+ isDisabled = { cves . length === 0 || systems . length === 0 }
62
+ onRemediationCreated = { result => dispatchNotification ( result . getNotification ( ) ) }
63
+ >
64
+ < AnsibeTowerIcon size = "sm" color = { 'var(--pf-global--BackgroundColor--100)' } />
65
+
66
+ < FormattedMessage { ...messages . remediateLabel } />
67
+ </ RemediationButton >
68
+ </ div >
69
+ ) ;
70
+ } ;
71
+
72
+ Remediation . propTypes = {
73
+ cves : propTypes . oneOfType ( [
74
+ propTypes . array ,
75
+ propTypes . string
76
+ ] ) ,
77
+ systems : propTypes . oneOfType ( [
78
+ propTypes . array ,
79
+ propTypes . string
80
+ ] ) ,
81
+ addNotification : propTypes . func ,
82
+ manyRules : propTypes . bool
83
+ } ;
102
84
103
85
export default connect (
104
86
null ,
0 commit comments