foreman_leapp 4.2.1 → 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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/config/routes.rb +0 -2
  3. data/lib/foreman_leapp/engine.rb +1 -12
  4. data/lib/foreman_leapp/version.rb +1 -1
  5. data/package.json +0 -1
  6. data/webpack/components/PreupgradeReportsTable/index.js +7 -1
  7. data/webpack/index.js +0 -13
  8. metadata +2 -66
  9. data/app/controllers/preupgrade_reports_controller.rb +0 -17
  10. data/app/views/job_invocations/_leapp_preupgrade_report.html.erb +0 -11
  11. data/app/views/preupgrade_report_entries/base.json.rabl +0 -4
  12. data/app/views/preupgrade_reports/index.json.rabl +0 -3
  13. data/app/views/preupgrade_reports/show.json.rabl +0 -7
  14. data/test/functional/preupgrade_reports_controller_test.rb +0 -39
  15. data/webpack/components/PreupgradeReports/PreupgradeReports.js +0 -154
  16. data/webpack/components/PreupgradeReports/PreupgradeReportsActions.js +0 -31
  17. data/webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js +0 -152
  18. data/webpack/components/PreupgradeReports/PreupgradeReportsReducer.js +0 -37
  19. data/webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js +0 -18
  20. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js +0 -129
  21. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js +0 -159
  22. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js +0 -78
  23. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js +0 -44
  24. data/webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js +0 -28
  25. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap +0 -489
  26. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap +0 -102
  27. data/webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap +0 -76
  28. data/webpack/components/PreupgradeReports/components/EntriesFilter.js +0 -121
  29. data/webpack/components/PreupgradeReports/components/EntriesFilter.scss +0 -3
  30. data/webpack/components/PreupgradeReports/components/EntriesFilter.test.js +0 -30
  31. data/webpack/components/PreupgradeReports/components/FixSelectedButton.js +0 -35
  32. data/webpack/components/PreupgradeReports/components/FixSelectedButton.test.js +0 -15
  33. data/webpack/components/PreupgradeReports/components/NoReports.js +0 -35
  34. data/webpack/components/PreupgradeReports/components/NoReports.test.js +0 -29
  35. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.js +0 -28
  36. data/webpack/components/PreupgradeReports/components/UpgradeAllButton.test.js +0 -17
  37. data/webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap +0 -330
  38. data/webpack/components/PreupgradeReports/components/__snapshots__/FixSelectedButton.test.js.snap +0 -40
  39. data/webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap +0 -41
  40. data/webpack/components/PreupgradeReports/index.js +0 -57
  41. data/webpack/components/PreupgradeReportsList/PreupgradeReportList.scss +0 -37
  42. data/webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js +0 -124
  43. data/webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js +0 -16
  44. data/webpack/components/PreupgradeReportsList/components/InfoItem.js +0 -34
  45. data/webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js +0 -33
  46. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js +0 -64
  47. data/webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js +0 -56
  48. data/webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js +0 -50
  49. data/webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js +0 -13
  50. data/webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js +0 -27
  51. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js +0 -38
  52. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js +0 -14
  53. data/webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js +0 -14
  54. data/webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js +0 -29
  55. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap +0 -8
  56. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap +0 -32
  57. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap +0 -134
  58. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap +0 -113
  59. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap +0 -36
  60. data/webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap +0 -197
  61. data/webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js +0 -28
  62. data/webpack/components/PreupgradeReportsList/components/foreman_leapp.scss +0 -15
  63. data/webpack/components/PreupgradeReportsList/components/helpers.js +0 -186
  64. data/webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg +0 -61
  65. data/webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg +0 -61
  66. data/webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg +0 -62
  67. data/webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg +0 -62
  68. data/webpack/components/PreupgradeReportsList/index.js +0 -61
  69. data/webpack/consts.js +0 -3
  70. data/webpack/csrf.js +0 -4
  71. data/webpack/reducer.js +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0359af6f2c4932799583af33c20403b69f2049602d4303d9706a75519403f31
4
- data.tar.gz: 4ff2b28bd32baaa3d498db1e585c87e085a3360162e13569641e082ecbe3c79a
3
+ metadata.gz: 2b21b7465db5f87cfccd517c018e30bb3aa5f6c7878cbef6e314c981b5c21870
4
+ data.tar.gz: dd0f2a71a7d5c5858aa3c6336d4d92fafb6ebd3c890404265262491ce2311057
5
5
  SHA512:
6
- metadata.gz: 4e83c9106bac61b096e6ac2014175d18a62d0b73061e4c9c67ede19cb2ecd3b96a5045c329462d94f384ebf816ca067e808e1f09bd12d9943a8e8fcb97123e8b
7
- data.tar.gz: 0c88e19804100c24fcaadd216729714e2e56c3403fa7f664ee7e0bd212cd22d251d8e760363fb385037dca994c82a3090f3a8485ec3d3e839df02c68f514a539
6
+ metadata.gz: c6e3d0c62affb53415a88dc5fd5ab55f44a9a3dfa601964a8fdf85bf7264f6a3e41622e63f8a213547197f7f23b5bcb139ed3f034df27ac25e564c915c0a622e
7
+ data.tar.gz: 021af94cf62a318c7aadace3ed71f8171862f2820a5f7d67dcd800ffc8d52ef0caeb4df53be11a8a7bad4c722db43486095e1f10184234f7c8b84c873a8764da
data/config/routes.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Rails.application.routes.draw do
4
- resources :preupgrade_reports, only: %i[index]
5
-
6
4
  namespace :api, defaults: { format: 'json' } do
7
5
  scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v2/,
8
6
  constraints: ApiConstraints.new(version: 2, default: true) do
@@ -26,19 +26,8 @@ module ForemanLeapp
26
26
  extend_rabl_template 'api/v2/job_invocations/main',
27
27
  'api/v2/job_invocations/leapp_preupgrade_report'
28
28
 
29
- extend_page 'job_invocations/show' do |cx|
30
- cx.add_pagelet :main_tabs,
31
- partial: 'job_invocations/leapp_preupgrade_report',
32
- name: _('Leapp preupgrade report'),
33
- id: 'leapp_preupgrade_report',
34
- onlyif: proc { |subject|
35
- ::Helpers::JobHelper.with_leapp_report(subject)
36
- }
37
- end
38
-
39
29
  security_block :foreman_leapp do
40
- permission :view_job_invocations, { :preupgrade_reports => %i[index show job_invocation],
41
- 'api/v2/preupgrade_reports' => %i[index show job_invocation] },
30
+ permission :view_job_invocations, { 'api/v2/preupgrade_reports' => %i[index show job_invocation] },
42
31
  :resource_type => 'JobInvocation'
43
32
  end
44
33
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ForemanLeapp
4
- VERSION = '4.2.1'
4
+ VERSION = '4.3.0'
5
5
  end
data/package.json CHANGED
@@ -33,7 +33,6 @@
33
33
  "@theforeman/vendor-dev": ">= 12.0.1",
34
34
  "babel-eslint": "^10.0.0",
35
35
  "eslint": "^6.8.0",
36
- "jest-svg-transformer": "^1.0.0",
37
36
  "prettier": "^1.19.1"
38
37
  }
39
38
  }
@@ -29,10 +29,16 @@ import { getControllerSearchProps, STATUS } from 'foremanReact/constants';
29
29
  import SearchBar from 'foremanReact/components/SearchBar';
30
30
  import { APIActions } from 'foremanReact/redux/API';
31
31
  import { usePreupgradeTableState } from './PreupgradeReportsTableHelpers';
32
- import { entryFixable } from '../PreupgradeReports/PreupgradeReportsHelpers';
33
32
  import ReportDetails, { renderSeverityLabel } from './ReportDetails';
34
33
  import './PreupgradeReportsTable.scss';
35
34
 
35
+ const entryWithFixKind = kind => entry =>
36
+ entry.detail &&
37
+ entry.detail.remediations &&
38
+ entry.detail.remediations.some(remediation => remediation.type === kind);
39
+
40
+ const entryFixable = entryWithFixKind('command');
41
+
36
42
  const isRowFixable = entryFixable;
37
43
 
38
44
  const submitJobInvocation = (
data/webpack/index.js CHANGED
@@ -1,13 +0,0 @@
1
- import componentRegistry from 'foremanReact/components/componentRegistry';
2
-
3
- import injectReducer from 'foremanReact/redux/reducers/registerReducer';
4
-
5
- import PreupgradeReports from './components/PreupgradeReports';
6
- import reducer from './reducer';
7
-
8
- componentRegistry.register({
9
- name: 'PreupgradeReports',
10
- type: PreupgradeReports,
11
- });
12
-
13
- injectReducer('foremanLeapp', reducer);
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.2.1
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-10-12 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
@@ -58,7 +58,6 @@ files:
58
58
  - app/controllers/api/v2/preupgrade_reports_controller.rb
59
59
  - app/controllers/concerns/api/v2/api_authorizer.rb
60
60
  - app/controllers/concerns/foreman_leapp/preupgrade_report_entry_bulk_remediate.rb
61
- - app/controllers/preupgrade_reports_controller.rb
62
61
  - app/helpers/foreman_leapp/hosts_helper.rb
63
62
  - app/helpers/foreman_leapp/template_helper.rb
64
63
  - app/lib/actions/foreman_leapp/preupgrade_job.rb
@@ -78,10 +77,6 @@ files:
78
77
  - app/views/foreman_leapp/job_templates/leapp_preupgrade.erb
79
78
  - app/views/foreman_leapp/job_templates/leapp_remediation.erb
80
79
  - app/views/foreman_leapp/job_templates/leapp_upgrade.erb
81
- - app/views/job_invocations/_leapp_preupgrade_report.html.erb
82
- - app/views/preupgrade_report_entries/base.json.rabl
83
- - app/views/preupgrade_reports/index.json.rabl
84
- - app/views/preupgrade_reports/show.json.rabl
85
80
  - config/routes.rb
86
81
  - db/migrate/20200320104040_preupgrade_report_entries.rb
87
82
  - db/migrate/20200326142259_add_job_id_to_report.rb
@@ -114,7 +109,6 @@ files:
114
109
  - test/functional/api/v2/job_invocations_controller_test.rb
115
110
  - test/functional/api/v2/preupgrade_report_entries_controller_test.rb
116
111
  - test/functional/api/v2/preupgrade_reports_controller_test.rb
117
- - test/functional/preupgrade_reports_controller_test.rb
118
112
  - test/helpers/template_helper_test.rb
119
113
  - test/models/preupgrade_report_entry_test.rb
120
114
  - test/models/preupgrade_report_test.rb
@@ -122,70 +116,13 @@ files:
122
116
  - test/unit/actions/preupgrade_job_test.rb
123
117
  - test/unit/helpers/job_helper_test.rb
124
118
  - webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js
125
- - webpack/components/PreupgradeReports/PreupgradeReports.js
126
- - webpack/components/PreupgradeReports/PreupgradeReportsActions.js
127
- - webpack/components/PreupgradeReports/PreupgradeReportsHelpers.js
128
- - webpack/components/PreupgradeReports/PreupgradeReportsReducer.js
129
- - webpack/components/PreupgradeReports/PreupgradeReportsSelectors.js
130
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReports.fixtures.js
131
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReports.test.js
132
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsHelpers.test.js
133
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsReducer.test.js
134
- - webpack/components/PreupgradeReports/__tests__/PreupgradeReportsSelectors.test.js
135
- - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsHelpers.test.js.snap
136
- - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsReducer.test.js.snap
137
- - webpack/components/PreupgradeReports/__tests__/__snapshots__/PreupgradeReportsSelectors.test.js.snap
138
- - webpack/components/PreupgradeReports/components/EntriesFilter.js
139
- - webpack/components/PreupgradeReports/components/EntriesFilter.scss
140
- - webpack/components/PreupgradeReports/components/EntriesFilter.test.js
141
- - webpack/components/PreupgradeReports/components/FixSelectedButton.js
142
- - webpack/components/PreupgradeReports/components/FixSelectedButton.test.js
143
- - webpack/components/PreupgradeReports/components/NoReports.js
144
- - webpack/components/PreupgradeReports/components/NoReports.test.js
145
- - webpack/components/PreupgradeReports/components/UpgradeAllButton.js
146
- - webpack/components/PreupgradeReports/components/UpgradeAllButton.test.js
147
- - webpack/components/PreupgradeReports/components/__snapshots__/EntriesFilter.test.js.snap
148
- - webpack/components/PreupgradeReports/components/__snapshots__/FixSelectedButton.test.js.snap
149
- - webpack/components/PreupgradeReports/components/__snapshots__/UpgradeAllButton.test.js.snap
150
- - webpack/components/PreupgradeReports/index.js
151
- - webpack/components/PreupgradeReportsList/PreupgradeReportList.scss
152
- - webpack/components/PreupgradeReportsList/__tests__/PreupgradeReportsList.test.js
153
- - webpack/components/PreupgradeReportsList/components/EmptyInfoItem.js
154
- - webpack/components/PreupgradeReportsList/components/InfoItem.js
155
- - webpack/components/PreupgradeReportsList/components/InhibitorInfoItem.js
156
- - webpack/components/PreupgradeReportsList/components/PreupgradeReportEntry.js
157
- - webpack/components/PreupgradeReportsList/components/PreupgradeReportsListHeader.js
158
- - webpack/components/PreupgradeReportsList/components/SortableHeaderItem.js
159
- - webpack/components/PreupgradeReportsList/components/__tests__/EmptyInfoItem.test.js
160
- - webpack/components/PreupgradeReportsList/components/__tests__/InhibitorInfoItem.test.js
161
- - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.fixtures.js
162
- - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportEntry.test.js
163
- - webpack/components/PreupgradeReportsList/components/__tests__/PreupgradeReportsListHeader.test.js
164
- - webpack/components/PreupgradeReportsList/components/__tests__/SortableHeaderItem.test.js
165
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/EmptyInfoItem.test.js.snap
166
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/InhibitorInfoItem.test.js.snap
167
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportEntry.test.js.snap
168
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/PreupgradeReportsListHeader.test.js.snap
169
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/SortableHeaderItem.test.js.snap
170
- - webpack/components/PreupgradeReportsList/components/__tests__/__snapshots__/helpers.test.js.snap
171
- - webpack/components/PreupgradeReportsList/components/__tests__/helpers.test.js
172
- - webpack/components/PreupgradeReportsList/components/foreman_leapp.scss
173
- - webpack/components/PreupgradeReportsList/components/helpers.js
174
- - webpack/components/PreupgradeReportsList/components/images/i_severity-critical.svg
175
- - webpack/components/PreupgradeReportsList/components/images/i_severity-high.svg
176
- - webpack/components/PreupgradeReportsList/components/images/i_severity-low.svg
177
- - webpack/components/PreupgradeReportsList/components/images/i_severity-med.svg
178
- - webpack/components/PreupgradeReportsList/index.js
179
119
  - webpack/components/PreupgradeReportsTable/PreupgradeReportsTable.scss
180
120
  - webpack/components/PreupgradeReportsTable/PreupgradeReportsTableHelpers.js
181
121
  - webpack/components/PreupgradeReportsTable/ReportDetails.js
182
122
  - webpack/components/PreupgradeReportsTable/__tests__/PreupgradeReportsTable.test.js
183
123
  - webpack/components/PreupgradeReportsTable/index.js
184
- - webpack/consts.js
185
- - webpack/csrf.js
186
124
  - webpack/global_index.js
187
125
  - webpack/index.js
188
- - webpack/reducer.js
189
126
  - webpack/testSetup.js
190
127
  - webpack/test_setup.js
191
128
  homepage: https://github.com/theforeman/foreman_leapp
@@ -214,7 +151,6 @@ test_files:
214
151
  - test/functional/api/v2/job_invocations_controller_test.rb
215
152
  - test/functional/api/v2/preupgrade_report_entries_controller_test.rb
216
153
  - test/functional/api/v2/preupgrade_reports_controller_test.rb
217
- - test/functional/preupgrade_reports_controller_test.rb
218
154
  - test/helpers/template_helper_test.rb
219
155
  - test/models/preupgrade_report_entry_test.rb
220
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
- };