foreman_leapp 4.1.2 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_leapp/locale/de/foreman_leapp.js +37 -4
  3. data/app/assets/javascripts/foreman_leapp/locale/en/foreman_leapp.js +36 -3
  4. data/app/assets/javascripts/foreman_leapp/locale/fr/foreman_leapp.js +37 -4
  5. data/app/assets/javascripts/foreman_leapp/locale/ja/foreman_leapp.js +37 -4
  6. data/app/assets/javascripts/foreman_leapp/locale/ka/foreman_leapp.js +40 -7
  7. data/app/assets/javascripts/foreman_leapp/locale/ko/foreman_leapp.js +37 -4
  8. data/app/assets/javascripts/foreman_leapp/locale/zh_CN/foreman_leapp.js +37 -4
  9. data/app/controllers/api/v2/preupgrade_report_entries_controller.rb +17 -29
  10. data/app/controllers/concerns/foreman_leapp/preupgrade_report_entry_bulk_remediate.rb +69 -0
  11. data/app/lib/actions/foreman_leapp/preupgrade_job.rb +1 -2
  12. data/app/lib/helpers/job_helper.rb +8 -0
  13. data/app/views/api/v2/job_invocations/leapp_preupgrade_report.json.rabl +3 -0
  14. data/config/routes.rb +1 -2
  15. data/lib/foreman_leapp/engine.rb +3 -12
  16. data/lib/foreman_leapp/version.rb +1 -1
  17. data/locale/de/LC_MESSAGES/foreman_leapp.mo +0 -0
  18. data/locale/de/foreman_leapp.po +38 -5
  19. data/locale/en/LC_MESSAGES/foreman_leapp.mo +0 -0
  20. data/locale/en/foreman_leapp.po +36 -3
  21. data/locale/foreman_leapp.pot +66 -18
  22. data/locale/fr/LC_MESSAGES/foreman_leapp.mo +0 -0
  23. data/locale/fr/foreman_leapp.po +38 -5
  24. data/locale/ja/LC_MESSAGES/foreman_leapp.mo +0 -0
  25. data/locale/ja/foreman_leapp.po +38 -5
  26. data/locale/ka/LC_MESSAGES/foreman_leapp.mo +0 -0
  27. data/locale/ka/foreman_leapp.po +41 -8
  28. data/locale/ko/LC_MESSAGES/foreman_leapp.mo +0 -0
  29. data/locale/ko/foreman_leapp.po +38 -5
  30. data/locale/zh_CN/LC_MESSAGES/foreman_leapp.mo +0 -0
  31. data/locale/zh_CN/foreman_leapp.po +38 -5
  32. data/package.json +0 -1
  33. data/test/functional/api/v2/job_invocations_controller_test.rb +39 -0
  34. data/test/functional/api/v2/preupgrade_report_entries_controller_test.rb +64 -0
  35. data/test/unit/helpers/job_helper_test.rb +20 -0
  36. data/webpack/components/PreupgradeReportsTable/PreupgradeReportsTableHelpers.js +44 -17
  37. data/webpack/components/PreupgradeReportsTable/__tests__/PreupgradeReportsTable.test.js +131 -10
  38. data/webpack/components/PreupgradeReportsTable/index.js +67 -74
  39. data/webpack/index.js +0 -13
  40. metadata +7 -67
  41. data/app/controllers/preupgrade_reports_controller.rb +0 -17
  42. data/app/views/job_invocations/_leapp_preupgrade_report.html.erb +0 -11
  43. data/app/views/preupgrade_report_entries/base.json.rabl +0 -4
  44. data/app/views/preupgrade_reports/index.json.rabl +0 -3
  45. data/app/views/preupgrade_reports/show.json.rabl +0 -7
  46. data/test/functional/preupgrade_reports_controller_test.rb +0 -39
  47. data/webpack/components/PreupgradeReports/PreupgradeReports.js +0 -154
  48. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +0 -31
  49. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +0 -152
  50. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +0 -37
  51. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +0 -18
  52. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +0 -129
  53. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +0 -159
  54. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +0 -78
  55. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js +0 -44
  56. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js +0 -28
  57. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +0 -489
  58. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +0 -102
  59. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +0 -76
  60. data/webpack/components/PreupgradeReports/components/EntriesFilter.js +0 -121
  61. data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +0 -3
  62. data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +0 -30
  63. data/webpack/components/PreupgradeReports/components/FixSelectedButton.js +0 -35
  64. data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +0 -15
  65. data/webpack/components/PreupgradeReports/components/NoReports.js +0 -35
  66. data/webpack/components/PreupgradeReports/components/NoReports.test.js +0 -29
  67. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +0 -28
  68. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.test.js +0 -17
  69. data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +0 -330
  70. data/webpack/components/PreupgradeReports/components/__snapshots__/FixSelectedButton.test.js.snap +0 -40
  71. data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +0 -41
  72. data/webpack/components/PreupgradeReports/index.js +0 -57
  73. data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +0 -37
  74. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +0 -124
  75. data/webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js +0 -16
  76. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +0 -34
  77. data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +0 -33
  78. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +0 -64
  79. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +0 -56
  80. data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +0 -50
  81. data/webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js +0 -13
  82. data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +0 -27
  83. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js +0 -38
  84. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +0 -14
  85. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +0 -14
  86. data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +0 -29
  87. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap +0 -8
  88. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +0 -32
  89. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +0 -134
  90. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +0 -113
  91. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +0 -36
  92. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +0 -197
  93. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +0 -28
  94. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +0 -15
  95. data/webpack/components/PreupgradeReportsList/components/helpers.js +0 -186
  96. data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +0 -61
  97. data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +0 -61
  98. data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +0 -62
  99. data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +0 -62
  100. data/webpack/components/PreupgradeReportsList/index.js +0 -61
  101. data/webpack/consts.js +0 -3
  102. data/webpack/csrf.js +0 -4
  103. data/webpack/reducer.js +0 -5
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_leapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.2
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Foreman Leapp team
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-08-24 00:00:00.000000000 Z
10
+ date: 2026-10-09 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: foreman_remote_execution
@@ -57,7 +57,7 @@ files:
57
57
  - app/controllers/api/v2/preupgrade_report_entries_controller.rb
58
58
  - app/controllers/api/v2/preupgrade_reports_controller.rb
59
59
  - app/controllers/concerns/api/v2/api_authorizer.rb
60
- - app/controllers/preupgrade_reports_controller.rb
60
+ - app/controllers/concerns/foreman_leapp/preupgrade_report_entry_bulk_remediate.rb
61
61
  - app/helpers/foreman_leapp/hosts_helper.rb
62
62
  - app/helpers/foreman_leapp/template_helper.rb
63
63
  - app/lib/actions/foreman_leapp/preupgrade_job.rb
@@ -65,6 +65,7 @@ files:
65
65
  - app/models/concerns/foreman_leapp/job_invocation_extensions.rb
66
66
  - app/models/preupgrade_report.rb
67
67
  - app/models/preupgrade_report_entry.rb
68
+ - app/views/api/v2/job_invocations/leapp_preupgrade_report.json.rabl
68
69
  - app/views/api/v2/preupgrade_report_entries/base.json.rabl
69
70
  - app/views/api/v2/preupgrade_report_entries/index.json.rabl
70
71
  - app/views/api/v2/preupgrade_reports/base.json.rabl
@@ -76,10 +77,6 @@ files:
76
77
  - app/views/foreman_leapp/job_templates/leapp_preupgrade.erb
77
78
  - app/views/foreman_leapp/job_templates/leapp_remediation.erb
78
79
  - app/views/foreman_leapp/job_templates/leapp_upgrade.erb
79
- - app/views/job_invocations/_leapp_preupgrade_report.html.erb
80
- - app/views/preupgrade_report_entries/base.json.rabl
81
- - app/views/preupgrade_reports/index.json.rabl
82
- - app/views/preupgrade_reports/show.json.rabl
83
80
  - config/routes.rb
84
81
  - db/migrate/20200320104040_preupgrade_report_entries.rb
85
82
  - db/migrate/20200326142259_add_job_id_to_report.rb
@@ -109,9 +106,9 @@ files:
109
106
  - locale/zh_CN/foreman_leapp.po
110
107
  - package.json
111
108
  - test/factories/foreman_leapp_factories.rb
109
+ - test/functional/api/v2/job_invocations_controller_test.rb
112
110
  - test/functional/api/v2/preupgrade_report_entries_controller_test.rb
113
111
  - test/functional/api/v2/preupgrade_reports_controller_test.rb
114
- - test/functional/preupgrade_reports_controller_test.rb
115
112
  - test/helpers/template_helper_test.rb
116
113
  - test/models/preupgrade_report_entry_test.rb
117
114
  - test/models/preupgrade_report_test.rb
@@ -119,70 +116,13 @@ files:
119
116
  - test/unit/actions/preupgrade_job_test.rb
120
117
  - test/unit/helpers/job_helper_test.rb
121
118
  - webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js
122
- - webpack/components/PreupgradeReports/PreupgradeReports.js
123
- - webpack/components/PreupgradeReports/PreupgradeReportsActions.js
124
- - webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js
125
- - webpack/components/PreupgradeReports/PreupgradeReportsReducer.js
126
- - webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js
127
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js
128
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js
129
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js
130
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js
131
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js
132
- - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap
133
- - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap
134
- - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap
135
- - webpack/components/PreupgradeReports/components/EntriesFilter.js
136
- - webpack/components/PreupgradeReports/components/EntriesFilter.scss
137
- - webpack/components/PreupgradeReports/components/EntriesFilter.test.js
138
- - webpack/components/PreupgradeReports/components/FixSelectedButton.js
139
- - webpack/components/PreupgradeReports/components/FixSelectedButton.test.js
140
- - webpack/components/PreupgradeReports/components/NoReports.js
141
- - webpack/components/PreupgradeReports/components/NoReports.test.js
142
- - webpack/components/PreupgradeReports/components/UpgradeAllButton.js
143
- - webpack/components/PreupgradeReports/components/UpgradeAllButton.test.js
144
- - webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap
145
- - webpack/components/PreupgradeReports/components/__snapshots__/FixSelectedButton.test.js.snap
146
- - webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap
147
- - webpack/components/PreupgradeReports/index.js
148
- - webpack/components/PreupgradeReportsList/PreupgradeReportList.scss
149
- - webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js
150
- - webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js
151
- - webpack/components/PreupgradeReportsList/components/InfoItem.js
152
- - webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js
153
- - webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js
154
- - webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js
155
- - webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js
156
- - webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js
157
- - webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js
158
- - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js
159
- - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js
160
- - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js
161
- - webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js
162
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap
163
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap
164
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap
165
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap
166
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap
167
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap
168
- - webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js
169
- - webpack/components/PreupgradeReportsList/components/foreman_leapp.scss
170
- - webpack/components/PreupgradeReportsList/components/helpers.js
171
- - webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg
172
- - webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg
173
- - webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg
174
- - webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg
175
- - webpack/components/PreupgradeReportsList/index.js
176
119
  - webpack/components/PreupgradeReportsTable/PreupgradeReportsTable.scss
177
120
  - webpack/components/PreupgradeReportsTable/PreupgradeReportsTableHelpers.js
178
121
  - webpack/components/PreupgradeReportsTable/ReportDetails.js
179
122
  - webpack/components/PreupgradeReportsTable/__tests__/PreupgradeReportsTable.test.js
180
123
  - webpack/components/PreupgradeReportsTable/index.js
181
- - webpack/consts.js
182
- - webpack/csrf.js
183
124
  - webpack/global_index.js
184
125
  - webpack/index.js
185
- - webpack/reducer.js
186
126
  - webpack/testSetup.js
187
127
  - webpack/test_setup.js
188
128
  homepage: https://github.com/theforeman/foreman_leapp
@@ -203,14 +143,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
143
  - !ruby/object:Gem::Version
204
144
  version: '0'
205
145
  requirements: []
206
- rubygems_version: 4.0.16
146
+ rubygems_version: 4.0.20
207
147
  specification_version: 4
208
148
  summary: A Foreman plugin for Leapp utility.
209
149
  test_files:
210
150
  - test/factories/foreman_leapp_factories.rb
151
+ - test/functional/api/v2/job_invocations_controller_test.rb
211
152
  - test/functional/api/v2/preupgrade_report_entries_controller_test.rb
212
153
  - test/functional/api/v2/preupgrade_reports_controller_test.rb
213
- - test/functional/preupgrade_reports_controller_test.rb
214
154
  - test/helpers/template_helper_test.rb
215
155
  - test/models/preupgrade_report_entry_test.rb
216
156
  - test/models/preupgrade_report_test.rb
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class PreupgradeReportsController < ::Api::V2::BaseController
4
- include Api::V2::ApiAuthorizer
5
-
6
- def index
7
- @preupgrade_reports = resource_scope.includes(:preupgrade_report_entries).search_for(*search_options)
8
- end
9
-
10
- private
11
-
12
- # By overriding :path_to_authenticate we can require REX's :view_job_invocations permission
13
- def path_to_authenticate
14
- Foreman::AccessControl.normalize_path_hash params.slice(:action, :id, :user_id)
15
- .merge({ controller: 'job_invocations' })
16
- end
17
- end
@@ -1,11 +0,0 @@
1
- <% content_for(:javascripts) do %>
2
- <%= webpacked_plugins_js_for :foreman_leapp %>
3
- <% end %>
4
- <% content_for(:stylesheets) do %>
5
- <%= webpacked_plugins_css_for :foreman_leapp %>
6
- <% end %>
7
-
8
- <%= react_component('PreupgradeReports', {
9
- :url => preupgrade_reports_path(:search => "job_invocation_id = #{@job_invocation.id}"),
10
- :newJobInvocationUrl => new_job_invocation_path
11
- }) %>
@@ -1,4 +0,0 @@
1
- object @preupgrade_report_entry
2
-
3
- extends "api/v2/preupgrade_report_entries/base"
4
- attribute :detail
@@ -1,3 +0,0 @@
1
- collection @preupgrade_reports
2
-
3
- extends 'preupgrade_reports/show'
@@ -1,7 +0,0 @@
1
- object @preupgrade_report
2
-
3
- extends "api/v2/preupgrade_reports/base"
4
-
5
- child :preupgrade_report_entries => :entries do
6
- extends "preupgrade_report_entries/base"
7
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_plugin_helper'
4
-
5
- class PreupgradeReportsControllerTest < ActionController::TestCase
6
- setup do
7
- @user = FactoryBot.create(:user, admin: false)
8
- @host = FactoryBot.create :host
9
- FactoryBot.create :preupgrade_report, host: @host
10
- end
11
-
12
- test 'should get :index' do
13
- get :index
14
- assert_response :success
15
- assert_not_empty JSON.parse(@response.body)['results']
16
- end
17
-
18
- test 'should get :index with :view_job_invocations & :view_hosts' do
19
- setup_user 'view', 'job_invocations', nil, @user
20
- setup_user 'view', 'hosts', nil, @user
21
- get :index, session: set_session_user(@user)
22
- assert_response :success
23
- assert_not_empty JSON.parse(@response.body)['results']
24
- end
25
-
26
- test 'should not get :index without :view_job_invocations' do
27
- setup_user 'view', 'hosts', nil, @user
28
- get :index, session: set_session_user(@user)
29
- assert_response :forbidden
30
- assert_includes JSON.parse(@response.body)['error']['missing_permissions'], 'view_job_invocations'
31
- end
32
-
33
- test 'should not get :index without :view_hosts' do
34
- setup_user 'view', 'job_invocations', nil, @user
35
- get :index, session: set_session_user(@user)
36
- assert_response :forbidden
37
- assert_includes JSON.parse(@response.body)['error']['missing_permissions'], 'view_hosts'
38
- end
39
- end
@@ -1,154 +0,0 @@
1
- import React, { useState } from 'react';
2
- import { Icon } from '@patternfly/react-core';
3
- import { ExclamationCircleIcon } from '@patternfly/react-icons';
4
- import EmptyState from 'foremanReact/components/common/EmptyState';
5
- import { LoadingState, Row } from 'patternfly-react';
6
- import PropTypes from 'prop-types';
7
- import { sprintf, translate as __ } from 'foremanReact/common/I18n';
8
-
9
- import PreupgradeReportsList from '../PreupgradeReportsList';
10
- import UpgradeAllButton from './components/UpgradeAllButton';
11
- import EntriesFilter from './components/EntriesFilter';
12
- import FixSelectedButton from './components/FixSelectedButton';
13
-
14
- import {
15
- flattenEntries,
16
- isEmpty,
17
- anyEntriesFixable,
18
- filterEntries,
19
- idsForInvocationFromEntries,
20
- sortEntries,
21
- fixableEntries,
22
- } from './PreupgradeReportsHelpers';
23
-
24
- import NoReports from './components/NoReports';
25
-
26
- const PreupgradeReports = ({
27
- preupgradeReports,
28
- csrfToken,
29
- newJobInvocationUrl,
30
- }) => {
31
- const [filterType, setFilterType] = useState('title');
32
- const [filterValue, setFilterValue] = useState('');
33
- const [checked, setChecked] = useState([]);
34
- const [sort, setSort] = useState({ attribute: '', order: 'desc' });
35
-
36
- const onFilterValueChange = value => {
37
- setFilterValue(value);
38
- };
39
-
40
- const onFilterValueClear = () => setFilterValue('');
41
-
42
- const onFilterTypeChange = value => {
43
- onFilterValueClear();
44
- setFilterType(value);
45
- };
46
-
47
- const isSelected = entry => checked.some(item => item.id === entry.id);
48
-
49
- const anySelected = checked.length > 0;
50
-
51
- const toggleSelected = (entry, isEntrySelected) => {
52
- if (isEntrySelected) {
53
- setChecked(checked.filter(item => item.id !== entry.id));
54
- } else {
55
- setChecked([entry, ...checked]);
56
- }
57
- };
58
-
59
- const toggleSelectAll = () => {
60
- const allFixable = fixableEntries(preupgradeReports);
61
-
62
- if (checked.length === allFixable.length) {
63
- setChecked([]);
64
- } else {
65
- setChecked(allFixable);
66
- }
67
- };
68
-
69
- const changeSort = value => {
70
- setSort({ ...sort, ...value });
71
- };
72
-
73
- return (
74
- <React.Fragment>
75
- <Row>
76
- <div className="col-md-8">
77
- <EntriesFilter
78
- filterType={filterType}
79
- onFilterTypeChange={onFilterTypeChange}
80
- filterValue={filterValue}
81
- onFilterValueChange={onFilterValueChange}
82
- />
83
- </div>
84
- <div className="col-md-4">
85
- <div className="btn-toolbar pull-right">
86
- <FixSelectedButton
87
- postUrl={newJobInvocationUrl}
88
- disabled={!anyEntriesFixable(preupgradeReports) || !anySelected}
89
- csrfToken={csrfToken}
90
- ids={idsForInvocationFromEntries(checked)}
91
- />
92
- <UpgradeAllButton
93
- postUrl={newJobInvocationUrl}
94
- csrfToken={csrfToken}
95
- preupgradeReports={preupgradeReports}
96
- />
97
- </div>
98
- </div>
99
- </Row>
100
- <PreupgradeReportsList
101
- allEntries={filterEntries(
102
- filterType,
103
- filterValue,
104
- sortEntries(flattenEntries(preupgradeReports), sort)
105
- )}
106
- isSelected={isSelected}
107
- toggleSelected={toggleSelected}
108
- sort={sort}
109
- changeSort={changeSort}
110
- toggleSelectAll={toggleSelectAll}
111
- />
112
- </React.Fragment>
113
- );
114
- };
115
-
116
- const withLoadingState = Component => componentProps => {
117
- const { error, loading, preupgradeReports, reportsExpected } = componentProps;
118
-
119
- if (!isEmpty(error)) {
120
- return (
121
- <EmptyState
122
- key="preupgrade-reports-error"
123
- variant="xs"
124
- icon={
125
- <Icon iconSize="lg">
126
- <ExclamationCircleIcon />
127
- </Icon>
128
- }
129
- header={sprintf(__('Could not retrieve data: %(status)s - %(msg)s'), {
130
- status: error.statusText,
131
- msg: error.errorMsg,
132
- })}
133
- />
134
- );
135
- }
136
-
137
- return (
138
- <LoadingState loading={loading}>
139
- {preupgradeReports.length > 0 ? (
140
- <Component {...componentProps} />
141
- ) : (
142
- <NoReports reportsExpected={reportsExpected} />
143
- )}
144
- </LoadingState>
145
- );
146
- };
147
-
148
- PreupgradeReports.propTypes = {
149
- preupgradeReports: PropTypes.array.isRequired,
150
- csrfToken: PropTypes.string.isRequired,
151
- newJobInvocationUrl: PropTypes.string.isRequired,
152
- };
153
-
154
- export default withLoadingState(PreupgradeReports);
@@ -1,31 +0,0 @@
1
- import api from 'foremanReact/API';
2
- import { deepPropsToCamelCase } from 'foremanReact/common/helpers';
3
- import { translate as __ } from 'foremanReact/common/I18n';
4
-
5
- import {
6
- PREUPGRADE_REPORTS_REQUEST,
7
- PREUPGRADE_REPORTS_SUCCESS,
8
- PREUPGRADE_REPORTS_FAILURE,
9
- } from '../../consts';
10
-
11
- export const getPreupgradeReportsAction = url => async dispatch => {
12
- dispatch({ type: PREUPGRADE_REPORTS_REQUEST });
13
-
14
- try {
15
- const { data } = await api.get(url);
16
- return dispatch({
17
- type: PREUPGRADE_REPORTS_SUCCESS,
18
- payload: deepPropsToCamelCase(data),
19
- });
20
- } catch (error) {
21
- return dispatch(errorHandler(PREUPGRADE_REPORTS_FAILURE, error));
22
- }
23
- };
24
-
25
- const errorHandler = (msg, err) => {
26
- const error = {
27
- errorMsg: __('Failed to fetch preupgrade reports from server.'),
28
- statusText: err.response.statusText,
29
- };
30
- return { type: msg, payload: { error } };
31
- };
@@ -1,152 +0,0 @@
1
- import Immutable from 'seamless-immutable';
2
-
3
- export const flattenEntries = reports =>
4
- reports.reduce((memo, report) => [...memo, ...report.entries], []);
5
-
6
- const entryWithFixKind = kind => entry =>
7
- entry.detail &&
8
- entry.detail.remediations &&
9
- entry.detail.remediations.some(remediation => remediation.type === kind);
10
-
11
- export const entryFixable = entryWithFixKind('command');
12
-
13
- export const isInhibitor = entry =>
14
- entry.flags && entry.flags.some(flag => flag === 'inhibitor');
15
-
16
- export const filterByInhibitor = value => entry => {
17
- const inhibitsUpgrade = isInhibitor(entry);
18
-
19
- if (value === 'yes') {
20
- return inhibitsUpgrade;
21
- }
22
-
23
- if (value === 'no') {
24
- return !inhibitsUpgrade;
25
- }
26
-
27
- return true;
28
- };
29
-
30
- export const isEmpty = obj => Object.keys(obj).length === 0;
31
-
32
- export const anyEntriesFixable = reports =>
33
- reportsToEntries(reports, Array.prototype.some, entryFixable);
34
-
35
- export const fixableEntries = reports =>
36
- reportsToEntries(reports, Array.prototype.filter, entryFixable);
37
-
38
- const reportsToEntries = (reports, iterator, predicate) =>
39
- iterator.call(flattenEntries(reports), predicate);
40
-
41
- export const idsForInvocationFromEntries = entries =>
42
- entries.reduce(
43
- (memo, entry) => {
44
- if (entryFixable(entry)) {
45
- memo.entryIds = [...memo.entryIds, entry.id];
46
-
47
- if (!memo.hostIds.includes(entry.hostId)) {
48
- memo.hostIds = [...memo.hostIds, entry.hostId];
49
- }
50
- }
51
- return memo;
52
- },
53
- { hostIds: [], entryIds: [] }
54
- );
55
-
56
- export const idsForInvocationFromReports = reports =>
57
- idsForInvocationFromEntries(flattenEntries(reports));
58
-
59
- export const entriesPage = (entries, pagination) => {
60
- const offset = (pagination.page - 1) * pagination.perPage;
61
-
62
- return entries.slice(offset, offset + pagination.perPage);
63
- };
64
-
65
- export const filterEntries = (attribute, value, entries) => {
66
- if (!value) {
67
- return entries;
68
- }
69
-
70
- if (attribute === 'fix') {
71
- return entries.filter(entryWithFixKind(value));
72
- }
73
-
74
- if (attribute === 'inhibitor') {
75
- return entries.filter(filterByInhibitor(value));
76
- }
77
-
78
- return entries.filter(entry =>
79
- entry[attribute].toLowerCase().includes(value.toLowerCase())
80
- );
81
- };
82
-
83
- export const byText = attribute => (first, second) => {
84
- const firstAttr = first[attribute].toLowerCase();
85
- const secondAttr = second[attribute].toLowerCase();
86
-
87
- if (firstAttr < secondAttr) {
88
- return -1;
89
- }
90
-
91
- if (firstAttr > secondAttr) {
92
- return 1;
93
- }
94
- return 0;
95
- };
96
-
97
- export const bySeverity = attribute => (first, second) => {
98
- const sevList = ['info', 'low', 'medium', 'high'];
99
-
100
- const firstAttr = first[attribute].toLowerCase();
101
- const secondAttr = second[attribute].toLowerCase();
102
-
103
- return sevList.indexOf(firstAttr) - sevList.indexOf(secondAttr);
104
- };
105
-
106
- export const byFix = (first, second) => {
107
- const firstAttr = !!(first.detail && first.detail.remediations);
108
- const secondAttr = !!(second.detail && second.detail.remediations);
109
- return byBoolComparison(firstAttr, secondAttr);
110
- };
111
-
112
- export const byInhibitor = (first, second) =>
113
- byBoolComparison(isInhibitor(first), isInhibitor(second));
114
-
115
- const byBoolComparison = (first, second) => {
116
- if (first === second) {
117
- return 0;
118
- }
119
-
120
- if (first) {
121
- return -1;
122
- }
123
- return 1;
124
- };
125
-
126
- export const sortEntries = (entries, sort) => {
127
- const entriesCopy = Immutable.asMutable(entries);
128
-
129
- if (!sort.attribute) {
130
- return entriesCopy;
131
- }
132
-
133
- let sorted;
134
-
135
- if (['title', 'hostname'].includes(sort.attribute)) {
136
- sorted = entriesCopy.sort(byText(sort.attribute));
137
- }
138
-
139
- if (sort.attribute === 'severity') {
140
- sorted = entriesCopy.sort(bySeverity(sort.attribute));
141
- }
142
-
143
- if (sort.attribute === 'fix') {
144
- sorted = entriesCopy.sort(byFix);
145
- }
146
-
147
- if (sort.attribute === 'inhibitor') {
148
- sorted = entriesCopy.sort(byInhibitor);
149
- }
150
-
151
- return sort.order === 'asc' ? sorted : sorted.reverse();
152
- };
@@ -1,37 +0,0 @@
1
- import Immutable from 'seamless-immutable';
2
-
3
- import {
4
- PREUPGRADE_REPORTS_REQUEST,
5
- PREUPGRADE_REPORTS_SUCCESS,
6
- PREUPGRADE_REPORTS_FAILURE,
7
- } from '../../consts';
8
-
9
- export const initialState = Immutable({
10
- loadingPreupgradeReports: false,
11
- reportsExpected: false,
12
- preupgradeReports: [],
13
- error: {},
14
- });
15
-
16
- const reducer = (state = initialState, action) => {
17
- const { payload } = action;
18
- switch (action.type) {
19
- case PREUPGRADE_REPORTS_REQUEST:
20
- return state.set('loadingPreupgradeReports', true);
21
- case PREUPGRADE_REPORTS_SUCCESS:
22
- return state.merge({
23
- loadingPreupgradeReports: false,
24
- preupgradeReports: payload.results,
25
- reportsExpected: true,
26
- });
27
- case PREUPGRADE_REPORTS_FAILURE:
28
- return state.merge({
29
- error: payload.error,
30
- loadingPreupgradeReports: false,
31
- });
32
- default:
33
- return state;
34
- }
35
- };
36
-
37
- export default reducer;
@@ -1,18 +0,0 @@
1
- export const selectPreupgrade = state => state.foremanLeapp.preupgrade;
2
-
3
- export const selectPreupgradeReports = state =>
4
- selectPreupgrade(state).preupgradeReports;
5
-
6
- export const selectLoadingPreupgradeReports = state =>
7
- selectPreupgrade(state).loadingPreupgradeReports;
8
- export const selectError = state => selectPreupgrade(state).error;
9
-
10
- export const selectReportsExpected = state =>
11
- selectPreupgrade(state).reportsExpected;
12
-
13
- export const selectRexState = state => state.foremanRemoteExecutionReducers;
14
-
15
- export const selectJobInvocations = state =>
16
- selectRexState(state).jobInvocations;
17
- export const selectJobInvocationsPolling = state =>
18
- selectJobInvocations(state).isPolling;