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
@@ -47,19 +47,19 @@ const EnvironmentPaths = ({
47
47
  {index === 0 && <hr />}
48
48
  <FormGroup key={`fg-${index}`} isInline fieldId="environment-checkbox-group">
49
49
  {environments.map(env =>
50
- (<Checkbox
51
- isChecked={(publishing && env.library) ||
50
+ (<Checkbox
51
+ isChecked={(publishing && env.library) ||
52
52
  envCheckedInList(env, userCheckedItems) ||
53
53
  envCheckedInList(env, promotedEnvironments)}
54
- isDisabled={(publishing && env.library)
54
+ isDisabled={(publishing && env.library)
55
55
  || envCheckedInList(env, promotedEnvironments)}
56
- className="env-path__labels-with-pointer"
57
- key={`${env.id}${index}`}
58
- id={`${env.id}${index}`}
59
- label={<EnvironmentLabels environments={env} />}
60
- aria-label={env.label}
61
- onChange={checked => oncheckedChange(checked, env)}
62
- />))}
56
+ className="env-path__labels-with-pointer"
57
+ key={`${env.id}${index}`}
58
+ id={`${env.id}${index}`}
59
+ label={<EnvironmentLabels environments={env} />}
60
+ aria-label={env.label}
61
+ onChange={checked => oncheckedChange(checked, env)}
62
+ />))}
63
63
  </FormGroup>
64
64
  <hr />
65
65
  </div>
@@ -25,8 +25,8 @@ const DetailsExpansion = ({
25
25
  <RelatedCompositeContentViewsModal
26
26
  key={cvId}
27
27
  {...{
28
- cvName, cvId, relatedCVCount, relatedCompositeCVs,
29
- }}
28
+ cvName, cvId, relatedCVCount, relatedCompositeCVs,
29
+ }}
30
30
  />
31
31
  </>
32
32
  );
@@ -26,9 +26,9 @@ const ContentSourceForm = ({
26
26
  isLoading,
27
27
  }) => {
28
28
  const formIsValid = () => (!!environmentId &&
29
- !!contentViewId &&
30
- !!contentSourceId &&
31
- contentHostsIds.length !== 0);
29
+ !!contentViewId &&
30
+ !!contentSourceId &&
31
+ contentHostsIds.length !== 0);
32
32
 
33
33
  return (
34
34
  <Form
@@ -50,7 +50,7 @@ const ContentSourceForm = ({
50
50
  isDisabled={isLoading || !formIsValid()}
51
51
  isLoading={isLoading}
52
52
  >
53
- { __('Change content source')}
53
+ {__('Change content source')}
54
54
  </Button>
55
55
  </ActionGroup>
56
56
  </GridItem>
@@ -60,13 +60,13 @@ const ContentSourceForm = ({
60
60
 
61
61
  ContentSourceForm.propTypes = {
62
62
  handleSubmit: PropTypes.func.isRequired,
63
- environments: PropTypes.arrayOf(PropTypes.object),
63
+ environments: PropTypes.arrayOf(PropTypes.shape({})),
64
64
  handleEnvironment: PropTypes.func.isRequired,
65
65
  environmentId: PropTypes.string,
66
- contentViews: PropTypes.arrayOf(PropTypes.object),
66
+ contentViews: PropTypes.arrayOf(PropTypes.shape({})),
67
67
  handleContentView: PropTypes.func.isRequired,
68
68
  contentViewId: PropTypes.string,
69
- contentSources: PropTypes.arrayOf(PropTypes.object),
69
+ contentSources: PropTypes.arrayOf(PropTypes.shape({})),
70
70
  handleContentSource: PropTypes.func.isRequired,
71
71
  contentSourceId: PropTypes.string,
72
72
  contentHostsIds: PropTypes.arrayOf(PropTypes.number),
@@ -44,14 +44,14 @@ const ContentSourceTemplate = ({ template, jobInvocationPath }) => {
44
44
  </h1>
45
45
  <p>
46
46
  {jobInvocationPath && (
47
- <>
48
- <a href={jobInvocationPath}>
49
- {__('Run job invocation')}
50
- </a>
47
+ <>
48
+ <a href={jobInvocationPath}>
49
+ {__('Run job invocation')}
50
+ </a>
51
51
  &nbsp;
52
- {__('to update configuration on all hosts, or')}
53
- </>
54
- )}
52
+ {__('to update configuration on all hosts, or')}
53
+ </>
54
+ )}
55
55
  &nbsp;
56
56
  {__('update configuration on the hosts manually:')}
57
57
  </p>
@@ -22,9 +22,9 @@ const FormField = ({
22
22
  isRequired
23
23
  >
24
24
  <FormSelectOption key={0} value="" label={__('Select ...')} />
25
- { items.map(item => (
25
+ {items.map(item => (
26
26
  <FormSelectOption key={item.id} value={item.id} label={item.name} />
27
- ))}
27
+ ))}
28
28
  </FormSelect>
29
29
  </FormGroup>
30
30
  </GridItem>
@@ -34,7 +34,7 @@ FormField.propTypes = {
34
34
  label: PropTypes.string.isRequired,
35
35
  id: PropTypes.string.isRequired,
36
36
  value: PropTypes.string.isRequired,
37
- items: PropTypes.arrayOf(PropTypes.object).isRequired,
37
+ items: PropTypes.arrayOf(PropTypes.shape({})).isRequired,
38
38
  onChange: PropTypes.func.isRequired,
39
39
  isLoading: PropTypes.bool.isRequired,
40
40
  contentHostsCount: PropTypes.number.isRequired,
@@ -7,27 +7,27 @@ import {
7
7
 
8
8
  export default (state = initialApiState, action) => {
9
9
  switch (action.type) {
10
- case MODULE_STREAM_DETAILS_REQUEST: {
11
- return state.set('loading', true);
12
- }
10
+ case MODULE_STREAM_DETAILS_REQUEST: {
11
+ return state.set('loading', true);
12
+ }
13
13
 
14
- case MODULE_STREAM_DETAILS_SUCCESS: {
15
- const moduleStreamDetails = action.response;
14
+ case MODULE_STREAM_DETAILS_SUCCESS: {
15
+ const moduleStreamDetails = action.response;
16
16
 
17
- return state.merge({
18
- ...moduleStreamDetails,
19
- loading: false,
20
- });
21
- }
17
+ return state.merge({
18
+ ...moduleStreamDetails,
19
+ loading: false,
20
+ });
21
+ }
22
22
 
23
- case MODULE_STREAM_DETAILS_FAILURE: {
24
- return state.merge({
25
- error: action.payload.message,
26
- loading: false,
27
- });
28
- }
23
+ case MODULE_STREAM_DETAILS_FAILURE: {
24
+ return state.merge({
25
+ error: action.payload.message,
26
+ loading: false,
27
+ });
28
+ }
29
29
 
30
- default:
31
- return state;
30
+ default:
31
+ return state;
32
32
  }
33
33
  };
@@ -9,35 +9,35 @@ const initialState = initialApiState;
9
9
 
10
10
  export default (state = initialState, action) => {
11
11
  switch (action.type) {
12
- case MODULE_STREAMS_REQUEST: {
13
- return state.set('loading', true);
14
- }
12
+ case MODULE_STREAMS_REQUEST: {
13
+ return state.set('loading', true);
14
+ }
15
15
 
16
- case MODULE_STREAMS_SUCCESS: {
17
- const {
18
- results, page, per_page, subtotal, // eslint-disable-line camelcase
19
- } = action.response;
16
+ case MODULE_STREAMS_SUCCESS: {
17
+ const {
18
+ results, page, per_page, subtotal, // eslint-disable-line camelcase
19
+ } = action.response;
20
20
 
21
- return state.merge({
22
- results,
23
- loading: false,
24
- pagination: {
25
- page: Number(page),
26
- // eslint-disable-next-line camelcase
27
- perPage: Number(per_page || state.pagination.perPage),
28
- },
29
- itemCount: Number(subtotal),
30
- });
31
- }
21
+ return state.merge({
22
+ results,
23
+ loading: false,
24
+ pagination: {
25
+ page: Number(page),
26
+ // eslint-disable-next-line camelcase
27
+ perPage: Number(per_page || state.pagination.perPage),
28
+ },
29
+ itemCount: Number(subtotal),
30
+ });
31
+ }
32
32
 
33
- case MODULE_STREAMS_FAILURE: {
34
- return state.merge({
35
- error: action.error,
36
- loading: false,
37
- });
38
- }
33
+ case MODULE_STREAMS_FAILURE: {
34
+ return state.merge({
35
+ error: action.error,
36
+ loading: false,
37
+ });
38
+ }
39
39
 
40
- default:
41
- return state;
40
+ default:
41
+ return state;
42
42
  }
43
43
  };
@@ -10,16 +10,16 @@ const initialState = Immutable({ loading: false });
10
10
 
11
11
  export default (state = initialState, action) => {
12
12
  switch (action.type) {
13
- case GET_ORGANIZATION_REQUEST:
14
- return state.set('loading', true);
13
+ case GET_ORGANIZATION_REQUEST:
14
+ return state.set('loading', true);
15
15
 
16
- case GET_ORGANIZATION_SUCCESS:
17
- return Immutable({ loading: false, ...action.response });
16
+ case GET_ORGANIZATION_SUCCESS:
17
+ return Immutable({ loading: false, ...action.response });
18
18
 
19
- case GET_ORGANIZATION_FAILURE:
20
- return Immutable({ error: action.error });
19
+ case GET_ORGANIZATION_FAILURE:
20
+ return Immutable({ error: action.error });
21
21
 
22
- default:
23
- return state;
22
+ default:
23
+ return state;
24
24
  }
25
25
  };
@@ -15,10 +15,10 @@ const EnabledRepositoryContent = ({ loading, disableTooltipId, disableRepository
15
15
  <button
16
16
  onClick={disableRepository}
17
17
  style={{
18
- backgroundColor: 'initial',
19
- border: 'none',
20
- color: '#0388ce',
21
- }}
18
+ backgroundColor: 'initial',
19
+ border: 'none',
20
+ color: '#0388ce',
21
+ }}
22
22
  >
23
23
  <i className={cx('fa-2x', 'fa fa-minus-circle')} />
24
24
  </button>
@@ -81,7 +81,7 @@ RepositorySetRepositories.propTypes = {
81
81
  type: PropTypes.string,
82
82
  data: PropTypes.shape({
83
83
  loading: PropTypes.bool.isRequired,
84
- repositories: PropTypes.arrayOf(PropTypes.object),
84
+ repositories: PropTypes.arrayOf(PropTypes.shape({})),
85
85
  error: PropTypes.shape({
86
86
  displayMessage: PropTypes.string,
87
87
  }),
@@ -13,21 +13,21 @@ export const initialSettingsState = Immutable({
13
13
 
14
14
  export default (state = initialSettingsState, action) => {
15
15
  switch (action.type) {
16
- case GET_SETTING_SUCCESS: {
17
- const { name, value } = action.response;
18
- switch (name) {
19
- case AUTOSEARCH_DELAY:
20
- return state.set('autoSearchDelay', value);
21
- case AUTOSEARCH_WHILE_TYPING:
22
- return state.set('autoSearchEnabled', value);
23
- case CONTENT_DISCONNECTED:
24
- return state.set('disconnected', value);
25
- default:
26
- return state;
27
- }
28
- }
29
-
16
+ case GET_SETTING_SUCCESS: {
17
+ const { name, value } = action.response;
18
+ switch (name) {
19
+ case AUTOSEARCH_DELAY:
20
+ return state.set('autoSearchDelay', value);
21
+ case AUTOSEARCH_WHILE_TYPING:
22
+ return state.set('autoSearchEnabled', value);
23
+ case CONTENT_DISCONNECTED:
24
+ return state.set('disconnected', value);
30
25
  default:
31
26
  return state;
27
+ }
28
+ }
29
+
30
+ default:
31
+ return state;
32
32
  }
33
33
  };
@@ -18,29 +18,29 @@ const initialState = Immutable({
18
18
 
19
19
  export default (state = initialState, action) => {
20
20
  switch (action.type) {
21
- case TABLES_REQUEST:
22
- case CREATE_TABLE:
23
- case UPDATE_TABLE:
24
- return state.set('loading', true);
21
+ case TABLES_REQUEST:
22
+ case CREATE_TABLE:
23
+ case UPDATE_TABLE:
24
+ return state.set('loading', true);
25
25
 
26
- case TABLES_SUCCESS:
27
- return state.merge({
28
- loading: false,
29
- ...mapTables(action.payload.results),
30
- });
31
- case CREATE_TABLE_SUCCESS:
32
- case UPDATE_TABLE_SUCCESS:
33
- return state.merge({
34
- loading: false,
35
- ...state,
36
- ...mapTables(action.payload),
37
- });
38
- case TABLES_FAILURE:
39
- case UPDATE_TABLE_FAILURE:
40
- case CREATE_TABLE_FAILURE: {
41
- return state.set('loading', false);
42
- }
43
- default:
44
- return state;
26
+ case TABLES_SUCCESS:
27
+ return state.merge({
28
+ loading: false,
29
+ ...mapTables(action.payload.results),
30
+ });
31
+ case CREATE_TABLE_SUCCESS:
32
+ case UPDATE_TABLE_SUCCESS:
33
+ return state.merge({
34
+ loading: false,
35
+ ...state,
36
+ ...mapTables(action.payload),
37
+ });
38
+ case TABLES_FAILURE:
39
+ case UPDATE_TABLE_FAILURE:
40
+ case CREATE_TABLE_FAILURE: {
41
+ return state.set('loading', false);
42
+ }
43
+ default:
44
+ return state;
45
45
  }
46
46
  };
@@ -44,7 +44,7 @@ const SubscriptionDetailInfo = ({ subscriptionDetails }) => {
44
44
  <td><b>{__(subscriptionAttributes[key])}</b></td>
45
45
  <td>{subscriptionDetailValue(subscriptionDetails, key)}</td>
46
46
  </tr>
47
- ))}
47
+ ))}
48
48
  <tr>
49
49
  <td><b>{__('Limits')}</b></td>
50
50
  <td>{subscriptionLimits(subscriptionDetails)}</td>
@@ -63,7 +63,7 @@ const SubscriptionDetailInfo = ({ subscriptionDetails }) => {
63
63
  <td><b>{__(subscriptionPurposeAttributes[key])}</b></td>
64
64
  <td>{subscriptionDetailValue(subscriptionDetails, key)}</td>
65
65
  </tr>
66
- ))}
66
+ ))}
67
67
  </tbody>
68
68
  </Table>
69
69
  </div>
@@ -22,22 +22,22 @@ const SubscriptionDetailProductContent = ({ productContent }) => {
22
22
  return (
23
23
  <ListView>
24
24
  {listItems.map(({
25
- index,
26
- title,
27
- availableContent,
28
- }) => (
29
- <ListView.Item
30
- key={index}
31
- heading={title}
32
- hideCloseIcon
33
- >
25
+ index,
26
+ title,
27
+ availableContent,
28
+ }) => (
29
+ <ListView.Item
30
+ key={index}
31
+ heading={title}
32
+ hideCloseIcon
33
+ >
34
34
 
35
- <Col sm={12}>
36
- {availableContent.map(content => (
37
- <SubscriptionDetailProduct key={content.id} content={content} />
38
- ))}
39
- </Col>
40
- </ListView.Item>
35
+ <Col sm={12}>
36
+ {availableContent.map(content => (
37
+ <SubscriptionDetailProduct key={content.id} content={content} />
38
+ ))}
39
+ </Col>
40
+ </ListView.Item>
41
41
  ))}
42
42
  </ListView>
43
43
  );
@@ -11,7 +11,7 @@ const SubscriptionDetailProducts = ({ subscriptionDetails }) => (
11
11
  {subscriptionDetails.provided_products &&
12
12
  subscriptionDetails.provided_products.map(prod => (
13
13
  <ListGroupItem key={prod.id}> {prod.name} </ListGroupItem>
14
- ))}
14
+ ))}
15
15
  </ListGroup>
16
16
  </div>
17
17
  );
@@ -20,47 +20,47 @@ const initialState = Immutable({
20
20
 
21
21
  export default (state = initialState, action) => {
22
22
  switch (action.type) {
23
- case SUBSCRIPTION_DETAILS_REQUEST: {
24
- return state.set('loading', true);
25
- }
23
+ case SUBSCRIPTION_DETAILS_REQUEST: {
24
+ return state.set('loading', true);
25
+ }
26
26
 
27
- case PRODUCTS_REQUEST: {
28
- return state.set('loading', true);
29
- }
27
+ case PRODUCTS_REQUEST: {
28
+ return state.set('loading', true);
29
+ }
30
30
 
31
- case SUBSCRIPTION_DETAILS_SUCCESS: {
32
- const subscriptionDetails = action.response;
31
+ case SUBSCRIPTION_DETAILS_SUCCESS: {
32
+ const subscriptionDetails = action.response;
33
33
 
34
- return state.merge({
35
- ...subscriptionDetails,
36
- loading: false,
37
- });
38
- }
34
+ return state.merge({
35
+ ...subscriptionDetails,
36
+ loading: false,
37
+ });
38
+ }
39
39
 
40
- case PRODUCTS_SUCCESS: {
41
- const productContent = { productContent: action.response };
40
+ case PRODUCTS_SUCCESS: {
41
+ const productContent = { productContent: action.response };
42
42
 
43
- return state.merge({
44
- ...productContent,
45
- loading: false,
46
- });
47
- }
43
+ return state.merge({
44
+ ...productContent,
45
+ loading: false,
46
+ });
47
+ }
48
48
 
49
- case SUBSCRIPTION_DETAILS_FAILURE: {
50
- return state.merge({
51
- error: action.payload.message,
52
- loading: false,
53
- });
54
- }
49
+ case SUBSCRIPTION_DETAILS_FAILURE: {
50
+ return state.merge({
51
+ error: action.payload.message,
52
+ loading: false,
53
+ });
54
+ }
55
55
 
56
- case PRODUCTS_FAILURE: {
57
- return state.merge({
58
- error: action.payload.message,
59
- loading: false,
60
- });
61
- }
56
+ case PRODUCTS_FAILURE: {
57
+ return state.merge({
58
+ error: action.payload.message,
59
+ loading: false,
60
+ });
61
+ }
62
62
 
63
- default:
64
- return state;
63
+ default:
64
+ return state;
65
65
  }
66
66
  };
@@ -63,19 +63,19 @@ class SubscriptionDetails extends Component {
63
63
  <BreadcrumbsBar
64
64
  onSwitcherItemClick={(e, url) => this.handleBreadcrumbSwitcherItem(e, url)}
65
65
  data={{
66
- isSwitchable: true,
67
- breadcrumbItems: [
68
- {
69
- caption: __('Subscriptions'),
70
- onClick: () =>
71
- this.props.history.push('/subscriptions'),
72
- },
73
- {
74
- caption: String(subscriptionDetails.name || __('Subscription Details')),
75
- },
76
- ],
77
- resource,
78
- }}
66
+ isSwitchable: true,
67
+ breadcrumbItems: [
68
+ {
69
+ caption: __('Subscriptions'),
70
+ onClick: () =>
71
+ this.props.history.push('/subscriptions'),
72
+ },
73
+ {
74
+ caption: String(subscriptionDetails.name || __('Subscription Details')),
75
+ },
76
+ ],
77
+ resource,
78
+ }}
79
79
  />}
80
80
 
81
81
  <TabContainer id="subscription-tabs-container" defaultActiveKey={1}>
@@ -37,7 +37,7 @@ const AirGappedTypeForm = ({ showUpdate, onUpdate }) => {
37
37
  id="cdn-configuration-type"
38
38
  defaultMessage={__('Red Hat content will be enabled and consumed via the {type} process.')}
39
39
  values={{
40
- type: <strong>{__('Import/Export')}</strong>,
40
+ type: <strong>{__('Import/Export')}</strong>,
41
41
  }}
42
42
  />
43
43
  <br />
@@ -46,10 +46,10 @@ const AirGappedTypeForm = ({ showUpdate, onUpdate }) => {
46
46
  id="cdn-configuration-type-cdn"
47
47
  defaultMessage={__('Click {update} below to save changes.')}
48
48
  values={{
49
- update: <strong>{__('Update')}</strong>,
49
+ update: <strong>{__('Update')}</strong>,
50
50
  }}
51
51
  />
52
- }
52
+ }
53
53
  </p>
54
54
  </div>
55
55
 
@@ -51,8 +51,8 @@ const CdnTypeForm = ({ showUpdate, onUpdate, url }) => {
51
51
  id="cdn-configuration-type"
52
52
  defaultMessage={__('Red Hat content will be consumed from the {type}.')}
53
53
  values={{
54
- type: <strong>{__('Red Hat CDN')}</strong>,
55
- }}
54
+ type: <strong>{__('Red Hat CDN')}</strong>,
55
+ }}
56
56
  />
57
57
  <br />
58
58
  {showUpdate &&
@@ -60,8 +60,8 @@ const CdnTypeForm = ({ showUpdate, onUpdate, url }) => {
60
60
  id="cdn-configuration-type-cdn"
61
61
  defaultMessage={__('Click {update} below to save changes.')}
62
62
  values={{
63
- update: <strong>{__('Update')}</strong>,
64
- }}
63
+ update: <strong>{__('Update')}</strong>,
64
+ }}
65
65
  />
66
66
  }
67
67
  </Text>
@@ -114,7 +114,7 @@ const UpstreamServerTypeForm = ({
114
114
  defaultMessage={__('Red Hat content will be consumed from an {type}.')}
115
115
  values={{
116
116
  type: <strong>{__('upstream Foreman server')}</strong>,
117
- }}
117
+ }}
118
118
  />
119
119
  <br />
120
120
  {showUpdate &&
@@ -122,10 +122,10 @@ const UpstreamServerTypeForm = ({
122
122
  id="cdn-configuration-type-upstream-server"
123
123
  defaultMessage={__('Provide the required information and click {update} below to save changes.')}
124
124
  values={{
125
- update: <strong>{__('Update')}</strong>,
125
+ update: <strong>{__('Update')}</strong>,
126
126
  }}
127
127
  />
128
- }
128
+ }
129
129
  </Text>
130
130
  </div>
131
131
  <FormGroup