katello 5.0.0.rc2 → 5.0.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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/katello/locale/bn/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/bn_IN/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/ca/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/cs/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/de/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/de_AT/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/de_DE/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/el/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/en/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/en_GB/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/en_US/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/es/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/et_EE/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/fr/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/gl/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/gu/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/he_IL/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/hi/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/id/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/it/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/ja/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/ka/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/kn/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/ko/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/ml_IN/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/mr/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/nl_NL/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/or/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/pa/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/pl/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/pl_PL/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/pt/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/pt_BR/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/ro/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/ro_RO/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/ru/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/sl/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/sv_SE/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/ta/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/ta_IN/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/te/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/tr/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/vi/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/vi_VN/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/zh/katello.js +41 -2
- data/app/assets/javascripts/katello/locale/zh_CN/katello.js +42 -3
- data/app/assets/javascripts/katello/locale/zh_TW/katello.js +42 -3
- data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +10 -10
- data/app/controllers/katello/concerns/registration_commands_controller_extensions.rb +1 -1
- data/app/models/katello/concerns/smart_proxy_extensions.rb +1 -1
- data/app/views/katello/api/v2/activation_keys/base.json.rabl +18 -18
- data/app/views/katello/api/v2/content_facet/base.json.rabl +19 -19
- data/app/views/katello/api/v2/content_view_environments/show.json.rabl +10 -10
- data/app/views/katello/api/v2/content_view_versions/base.json.rabl +2 -2
- data/db/migrate/20220929204746_add_content_view_environment_content_facet.rb +5 -5
- data/db/migrate/20240730163043_add_content_view_environment_activation_key.rb +5 -5
- data/db/migrate/20260402151630_add_content_view_environment_to_hostgroup_content_facet.rb +4 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-info.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/new/views/activation-key-new.html +1 -1
- data/lib/katello/tasks/upgrades/4.20/clean_cve_with_no_cvv.rake +4 -4
- data/lib/katello/version.rb +1 -1
- data/lib/rubocop/cop/katello/cve_abbreviation.rb +82 -0
- data/locale/bn/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn/katello.po +41 -2
- data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn_IN/katello.po +41 -2
- data/locale/ca/LC_MESSAGES/katello.mo +0 -0
- data/locale/ca/katello.po +41 -2
- data/locale/cs/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs/katello.po +41 -2
- data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs_CZ/katello.po +42 -3
- data/locale/de/LC_MESSAGES/katello.mo +0 -0
- data/locale/de/katello.po +42 -3
- data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
- data/locale/de_AT/katello.po +41 -2
- data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
- data/locale/de_DE/katello.po +41 -2
- data/locale/el/LC_MESSAGES/katello.mo +0 -0
- data/locale/el/katello.po +41 -2
- data/locale/en/LC_MESSAGES/katello.mo +0 -0
- data/locale/en/katello.po +41 -2
- data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
- data/locale/en_GB/katello.po +41 -2
- data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
- data/locale/en_US/katello.po +41 -2
- data/locale/es/LC_MESSAGES/katello.mo +0 -0
- data/locale/es/katello.po +42 -3
- data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
- data/locale/et_EE/katello.po +41 -2
- data/locale/fr/LC_MESSAGES/katello.mo +0 -0
- data/locale/fr/katello.po +42 -3
- data/locale/gl/LC_MESSAGES/katello.mo +0 -0
- data/locale/gl/katello.po +41 -2
- data/locale/gu/LC_MESSAGES/katello.mo +0 -0
- data/locale/gu/katello.po +41 -2
- data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
- data/locale/he_IL/katello.po +41 -2
- data/locale/hi/LC_MESSAGES/katello.mo +0 -0
- data/locale/hi/katello.po +41 -2
- data/locale/id/LC_MESSAGES/katello.mo +0 -0
- data/locale/id/katello.po +41 -2
- data/locale/it/LC_MESSAGES/katello.mo +0 -0
- data/locale/it/katello.po +42 -3
- data/locale/ja/LC_MESSAGES/katello.mo +0 -0
- data/locale/ja/katello.po +42 -3
- data/locale/ka/LC_MESSAGES/katello.mo +0 -0
- data/locale/ka/katello.po +42 -3
- data/locale/katello.pot +315 -257
- data/locale/kn/LC_MESSAGES/katello.mo +0 -0
- data/locale/kn/katello.po +41 -2
- data/locale/ko/LC_MESSAGES/katello.mo +0 -0
- data/locale/ko/katello.po +42 -3
- data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/ml_IN/katello.po +41 -2
- data/locale/mr/LC_MESSAGES/katello.mo +0 -0
- data/locale/mr/katello.po +41 -2
- data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
- data/locale/nl_NL/katello.po +41 -2
- data/locale/or/LC_MESSAGES/katello.mo +0 -0
- data/locale/or/katello.po +41 -2
- data/locale/pa/LC_MESSAGES/katello.mo +0 -0
- data/locale/pa/katello.po +41 -2
- data/locale/pl/LC_MESSAGES/katello.mo +0 -0
- data/locale/pl/katello.po +41 -2
- data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
- data/locale/pl_PL/katello.po +41 -2
- data/locale/pt/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt/katello.po +41 -2
- data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt_BR/katello.po +42 -3
- data/locale/ro/LC_MESSAGES/katello.mo +0 -0
- data/locale/ro/katello.po +41 -2
- data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
- data/locale/ro_RO/katello.po +41 -2
- data/locale/ru/LC_MESSAGES/katello.mo +0 -0
- data/locale/ru/katello.po +42 -3
- data/locale/sl/LC_MESSAGES/katello.mo +0 -0
- data/locale/sl/katello.po +41 -2
- data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
- data/locale/sv_SE/katello.po +41 -2
- data/locale/ta/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta/katello.po +41 -2
- data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta_IN/katello.po +41 -2
- data/locale/te/LC_MESSAGES/katello.mo +0 -0
- data/locale/te/katello.po +41 -2
- data/locale/tr/LC_MESSAGES/katello.mo +0 -0
- data/locale/tr/katello.po +41 -2
- data/locale/vi/LC_MESSAGES/katello.mo +0 -0
- data/locale/vi/katello.po +41 -2
- data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
- data/locale/vi_VN/katello.po +41 -2
- data/locale/zh/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh/katello.po +41 -2
- data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_CN/katello.po +42 -3
- data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_TW/katello.po +42 -3
- data/package.json +2 -2
- data/webpack/ForemanColumnExtensions/index.js +1 -1
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/AssignHostCVModal.js +3 -3
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +5 -5
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/OrderableAssignments.js +5 -5
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/AssignHostCVModal.test.js +17 -17
- data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/BulkAssignCVEnvsModal.js +4 -8
- data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/__tests__/BulkAssignCVEnvsModal.test.js +1 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/BulkChangeHostCollectionsModal.js +5 -10
- data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/__tests__/BulkChangeHostCollectionsModal.test.js +6 -24
- data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_ReviewFooter.js +2 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkManageTracesModal/BulkManageTracesModal.js +4 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkManageTracesModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_ReviewFooter.js +2 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkRepositorySetsWizard/03_ReviewFooter.js +2 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkRepositorySetsWizard/BulkRepositorySetsWizard.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/BulkSystemPurposeModal/BulkSystemPurposeModal.js +5 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkSystemPurposeModal/index.js +2 -1
- data/webpack/components/extensions/Hosts/BulkActions/__tests__/bulkSystemPurposeModal.test.js +6 -1
- data/webpack/components/extensions/RegistrationCommands/__tests__/ActivationKeys.test.js +6 -6
- data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
- data/webpack/containers/Application/config.js +1 -1
- data/webpack/eslint-rules/no-cve-abbreviation.js +121 -0
- data/webpack/global_index.js +6 -6
- data/webpack/redux/reducers/index.js +0 -2
- data/webpack/scenes/ActivationKeys/Details/ActivationKeyDetails.js +2 -2
- data/webpack/scenes/ActivationKeys/Details/components/AssignAKCVModal.js +3 -3
- data/webpack/scenes/ActivationKeys/Details/components/CreateAKCVModal.js +1 -1
- data/webpack/scenes/ActivationKeys/Details/components/{CVEDetailsCard.js → CvEnvDetailsCard.js} +9 -9
- data/webpack/scenes/ActivationKeys/Details/components/{CVEDetailsCreateCard.js → CvEnvDetailsCreateCard.js} +10 -10
- data/webpack/scenes/ActivationKeys/Details/components/__tests__/{CVEDetailsCreateCard.test.js → CvEnvDetailsCreateCard.test.js} +8 -8
- data/webpack/scenes/ContainerImages/Booted/BootedContainerImagesPage.js +2 -2
- data/webpack/scenes/ContainerImages/ContainerImagesPage.js +59 -52
- data/webpack/scenes/ContainerImages/ContainerImagesPage.scss +27 -4
- data/webpack/scenes/ContainerImages/Synced/SyncedContainerImagesPage.js +1 -1
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +9 -9
- data/webpack/scenes/Hosts/ChangeContentSource/actions.js +2 -2
- data/webpack/scenes/Subscriptions/Manifest/CdnTabContent.js +44 -0
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +179 -307
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModalConstants.js +5 -0
- data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +64 -70
- data/webpack/scenes/Subscriptions/Manifest/ManifestConstants.js +5 -0
- data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryContent.js +61 -0
- data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +1 -1
- data/webpack/scenes/Subscriptions/Manifest/ManifestTabContent.js +357 -0
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +129 -0
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +69 -110
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestHistoryReducer.test.js +6 -2
- data/webpack/scenes/Subscriptions/Manifest/index.js +16 -1
- data/webpack/scenes/Subscriptions/SubscriptionActions.js +79 -145
- data/webpack/scenes/Subscriptions/SubscriptionConstants.js +4 -35
- data/webpack/scenes/Subscriptions/SubscriptionsColumns.js +90 -0
- data/webpack/scenes/Subscriptions/SubscriptionsPage.js +297 -217
- data/webpack/scenes/Subscriptions/SubscriptionsPage.scss +40 -30
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsActions.js +11 -8
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsConstants.js +0 -1
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +104 -205
- data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +12 -8
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js +245 -241
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +61 -27
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +487 -73
- data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +22 -4
- data/webpack/utils/contentViewEnvironmentLabel.js +3 -3
- data/webpack/utils/helpers.js +2 -2
- metadata +15 -20
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.scss +0 -39
- data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryTableSchema.js +0 -47
- data/webpack/scenes/Subscriptions/SubscriptionReducer.js +0 -223
- data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +0 -31
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsActions.test.js +0 -297
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsReducer.test.js +0 -244
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsSelectors.test.js +0 -47
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionNameFormatter.js +0 -23
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionTypeFormatter.js +0 -32
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +0 -169
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionTypeFormatter.test.js +0 -41
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/index.js +0 -2
- data/webpack/scenes/Subscriptions/index.js +0 -57
|
@@ -103,7 +103,7 @@ ContentViewEnvironmentDisplay.propTypes = {
|
|
|
103
103
|
}).isRequired,
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
-
export const
|
|
106
|
+
export const CvEnvDetailsBareCard = ({
|
|
107
107
|
contentViewEnvironments, hostPermissions, permissions, dropdownItems,
|
|
108
108
|
isDropdownOpen, toggleKebab, openModal, allowMultipleContentViews,
|
|
109
109
|
}) => {
|
|
@@ -185,7 +185,7 @@ export const CVEDetailsBareCard = ({
|
|
|
185
185
|
);
|
|
186
186
|
};
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
CvEnvDetailsBareCard.propTypes = {
|
|
189
189
|
contentViewEnvironments: PropTypes.arrayOf(PropTypes.shape({
|
|
190
190
|
content_view: PropTypes.shape({
|
|
191
191
|
name: PropTypes.string,
|
|
@@ -212,7 +212,7 @@ CVEDetailsBareCard.propTypes = {
|
|
|
212
212
|
allowMultipleContentViews: PropTypes.bool,
|
|
213
213
|
};
|
|
214
214
|
|
|
215
|
-
|
|
215
|
+
CvEnvDetailsBareCard.defaultProps = {
|
|
216
216
|
contentViewEnvironments: [],
|
|
217
217
|
hostPermissions: {},
|
|
218
218
|
permissions: {},
|
|
@@ -258,12 +258,12 @@ export const ContentViewEnvironmentDetails = ({
|
|
|
258
258
|
const existingAssignments = contentViewEnvironments.map(env => ({
|
|
259
259
|
contentView: env.content_view,
|
|
260
260
|
environment: env.lifecycle_environment,
|
|
261
|
-
|
|
261
|
+
cvEnvLabel: env.label, // Use the content view environment label from the API
|
|
262
262
|
}));
|
|
263
263
|
|
|
264
264
|
return (
|
|
265
265
|
<GridItem rowSpan={1} md={6} lg={4} xl2={3} >
|
|
266
|
-
<
|
|
266
|
+
<CvEnvDetailsBareCard
|
|
267
267
|
isDropdownOpen={isDropdownOpen}
|
|
268
268
|
toggleKebab={toggleKebab}
|
|
269
269
|
contentViewEnvironments={contentViewEnvironments}
|
data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/OrderableAssignments.js
CHANGED
|
@@ -49,7 +49,7 @@ const AssignmentShape = PropTypes.shape({
|
|
|
49
49
|
id: PropTypes.string.isRequired,
|
|
50
50
|
contentView: ContentViewShape,
|
|
51
51
|
environment: EnvironmentShape,
|
|
52
|
-
|
|
52
|
+
cvEnvLabel: PropTypes.string,
|
|
53
53
|
isExpanded: PropTypes.bool,
|
|
54
54
|
cvSelectOpen: PropTypes.bool,
|
|
55
55
|
selectedEnv: PropTypes.arrayOf(EnvironmentShape),
|
|
@@ -60,7 +60,7 @@ const AssignmentShape = PropTypes.shape({
|
|
|
60
60
|
const ExistingAssignmentShape = PropTypes.shape({
|
|
61
61
|
contentView: ContentViewShape,
|
|
62
62
|
environment: EnvironmentShape,
|
|
63
|
-
|
|
63
|
+
cvEnvLabel: PropTypes.string,
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
const AssignmentSection = ({
|
|
@@ -307,7 +307,7 @@ export const OrderableAssignmentList = ({
|
|
|
307
307
|
id: `existing-${index}`,
|
|
308
308
|
contentView: assignment.contentView,
|
|
309
309
|
environment: assignment.environment,
|
|
310
|
-
|
|
310
|
+
cvEnvLabel: assignment.cvEnvLabel, // Preserve the content view environment label from API
|
|
311
311
|
isExpanded: !shouldCollapseByDefault,
|
|
312
312
|
cvSelectOpen: false,
|
|
313
313
|
selectedEnv: assignment.environment ? [assignment.environment] : [],
|
|
@@ -419,7 +419,7 @@ export const OrderableAssignmentList = ({
|
|
|
419
419
|
selectedCV: null,
|
|
420
420
|
environment: selection[0] || null,
|
|
421
421
|
contentView: null,
|
|
422
|
-
|
|
422
|
+
cvEnvLabel: null, // Clear CVEnv label when environment changes
|
|
423
423
|
});
|
|
424
424
|
};
|
|
425
425
|
|
|
@@ -451,7 +451,7 @@ export const OrderableAssignmentList = ({
|
|
|
451
451
|
selectedCV: selection,
|
|
452
452
|
cvSelectOpen: false,
|
|
453
453
|
contentView: contentViewWithVersion,
|
|
454
|
-
|
|
454
|
+
cvEnvLabel: null, // Clear CVEnv label when CV changes
|
|
455
455
|
});
|
|
456
456
|
};
|
|
457
457
|
|
|
@@ -570,7 +570,7 @@ describe('AssignHostCVModal', () => {
|
|
|
570
570
|
{
|
|
571
571
|
contentView: { id: 2, name: 'cv_1', label: 'cv_1' },
|
|
572
572
|
environment: { id: 1, name: 'Library', label: 'Library' },
|
|
573
|
-
|
|
573
|
+
cvEnvLabel: 'Library/cv_1',
|
|
574
574
|
},
|
|
575
575
|
];
|
|
576
576
|
|
|
@@ -602,12 +602,12 @@ describe('AssignHostCVModal', () => {
|
|
|
602
602
|
{
|
|
603
603
|
contentView: { id: 2, name: 'cv_1', label: 'cv_1' },
|
|
604
604
|
environment: { id: 1, name: 'Library', label: 'Library' },
|
|
605
|
-
|
|
605
|
+
cvEnvLabel: 'Library/cv_1',
|
|
606
606
|
},
|
|
607
607
|
{
|
|
608
608
|
contentView: { id: 3, name: 'cv_2', label: 'cv_2' },
|
|
609
609
|
environment: { id: 2, name: 'dev', label: 'dev' },
|
|
610
|
-
|
|
610
|
+
cvEnvLabel: 'dev/cv_2',
|
|
611
611
|
},
|
|
612
612
|
];
|
|
613
613
|
|
|
@@ -654,7 +654,7 @@ describe('AssignHostCVModal', () => {
|
|
|
654
654
|
{
|
|
655
655
|
contentView: { id: 2, name: 'cv_1', label: 'cv_1' },
|
|
656
656
|
environment: { id: 1, name: 'Library', label: 'Library' },
|
|
657
|
-
|
|
657
|
+
cvEnvLabel: 'Library/cv_1',
|
|
658
658
|
},
|
|
659
659
|
];
|
|
660
660
|
|
|
@@ -706,12 +706,12 @@ describe('AssignHostCVModal', () => {
|
|
|
706
706
|
{
|
|
707
707
|
contentView: { id: 2, name: 'cv_1', label: 'cv_1' },
|
|
708
708
|
environment: { id: 1, name: 'Library', label: 'Library' },
|
|
709
|
-
|
|
709
|
+
cvEnvLabel: 'Library/cv_1',
|
|
710
710
|
},
|
|
711
711
|
{
|
|
712
712
|
contentView: { id: 3, name: 'cv_2', label: 'cv_2' },
|
|
713
713
|
environment: { id: 2, name: 'dev', label: 'dev' },
|
|
714
|
-
|
|
714
|
+
cvEnvLabel: 'dev/cv_2',
|
|
715
715
|
},
|
|
716
716
|
];
|
|
717
717
|
|
|
@@ -746,7 +746,7 @@ describe('AssignHostCVModal', () => {
|
|
|
746
746
|
{
|
|
747
747
|
contentView: { id: 2, name: 'cv_1', label: 'cv_1' },
|
|
748
748
|
environment: { id: 1, name: 'Library', label: 'Library' },
|
|
749
|
-
|
|
749
|
+
cvEnvLabel: 'Library/cv_1',
|
|
750
750
|
},
|
|
751
751
|
];
|
|
752
752
|
|
|
@@ -805,7 +805,7 @@ describe('AssignHostCVModal', () => {
|
|
|
805
805
|
jest.restoreAllMocks();
|
|
806
806
|
});
|
|
807
807
|
|
|
808
|
-
test('Save with existing assignment preserves
|
|
808
|
+
test('Save with existing assignment preserves cvEnvLabel', async () => {
|
|
809
809
|
const existingAssignments = [
|
|
810
810
|
{
|
|
811
811
|
contentView: {
|
|
@@ -821,7 +821,7 @@ describe('AssignHostCVModal', () => {
|
|
|
821
821
|
label: 'Library',
|
|
822
822
|
library: true,
|
|
823
823
|
},
|
|
824
|
-
|
|
824
|
+
cvEnvLabel: 'Library/cv_1', // Existing label from API
|
|
825
825
|
},
|
|
826
826
|
{
|
|
827
827
|
contentView: {
|
|
@@ -837,7 +837,7 @@ describe('AssignHostCVModal', () => {
|
|
|
837
837
|
label: 'Library',
|
|
838
838
|
library: true,
|
|
839
839
|
},
|
|
840
|
-
|
|
840
|
+
cvEnvLabel: 'Library', // Default CV in Library uses just env label
|
|
841
841
|
},
|
|
842
842
|
];
|
|
843
843
|
|
|
@@ -877,7 +877,7 @@ describe('AssignHostCVModal', () => {
|
|
|
877
877
|
userEvent.click(saveButton);
|
|
878
878
|
});
|
|
879
879
|
|
|
880
|
-
// Verify API was called with existing
|
|
880
|
+
// Verify API was called with existing cvEnvLabel preserved for first assignment
|
|
881
881
|
await patientlyWaitFor(() => {
|
|
882
882
|
expect(mockAssignHostCVEnvironments).toHaveBeenCalledWith(
|
|
883
883
|
expect.objectContaining({
|
|
@@ -1048,17 +1048,17 @@ describe('AssignHostCVModal', () => {
|
|
|
1048
1048
|
{
|
|
1049
1049
|
contentView: { id: 2, name: 'cv_1', label: 'cv_1' },
|
|
1050
1050
|
environment: { id: 1, name: 'Library', label: 'Library' },
|
|
1051
|
-
|
|
1051
|
+
cvEnvLabel: 'Library/cv_1',
|
|
1052
1052
|
},
|
|
1053
1053
|
{
|
|
1054
1054
|
contentView: { id: 3, name: 'composite_cv', label: 'composite_cv' },
|
|
1055
1055
|
environment: { id: 2, name: 'dev', label: 'dev' },
|
|
1056
|
-
|
|
1056
|
+
cvEnvLabel: 'dev/composite_cv',
|
|
1057
1057
|
},
|
|
1058
1058
|
{
|
|
1059
1059
|
contentView: { id: 4, name: 'cv_2', label: 'cv_2' },
|
|
1060
1060
|
environment: { id: 3, name: 'prod', label: 'prod' },
|
|
1061
|
-
|
|
1061
|
+
cvEnvLabel: 'prod/cv_2',
|
|
1062
1062
|
},
|
|
1063
1063
|
];
|
|
1064
1064
|
|
|
@@ -1126,7 +1126,7 @@ describe('AssignHostCVModal', () => {
|
|
|
1126
1126
|
});
|
|
1127
1127
|
});
|
|
1128
1128
|
|
|
1129
|
-
test('Changing CV in existing assignment builds new label instead of reusing old
|
|
1129
|
+
test('Changing CV in existing assignment builds new label instead of reusing old cvEnvLabel', async () => {
|
|
1130
1130
|
const existingAssignments = [
|
|
1131
1131
|
{
|
|
1132
1132
|
contentView: {
|
|
@@ -1142,7 +1142,7 @@ describe('AssignHostCVModal', () => {
|
|
|
1142
1142
|
label: 'Library',
|
|
1143
1143
|
library: true,
|
|
1144
1144
|
},
|
|
1145
|
-
|
|
1145
|
+
cvEnvLabel: 'Library/cv_1', // User currently has cv_1
|
|
1146
1146
|
},
|
|
1147
1147
|
];
|
|
1148
1148
|
|
|
@@ -1203,7 +1203,7 @@ describe('AssignHostCVModal', () => {
|
|
|
1203
1203
|
});
|
|
1204
1204
|
|
|
1205
1205
|
// Verify API was called with NEW label (Library/composite_cv),
|
|
1206
|
-
// NOT the old
|
|
1206
|
+
// NOT the old cvEnvLabel (Library/cv_1)
|
|
1207
1207
|
await patientlyWaitFor(() => {
|
|
1208
1208
|
expect(mockAssignHostCVEnvironments).toHaveBeenCalledWith(
|
|
1209
1209
|
expect.objectContaining({
|
data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/BulkAssignCVEnvsModal.js
CHANGED
|
@@ -6,9 +6,6 @@ import { Modal, Button, TextContent, Text, TextVariants } from '@patternfly/reac
|
|
|
6
6
|
import { PlusCircleIcon } from '@patternfly/react-icons';
|
|
7
7
|
import { translate as __ } from 'foremanReact/common/I18n';
|
|
8
8
|
import { STATUS } from 'foremanReact/constants';
|
|
9
|
-
import { foremanUrl } from 'foremanReact/common/helpers';
|
|
10
|
-
import { APIActions } from 'foremanReact/redux/API';
|
|
11
|
-
import { HOSTS_API_PATH, API_REQUEST_KEY } from 'foremanReact/routes/Hosts/constants';
|
|
12
9
|
import { useAPI } from 'foremanReact/common/hooks/API/APIHooks';
|
|
13
10
|
import { selectAPIStatus } from 'foremanReact/redux/API/APISelectors';
|
|
14
11
|
import { ENVIRONMENT_PATHS_KEY } from '../../../../../scenes/ContentViews/components/EnvironmentPaths/EnvironmentPathConstants';
|
|
@@ -28,6 +25,7 @@ const BulkAssignCVEnvsModal = ({
|
|
|
28
25
|
orgId,
|
|
29
26
|
fetchBulkParams,
|
|
30
27
|
allowMultipleContentViews,
|
|
28
|
+
refreshTableData,
|
|
31
29
|
}) => {
|
|
32
30
|
const [assignments, setAssignments] = useState([]);
|
|
33
31
|
const dispatch = useDispatch();
|
|
@@ -42,11 +40,7 @@ const BulkAssignCVEnvsModal = ({
|
|
|
42
40
|
};
|
|
43
41
|
|
|
44
42
|
const handleSuccess = () => {
|
|
45
|
-
|
|
46
|
-
dispatch(APIActions.get({
|
|
47
|
-
key: API_REQUEST_KEY,
|
|
48
|
-
url: foremanUrl(HOSTS_API_PATH),
|
|
49
|
-
}));
|
|
43
|
+
refreshTableData();
|
|
50
44
|
handleModalClose();
|
|
51
45
|
};
|
|
52
46
|
|
|
@@ -178,12 +172,14 @@ BulkAssignCVEnvsModal.propTypes = {
|
|
|
178
172
|
orgId: PropTypes.number.isRequired,
|
|
179
173
|
fetchBulkParams: PropTypes.func.isRequired,
|
|
180
174
|
allowMultipleContentViews: PropTypes.bool,
|
|
175
|
+
refreshTableData: PropTypes.func,
|
|
181
176
|
};
|
|
182
177
|
|
|
183
178
|
BulkAssignCVEnvsModal.defaultProps = {
|
|
184
179
|
isOpen: false,
|
|
185
180
|
closeModal: () => {},
|
|
186
181
|
allowMultipleContentViews: true,
|
|
182
|
+
refreshTableData: () => {},
|
|
187
183
|
};
|
|
188
184
|
|
|
189
185
|
export default BulkAssignCVEnvsModal;
|
|
@@ -272,7 +272,7 @@ test('builds correct payload for multiple CVEs preserving order', () => {
|
|
|
272
272
|
},
|
|
273
273
|
};
|
|
274
274
|
|
|
275
|
-
// Verify request payload contains all
|
|
275
|
+
// Verify request payload contains all content view environment labels in correct order
|
|
276
276
|
expect(requestBody).toEqual({
|
|
277
277
|
content_view_environments: [
|
|
278
278
|
'library_label/test_cv_1',
|
|
@@ -6,7 +6,7 @@ import BulkAssignCVEnvsModal from './BulkAssignCVEnvsModal';
|
|
|
6
6
|
|
|
7
7
|
const BulkAssignCVEnvsModalScene = () => {
|
|
8
8
|
const orgId = useForemanOrganization()?.id;
|
|
9
|
-
const { selectedCount, fetchBulkParams } = useContext(ForemanActionsBarContext);
|
|
9
|
+
const { selectedCount, fetchBulkParams, refreshTableData } = useContext(ForemanActionsBarContext);
|
|
10
10
|
const { isOpen, close: closeModal } = useBulkModalOpen('bulk-assign-cves-modal');
|
|
11
11
|
const foremanContext = useForemanContext();
|
|
12
12
|
const allowMultipleContentViews =
|
|
@@ -24,6 +24,7 @@ const BulkAssignCVEnvsModalScene = () => {
|
|
|
24
24
|
closeModal={closeModal}
|
|
25
25
|
orgId={orgId}
|
|
26
26
|
allowMultipleContentViews={allowMultipleContentViews}
|
|
27
|
+
refreshTableData={refreshTableData}
|
|
27
28
|
/>
|
|
28
29
|
);
|
|
29
30
|
};
|
|
@@ -22,12 +22,7 @@ import { ExclamationTriangleIcon, PlusCircleIcon } from '@patternfly/react-icons
|
|
|
22
22
|
import { addToast } from 'foremanReact/components/ToastsList';
|
|
23
23
|
import { translate as __ } from 'foremanReact/common/I18n';
|
|
24
24
|
import { STATUS } from 'foremanReact/constants';
|
|
25
|
-
import {
|
|
26
|
-
import { APIActions } from 'foremanReact/redux/API';
|
|
27
|
-
import {
|
|
28
|
-
HOSTS_API_PATH,
|
|
29
|
-
API_REQUEST_KEY,
|
|
30
|
-
} from 'foremanReact/routes/Hosts/constants';
|
|
25
|
+
import { noop } from 'foremanReact/common/helpers';
|
|
31
26
|
import { useForemanOrganization } from 'foremanReact/Root/Context/ForemanContext';
|
|
32
27
|
import { useTableIndexAPIResponse, useSetParamsAndApiAndSearch } from 'foremanReact/components/PF4/TableIndexPage/Table/TableIndexHooks';
|
|
33
28
|
import { useBulkSelect } from 'foremanReact/components/PF4/TableIndexPage/Table/TableHooks';
|
|
@@ -46,6 +41,7 @@ const BulkChangeHostCollectionsModal = ({
|
|
|
46
41
|
closeModal,
|
|
47
42
|
fetchBulkParams,
|
|
48
43
|
selectedCount: selectedHostsCount,
|
|
44
|
+
refreshTableData,
|
|
49
45
|
}) => {
|
|
50
46
|
const dispatch = useDispatch();
|
|
51
47
|
const [addRadioChecked, setAddRadioChecked] = useState(true);
|
|
@@ -165,10 +161,7 @@ const BulkChangeHostCollectionsModal = ({
|
|
|
165
161
|
: __('Host collections updated');
|
|
166
162
|
|
|
167
163
|
dispatch(addToast({ type: 'success', message }));
|
|
168
|
-
|
|
169
|
-
key: API_REQUEST_KEY,
|
|
170
|
-
url: foremanUrl(HOSTS_API_PATH),
|
|
171
|
-
}));
|
|
164
|
+
refreshTableData();
|
|
172
165
|
handleModalClose();
|
|
173
166
|
};
|
|
174
167
|
|
|
@@ -417,6 +410,7 @@ BulkChangeHostCollectionsModal.propTypes = {
|
|
|
417
410
|
closeModal: PropTypes.func,
|
|
418
411
|
fetchBulkParams: PropTypes.func,
|
|
419
412
|
selectedCount: PropTypes.number,
|
|
413
|
+
refreshTableData: PropTypes.func,
|
|
420
414
|
};
|
|
421
415
|
|
|
422
416
|
BulkChangeHostCollectionsModal.defaultProps = {
|
|
@@ -424,6 +418,7 @@ BulkChangeHostCollectionsModal.defaultProps = {
|
|
|
424
418
|
closeModal: () => {},
|
|
425
419
|
fetchBulkParams: () => '',
|
|
426
420
|
selectedCount: 0,
|
|
421
|
+
refreshTableData: () => {},
|
|
427
422
|
};
|
|
428
423
|
|
|
429
424
|
export default BulkChangeHostCollectionsModal;
|
|
@@ -64,6 +64,7 @@ const defaultProps = {
|
|
|
64
64
|
closeModal: jest.fn(),
|
|
65
65
|
fetchBulkParams: jest.fn(() => 'name ~ test'),
|
|
66
66
|
selectedCount: 5,
|
|
67
|
+
refreshTableData: jest.fn(),
|
|
67
68
|
};
|
|
68
69
|
|
|
69
70
|
beforeEach(() => {
|
|
@@ -351,11 +352,6 @@ test('shows success toast notification on successful save', async () => {
|
|
|
351
352
|
.put('/api/v2/hosts/bulk/add_host_collections')
|
|
352
353
|
.reply(200, { displayMessages: ['Host collections updated'] });
|
|
353
354
|
|
|
354
|
-
const hostsRefreshScope = nockInstance
|
|
355
|
-
.get('/api/hosts')
|
|
356
|
-
.query(true)
|
|
357
|
-
.reply(200, { results: [] });
|
|
358
|
-
|
|
359
355
|
const { getAllByRole, getByText } = renderWithRedux(
|
|
360
356
|
<BulkChangeHostCollectionsModal {...defaultProps} />,
|
|
361
357
|
renderOptions(),
|
|
@@ -387,10 +383,13 @@ test('shows success toast notification on successful save', async () => {
|
|
|
387
383
|
|
|
388
384
|
await patientlyWaitFor(() => {
|
|
389
385
|
expect(addToast).toHaveBeenCalledWith(expect.objectContaining({ type: 'success' }));
|
|
386
|
+
expect(defaultProps.refreshTableData).toHaveBeenCalledTimes(1);
|
|
387
|
+
expect(defaultProps.closeModal).toHaveBeenCalledTimes(1);
|
|
388
|
+
expect(defaultProps.refreshTableData.mock.invocationCallOrder[0])
|
|
389
|
+
.toBeLessThan(defaultProps.closeModal.mock.invocationCallOrder[0]);
|
|
390
390
|
});
|
|
391
391
|
|
|
392
392
|
assertNockRequest(saveScope, false);
|
|
393
|
-
assertNockRequest(hostsRefreshScope, false);
|
|
394
393
|
assertNockRequest(hostCollectionsScope, false);
|
|
395
394
|
assertNockRequest(autocompleteScope, false);
|
|
396
395
|
});
|
|
@@ -444,6 +443,7 @@ test('shows error toast notification on failed save', async () => {
|
|
|
444
443
|
|
|
445
444
|
await patientlyWaitFor(() => {
|
|
446
445
|
expect(addToast).toHaveBeenCalledWith(expect.objectContaining({ type: 'danger' }));
|
|
446
|
+
expect(defaultProps.refreshTableData).not.toHaveBeenCalled();
|
|
447
447
|
});
|
|
448
448
|
|
|
449
449
|
assertNockRequest(saveScope, false);
|
|
@@ -469,11 +469,6 @@ test('makes correct API call when Add action is selected', async () => {
|
|
|
469
469
|
.put('/api/v2/hosts/bulk/add_host_collections')
|
|
470
470
|
.reply(200, { displayMessages: ['Host collections updated'] });
|
|
471
471
|
|
|
472
|
-
const hostsRefreshScope = nockInstance
|
|
473
|
-
.get('/api/hosts')
|
|
474
|
-
.query(true)
|
|
475
|
-
.reply(200, { results: [] });
|
|
476
|
-
|
|
477
472
|
const { getAllByRole, getByText, getByLabelText } = renderWithRedux(
|
|
478
473
|
<BulkChangeHostCollectionsModal {...defaultProps} />,
|
|
479
474
|
renderOptions(),
|
|
@@ -510,7 +505,6 @@ test('makes correct API call when Add action is selected', async () => {
|
|
|
510
505
|
|
|
511
506
|
assertNockRequest(hostCollectionsScope, false);
|
|
512
507
|
assertNockRequest(autocompleteScope, false);
|
|
513
|
-
assertNockRequest(hostsRefreshScope, false);
|
|
514
508
|
});
|
|
515
509
|
|
|
516
510
|
// Test for Remove action API call
|
|
@@ -531,11 +525,6 @@ test('makes correct API call when Remove action is selected', async () => {
|
|
|
531
525
|
.put('/api/v2/hosts/bulk/remove_host_collections')
|
|
532
526
|
.reply(200, { displayMessages: ['Host collections updated'] });
|
|
533
527
|
|
|
534
|
-
const hostsRefreshScope = nockInstance
|
|
535
|
-
.get('/api/hosts')
|
|
536
|
-
.query(true)
|
|
537
|
-
.reply(200, { results: [] });
|
|
538
|
-
|
|
539
528
|
const { getAllByRole, getByText, getByLabelText } = renderWithRedux(
|
|
540
529
|
<BulkChangeHostCollectionsModal {...defaultProps} />,
|
|
541
530
|
renderOptions(),
|
|
@@ -579,7 +568,6 @@ test('makes correct API call when Remove action is selected', async () => {
|
|
|
579
568
|
|
|
580
569
|
assertNockRequest(hostCollectionsScope, false);
|
|
581
570
|
assertNockRequest(autocompleteScope, false);
|
|
582
|
-
assertNockRequest(hostsRefreshScope, false);
|
|
583
571
|
});
|
|
584
572
|
|
|
585
573
|
// Test for multiple host collections selected
|
|
@@ -600,11 +588,6 @@ test('makes correct API call with multiple host collections', async () => {
|
|
|
600
588
|
.put('/api/v2/hosts/bulk/add_host_collections')
|
|
601
589
|
.reply(200, { displayMessages: ['Host collections updated'] });
|
|
602
590
|
|
|
603
|
-
const hostsRefreshScope = nockInstance
|
|
604
|
-
.get('/api/hosts')
|
|
605
|
-
.query(true)
|
|
606
|
-
.reply(200, { results: [] });
|
|
607
|
-
|
|
608
591
|
const { getAllByRole, getByText } = renderWithRedux(
|
|
609
592
|
<BulkChangeHostCollectionsModal {...defaultProps} />,
|
|
610
593
|
renderOptions(),
|
|
@@ -639,7 +622,6 @@ test('makes correct API call with multiple host collections', async () => {
|
|
|
639
622
|
|
|
640
623
|
assertNockRequest(hostCollectionsScope, false);
|
|
641
624
|
assertNockRequest(autocompleteScope, false);
|
|
642
|
-
assertNockRequest(hostsRefreshScope, false);
|
|
643
625
|
});
|
|
644
626
|
|
|
645
627
|
const emptyHostCollections = {
|
data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/index.js
CHANGED
|
@@ -52,7 +52,7 @@ BulkChangeHostCollectionsMenuItem.defaultProps = {
|
|
|
52
52
|
// This component renders only the modal (for the _all-hosts-modals slot)
|
|
53
53
|
const BulkChangeHostCollectionsModalScene = () => {
|
|
54
54
|
const orgId = useForemanOrganization()?.id;
|
|
55
|
-
const { selectedCount, fetchBulkParams } = useContext(ForemanActionsBarContext);
|
|
55
|
+
const { selectedCount, fetchBulkParams, refreshTableData } = useContext(ForemanActionsBarContext);
|
|
56
56
|
const { isOpen, close: closeModal } = useBulkModalOpen('bulk-change-host-collections-modal');
|
|
57
57
|
|
|
58
58
|
if (!orgId) return null;
|
|
@@ -64,6 +64,7 @@ const BulkChangeHostCollectionsModalScene = () => {
|
|
|
64
64
|
selectedCount={selectedCount}
|
|
65
65
|
isOpen={isOpen}
|
|
66
66
|
closeModal={closeModal}
|
|
67
|
+
refreshTableData={refreshTableData}
|
|
67
68
|
/>
|
|
68
69
|
);
|
|
69
70
|
};
|
|
@@ -19,6 +19,7 @@ export const BulkErrataReviewFooter = () => {
|
|
|
19
19
|
setFinishButtonLoading,
|
|
20
20
|
selectedRexOption,
|
|
21
21
|
closeModal,
|
|
22
|
+
refreshTableData,
|
|
22
23
|
errataBulkSelect: {
|
|
23
24
|
fetchBulkParams: getErrataBulkParams,
|
|
24
25
|
selectedCount: errataSelectedCount,
|
|
@@ -55,6 +56,7 @@ export const BulkErrataReviewFooter = () => {
|
|
|
55
56
|
const handleFinishButtonClick = () => {
|
|
56
57
|
setFinishButtonLoading(true);
|
|
57
58
|
triggerBulkErrataInstall();
|
|
59
|
+
refreshTableData();
|
|
58
60
|
closeModal();
|
|
59
61
|
};
|
|
60
62
|
|
|
@@ -54,7 +54,7 @@ export const useErrataHostsBulkSelect = ({ initialSelectedHosts, modalIsOpen })
|
|
|
54
54
|
export const ERRATA_URL = `${katelloApi.getApiUrl('/errata')}?per_page=7&include_permissions=true&errata_restrict_installable=true`;
|
|
55
55
|
|
|
56
56
|
const BulkErrataWizard = ({ isOpen: modalOpen, closeModal }) => {
|
|
57
|
-
const { selectedCount: initialSelectedHostCount, fetchBulkParams }
|
|
57
|
+
const { selectedCount: initialSelectedHostCount, fetchBulkParams, refreshTableData }
|
|
58
58
|
= useContext(ForemanActionsBarContext);
|
|
59
59
|
|
|
60
60
|
const [shouldValidateStep2, setShouldValidateStep2] = useState(false);
|
|
@@ -112,6 +112,7 @@ const BulkErrataWizard = ({ isOpen: modalOpen, closeModal }) => {
|
|
|
112
112
|
selectedRexOption,
|
|
113
113
|
setSelectedRexOption,
|
|
114
114
|
closeModal,
|
|
115
|
+
refreshTableData,
|
|
115
116
|
errataBulkSelect,
|
|
116
117
|
errataResults,
|
|
117
118
|
errataMetadata,
|
data/webpack/components/extensions/Hosts/BulkActions/BulkManageTracesModal/BulkManageTracesModal.js
CHANGED
|
@@ -73,6 +73,7 @@ const BulkManageTracesModal = ({
|
|
|
73
73
|
selectedCount: hostsSelectedCount,
|
|
74
74
|
orgId,
|
|
75
75
|
fetchBulkParams,
|
|
76
|
+
refreshTableData,
|
|
76
77
|
}) => {
|
|
77
78
|
const dispatch = useDispatch();
|
|
78
79
|
const [isBulkActionOpen, setIsBulkActionOpen] = useState(false);
|
|
@@ -193,6 +194,7 @@ const BulkManageTracesModal = ({
|
|
|
193
194
|
},
|
|
194
195
|
},
|
|
195
196
|
}));
|
|
197
|
+
refreshTableData();
|
|
196
198
|
handleModalClose();
|
|
197
199
|
};
|
|
198
200
|
|
|
@@ -410,11 +412,13 @@ BulkManageTracesModal.propTypes = {
|
|
|
410
412
|
selectedCount: PropTypes.number.isRequired,
|
|
411
413
|
orgId: PropTypes.number.isRequired,
|
|
412
414
|
fetchBulkParams: PropTypes.func.isRequired,
|
|
415
|
+
refreshTableData: PropTypes.func,
|
|
413
416
|
};
|
|
414
417
|
|
|
415
418
|
BulkManageTracesModal.defaultProps = {
|
|
416
419
|
isOpen: false,
|
|
417
420
|
closeModal: () => {},
|
|
421
|
+
refreshTableData: () => {},
|
|
418
422
|
};
|
|
419
423
|
|
|
420
424
|
export default BulkManageTracesModal;
|
|
@@ -7,7 +7,7 @@ import BulkManageTracesModal from './BulkManageTracesModal';
|
|
|
7
7
|
const BulkManageTracesModalScene = () => {
|
|
8
8
|
const orgId = useForemanOrganization()?.id;
|
|
9
9
|
const contextValue = useContext(ForemanActionsBarContext);
|
|
10
|
-
const { selectedCount, fetchBulkParams } = contextValue || {};
|
|
10
|
+
const { selectedCount, fetchBulkParams, refreshTableData } = contextValue || {};
|
|
11
11
|
const { isOpen, close: closeModal } = useBulkModalOpen('bulk-manage-traces-modal');
|
|
12
12
|
|
|
13
13
|
if (!orgId) return null;
|
|
@@ -25,6 +25,7 @@ const BulkManageTracesModalScene = () => {
|
|
|
25
25
|
isOpen={isOpen}
|
|
26
26
|
closeModal={closeModal}
|
|
27
27
|
orgId={orgId}
|
|
28
|
+
refreshTableData={refreshTableData}
|
|
28
29
|
/>
|
|
29
30
|
);
|
|
30
31
|
};
|
|
@@ -19,6 +19,7 @@ export const BulkPackagesReviewFooter = () => {
|
|
|
19
19
|
setFinishButtonLoading,
|
|
20
20
|
selectedRexOption,
|
|
21
21
|
closeModal,
|
|
22
|
+
refreshTableData,
|
|
22
23
|
packagesBulkSelect: {
|
|
23
24
|
fetchBulkParams: getPackagesBulkParams,
|
|
24
25
|
selectedCount: packagesSelectedCount,
|
|
@@ -94,6 +95,7 @@ export const BulkPackagesReviewFooter = () => {
|
|
|
94
95
|
if (selectedAction === REMOVE) {
|
|
95
96
|
triggerBulkPackageRemove();
|
|
96
97
|
}
|
|
98
|
+
refreshTableData();
|
|
97
99
|
closeModal();
|
|
98
100
|
};
|
|
99
101
|
|
data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js
CHANGED
|
@@ -77,7 +77,7 @@ const BulkPackagesWizard = () => {
|
|
|
77
77
|
|
|
78
78
|
const [selectedAction, setSelectedAction] = useState(UPGRADE_ALL);
|
|
79
79
|
|
|
80
|
-
const { selectedCount: initialSelectedHostCount, fetchBulkParams }
|
|
80
|
+
const { selectedCount: initialSelectedHostCount, fetchBulkParams, refreshTableData }
|
|
81
81
|
= useContext(ForemanActionsBarContext);
|
|
82
82
|
|
|
83
83
|
const [shouldValidateStep2, setShouldValidateStep2] = useState(false);
|
|
@@ -158,6 +158,7 @@ const BulkPackagesWizard = () => {
|
|
|
158
158
|
selectedRexOption,
|
|
159
159
|
setSelectedRexOption,
|
|
160
160
|
closeModal,
|
|
161
|
+
refreshTableData,
|
|
161
162
|
packagesBulkSelect,
|
|
162
163
|
packagesResults,
|
|
163
164
|
packagesMetadata,
|
data/webpack/components/extensions/Hosts/BulkActions/BulkRepositorySetsWizard/03_ReviewFooter.js
CHANGED
|
@@ -18,6 +18,7 @@ export const BulkRepositorySetsReviewFooter = () => {
|
|
|
18
18
|
finishButtonLoading,
|
|
19
19
|
setFinishButtonLoading,
|
|
20
20
|
closeModal,
|
|
21
|
+
refreshTableData,
|
|
21
22
|
hostsBulkSelect,
|
|
22
23
|
} = useContext(BulkRepositorySetsWizardContext);
|
|
23
24
|
|
|
@@ -45,6 +46,7 @@ export const BulkRepositorySetsReviewFooter = () => {
|
|
|
45
46
|
const handleFinishButtonClick = () => {
|
|
46
47
|
setFinishButtonLoading(true);
|
|
47
48
|
saveContentOverrides();
|
|
49
|
+
refreshTableData();
|
|
48
50
|
closeModal();
|
|
49
51
|
};
|
|
50
52
|
return (
|
|
@@ -43,7 +43,7 @@ const BulkRepositorySetsWizard = () => {
|
|
|
43
43
|
|
|
44
44
|
const finishButtonText = __('Set content overrides');
|
|
45
45
|
const replacementResponse = !modalOpen ? { response: {} } : false;
|
|
46
|
-
const { selectedCount: initialSelectedHostCount, fetchBulkParams }
|
|
46
|
+
const { selectedCount: initialSelectedHostCount, fetchBulkParams, refreshTableData }
|
|
47
47
|
= useContext(ForemanActionsBarContext);
|
|
48
48
|
const repoSetsResponse = useTableIndexAPIResponse({
|
|
49
49
|
replacementResponse, // don't fetch data if modal is closed
|
|
@@ -109,6 +109,7 @@ const BulkRepositorySetsWizard = () => {
|
|
|
109
109
|
finishButtonLoading,
|
|
110
110
|
setFinishButtonLoading,
|
|
111
111
|
closeModal,
|
|
112
|
+
refreshTableData,
|
|
112
113
|
repoSetsBulkSelect,
|
|
113
114
|
repoSetsResults,
|
|
114
115
|
repoSetsMetadata,
|
|
@@ -43,6 +43,7 @@ const BulkSystemPurposeModal = ({
|
|
|
43
43
|
selectedCount,
|
|
44
44
|
orgId,
|
|
45
45
|
fetchBulkParams,
|
|
46
|
+
refreshTableData,
|
|
46
47
|
}) => {
|
|
47
48
|
const [selectedRole, setSelectedRole] = useState(NO_CHANGE);
|
|
48
49
|
const [selectedUsage, setSelectedUsage] = useState(NO_CHANGE);
|
|
@@ -121,6 +122,7 @@ const BulkSystemPurposeModal = ({
|
|
|
121
122
|
!releaseVersionDispatched || releaseVersionStatus !== STATUS.PENDING;
|
|
122
123
|
|
|
123
124
|
if (sysPurposeComplete && releaseVersionComplete) {
|
|
125
|
+
refreshTableData();
|
|
124
126
|
handleModalClose();
|
|
125
127
|
}
|
|
126
128
|
}, [
|
|
@@ -130,6 +132,7 @@ const BulkSystemPurposeModal = ({
|
|
|
130
132
|
sysPurposeStatus,
|
|
131
133
|
releaseVersionStatus,
|
|
132
134
|
handleModalClose,
|
|
135
|
+
refreshTableData,
|
|
133
136
|
]);
|
|
134
137
|
|
|
135
138
|
const roleOptions = buildSystemPurposeOptions(
|
|
@@ -348,10 +351,12 @@ BulkSystemPurposeModal.propTypes = {
|
|
|
348
351
|
selectedCount: PropTypes.number.isRequired,
|
|
349
352
|
orgId: PropTypes.number.isRequired,
|
|
350
353
|
fetchBulkParams: PropTypes.func.isRequired,
|
|
354
|
+
refreshTableData: PropTypes.func,
|
|
351
355
|
};
|
|
352
356
|
|
|
353
357
|
BulkSystemPurposeModal.defaultProps = {
|
|
354
358
|
isOpen: false,
|
|
359
|
+
refreshTableData: () => {},
|
|
355
360
|
};
|
|
356
361
|
|
|
357
362
|
export default BulkSystemPurposeModal;
|
|
@@ -6,7 +6,7 @@ import BulkSystemPurposeModal from './BulkSystemPurposeModal';
|
|
|
6
6
|
|
|
7
7
|
const BulkSystemPurposeModalScene = () => {
|
|
8
8
|
const orgId = useForemanOrganization()?.id;
|
|
9
|
-
const { selectedCount, fetchBulkParams } = useContext(ForemanActionsBarContext);
|
|
9
|
+
const { selectedCount, fetchBulkParams, refreshTableData } = useContext(ForemanActionsBarContext);
|
|
10
10
|
const { isOpen, close: closeModal } = useBulkModalOpen('bulk-system-purpose-modal');
|
|
11
11
|
|
|
12
12
|
if (!orgId) return null;
|
|
@@ -19,6 +19,7 @@ const BulkSystemPurposeModalScene = () => {
|
|
|
19
19
|
isOpen={isOpen}
|
|
20
20
|
closeModal={closeModal}
|
|
21
21
|
orgId={orgId}
|
|
22
|
+
refreshTableData={refreshTableData}
|
|
22
23
|
/>
|
|
23
24
|
);
|
|
24
25
|
};
|