katello 4.4.0.rc1 → 4.4.0.rc2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +10 -1
  3. data/app/controllers/katello/api/v2/repositories_controller.rb +3 -0
  4. data/app/lib/actions/katello/repository/errata_mail.rb +4 -5
  5. data/app/lib/actions/katello/repository/sync.rb +2 -2
  6. data/app/lib/actions/pulp3/abstract.rb +1 -1
  7. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +14 -4
  8. data/app/lib/actions/pulp3/content_view_version/create_import_history.rb +1 -2
  9. data/app/lib/actions/pulp3/repository/reclaim_space.rb +3 -10
  10. data/app/lib/katello/util/pulpcore_content_filters.rb +2 -1
  11. data/app/models/katello/candlepin/repository_mapper.rb +1 -0
  12. data/app/models/katello/concerns/audit_comment_extensions.rb +17 -0
  13. data/app/models/katello/concerns/host_managed_extensions.rb +11 -1
  14. data/app/models/katello/concerns/smart_proxy_extensions.rb +1 -0
  15. data/app/models/katello/content_view_version_export_history.rb +2 -1
  16. data/app/models/katello/content_view_version_import_history.rb +4 -4
  17. data/app/models/katello/host_available_module_stream.rb +10 -0
  18. data/app/models/katello/installed_package.rb +1 -0
  19. data/app/models/katello/root_repository.rb +14 -2
  20. data/app/models/setting/content.rb +9 -2
  21. data/app/services/katello/pulp3/api/yum.rb +4 -0
  22. data/app/services/katello/pulp3/repository/yum.rb +11 -4
  23. data/app/services/katello/pulp3/repository.rb +4 -2
  24. data/app/views/foreman/job_templates/remove_packages_by_search_query.erb +19 -0
  25. data/app/views/foreman/job_templates/update_packages_by_search_query.erb +19 -0
  26. data/app/views/katello/api/v2/content_views/base.json.rabl +8 -4
  27. data/app/views/katello/api/v2/host_module_streams/base.json.rabl +1 -0
  28. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +2 -0
  29. data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +11 -2
  30. data/db/migrate/20220209205137_expand_sync_timeout_settings.rb +23 -0
  31. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +10 -3
  32. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +4 -0
  33. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +17 -12
  34. data/lib/katello/plugin.rb +2 -0
  35. data/lib/katello/repository_types/ostree.rb +0 -6
  36. data/lib/katello/version.rb +1 -1
  37. data/webpack/components/Errata/index.js +57 -57
  38. data/webpack/components/ErratumTypeLabel.js +16 -16
  39. data/webpack/components/MultiSelect/index.js +2 -2
  40. data/webpack/components/Select/Select.js +1 -1
  41. data/webpack/components/SelectOrg/SelectOrgReducer.js +15 -15
  42. data/webpack/components/SelectOrg/SetOrganization.js +1 -1
  43. data/webpack/components/Table/TableHooks.js +1 -0
  44. data/webpack/components/Table/TableWrapper.js +4 -1
  45. data/webpack/components/TypeAhead/helpers/commonPropTypes.js +1 -1
  46. data/webpack/components/TypeAhead/helpers/helpers.js +14 -14
  47. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +1 -1
  48. data/webpack/components/WithOrganization/withOrganization.js +3 -3
  49. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +32 -1
  50. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +3 -2
  51. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +5 -3
  52. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +1 -0
  53. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErratumExpansionContents.js +3 -3
  54. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsActions.js +16 -0
  55. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsConstants.js +3 -0
  56. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsSelectors.js +19 -0
  57. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +241 -0
  58. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/moduleStreamsTab.test.js +108 -0
  59. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/modules.fixtures.json +34 -0
  60. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.js +5 -5
  61. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +255 -79
  62. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +76 -0
  63. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +4 -0
  64. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +259 -9
  65. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +22 -26
  66. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +13 -0
  67. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +4 -0
  68. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
  69. data/webpack/components/extensions/RegistrationCommands/fields/LifecycleEnvironment.js +1 -1
  70. data/webpack/components/extensions/about/SystemStatuses.js +1 -1
  71. data/webpack/components/extensions/about/SystemStatusesReducer.js +10 -10
  72. data/webpack/components/pf3Table/components/Table.js +2 -2
  73. data/webpack/components/pf3Table/components/TableBody.js +2 -2
  74. data/webpack/redux/OrganizationProducts/OrganizationProductsReducer.js +15 -15
  75. data/webpack/redux/reducers/RedHatRepositories/enabled.js +43 -43
  76. data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.js +43 -43
  77. data/webpack/redux/reducers/RedHatRepositories/sets.js +31 -31
  78. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +26 -26
  79. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +19 -19
  80. data/webpack/scenes/Content/Table/ContentTable.js +1 -1
  81. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +2 -1
  82. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +2 -2
  83. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +1 -1
  84. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +1 -1
  85. data/webpack/scenes/ContentViews/Details/ContentViewDetailReducer.js +8 -8
  86. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +1 -1
  87. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +8 -8
  88. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +1 -1
  89. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +1 -1
  90. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +1 -1
  91. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +46 -46
  92. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +14 -14
  93. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +14 -14
  94. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +1 -1
  95. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +1 -1
  96. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +17 -17
  97. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +1 -1
  98. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +19 -18
  99. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +18 -18
  100. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +3 -3
  101. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +3 -3
  102. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -1
  103. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -1
  104. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +1 -1
  105. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +46 -34
  106. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +65 -48
  107. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +1 -1
  108. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +2 -2
  109. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +4 -4
  110. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +18 -18
  111. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +10 -10
  112. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +2 -2
  113. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +7 -7
  114. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +7 -7
  115. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +3 -3
  116. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsReducer.js +18 -18
  117. data/webpack/scenes/ModuleStreams/ModuleStreamsReducer.js +26 -26
  118. data/webpack/scenes/Organizations/OrganizationReducer.js +8 -8
  119. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepositoryContent.js +4 -4
  120. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositories.js +1 -1
  121. data/webpack/scenes/Settings/SettingsReducer.js +14 -14
  122. data/webpack/scenes/Settings/Tables/TableReducer.js +23 -23
  123. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailInfo.js +2 -2
  124. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProductContent.js +15 -15
  125. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProducts.js +1 -1
  126. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailReducer.js +34 -34
  127. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +13 -13
  128. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/AirGappedTypeForm.js +3 -3
  129. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +4 -4
  130. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/UpstreamServerTypeForm.js +3 -3
  131. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +5 -5
  132. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +16 -16
  133. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +149 -149
  134. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsReducer.js +41 -41
  135. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Dialogs/DeleteDialog.js +6 -6
  136. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +12 -12
  137. data/webpack/services/index.js +36 -36
  138. data/webpack/utils/helpers.js +5 -5
  139. metadata +16 -6
@@ -60,49 +60,49 @@ const changeRepoState = (state, repoToChange, stateDiff) => (
60
60
 
61
61
  export default (state = initialState, action) => {
62
62
  switch (action.type) {
63
- case DISABLE_REPOSITORY_REQUEST:
64
- return changeRepoState(state, action.repository, { loading: true });
65
- case DISABLE_REPOSITORY_FAILURE:
66
- return changeRepoState(state, action.payload.repository, { loading: false });
67
- case ENABLED_REPOSITORIES_REQUEST:
68
- if (!action.silent) {
69
- return state.set(['loading'], true);
70
- }
71
- return state;
72
- case ENABLED_REPOSITORIES_SUCCESS: {
73
- const {
74
- page,
75
- per_page, // eslint-disable-line camelcase
76
- subtotal,
77
- results,
78
- } = action.response;
79
- return Immutable({
80
- repositories: mapRepositories(results),
81
- pagination: {
82
- page: Number(page) || 1,
83
- // server can return per_page: null when there's error in the search query,
84
- // don't store it in such case
85
- // eslint-disable-next-line camelcase
86
- perPage: (per_page || state.pagination.perPage)
87
- // eslint-disable-next-line camelcase
88
- && Number(per_page || state.pagination.perPage),
89
- },
90
- itemCount: Number(subtotal),
91
- loading: false,
92
- searchIsActive: !isEmpty(action.search),
93
- search: action.search,
94
- });
95
- }
96
- case ENABLED_REPOSITORIES_FAILURE: {
97
- const { error, missingPermissions } = action;
98
- return Immutable({
99
- repositories: [],
100
- loading: false,
101
- error,
102
- missingPermissions,
103
- });
63
+ case DISABLE_REPOSITORY_REQUEST:
64
+ return changeRepoState(state, action.repository, { loading: true });
65
+ case DISABLE_REPOSITORY_FAILURE:
66
+ return changeRepoState(state, action.payload.repository, { loading: false });
67
+ case ENABLED_REPOSITORIES_REQUEST:
68
+ if (!action.silent) {
69
+ return state.set(['loading'], true);
104
70
  }
105
- default:
106
- return state;
71
+ return state;
72
+ case ENABLED_REPOSITORIES_SUCCESS: {
73
+ const {
74
+ page,
75
+ per_page, // eslint-disable-line camelcase
76
+ subtotal,
77
+ results,
78
+ } = action.response;
79
+ return Immutable({
80
+ repositories: mapRepositories(results),
81
+ pagination: {
82
+ page: Number(page) || 1,
83
+ // server can return per_page: null when there's error in the search query,
84
+ // don't store it in such case
85
+ // eslint-disable-next-line camelcase
86
+ perPage: (per_page || state.pagination.perPage)
87
+ // eslint-disable-next-line camelcase
88
+ && Number(per_page || state.pagination.perPage),
89
+ },
90
+ itemCount: Number(subtotal),
91
+ loading: false,
92
+ searchIsActive: !isEmpty(action.search),
93
+ search: action.search,
94
+ });
95
+ }
96
+ case ENABLED_REPOSITORIES_FAILURE: {
97
+ const { error, missingPermissions } = action;
98
+ return Immutable({
99
+ repositories: [],
100
+ loading: false,
101
+ error,
102
+ missingPermissions,
103
+ });
104
+ }
105
+ default:
106
+ return state;
107
107
  }
108
108
  };
@@ -56,48 +56,48 @@ const initialState = Immutable({});
56
56
 
57
57
  export default (state = initialState, action) => {
58
58
  switch (action.type) {
59
- case ENABLE_REPOSITORY_REQUEST:
60
- return changeRepoState(state, action.repository, { loading: true });
61
-
62
- case ENABLE_REPOSITORY_FAILURE:
63
- return changeRepoState(state, action.payload.repository, { loading: false, error: true });
64
-
65
- case REPOSITORY_SET_REPOSITORIES_REQUEST:
66
- return state.set(action.contentId, {
67
- loading: true,
68
- repositories: [],
69
- error: null,
70
- });
71
-
72
- case REPOSITORY_SET_REPOSITORIES_SUCCESS:
73
- return state.set(action.contentId, {
74
- loading: false,
75
- repositories: normalizeContentSetRepositories(
76
- action.results,
77
- action.contentId,
78
- action.productId,
79
- ),
80
- error: null,
81
- });
82
-
83
- case REPOSITORY_SET_REPOSITORIES_FAILURE:
84
- return state.set(action.contentId, {
85
- loading: false,
86
- repositories: [],
87
- error: action.error,
88
- });
89
-
90
- case REPOSITORY_ENABLED:
91
- return changeRepoState(state, action.repository, {
92
- enabled: true,
93
- loading: false,
94
- error: false,
95
- });
96
-
97
- case REPOSITORY_DISABLED:
98
- return changeRepoState(state, action.repository, { enabled: false });
99
-
100
- default:
101
- return state;
59
+ case ENABLE_REPOSITORY_REQUEST:
60
+ return changeRepoState(state, action.repository, { loading: true });
61
+
62
+ case ENABLE_REPOSITORY_FAILURE:
63
+ return changeRepoState(state, action.payload.repository, { loading: false, error: true });
64
+
65
+ case REPOSITORY_SET_REPOSITORIES_REQUEST:
66
+ return state.set(action.contentId, {
67
+ loading: true,
68
+ repositories: [],
69
+ error: null,
70
+ });
71
+
72
+ case REPOSITORY_SET_REPOSITORIES_SUCCESS:
73
+ return state.set(action.contentId, {
74
+ loading: false,
75
+ repositories: normalizeContentSetRepositories(
76
+ action.results,
77
+ action.contentId,
78
+ action.productId,
79
+ ),
80
+ error: null,
81
+ });
82
+
83
+ case REPOSITORY_SET_REPOSITORIES_FAILURE:
84
+ return state.set(action.contentId, {
85
+ loading: false,
86
+ repositories: [],
87
+ error: action.error,
88
+ });
89
+
90
+ case REPOSITORY_ENABLED:
91
+ return changeRepoState(state, action.repository, {
92
+ enabled: true,
93
+ loading: false,
94
+ error: false,
95
+ });
96
+
97
+ case REPOSITORY_DISABLED:
98
+ return changeRepoState(state, action.repository, { enabled: false });
99
+
100
+ default:
101
+ return state;
102
102
  }
103
103
  };
@@ -14,36 +14,36 @@ export default (state = initialState, action) => {
14
14
  const { payload } = action;
15
15
 
16
16
  switch (action.type) {
17
- case REPOSITORY_SETS_REQUEST:
18
- return state.set('loading', true);
19
-
20
- case REPOSITORY_SETS_UPDATE_RECOMMENDED:
21
- return state
22
- .set('recommended', payload);
23
-
24
- case REPOSITORY_SETS_SUCCESS:
25
- return state
26
- .set('results', payload.response.results)
27
- .set('pagination', {
28
- page: Number(payload.response.page),
29
- // server can return per_page: null when there's error in the search query,
30
- // don't store it in such case
31
- // eslint-disable-next-line camelcase
32
- perPage: Number(payload.response.per_page || state.pagination.perPage),
33
- })
34
- .set('itemCount', Number(payload.response.subtotal))
35
- .set('loading', false)
36
- .set('searchIsActive', !isEmpty(payload.search))
37
- .set('search', payload.search);
38
-
39
- case REPOSITORY_SETS_FAILURE:
40
- return Immutable({
41
- error: payload,
42
- loading: false,
43
- missingPermissions: get(payload, ['response', 'data', 'error', 'missing_permissions']),
44
- });
45
-
46
- default:
47
- return state;
17
+ case REPOSITORY_SETS_REQUEST:
18
+ return state.set('loading', true);
19
+
20
+ case REPOSITORY_SETS_UPDATE_RECOMMENDED:
21
+ return state
22
+ .set('recommended', payload);
23
+
24
+ case REPOSITORY_SETS_SUCCESS:
25
+ return state
26
+ .set('results', payload.response.results)
27
+ .set('pagination', {
28
+ page: Number(payload.response.page),
29
+ // server can return per_page: null when there's error in the search query,
30
+ // don't store it in such case
31
+ // eslint-disable-next-line camelcase
32
+ perPage: Number(payload.response.per_page || state.pagination.perPage),
33
+ })
34
+ .set('itemCount', Number(payload.response.subtotal))
35
+ .set('loading', false)
36
+ .set('searchIsActive', !isEmpty(payload.search))
37
+ .set('search', payload.search);
38
+
39
+ case REPOSITORY_SETS_FAILURE:
40
+ return Immutable({
41
+ error: payload,
42
+ loading: false,
43
+ missingPermissions: get(payload, ['response', 'data', 'error', 'missing_permissions']),
44
+ });
45
+
46
+ default:
47
+ return state;
48
48
  }
49
49
  };
@@ -9,31 +9,31 @@ const initialState = initialApiState;
9
9
 
10
10
  export default (state = initialState, action) => {
11
11
  switch (action.type) {
12
- case ANSIBLE_COLLECTIONS_REQUEST: {
13
- return state.set('loading', true);
14
- }
15
- case ANSIBLE_COLLECTIONS_SUCCESS: {
16
- const {
17
- results, page, per_page, subtotal, // eslint-disable-line camelcase
18
- } = action.response;
19
- return state.merge({
20
- results,
21
- loading: false,
22
- pagination: {
23
- page: Number(page),
24
- perPage: Number(per_page || state.pagination.perPage), // eslint-disable-line camelcase
25
- },
26
- itemCount: Number(subtotal),
27
- });
28
- }
29
- case ANSIBLE_COLLECTIONS_ERROR: {
30
- return state.merge({
31
- error: action.error,
32
- loading: false,
33
- });
34
- }
35
- default: {
36
- return state;
37
- }
12
+ case ANSIBLE_COLLECTIONS_REQUEST: {
13
+ return state.set('loading', true);
14
+ }
15
+ case ANSIBLE_COLLECTIONS_SUCCESS: {
16
+ const {
17
+ results, page, per_page, subtotal, // eslint-disable-line camelcase
18
+ } = action.response;
19
+ return state.merge({
20
+ results,
21
+ loading: false,
22
+ pagination: {
23
+ page: Number(page),
24
+ perPage: Number(per_page || state.pagination.perPage), // eslint-disable-line camelcase
25
+ },
26
+ itemCount: Number(subtotal),
27
+ });
28
+ }
29
+ case ANSIBLE_COLLECTIONS_ERROR: {
30
+ return state.merge({
31
+ error: action.error,
32
+ loading: false,
33
+ });
34
+ }
35
+ default: {
36
+ return state;
37
+ }
38
38
  }
39
39
  };
@@ -7,24 +7,24 @@ import {
7
7
 
8
8
  export default (state = initialApiState, action) => {
9
9
  switch (action.type) {
10
- case ANSIBLE_COLLECTION_DETAILS_REQUEST: {
11
- return state.set('loading', true);
12
- }
13
- case ANSIBLE_COLLECTION_DETAILS_SUCCESS: {
14
- const ansibleCollectionDetails = action.response;
15
- return state.merge({
16
- ...ansibleCollectionDetails,
17
- loading: false,
18
- });
19
- }
20
- case ANSIBLE_COLLECTION_DETAILS_ERROR: {
21
- return state.merge({
22
- error: action.payload.message,
23
- loading: false,
24
- });
25
- }
26
- default: {
27
- return state;
28
- }
10
+ case ANSIBLE_COLLECTION_DETAILS_REQUEST: {
11
+ return state.set('loading', true);
12
+ }
13
+ case ANSIBLE_COLLECTION_DETAILS_SUCCESS: {
14
+ const ansibleCollectionDetails = action.response;
15
+ return state.merge({
16
+ ...ansibleCollectionDetails,
17
+ loading: false,
18
+ });
19
+ }
20
+ case ANSIBLE_COLLECTION_DETAILS_ERROR: {
21
+ return state.merge({
22
+ error: action.payload.message,
23
+ loading: false,
24
+ });
25
+ }
26
+ default: {
27
+ return state;
28
+ }
29
29
  }
30
30
  };
@@ -78,7 +78,7 @@ const ContentTable = ({
78
78
  ContentTable.propTypes = {
79
79
  selectedContentType: PropTypes.string.isRequired,
80
80
  setSelectedContentType: PropTypes.func.isRequired,
81
- contentTypes: PropTypes.objectOf(PropTypes.array).isRequired,
81
+ contentTypes: PropTypes.shape({}).isRequired,
82
82
  showContentTypeSelector: PropTypes.bool,
83
83
  };
84
84
 
@@ -61,7 +61,8 @@ const CreateContentViewForm = ({ setModalOpen }) => {
61
61
 
62
62
  if (redirect) {
63
63
  const { id } = response;
64
- return (<Redirect to={`/content_views/${id}`} />);
64
+ if (composite) { return (<Redirect to={`/content_views/${id}#/contentviews`} />); }
65
+ return (<Redirect to={`/content_views/${id}#/repositories`} />);
65
66
  }
66
67
 
67
68
  const submitDisabled = !name?.length || !label?.length || saving;
@@ -107,8 +107,8 @@ const CVDeletionReassignHostsForm = () => {
107
107
  >
108
108
  <AffectedHosts
109
109
  {...{
110
- cvId,
111
- }}
110
+ cvId,
111
+ }}
112
112
  versionEnvironments={cvEnvironments}
113
113
  deleteCV
114
114
  />
@@ -268,7 +268,7 @@ const ContentViewComponents = ({ cvId, details }) => {
268
268
  <SplitItem>
269
269
  <ActionList>
270
270
  <ActionListItem>
271
- <Button onClick={addBulk} isDisabled={!(bulkAddEnabled())} variant="secondary" aria-label="bulk_add_components">
271
+ <Button onClick={addBulk} isDisabled={!(bulkAddEnabled())} variant="primary" aria-label="bulk_add_components">
272
272
  {__('Add content views')}
273
273
  </Button>
274
274
  </ActionListItem>
@@ -132,7 +132,7 @@ export const getDockerTags = params => get({
132
132
  key: DOCKER_TAGS_CONTENT,
133
133
  url: api.getApiUrl('/docker_tags'),
134
134
  params,
135
- errorToast: error => __(`Something went wrong while getting docker tags! ${getResponseErrorMsgs(error.response)}`),
135
+ errorToast: error => __(`Something went wrong while getting container tags! ${getResponseErrorMsgs(error.response)}`),
136
136
  });
137
137
 
138
138
  export const getErrata = params => get({
@@ -11,13 +11,13 @@ const initialState = Immutable({
11
11
 
12
12
  export default (state = initialState, action) => {
13
13
  switch (action.type) {
14
- case UPDATE_CONTENT_VIEW:
15
- return state.set('updating', true);
16
- case UPDATE_CONTENT_VIEW_SUCCESS:
17
- return state.merge({ updating: false });
18
- case UPDATE_CONTENT_VIEW_FAILURE:
19
- return state.set('updating', false);
20
- default:
21
- return state;
14
+ case UPDATE_CONTENT_VIEW:
15
+ return state.set('updating', true);
16
+ case UPDATE_CONTENT_VIEW_SUCCESS:
17
+ return state.merge({ updating: false });
18
+ case UPDATE_CONTENT_VIEW_FAILURE:
19
+ return state.set('updating', false);
20
+ default:
21
+ return state;
22
22
  }
23
23
  };
@@ -222,7 +222,7 @@ const AffectedRepositoryTable = ({
222
222
  <SplitItem>
223
223
  <ActionList>
224
224
  <ActionListItem>
225
- <Button onClick={addBulk} isDisabled={!hasNotAddedSelected} variant="secondary" aria-label="add_repositories">
225
+ <Button onClick={addBulk} isDisabled={!hasNotAddedSelected} variant="primary" aria-label="add_repositories">
226
226
  {__('Add repositories')}
227
227
  </Button>
228
228
  </ActionListItem>
@@ -22,14 +22,14 @@ export const ArtifactsWithNoErrataRenderer = ({ filterDetails }) => {
22
22
  };
23
23
  const getLabel = () => {
24
24
  switch (true) {
25
- case type === 'modulemd' && inclusion:
26
- return __('Include all Module Streams with no errata.');
27
- case type === 'modulemd' && !inclusion:
28
- return __('Exclude all Module Streams with no errata.');
29
- case !inclusion:
30
- return __('Exclude all RPMs with no errata.');
31
- default:
32
- return __('Include all RPMs with no errata.');
25
+ case type === 'modulemd' && inclusion:
26
+ return __('Include all Module Streams with no errata.');
27
+ case type === 'modulemd' && !inclusion:
28
+ return __('Exclude all Module Streams with no errata.');
29
+ case !inclusion:
30
+ return __('Exclude all RPMs with no errata.');
31
+ default:
32
+ return __('Include all RPMs with no errata.');
33
33
  }
34
34
  };
35
35
 
@@ -141,7 +141,7 @@ const CVContainerImageFilterContent = ({
141
141
  <SplitItem>
142
142
  <Button
143
143
  onClick={() => setModalOpen(true)}
144
- variant="secondary"
144
+ variant="primary"
145
145
  aria-label="add_filter_rule"
146
146
  >
147
147
  {__('Add filter rule')}
@@ -252,7 +252,7 @@ const CVErrataDateFilterContent = ({
252
252
  <ActionGroup>
253
253
  <Button
254
254
  aria-label="save_filter_rule"
255
- variant="secondary"
255
+ variant="primary"
256
256
  isDisabled={saveDisabled}
257
257
  type="submit"
258
258
  >
@@ -312,7 +312,7 @@ const CVErrataIDFilterContent = ({
312
312
  </SplitItem>
313
313
  {hasPermission(permissions, 'edit_content_views') &&
314
314
  <SplitItem>
315
- <Button isDisabled={!hasNotAddedSelected} onClick={bulkAdd} variant="secondary" aria-label="add_filter_rule">
315
+ <Button isDisabled={!hasNotAddedSelected} onClick={bulkAdd} variant="primary" aria-label="add_filter_rule">
316
316
  {__('Add errata')}
317
317
  </Button>
318
318
  </SplitItem>
@@ -12,24 +12,42 @@ const CVFilterDetailType = ({
12
12
  cvId, filterId, inclusion, type, showAffectedRepos, setShowAffectedRepos, rules, details,
13
13
  }) => {
14
14
  switch (type) {
15
- case 'docker':
16
- return (<CVContainerImageFilterContent
17
- cvId={cvId}
18
- filterId={filterId}
19
- showAffectedRepos={showAffectedRepos}
20
- setShowAffectedRepos={setShowAffectedRepos}
21
- details={details}
22
- />);
23
- case 'package_group':
24
- return (<CVPackageGroupFilterContent
25
- cvId={cvId}
26
- filterId={filterId}
27
- showAffectedRepos={showAffectedRepos}
28
- setShowAffectedRepos={setShowAffectedRepos}
29
- details={details}
30
- />);
31
- case 'rpm':
32
- return (<CVRpmFilterContent
15
+ case 'docker':
16
+ return (<CVContainerImageFilterContent
17
+ cvId={cvId}
18
+ filterId={filterId}
19
+ showAffectedRepos={showAffectedRepos}
20
+ setShowAffectedRepos={setShowAffectedRepos}
21
+ details={details}
22
+ />);
23
+ case 'package_group':
24
+ return (<CVPackageGroupFilterContent
25
+ cvId={cvId}
26
+ filterId={filterId}
27
+ showAffectedRepos={showAffectedRepos}
28
+ setShowAffectedRepos={setShowAffectedRepos}
29
+ details={details}
30
+ />);
31
+ case 'rpm':
32
+ return (<CVRpmFilterContent
33
+ cvId={cvId}
34
+ filterId={filterId}
35
+ inclusion={inclusion}
36
+ showAffectedRepos={showAffectedRepos}
37
+ setShowAffectedRepos={setShowAffectedRepos}
38
+ details={details}
39
+ />);
40
+ case 'modulemd':
41
+ return (<CVModuleStreamFilterContent
42
+ cvId={cvId}
43
+ filterId={filterId}
44
+ showAffectedRepos={showAffectedRepos}
45
+ setShowAffectedRepos={setShowAffectedRepos}
46
+ details={details}
47
+ />);
48
+ case 'erratum':
49
+ if (head(rules)?.types) {
50
+ return (<CVErrataDateFilterContent
33
51
  cvId={cvId}
34
52
  filterId={filterId}
35
53
  inclusion={inclusion}
@@ -37,34 +55,16 @@ const CVFilterDetailType = ({
37
55
  setShowAffectedRepos={setShowAffectedRepos}
38
56
  details={details}
39
57
  />);
40
- case 'modulemd':
41
- return (<CVModuleStreamFilterContent
42
- cvId={cvId}
43
- filterId={filterId}
44
- showAffectedRepos={showAffectedRepos}
45
- setShowAffectedRepos={setShowAffectedRepos}
46
- details={details}
47
- />);
48
- case 'erratum':
49
- if (head(rules)?.types) {
50
- return (<CVErrataDateFilterContent
51
- cvId={cvId}
52
- filterId={filterId}
53
- inclusion={inclusion}
54
- showAffectedRepos={showAffectedRepos}
55
- setShowAffectedRepos={setShowAffectedRepos}
56
- details={details}
57
- />);
58
- }
59
- return (<CVErrataIDFilterContent
60
- cvId={cvId}
61
- filterId={filterId}
62
- showAffectedRepos={showAffectedRepos}
63
- setShowAffectedRepos={setShowAffectedRepos}
64
- details={details}
65
- />);
66
- default:
67
- return null;
58
+ }
59
+ return (<CVErrataIDFilterContent
60
+ cvId={cvId}
61
+ filterId={filterId}
62
+ showAffectedRepos={showAffectedRepos}
63
+ setShowAffectedRepos={setShowAffectedRepos}
64
+ details={details}
65
+ />);
66
+ default:
67
+ return null;
68
68
  }
69
69
  };
70
70
 
@@ -78,19 +78,19 @@ const CVModuleStreamFilterContent = ({
78
78
  const fetchItems = useCallback((params) => {
79
79
  const adjustedParams = { ...params };
80
80
  switch (selectedIndex) {
81
- case 0:
82
- adjustedParams.show_all_for = 'content_view_filter';
83
- adjustedParams.available_for = undefined;
84
- break;
85
- case 1:
86
- adjustedParams.show_all_for = undefined;
87
- adjustedParams.available_for = undefined;
88
- break;
89
- case 2:
90
- adjustedParams.show_all_for = undefined;
91
- adjustedParams.available_for = 'content_view_filter';
92
- break;
93
- default:
81
+ case 0:
82
+ adjustedParams.show_all_for = 'content_view_filter';
83
+ adjustedParams.available_for = undefined;
84
+ break;
85
+ case 1:
86
+ adjustedParams.show_all_for = undefined;
87
+ adjustedParams.available_for = undefined;
88
+ break;
89
+ case 2:
90
+ adjustedParams.show_all_for = undefined;
91
+ adjustedParams.available_for = 'content_view_filter';
92
+ break;
93
+ default:
94
94
  }
95
95
 
96
96
  return getCVFilterModuleStreams(cvId, filterId, adjustedParams);
@@ -247,7 +247,7 @@ const CVModuleStreamFilterContent = ({
247
247
  <Button
248
248
  isDisabled={!hasNotAddedSelected}
249
249
  onClick={bulkAdd}
250
- variant="secondary"
250
+ variant="primary"
251
251
  aria-label="add_filter_rule"
252
252
  >
253
253
  {__('Add filter rule')}