foreman_leapp 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -20
  3. data/app/controllers/api/v2/concerns/api_authorizer.rb +27 -0
  4. data/app/controllers/api/v2/preupgrade_reports_controller.rb +21 -2
  5. data/app/controllers/preupgrade_reports_controller.rb +11 -1
  6. data/app/lib/actions/preupgrade_job.rb +2 -1
  7. data/app/models/preupgrade_report.rb +1 -0
  8. data/app/models/preupgrade_report_entry.rb +1 -0
  9. data/app/views/api/v2/preupgrade_report_entries/base.json.rabl +1 -1
  10. data/app/views/api/v2/preupgrade_reports/job_invocation.json.rabl +3 -0
  11. data/app/views/foreman_leapp/job_templates/check.erb +14 -0
  12. data/app/views/foreman_leapp/job_templates/preupgrade.erb +3 -1
  13. data/app/views/foreman_leapp/job_templates/remediation.erb +11 -0
  14. data/app/views/foreman_leapp/job_templates/upgrade.erb +6 -5
  15. data/config/routes.rb +2 -1
  16. data/db/migrate/20200429080939_report_entries_flags.rb +5 -0
  17. data/lib/foreman_leapp/engine.rb +4 -1
  18. data/lib/foreman_leapp/version.rb +1 -1
  19. data/package.json +3 -2
  20. data/test/functional/api/v2/preupgrade_reports_controller_test.rb +89 -6
  21. data/test/functional/preupgrade_reports_controller_test.rb +27 -4
  22. data/webpack/__mocks__/foremanReact/common/I18n.js +1 -1
  23. data/webpack/__mocks__/foremanReact/components/common/EmptyState.js +1 -0
  24. data/webpack/components/PreupgradeReports/PreupgradeReports.js +104 -21
  25. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +1 -1
  26. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +132 -15
  27. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +2 -0
  28. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +10 -0
  29. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +45 -7
  30. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +17 -1
  31. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +43 -3
  32. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReports.test.js.snap +82 -134
  33. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +409 -2
  34. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +21 -1
  35. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +17 -1
  36. data/webpack/components/PreupgradeReports/components/EntriesFilter.js +121 -0
  37. data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +3 -0
  38. data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +30 -0
  39. data/webpack/components/PreupgradeReports/components/{FixAllButton.js → FixSelectedButton.js} +6 -8
  40. data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +15 -0
  41. data/webpack/components/PreupgradeReports/components/NoReports.js +35 -0
  42. data/webpack/components/PreupgradeReports/components/NoReports.test.js +15 -0
  43. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +29 -0
  44. data/webpack/components/PreupgradeReports/components/{FixAllButton.test.js → UpgradeAllButton.test.js} +3 -4
  45. data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +330 -0
  46. data/webpack/components/PreupgradeReports/components/__snapshots__/{FixAllButton.test.js.snap → FixSelectedButton.test.js.snap} +9 -3
  47. data/webpack/components/PreupgradeReports/components/__snapshots__/NoReports.test.js.snap +19 -0
  48. data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +29 -0
  49. data/webpack/components/PreupgradeReports/index.js +22 -4
  50. data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +37 -0
  51. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +16 -0
  52. data/webpack/components/PreupgradeReportsList/__tests__/__snapshots__/PreupgradeReportsList.test.js.snap +38 -0
  53. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +1 -1
  54. data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +33 -0
  55. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +19 -9
  56. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +56 -0
  57. data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +50 -0
  58. data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +27 -0
  59. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +2 -0
  60. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +14 -0
  61. data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +29 -0
  62. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +32 -0
  63. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +23 -17
  64. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +113 -0
  65. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +36 -0
  66. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +4 -10
  67. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +0 -2
  68. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +7 -1
  69. data/webpack/components/PreupgradeReportsList/components/helpers.js +47 -19
  70. data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +61 -0
  71. data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +61 -0
  72. data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +62 -0
  73. data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +62 -0
  74. data/webpack/components/PreupgradeReportsList/index.js +28 -3
  75. metadata +34 -5
@@ -0,0 +1,113 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`PreupgradeReportsListHeader should render 1`] = `
4
+ <ListViewItem
5
+ actions={null}
6
+ additionalInfo={
7
+ Array [
8
+ <InfoItem
9
+ itemId="0"
10
+ tooltipText=""
11
+ >
12
+ <strong>
13
+ <SortableHeaderItem
14
+ changeSort={[Function]}
15
+ sort={
16
+ Object {
17
+ "attribute": "",
18
+ "order": "asc",
19
+ }
20
+ }
21
+ title="Host"
22
+ value="hostname"
23
+ />
24
+ </strong>
25
+ </InfoItem>,
26
+ <InfoItem
27
+ itemId="1"
28
+ tooltipText=""
29
+ >
30
+ <strong>
31
+ <SortableHeaderItem
32
+ changeSort={[Function]}
33
+ sort={
34
+ Object {
35
+ "attribute": "",
36
+ "order": "asc",
37
+ }
38
+ }
39
+ title="Severity"
40
+ value="severity"
41
+ />
42
+ </strong>
43
+ </InfoItem>,
44
+ <InfoItem
45
+ itemId="2"
46
+ tooltipText=""
47
+ >
48
+ <strong>
49
+ <SortableHeaderItem
50
+ changeSort={[Function]}
51
+ sort={
52
+ Object {
53
+ "attribute": "",
54
+ "order": "asc",
55
+ }
56
+ }
57
+ title="Has Remediation?"
58
+ value="fix"
59
+ />
60
+ </strong>
61
+ </InfoItem>,
62
+ <InfoItem
63
+ itemId="3"
64
+ tooltipText=""
65
+ >
66
+ <strong>
67
+ <SortableHeaderItem
68
+ changeSort={[Function]}
69
+ sort={
70
+ Object {
71
+ "attribute": "",
72
+ "order": "asc",
73
+ }
74
+ }
75
+ title="Inhibitor?"
76
+ value="inhibitor"
77
+ />
78
+ </strong>
79
+ </InfoItem>,
80
+ ]
81
+ }
82
+ checkboxInput={
83
+ <input
84
+ onClick={[Function]}
85
+ type="checkbox"
86
+ />
87
+ }
88
+ className="list-view-header"
89
+ compoundExpand={false}
90
+ compoundExpanded={false}
91
+ description={
92
+ <SortableHeaderItem
93
+ changeSort={[Function]}
94
+ sort={
95
+ Object {
96
+ "attribute": "",
97
+ "order": "asc",
98
+ }
99
+ }
100
+ title="Title"
101
+ value="title"
102
+ />
103
+ }
104
+ heading={null}
105
+ hideCloseIcon={true}
106
+ initExpanded={false}
107
+ leftContent={null}
108
+ onCloseCompoundExpand={[Function]}
109
+ onExpand={[Function]}
110
+ onExpandClose={[Function]}
111
+ stacked={true}
112
+ />
113
+ `;
@@ -0,0 +1,36 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`SortableHeaderItem should render when not selected 1`] = `
4
+ <span
5
+ className="sortable-header "
6
+ onClick={[Function]}
7
+ >
8
+ severity
9
+ </span>
10
+ `;
11
+
12
+ exports[`SortableHeaderItem should render when selected and sorting asc 1`] = `
13
+ <span
14
+ className="sortable-header active"
15
+ onClick={[Function]}
16
+ >
17
+ <Icon
18
+ name="angle-up"
19
+ type="fa"
20
+ />
21
+ Severity
22
+ </span>
23
+ `;
24
+
25
+ exports[`SortableHeaderItem should render when selected and sorting desc 1`] = `
26
+ <span
27
+ className="sortable-header active"
28
+ onClick={[Function]}
29
+ >
30
+ <Icon
31
+ name="angle-down"
32
+ type="fa"
33
+ />
34
+ Severity
35
+ </span>
36
+ `;
@@ -44,8 +44,6 @@ Array [
44
44
  ]
45
45
  `;
46
46
 
47
- exports[`PreupgradeReportList/helpers should return hex for severity 1`] = `"#39a5dc"`;
48
-
49
47
  exports[`PreupgradeReportList/helpers should return remediations 1`] = `
50
48
  Array [
51
49
  <Row
@@ -93,14 +91,10 @@ exports[`PreupgradeReportList/helpers should return severity 1`] = `
93
91
  componentClass="div"
94
92
  md={8}
95
93
  >
96
- <Icon
97
- name="resources-full"
98
- style={
99
- Object {
100
- "color": "#cc0000",
101
- }
102
- }
103
- type="pf"
94
+ <img
95
+ alt="High Severity"
96
+ className="severity-img"
97
+ src={[Function]}
104
98
  />
105
99
 
106
100
  high
@@ -1,7 +1,6 @@
1
1
  import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import {
4
- presentSeverity,
5
4
  tagInfo,
6
5
  hasRemediations,
7
6
  getTitle,
@@ -15,7 +14,6 @@ import {
15
14
  import { reportEntry } from './PreupgradeReportEntry.fixtures';
16
15
 
17
16
  const fixtures = {
18
- 'should return hex for severity': () => presentSeverity('low'),
19
17
  'should return tag info': () => tagInfo(reportEntry.tags),
20
18
  'should detect if has remediations': () => hasRemediations(reportEntry),
21
19
  'should return title': () => getTitle(reportEntry),
@@ -6,4 +6,10 @@
6
6
 
7
7
  .pre-wrap{
8
8
  white-space: pre-wrap;
9
- }
9
+ }
10
+
11
+ .severity-img{
12
+ width: 18px;
13
+ height: 18px;
14
+ margin-right: 10px;
15
+ }
@@ -1,23 +1,13 @@
1
1
  import React from 'react';
2
2
  import { Grid, ListView, Badge, Icon } from 'patternfly-react';
3
3
  import EmptyInfoItem from './EmptyInfoItem';
4
+ import SeverityHigh from './images/i_severity-high.svg';
5
+ import SeverityMedium from './images/i_severity-med.svg';
6
+ import SeverityLow from './images/i_severity-low.svg';
4
7
 
5
8
  export const itemIteratorId = (entry, ...rest) =>
6
9
  `${entry.id}-${entry.preupgradeReportId}-${rest.join('-')}`;
7
10
 
8
- export const presentSeverity = severity => {
9
- switch (severity) {
10
- case 'low':
11
- return '#39a5dc';
12
- case 'medium':
13
- return '#f0ab00';
14
- case 'high':
15
- return '#cc0000';
16
- default:
17
- return '#39a5dc';
18
- }
19
- };
20
-
21
11
  export const tagInfo = tags =>
22
12
  tags.map(attr => (
23
13
  <Badge key={attr} variant="pill primary">
@@ -25,6 +15,49 @@ export const tagInfo = tags =>
25
15
  </Badge>
26
16
  ));
27
17
 
18
+ export const getSeverityImg = entry => {
19
+ const key = itemIteratorId(entry, `sv${entry.id}`);
20
+
21
+ switch (entry.severity) {
22
+ case 'low':
23
+ return (
24
+ <img
25
+ key={key}
26
+ src={SeverityLow}
27
+ alt="Low Severity"
28
+ className="severity-img"
29
+ />
30
+ );
31
+ case 'medium':
32
+ return (
33
+ <img
34
+ key={key}
35
+ src={SeverityMedium}
36
+ alt="Medium Severity"
37
+ className="severity-img"
38
+ />
39
+ );
40
+ case 'high':
41
+ return (
42
+ <img
43
+ key={key}
44
+ src={SeverityHigh}
45
+ alt="High Severity"
46
+ className="severity-img"
47
+ />
48
+ );
49
+ default:
50
+ return (
51
+ <img
52
+ key={key}
53
+ src={SeverityLow}
54
+ alt="Low Severity"
55
+ className="severity-img"
56
+ />
57
+ );
58
+ }
59
+ };
60
+
28
61
  export const hasRemediations = entry => {
29
62
  const key = itemIteratorId(entry, `rm${entry.id}`);
30
63
  if (entry.detail && entry.detail.remediations) {
@@ -60,12 +93,7 @@ export const getSeverity = entry => {
60
93
  <strong>Risk Factor</strong>
61
94
  </Grid.Col>
62
95
  <Grid.Col md={8}>
63
- <Icon
64
- type="pf"
65
- name="resources-full"
66
- style={{ color: presentSeverity(entry.severity) }}
67
- />{' '}
68
- {entry.severity}
96
+ {getSeverityImg(entry)} {entry.severity}
69
97
  </Grid.Col>
70
98
  </Grid.Row>
71
99
  );
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_critical.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata4612"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs4610" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview4608"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style4593">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#CC0000;}
48
+ </style><g
49
+ id="g4605"><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path4597" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path4599" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path4601" /><path
59
+ class="st1"
60
+ d="M114.6,44H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.7,13-10.7h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,39.2,121.8,44,114.6,44z"
61
+ id="path4603" /></g></svg>
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_high.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6016"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6014" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6012"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style5999">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#F39800;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><path
50
+ class="st1"
51
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
52
+ id="path6003" /><path
53
+ class="st1"
54
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
55
+ id="path6005" /><path
56
+ class="st1"
57
+ d="M115,77.1H31.4c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6H115c7.2,0,13,4.8,13,10.6l0,0 C128,72.3,122.1,77.1,115,77.1z"
58
+ id="path6007" /><path
59
+ class="st2"
60
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
61
+ id="path6009" /></svg>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_low.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata6693"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs6691" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="1920"
34
+ inkscape:window-height="1055"
35
+ id="namedview6689"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="1"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style6674">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#94D400;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><g
50
+ id="g6678" /><path
51
+ class="st1"
52
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
53
+ id="path6680" /><path
54
+ class="st2"
55
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
56
+ id="path6682" /><path
57
+ class="st2"
58
+ d="M99.6,73.3H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,70.2,104.3,73.3,99.6,73.3z"
59
+ id="path6684" /><path
60
+ class="st2"
61
+ d="M99.6,106.4H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,103.3,104.3,106.4,99.6,106.4z"
62
+ id="path6686" /></svg>
@@ -0,0 +1,62 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ version="1.1"
13
+ id="Layer_1"
14
+ x="0px"
15
+ y="0px"
16
+ viewBox="0 0 146 166"
17
+ style="enable-background:new 0 0 146 166;"
18
+ xml:space="preserve"
19
+ sodipodi:docname="i_med.svg"
20
+ inkscape:version="0.92.1 r"><metadata
21
+ id="metadata7574"><rdf:RDF><cc:Work
22
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
24
+ id="defs7572" /><sodipodi:namedview
25
+ pagecolor="#ffffff"
26
+ bordercolor="#666666"
27
+ borderopacity="1"
28
+ objecttolerance="10"
29
+ gridtolerance="10"
30
+ guidetolerance="10"
31
+ inkscape:pageopacity="0"
32
+ inkscape:pageshadow="2"
33
+ inkscape:window-width="834"
34
+ inkscape:window-height="480"
35
+ id="namedview7570"
36
+ showgrid="false"
37
+ inkscape:zoom="1.4216867"
38
+ inkscape:cx="73"
39
+ inkscape:cy="83"
40
+ inkscape:window-x="0"
41
+ inkscape:window-y="1050"
42
+ inkscape:window-maximized="0"
43
+ inkscape:current-layer="Layer_1" /><style
44
+ type="text/css"
45
+ id="style7555">
46
+ .st0{fill:#808080;}
47
+ .st1{fill:#DEC800;}
48
+ .st2{fill:#CCCCCC;}
49
+ </style><g
50
+ id="g7559" /><path
51
+ class="st1"
52
+ d="M114.6,143.3H31c-7.2,0-13-4.8-13-10.6l0,0c0-5.9,5.9-10.6,13-10.6h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,138.5,121.8,143.3,114.6,143.3z"
53
+ id="path7561" /><path
54
+ class="st1"
55
+ d="M114.6,110.2H31c-7.2,0-13-4.8-13-10.6l0,0C18,93.7,23.9,89,31,89h83.6c7.2,0,13,4.8,13,10.6l0,0 C127.7,105.4,121.8,110.2,114.6,110.2z"
56
+ id="path7563" /><path
57
+ class="st2"
58
+ d="M99.6,40.2H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,37.1,104.3,40.2,99.6,40.2z"
59
+ id="path7565" /><path
60
+ class="st2"
61
+ d="M99.6,73.3H46c-4.6,0-8.4-3.1-8.4-6.8l0,0c0-3.8,3.8-6.9,8.4-6.9h53.7c4.6,0,8.4,3.1,8.4,6.8l0,0 C108.1,70.2,104.3,73.3,99.6,73.3z"
62
+ id="path7567" /></svg>
@@ -6,9 +6,19 @@ import Pagination from 'foremanReact/components/Pagination/PaginationWrapper';
6
6
  import { useForemanSettings } from 'foremanReact/Root/Context/ForemanContext';
7
7
 
8
8
  import PreupgradeReportEntry from './components/PreupgradeReportEntry';
9
+ import PreupgradeReportsListHeader from './components/PreupgradeReportsListHeader';
9
10
  import { entriesPage } from '../PreupgradeReports/PreupgradeReportsHelpers';
10
11
 
11
- const PreupgradeReportsList = ({ allEntries }) => {
12
+ import './PreupgradeReportList.scss';
13
+
14
+ const PreupgradeReportsList = ({
15
+ allEntries,
16
+ isSelected,
17
+ toggleSelected,
18
+ sort,
19
+ changeSort,
20
+ toggleSelectAll,
21
+ }) => {
12
22
  const { perPage, perPageOptions } = useForemanSettings();
13
23
  const [pagination, setPagination] = useState({
14
24
  page: 1,
@@ -17,9 +27,19 @@ const PreupgradeReportsList = ({ allEntries }) => {
17
27
  });
18
28
 
19
29
  return (
20
- <ListView>
30
+ <ListView id="preupgrade-report-entries-list-view">
31
+ <PreupgradeReportsListHeader
32
+ sort={sort}
33
+ changeSort={changeSort}
34
+ toggleSelectAll={toggleSelectAll}
35
+ />
21
36
  {entriesPage(allEntries, pagination).map((entry, idx) => (
22
- <PreupgradeReportEntry entry={entry} key={idx} />
37
+ <PreupgradeReportEntry
38
+ entry={entry}
39
+ key={idx}
40
+ isEntrySelected={isSelected(entry)}
41
+ toggleSelected={toggleSelected}
42
+ />
23
43
  ))}
24
44
  <Pagination
25
45
  viewType="list"
@@ -34,6 +54,11 @@ const PreupgradeReportsList = ({ allEntries }) => {
34
54
 
35
55
  PreupgradeReportsList.propTypes = {
36
56
  allEntries: PropTypes.array.isRequired,
57
+ isSelected: PropTypes.func.isRequired,
58
+ toggleSelected: PropTypes.func.isRequired,
59
+ sort: PropTypes.object.isRequired,
60
+ changeSort: PropTypes.func.isRequired,
61
+ toggleSelectAll: PropTypes.func.isRequired,
37
62
  };
38
63
 
39
64
  export default PreupgradeReportsList;