katello 4.3.0.rc4 → 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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/vendor.js +0 -1
  3. data/app/controllers/katello/api/v2/api_controller.rb +13 -4
  4. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +4 -1
  5. data/app/controllers/katello/api/v2/content_views_controller.rb +46 -0
  6. data/app/controllers/katello/api/v2/host_packages_controller.rb +21 -1
  7. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +30 -1
  8. data/app/controllers/katello/api/v2/organizations_controller.rb +10 -6
  9. data/app/controllers/katello/api/v2/packages_controller.rb +4 -0
  10. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +10 -1
  11. data/app/controllers/katello/api/v2/repositories_controller.rb +42 -14
  12. data/app/controllers/katello/api/v2/repository_sets_controller.rb +7 -0
  13. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +3 -0
  14. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +32 -0
  15. data/app/controllers/katello/remote_execution_controller.rb +5 -4
  16. data/app/graphql/types/host_collection.rb +18 -0
  17. data/app/helpers/katello/content_source_helper.rb +43 -0
  18. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +4 -0
  19. data/app/lib/actions/katello/cdn_configuration/update.rb +5 -7
  20. data/app/lib/actions/katello/content_view/publish.rb +5 -0
  21. data/app/lib/actions/katello/content_view_version/incremental_update.rb +17 -3
  22. data/app/lib/actions/katello/repository/discover.rb +1 -14
  23. data/app/lib/actions/katello/repository/errata_mail.rb +4 -5
  24. data/app/lib/actions/katello/repository/filtered_index_content.rb +1 -1
  25. data/app/lib/actions/katello/repository/sync.rb +2 -2
  26. data/app/lib/actions/pulp3/abstract.rb +1 -1
  27. data/app/lib/actions/pulp3/abstract_async_task.rb +1 -1
  28. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +14 -4
  29. data/app/lib/actions/pulp3/content_view_version/create_import_history.rb +1 -2
  30. data/app/lib/actions/pulp3/content_view_version/import.rb +7 -0
  31. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +7 -5
  32. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  33. data/app/lib/actions/pulp3/repository/reclaim_space.rb +3 -10
  34. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -0
  35. data/app/lib/katello/concerns/base_template_scope_extensions.rb +11 -0
  36. data/app/lib/katello/errors.rb +3 -3
  37. data/app/lib/katello/logging.rb +6 -1
  38. data/app/lib/katello/repo_discovery.rb +27 -19
  39. data/app/lib/katello/resources/cdn/katello_cdn.rb +41 -3
  40. data/app/lib/katello/resources/cdn.rb +4 -2
  41. data/app/lib/katello/util/deduplication_migrator.rb +105 -0
  42. data/app/lib/katello/util/pulpcore_content_filters.rb +2 -1
  43. data/app/models/katello/candlepin/repository_mapper.rb +3 -2
  44. data/app/models/katello/cdn_configuration.rb +38 -6
  45. data/app/models/katello/concerns/audit_comment_extensions.rb +17 -0
  46. data/app/models/katello/concerns/host_managed_extensions.rb +34 -2
  47. data/app/models/katello/concerns/organization_extensions.rb +5 -1
  48. data/app/models/katello/concerns/pulp_database_unit.rb +59 -173
  49. data/app/models/katello/concerns/remote_execution_proxy_selector_extensions.rb +11 -0
  50. data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
  51. data/app/models/katello/content_view.rb +4 -4
  52. data/app/models/katello/content_view_filter.rb +1 -1
  53. data/app/models/katello/content_view_history.rb +1 -1
  54. data/app/models/katello/content_view_version.rb +6 -2
  55. data/app/models/katello/content_view_version_export_history.rb +3 -2
  56. data/app/models/katello/content_view_version_import_history.rb +4 -4
  57. data/app/models/katello/deb.rb +1 -3
  58. data/app/models/katello/docker_meta_tag.rb +1 -1
  59. data/app/models/katello/erratum.rb +0 -15
  60. data/app/models/katello/glue/provider.rb +1 -1
  61. data/app/models/katello/glue/pulp/repos.rb +3 -1
  62. data/app/models/katello/host/content_facet.rb +2 -27
  63. data/app/models/katello/host/info_provider.rb +9 -0
  64. data/app/models/katello/host/subscription_facet.rb +2 -2
  65. data/app/models/katello/host_available_module_stream.rb +10 -0
  66. data/app/models/katello/hostgroup/content_facet.rb +2 -2
  67. data/app/models/katello/installed_package.rb +1 -0
  68. data/app/models/katello/product.rb +1 -1
  69. data/app/models/katello/product_content.rb +2 -2
  70. data/app/models/katello/repository.rb +13 -12
  71. data/app/models/katello/root_repository.rb +65 -16
  72. data/app/models/katello/rpm.rb +8 -2
  73. data/app/models/setting/content.rb +15 -5
  74. data/app/services/cert/rhsm_client.rb +1 -5
  75. data/app/services/katello/component_view_presenter.rb +1 -1
  76. data/app/services/katello/content_unit_indexer.rb +166 -0
  77. data/app/services/katello/organization_creator.rb +23 -8
  78. data/app/services/katello/pulp/repository/docker.rb +1 -1
  79. data/app/services/katello/pulp/repository/yum.rb +0 -54
  80. data/app/services/katello/pulp/repository.rb +0 -6
  81. data/app/services/katello/pulp3/ansible_collection.rb +26 -10
  82. data/app/services/katello/pulp3/api/apt.rb +7 -0
  83. data/app/services/katello/pulp3/api/yum.rb +4 -0
  84. data/app/services/katello/pulp3/content_view_version/import.rb +11 -2
  85. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +1 -1
  86. data/app/services/katello/pulp3/deb.rb +10 -9
  87. data/app/services/katello/pulp3/docker_manifest.rb +6 -5
  88. data/app/services/katello/pulp3/docker_manifest_list.rb +23 -6
  89. data/app/services/katello/pulp3/docker_tag.rb +16 -7
  90. data/app/services/katello/pulp3/erratum.rb +51 -56
  91. data/app/services/katello/pulp3/file_unit.rb +9 -6
  92. data/app/services/katello/pulp3/generic_content_unit.rb +11 -12
  93. data/app/services/katello/pulp3/module_stream.rb +76 -30
  94. data/app/services/katello/pulp3/package_group.rb +5 -5
  95. data/app/services/katello/pulp3/pulp_content_unit.rb +19 -11
  96. data/app/services/katello/pulp3/repository/apt.rb +5 -3
  97. data/app/services/katello/pulp3/repository/docker.rb +14 -7
  98. data/app/services/katello/pulp3/repository/generic.rb +1 -1
  99. data/app/services/katello/pulp3/repository/yum.rb +23 -16
  100. data/app/services/katello/pulp3/repository.rb +31 -10
  101. data/app/services/katello/pulp3/repository_mirror.rb +18 -4
  102. data/app/services/katello/pulp3/rpm.rb +13 -13
  103. data/app/services/katello/pulp3/srpm.rb +10 -9
  104. data/app/services/katello/registration_manager.rb +1 -1
  105. data/app/services/katello/repository_type.rb +15 -4
  106. data/app/services/katello/repository_type_manager.rb +1 -1
  107. data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
  108. data/app/services/katello/upstream_connection_checker.rb +2 -2
  109. data/app/views/foreman/job_templates/change_content_source.erb +1 -31
  110. data/app/views/foreman/job_templates/install_errata.erb +6 -9
  111. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +26 -0
  112. data/app/views/foreman/job_templates/install_packages_by_search_query.erb +19 -0
  113. data/app/views/foreman/job_templates/remove_packages_by_search_query.erb +19 -0
  114. data/app/views/foreman/job_templates/update_packages_by_search_query.erb +19 -0
  115. data/app/views/katello/api/v2/cdn_configurations/show.json.rabl +1 -1
  116. data/app/views/katello/api/v2/content_views/base.json.rabl +8 -4
  117. data/app/views/katello/api/v2/environments/show.json.rabl +9 -0
  118. data/app/views/katello/api/v2/host_module_streams/base.json.rabl +1 -0
  119. data/app/views/katello/api/v2/repositories/base.json.rabl +1 -0
  120. data/app/views/katello/api/v2/repositories/show.json.rabl +3 -1
  121. data/app/views/katello/layouts/react.html.erb +0 -1
  122. data/app/views/katello/sync_management/_repo.html.erb +36 -25
  123. data/config/initializers/monkeys.rb +0 -1
  124. data/config/routes/api/v2.rb +1 -0
  125. data/config/routes/overrides.rb +3 -0
  126. data/config/routes.rb +2 -0
  127. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  128. data/db/migrate/20180612164926_add_content_org_id.rb +2 -2
  129. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +2 -0
  130. data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +11 -2
  131. data/db/migrate/20211201154845_add_unique_indexes.rb +20 -0
  132. data/db/migrate/20211202172358_add_repository_mirroring_policy.rb +26 -0
  133. data/db/migrate/20211208034230_add_content_view_and_lifecycle_environment.rb +6 -0
  134. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +144 -0
  135. data/db/migrate/20220110223754_update_disconnected_settings.rb +20 -0
  136. data/db/migrate/20220120163252_fix_docker_download_policy.rb +11 -0
  137. data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +22 -0
  138. data/db/migrate/20220127120843_fix_debian_download_policy.rb +11 -0
  139. data/db/migrate/20220204171908_rename_docker_tags_whitelist_and_add_exclude_tags.rb +8 -0
  140. data/db/migrate/20220207140355_change_deb_attributes_size_limit.rb +7 -0
  141. data/db/migrate/20220209205137_expand_sync_timeout_settings.rb +23 -0
  142. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  143. data/engines/bastion/app/views/bastion/layouts/application.html.erb +0 -1
  144. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +0 -1
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.controller.js +1 -1
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html +1 -1
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment.html +26 -1
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +10 -3
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +212 -152
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -0
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +29 -10
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +2 -3
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +8 -3
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +49 -35
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/mirroring-policy.service.js +30 -0
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +29 -6
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +48 -23
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +5 -4
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +4 -3
  162. data/lib/katello/engine.rb +4 -0
  163. data/lib/katello/permission_creator.rb +1 -1
  164. data/lib/katello/permissions/host_permissions.rb +3 -1
  165. data/lib/katello/plugin.rb +9 -1
  166. data/lib/katello/repository_types/deb.rb +0 -1
  167. data/lib/katello/repository_types/docker.rb +4 -4
  168. data/lib/katello/repository_types/file.rb +0 -1
  169. data/lib/katello/repository_types/ostree.rb +4 -6
  170. data/lib/katello/repository_types/python.rb +5 -1
  171. data/lib/katello/repository_types/yum.rb +2 -9
  172. data/lib/katello/tasks/content_view_import_only.rake +34 -0
  173. data/lib/katello/tasks/import_applicability.rake +1 -1
  174. data/lib/katello/tasks/jenkins.rake +0 -2
  175. data/lib/katello/tasks/repository.rake +4 -1
  176. data/lib/katello/tasks/upgrades/4.4/publish_import_cvvs.rake +17 -0
  177. data/lib/katello/version.rb +1 -1
  178. data/locale/action_names.rb +8 -7
  179. data/locale/bn/katello.po +1402 -650
  180. data/locale/cs/katello.po +1217 -96
  181. data/locale/de/katello.po +2359 -1347
  182. data/locale/en/katello.po +1216 -94
  183. data/locale/es/katello.po +2201 -1172
  184. data/locale/fr/katello.po +2601 -1615
  185. data/locale/gu/katello.po +1564 -814
  186. data/locale/hi/katello.po +1563 -810
  187. data/locale/it/katello.po +1311 -282
  188. data/locale/ja/katello.po +2534 -1518
  189. data/locale/katello.pot +3430 -1326
  190. data/locale/kn/katello.po +1564 -812
  191. data/locale/ko/katello.po +1441 -409
  192. data/locale/mr/katello.po +1564 -776
  193. data/locale/or/katello.po +1565 -813
  194. data/locale/pa/katello.po +1559 -792
  195. data/locale/pt/katello.po +1314 -277
  196. data/locale/pt_BR/katello.po +2226 -1181
  197. data/locale/ru/katello.po +1587 -563
  198. data/locale/ta/katello.po +1373 -619
  199. data/locale/te/katello.po +1564 -810
  200. data/locale/zh_CN/katello.po +2936 -1890
  201. data/locale/zh_TW/katello.po +1508 -606
  202. data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +3 -2
  203. data/webpack/components/ActionableDetail.js +35 -21
  204. data/webpack/components/Content/Details/ContentDetails.js +1 -1
  205. data/webpack/components/Content/Details/__tests__/ContentDetailInfo.test.js +0 -2
  206. data/webpack/components/Content/Details/__tests__/ContentDetailRepositories.test.js +0 -2
  207. data/webpack/components/Content/Details/__tests__/ContentDetails.test.js +0 -2
  208. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +1 -1
  209. data/webpack/components/Content/__tests__/ContentPage.test.js +0 -2
  210. data/webpack/components/Content/__tests__/ContentTable.test.js +0 -2
  211. data/webpack/components/EditableSwitch.js +8 -2
  212. data/webpack/components/EditableTextInput/EditableTextInput.js +44 -86
  213. data/webpack/components/EditableTextInput/__tests__/editableTextInput.test.js +3 -3
  214. data/webpack/components/Errata/index.js +95 -29
  215. data/webpack/components/ErratumTypeLabel.js +16 -16
  216. data/webpack/components/MultiSelect/index.js +2 -2
  217. data/webpack/components/Packages/index.js +1 -1
  218. data/webpack/components/RoutedTabs/index.js +2 -1
  219. data/webpack/components/Search/Search.js +5 -2
  220. data/webpack/components/Search/__tests__/search.test.js +2 -3
  221. data/webpack/components/Select/Select.js +1 -1
  222. data/webpack/components/SelectOrg/SelectOrgReducer.js +15 -15
  223. data/webpack/components/SelectOrg/SetOrganization.js +2 -2
  224. data/webpack/components/Table/PageControls.js +3 -6
  225. data/webpack/components/Table/TableHooks.js +47 -7
  226. data/webpack/components/Table/TableWrapper.js +25 -7
  227. data/webpack/components/TypeAhead/TypeAhead.js +5 -1
  228. data/webpack/components/TypeAhead/helpers/commonPropTypes.js +1 -1
  229. data/webpack/components/TypeAhead/helpers/helpers.js +14 -14
  230. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +1 -1
  231. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +4 -1
  232. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +2 -1
  233. data/webpack/components/WithOrganization/withOrganization.js +3 -3
  234. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +1 -1
  235. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +108 -0
  236. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +56 -0
  237. data/webpack/components/extensions/HostDetails/HostDetailsActions.js +2 -0
  238. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +49 -2
  239. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +14 -1
  240. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +6 -4
  241. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +1 -0
  242. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +1 -0
  243. data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.js → ErrataTab/ErrataTab.js} +86 -75
  244. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.scss +11 -0
  245. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionContents.js → ErrataTab/ErratumExpansionContents.js} +3 -3
  246. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionDetail.js → ErrataTab/ErratumExpansionDetail.js} +0 -0
  247. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataActions.js +3 -3
  248. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataConstants.js +11 -0
  249. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataSelectors.js +0 -0
  250. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsActions.js +16 -0
  251. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsConstants.js +3 -0
  252. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsSelectors.js +19 -0
  253. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +241 -0
  254. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/moduleStreamsTab.test.js +108 -0
  255. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/modules.fixtures.json +34 -0
  256. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.js +279 -0
  257. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.scss +3 -0
  258. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +357 -64
  259. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.scss +3 -7
  260. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +103 -4
  261. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +6 -1
  262. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +45 -42
  263. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.scss +3 -3
  264. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerEmptyState.js → TracesTab/EnableTracerEmptyState.js} +0 -0
  265. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerModal.js → TracesTab/EnableTracerModal.js} +3 -2
  266. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesActions.js → TracesTab/HostTracesActions.js} +2 -2
  267. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesConstants.js → TracesTab/HostTracesConstants.js} +0 -0
  268. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesSelectors.js → TracesTab/HostTracesSelectors.js} +0 -0
  269. data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.js → TracesTab/TracesTab.js} +66 -61
  270. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.scss +11 -0
  271. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +17 -18
  272. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +385 -0
  273. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +1 -1
  274. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +312 -11
  275. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +2 -2
  276. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +26 -30
  277. data/webpack/components/extensions/HostDetails/Tabs/__tests__/yumInstallablePackages.fixtures.json +72 -0
  278. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +25 -5
  279. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesActions.js +18 -0
  280. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesConstants.js +3 -0
  281. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesSelectors.js +16 -0
  282. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +19 -0
  283. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +4 -0
  284. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
  285. data/webpack/components/extensions/RegistrationCommands/fields/LifecycleEnvironment.js +1 -1
  286. data/webpack/components/extensions/about/SystemStatuses.js +1 -1
  287. data/webpack/components/extensions/about/SystemStatusesReducer.js +10 -10
  288. data/webpack/components/pf3Table/components/Table.js +4 -5
  289. data/webpack/components/pf3Table/components/Table.test.js +0 -3
  290. data/webpack/components/pf3Table/components/TableBody.js +2 -2
  291. data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +9 -8
  292. data/webpack/containers/Application/config.js +6 -1
  293. data/webpack/containers/Application/overrides.scss +56 -7
  294. data/webpack/global_index.js +4 -1
  295. data/webpack/global_test_setup.js +1 -1
  296. data/webpack/index.js +7 -0
  297. data/webpack/redux/OrganizationProducts/OrganizationProductsReducer.js +15 -15
  298. data/webpack/redux/reducers/RedHatRepositories/enabled.js +43 -43
  299. data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.js +43 -43
  300. data/webpack/redux/reducers/RedHatRepositories/sets.js +31 -31
  301. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +26 -26
  302. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +19 -19
  303. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -2
  304. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -2
  305. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -2
  306. data/webpack/scenes/Content/ContentConfig.js +55 -5
  307. data/webpack/scenes/Content/ContentPage.js +5 -5
  308. data/webpack/scenes/Content/Details/ContentDetails.js +23 -21
  309. data/webpack/scenes/Content/Details/ContentInfo.js +2 -2
  310. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -1
  311. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +4 -4
  312. data/webpack/scenes/Content/Table/ContentTable.js +2 -2
  313. data/webpack/scenes/Content/__tests__/contentTable.test.js +3 -3
  314. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -4
  315. data/webpack/scenes/ContentViews/ContentViewsPage.js +17 -13
  316. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -1
  317. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +3 -2
  318. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +2 -2
  319. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +6 -6
  320. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +22 -11
  321. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +31 -18
  322. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +1 -1
  323. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +2 -2
  324. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +22 -28
  325. data/webpack/scenes/ContentViews/Details/ContentViewDetailReducer.js +8 -8
  326. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +5 -5
  327. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +32 -30
  328. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +9 -4
  329. data/webpack/scenes/ContentViews/Details/DetailsContainer.js +14 -17
  330. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +3 -0
  331. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +1 -1
  332. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +8 -8
  333. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +4 -4
  334. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +6 -6
  335. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +16 -9
  336. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +46 -46
  337. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +17 -17
  338. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +17 -17
  339. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +4 -4
  340. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +2 -2
  341. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +17 -11
  342. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +1 -1
  343. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +2 -2
  344. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +17 -17
  345. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -3
  346. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +2 -9
  347. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +3 -5
  348. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +2 -10
  349. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +2 -3
  350. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +2 -3
  351. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +2 -2
  352. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +1 -1
  353. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +24 -3
  354. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +11 -5
  355. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +28 -28
  356. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +1 -1
  357. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +18 -18
  358. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +3 -3
  359. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +3 -3
  360. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -6
  361. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -1
  362. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -1
  363. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +31 -35
  364. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +9 -8
  365. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.scss +5 -2
  366. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +39 -40
  367. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +46 -34
  368. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +66 -49
  369. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +5 -5
  370. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +3 -3
  371. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +5 -3
  372. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +2 -2
  373. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +5 -5
  374. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +3 -3
  375. data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +1 -1
  376. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +1 -1
  377. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +18 -18
  378. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +10 -10
  379. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +2 -2
  380. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +8 -8
  381. data/webpack/scenes/Hosts/ChangeContentSource/actions.js +43 -0
  382. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +87 -0
  383. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +90 -0
  384. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +43 -0
  385. data/webpack/scenes/Hosts/ChangeContentSource/constants.js +3 -0
  386. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +27 -0
  387. data/webpack/scenes/Hosts/ChangeContentSource/index.js +126 -0
  388. data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +42 -0
  389. data/webpack/scenes/Hosts/ChangeContentSource/styles.scss +11 -0
  390. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsReducer.js +18 -18
  391. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ModuleStreamDetailProfiles.test.js +0 -1
  392. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetails.test.js +0 -2
  393. data/webpack/scenes/ModuleStreams/ModuleStreamsReducer.js +26 -26
  394. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +0 -2
  395. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +0 -2
  396. data/webpack/scenes/Organizations/OrganizationActions.js +5 -1
  397. data/webpack/scenes/Organizations/OrganizationReducer.js +8 -8
  398. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +31 -1
  399. data/webpack/scenes/RedHatRepositories/__tests__/RedHatRepositoriesPage.test.js +16 -0
  400. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +11 -2
  401. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepositoryContent.js +4 -4
  402. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositories.js +1 -1
  403. data/webpack/scenes/RedHatRepositories/helpers.js +5 -5
  404. data/webpack/scenes/RedHatRepositories/index.js +11 -3
  405. data/webpack/scenes/Settings/SettingsReducer.js +14 -14
  406. data/webpack/scenes/Settings/Tables/TableReducer.js +23 -23
  407. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailInfo.js +2 -2
  408. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProductContent.js +15 -15
  409. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProducts.js +1 -1
  410. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailReducer.js +34 -34
  411. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +13 -13
  412. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/AirGappedTypeForm.js +81 -0
  413. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +13 -0
  414. data/webpack/scenes/Subscriptions/Manifest/{CdnConfigurationForm.scss → CdnConfigurationTab/CdnConfigurationForm.scss} +0 -0
  415. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +106 -0
  416. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/UpstreamServerTypeForm.js +259 -0
  417. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/AirGappedTypeForm.test.js +44 -0
  418. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +67 -0
  419. data/webpack/scenes/Subscriptions/Manifest/{__tests__/CdnConfigurationForm.test.js → CdnConfigurationTab/__tests__/UpstreamServerTypeForm.test.js} +46 -17
  420. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +97 -0
  421. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +11 -6
  422. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +16 -16
  423. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +149 -149
  424. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsReducer.js +41 -41
  425. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsPage.test.js +0 -1
  426. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +0 -1
  427. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +3 -2
  428. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +4 -0
  429. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +9 -0
  430. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Dialogs/DeleteDialog.js +6 -6
  431. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +12 -12
  432. data/webpack/scenes/Tasks/TaskActions.js +1 -1
  433. data/webpack/scenes/Tasks/__tests__/__snapshots__/TaskActions.test.js.snap +3 -2
  434. data/webpack/services/api/testHelpers.js +5 -3
  435. data/webpack/services/index.js +36 -36
  436. data/webpack/utils/helpers.js +11 -8
  437. metadata +98 -60
  438. data/app/services/katello/pulp/deb.rb +0 -55
  439. data/app/services/katello/pulp/distribution.rb +0 -7
  440. data/app/services/katello/pulp/docker_blob.rb +0 -7
  441. data/app/services/katello/pulp/docker_manifest.rb +0 -13
  442. data/app/services/katello/pulp/docker_manifest_list.rb +0 -14
  443. data/app/services/katello/pulp/docker_tag.rb +0 -14
  444. data/app/services/katello/pulp/erratum.rb +0 -129
  445. data/app/services/katello/pulp/file_unit.rb +0 -21
  446. data/app/services/katello/pulp/module_stream.rb +0 -39
  447. data/app/services/katello/pulp/package_category.rb +0 -7
  448. data/app/services/katello/pulp/package_group.rb +0 -20
  449. data/app/services/katello/pulp/pulp_content_unit.rb +0 -156
  450. data/app/services/katello/pulp/rpm.rb +0 -57
  451. data/app/services/katello/pulp/srpm.rb +0 -29
  452. data/app/services/katello/pulp/yum_metadata_file.rb +0 -30
  453. data/lib/monkeys/pulp3_13_checksumfix.rb +0 -17
  454. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +0 -2
  455. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
  456. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.scss +0 -16
  457. data/webpack/components/extensions/HostDetails/Tabs/TracesTab.scss +0 -12
  458. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationForm.js +0 -185
@@ -1,9 +1,12 @@
1
1
  import React, { useState, useMemo } from 'react';
2
2
  import { last } from 'lodash';
3
3
  import PropTypes from 'prop-types';
4
- import { Modal, ModalVariant, FormSelect,
4
+ import {
5
+ Flex, Modal, ModalVariant, FormSelect,
5
6
  FormSelectOption, Checkbox, Form, FormGroup,
6
- ActionGroup, Button, Card, CardTitle, CardBody } from '@patternfly/react-core';
7
+ ActionGroup, Button, Card, CardTitle, CardBody, Tooltip,
8
+ } from '@patternfly/react-core';
9
+ import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons';
7
10
  import { useDispatch } from 'react-redux';
8
11
  import { translate as __ } from 'foremanReact/common/I18n';
9
12
  import { addComponent } from '../ContentViewDetailActions';
@@ -75,25 +78,35 @@ const ComponentContentViewBulkAddModal = ({ cvId, rowsToAdd, onClose }) => {
75
78
  aria-label={`version-select-${componentCvName}`}
76
79
  >
77
80
  {versionSelectOptions[componentCvName].map((version, index) => (
78
- // eslint-disable-next-line react/no-array-index-key
81
+ // eslint-disable-next-line react/no-array-index-key
79
82
  <FormSelectOption aria-label={`${componentCvName}-${version.version}`} key={index} value={version.id} label={`${__('Version')} ${version.version}`} />
80
- ))}
83
+ ))}
81
84
  </FormSelect>
82
85
  </FormGroup>
83
86
  <FormGroup style={{ marginTop: '1em' }}>
84
- <Checkbox
85
- style={{ marginTop: 0 }}
86
- id={`latest-${componentCvName}`}
87
- name="latest"
88
- label={__('Always update to latest version')}
89
- isChecked={selectedComponentLatest[componentCvName]}
90
- onChange={checked =>
91
- setSelectedComponentLatest({
92
- ...selectedComponentLatest,
93
- ...{ [componentCvName]: checked },
94
- })
95
- }
96
- />
87
+ <Flex style={{ display: 'inline-flex' }}>
88
+ <Checkbox
89
+ style={{ marginTop: 0 }}
90
+ id={`latest-${componentCvName}`}
91
+ name="latest"
92
+ label={__('Always update to latest version')}
93
+ isChecked={selectedComponentLatest[componentCvName]}
94
+ onChange={checked =>
95
+ setSelectedComponentLatest({
96
+ ...selectedComponentLatest,
97
+ ...{ [componentCvName]: checked },
98
+ })
99
+ }
100
+ />
101
+ <Tooltip
102
+ position="top"
103
+ content={
104
+ __('This content view will be automatically updated to the latest version.')
105
+ }
106
+ >
107
+ <OutlinedQuestionCircleIcon />
108
+ </Tooltip>
109
+ </Flex>
97
110
  </FormGroup>
98
111
  </CardBody>
99
112
  </Card>
@@ -103,7 +116,7 @@ const ComponentContentViewBulkAddModal = ({ cvId, rowsToAdd, onClose }) => {
103
116
  <Button variant="link" onClick={onClose}>{__('Cancel')}</Button>
104
117
  </ActionGroup>
105
118
  </Form>
106
- </Modal>);
119
+ </Modal >);
107
120
  };
108
121
 
109
122
  ComponentContentViewBulkAddModal.propTypes = {
@@ -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>
@@ -25,8 +25,8 @@ let autoSearchScope;
25
25
  beforeEach(() => {
26
26
  const { results } = cvComponentData;
27
27
  [firstComponent] = results;
28
- searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 500);
29
- autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing', true);
28
+ searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
29
+ autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
30
30
  });
31
31
 
32
32
  afterEach(() => {
@@ -1,6 +1,6 @@
1
1
  import { API_OPERATIONS, APIActions, get, put, post } from 'foremanReact/redux/API';
2
- import { addToast } from 'foremanReact/redux/actions/toasts';
3
2
  import { translate as __ } from 'foremanReact/common/I18n';
3
+ import { lowerCase } from 'lodash';
4
4
  import {
5
5
  RPM_PACKAGES_CONTENT,
6
6
  RPM_PACKAGE_GROUPS_CONTENT,
@@ -45,11 +45,11 @@ import {
45
45
  ERRATA_CONTENT,
46
46
  MODULE_STREAMS_CONTENT,
47
47
  DEB_PACKAGES_CONTENT,
48
- ANSIBLE_COLLECTIONS_CONTENT,
49
48
  DOCKER_TAGS_CONTENT,
49
+ generatedContentKey,
50
50
  } from '../ContentViewsConstants';
51
51
  import api, { foremanApi, orgId } from '../../../services/api';
52
- import { getResponseErrorMsgs, apiError } from '../../../utils/helpers';
52
+ import { getResponseErrorMsgs } from '../../../utils/helpers';
53
53
  import { renderTaskStartedToast } from '../../Tasks/helpers';
54
54
  import { cvErrorToast } from '../ContentViewsActions';
55
55
 
@@ -60,15 +60,13 @@ const getContentViewDetails = (cvId, extraParams = {}) => get({
60
60
  url: api.getApiUrl(`/content_views/${cvId}`),
61
61
  });
62
62
 
63
- const cvUpdateSuccess = (response, dispatch) => {
64
- const { data: { id } } = response;
65
- // Update CV info in redux with the updated CV info from API
66
- dispatch(getContentViewDetails(id));
67
- return dispatch(addToast({
68
- type: 'success',
69
- message: __(' Content view updated'),
70
- }));
71
- };
63
+ export const getContent = (pluralLabel, params) => get({
64
+ type: API_OPERATIONS.GET,
65
+ key: generatedContentKey(pluralLabel),
66
+ url: api.getApiUrl(`/${pluralLabel}`),
67
+ params,
68
+ errorToast: error => __(`Something went wrong while fetching ${lowerCase(pluralLabel)}! ${getResponseErrorMsgs(error.response)}`),
69
+ });
72
70
 
73
71
  export const getRPMPackages = params => get({
74
72
  type: API_OPERATIONS.GET,
@@ -86,19 +84,21 @@ export const getFiles = params => get({
86
84
  errorToast: error => __(`Something went wrong while fetching files! ${getResponseErrorMsgs(error.response)}`),
87
85
  });
88
86
 
89
- export const updateContentView = (cvId, params) => dispatch => dispatch(put({
87
+ export const updateContentView = (cvId, params, handleSuccess) => put({
90
88
  type: API_OPERATIONS.PUT,
91
89
  key: cvDetailsKey(cvId),
92
90
  url: api.getApiUrl(`/content_views/${cvId}`),
93
- params,
94
- handleSuccess: response => cvUpdateSuccess(response, dispatch),
95
- handleError: error => dispatch(apiError(null, error)),
91
+ handleSuccess,
92
+ params: { include_permissions: true, ...params },
93
+ successToast: () => __(' Content view updated'),
94
+ errorToast: error => getResponseErrorMsgs(error.response),
95
+ updateData: (_prevState, respState) => respState,
96
96
  actionTypes: {
97
97
  REQUEST: UPDATE_CONTENT_VIEW,
98
98
  SUCCESS: UPDATE_CONTENT_VIEW_SUCCESS,
99
99
  FAILURE: UPDATE_CONTENT_VIEW_FAILURE,
100
100
  },
101
- }));
101
+ });
102
102
 
103
103
  export const addComponent = params => put({
104
104
  type: API_OPERATIONS.PUT,
@@ -132,15 +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)}`),
136
- });
137
-
138
- export const getAnsibleCollections = params => get({
139
- type: API_OPERATIONS.GET,
140
- key: ANSIBLE_COLLECTIONS_CONTENT,
141
- url: api.getApiUrl('/ansible_collections'),
142
- params,
143
- errorToast: error => __(`Something went wrong while getting ansible collections! ${getResponseErrorMsgs(error.response)}`),
135
+ errorToast: error => __(`Something went wrong while getting container tags! ${getResponseErrorMsgs(error.response)}`),
144
136
  });
145
137
 
146
138
  export const getErrata = params => get({
@@ -176,7 +168,7 @@ export const getRepositories = params => get({
176
168
  });
177
169
 
178
170
  export const getContentViewRepositories = (cvId, params, status) => {
179
- const apiParams = { ...params };
171
+ const apiParams = { organization_id: orgId(), ...params };
180
172
  let apiUrl = `/content_views/${cvId}/repositories`;
181
173
 
182
174
  if (status === ALL_STATUSES) {
@@ -205,12 +197,13 @@ export const getFilterRepositories = (cvId, filterId, params) => {
205
197
  });
206
198
  };
207
199
 
208
- export const editCVFilter = (filterId, params, handleSuccess) => put({
200
+ export const editCVFilter = (filterId, params, handleSuccess, handleError) => put({
209
201
  type: API_OPERATIONS.PUT,
210
202
  key: EDIT_CONTENT_VIEW_FILTER,
211
203
  url: api.getApiUrl(`/content_view_filters/${filterId}`),
212
204
  params,
213
205
  handleSuccess,
206
+ handleError,
214
207
  successToast: () => __('Filter edited'),
215
208
  errorToast: error => __(`Something went wrong while editing the filter! ${getResponseErrorMsgs(error.response)}`),
216
209
  });
@@ -416,6 +409,7 @@ export const editContentViewVersionDetails = (versionId, cvId, params, handleSuc
416
409
  url: api.getApiUrl(`/content_view_versions/${versionId}`),
417
410
  params,
418
411
  handleSuccess,
412
+ successToast: () => __('Version details updated.'),
419
413
  errorToast: error => __(`Something went wrong while editing version details. ${getResponseErrorMsgs(error.response)}`),
420
414
  });
421
415
 
@@ -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
  };
@@ -33,8 +33,8 @@ import {
33
33
  ERRATA_CONTENT,
34
34
  MODULE_STREAMS_CONTENT,
35
35
  DEB_PACKAGES_CONTENT,
36
- ANSIBLE_COLLECTIONS_CONTENT,
37
36
  DOCKER_TAGS_CONTENT,
37
+ generatedContentKey,
38
38
  } from '../ContentViewsConstants';
39
39
  import { pollTaskKey } from '../../Tasks/helpers';
40
40
 
@@ -131,11 +131,11 @@ export const selectCVFilterRules = (state, filterId) =>
131
131
  export const selectCVFilterRulesStatus = (state, filterId) =>
132
132
  selectAPIStatus(state, cvFilterRulesKey(filterId)) || STATUS.PENDING;
133
133
 
134
- export const selectAnsibleCollections = state =>
135
- selectAPIResponse(state, ANSIBLE_COLLECTIONS_CONTENT);
134
+ export const selectContent = (pluralLabel, state) =>
135
+ selectAPIResponse(state, generatedContentKey(pluralLabel));
136
136
 
137
- export const selectAnsibleCollectionsStatus = state =>
138
- selectAPIStatus(state, ANSIBLE_COLLECTIONS_CONTENT) || STATUS.PENDING;
137
+ export const selectContentStatus = (pluralLabel, state) =>
138
+ selectAPIStatus(state, generatedContentKey(pluralLabel)) || STATUS.PENDING;
139
139
 
140
140
  export const selectDockerTags = state =>
141
141
  selectAPIResponse(state, DOCKER_TAGS_CONTENT);
@@ -1,7 +1,8 @@
1
1
  import React, { useState } from 'react';
2
2
  import { useSelector, shallowEqual } from 'react-redux';
3
3
  import { useParams } from 'react-router-dom';
4
- import { Grid,
4
+ import {
5
+ Grid,
5
6
  GridItem,
6
7
  TextContent,
7
8
  Text,
@@ -12,7 +13,8 @@ import { Grid,
12
13
  Dropdown,
13
14
  DropdownItem,
14
15
  KebabToggle,
15
- DropdownPosition } from '@patternfly/react-core';
16
+ DropdownPosition,
17
+ } from '@patternfly/react-core';
16
18
  import { ExternalLinkAltIcon } from '@patternfly/react-icons';
17
19
  import { translate as __ } from 'foremanReact/common/I18n';
18
20
 
@@ -76,7 +78,7 @@ export default () => {
76
78
  },
77
79
  ...composite ? [{
78
80
  key: 'contentviews',
79
- title: __('Content Views'),
81
+ title: __('Content views'),
80
82
  content: <ContentViewComponents {...{ cvId, details }} />,
81
83
  }] : [{
82
84
  key: 'repositories',
@@ -97,14 +99,14 @@ export default () => {
97
99
 
98
100
  return (
99
101
  <>
100
- <Grid className="grid-with-margin">
101
- <DetailsContainer cvId={cvId}>
102
- <>
102
+ <DetailsContainer cvId={cvId}>
103
+ <Grid>
104
+ <Grid className="margin-16-24">
103
105
  <CVBreadCrumb />
104
- <GridItem xl={8} lg={7} sm={12} style={{ margin: '10px 0' }}>
106
+ <GridItem md={8} sm={12}>
105
107
  <Flex alignItems={{
106
- default: 'alignItemsCenter',
107
- }}
108
+ default: 'alignItemsCenter',
109
+ }}
108
110
  >
109
111
  <FlexItem>
110
112
  <TextContent>
@@ -115,23 +117,23 @@ export default () => {
115
117
  </FlexItem>
116
118
  </Flex>
117
119
  </GridItem>
118
- <GridItem xl={4} lg={5} sm={12} >
120
+ <GridItem md={4} sm={12} style={{ minWidth: '380px' }}>
119
121
  <Flex justifyContent={{ lg: 'justifyContentFlexEnd', sm: 'justifyContentFlexStart' }}>
120
122
  {hasPermission(permissions, 'publish_content_views') &&
121
- <FlexItem>
122
- <Button onClick={() => { setIsPublishModalOpen(true); }} variant="primary" aria-label="publish_content_view">
123
- {__('Publish new version')}
124
- </Button>
125
- {isPublishModalOpen && <PublishContentViewWizard
126
- details={details}
127
- show={isPublishModalOpen}
128
- setIsOpen={setIsPublishModalOpen}
129
- currentStep={currentStep}
130
- setCurrentStep={setCurrentStep}
131
- aria-label="publish_content_view_modal"
132
- />}
133
- </FlexItem>
134
- }
123
+ <FlexItem>
124
+ <Button onClick={() => { setIsPublishModalOpen(true); }} variant="primary" aria-label="publish_content_view">
125
+ {__('Publish new version')}
126
+ </Button>
127
+ {isPublishModalOpen && <PublishContentViewWizard
128
+ details={details}
129
+ show={isPublishModalOpen}
130
+ setIsOpen={setIsPublishModalOpen}
131
+ currentStep={currentStep}
132
+ setCurrentStep={setCurrentStep}
133
+ aria-label="publish_content_view_modal"
134
+ />}
135
+ </FlexItem>
136
+ }
135
137
  <FlexItem>
136
138
  <Button
137
139
  component="a"
@@ -156,12 +158,12 @@ export default () => {
156
158
  </FlexItem>
157
159
  </Flex>
158
160
  </GridItem>
159
- <GridItem span={12}>
160
- <RoutedTabs tabs={tabs} defaultTabIndex={1} />
161
- </GridItem>
162
- </ >
163
- </DetailsContainer >
164
- </Grid >
161
+ </Grid>
162
+ <GridItem span={12}>
163
+ <RoutedTabs tabs={tabs} defaultTabIndex={1} />
164
+ </GridItem>
165
+ </Grid>
166
+ </DetailsContainer>
165
167
  {copying && <CopyContentViewModal
166
168
  cvId={cvId}
167
169
  cvName={name}
@@ -15,7 +15,6 @@ import { translate as __ } from 'foremanReact/common/I18n';
15
15
 
16
16
  import { updateContentView } from './ContentViewDetailActions';
17
17
  import { selectIsCVUpdating } from './ContentViewDetailSelectors';
18
- import Loading from '../../../components/Loading';
19
18
  import ContentViewIcon from '../components/ContentViewIcon';
20
19
  import ActionableDetail from '../../../components/ActionableDetail';
21
20
  import './contentViewInfo.scss';
@@ -37,19 +36,19 @@ const ContentViewInfo = ({ cvId, details }) => {
37
36
  permissions,
38
37
  } = details;
39
38
 
40
- if (updating) return <Loading size="sm" showText={false} />;
41
-
42
39
  const onEdit = (val, attribute) => {
43
40
  if (val === details[attribute]) return;
44
41
  dispatch(updateContentView(cvId, { [attribute]: val }));
45
42
  };
46
43
 
47
44
  return (
48
- <TextContent>
45
+ <TextContent className="margin-0-24">
49
46
  <TextList component={TextListVariants.dl}>
50
47
  <ActionableDetail
48
+ key={name}
51
49
  label={__('Name')}
52
50
  attribute="name"
51
+ loading={updating && currentAttribute === 'name'}
53
52
  onEdit={onEdit}
54
53
  disabled={!hasPermission(permissions, 'edit_content_views')}
55
54
  value={name}
@@ -76,9 +75,11 @@ const ContentViewInfo = ({ cvId, details }) => {
76
75
  </Flex>
77
76
  </TextListItem>
78
77
  <ActionableDetail
78
+ key={description}
79
79
  textArea
80
80
  label={__('Description')}
81
81
  attribute="description"
82
+ loading={updating && currentAttribute === 'description'}
82
83
  onEdit={onEdit}
83
84
  disabled={!hasPermission(permissions, 'edit_content_views')}
84
85
  value={description}
@@ -86,8 +87,10 @@ const ContentViewInfo = ({ cvId, details }) => {
86
87
  />
87
88
  {composite ?
88
89
  (<ActionableDetail
90
+ key={autoPublish}
89
91
  label={__('Autopublish')}
90
92
  attribute="auto_publish"
93
+ loading={updating && currentAttribute === 'auto_publish'}
91
94
  value={autoPublish}
92
95
  onEdit={onEdit}
93
96
  disabled={!hasPermission(permissions, 'edit_content_views')}
@@ -98,6 +101,8 @@ const ContentViewInfo = ({ cvId, details }) => {
98
101
  (<ActionableDetail
99
102
  label={__('Solve dependencies')}
100
103
  attribute="solve_dependencies"
104
+ key={solveDependencies}
105
+ loading={updating && currentAttribute === 'solve_dependencies'}
101
106
  value={solveDependencies}
102
107
  onEdit={onEdit}
103
108
  disabled={!hasPermission(permissions, 'edit_content_views')}
@@ -1,39 +1,36 @@
1
1
  import React, { useEffect } from 'react';
2
- import { useDispatch, useSelector, shallowEqual } from 'react-redux';
3
- import PropTypes from 'prop-types';
4
2
  import { STATUS } from 'foremanReact/constants';
5
- import EmptyStateMessage from '../../../components/Table/EmptyStateMessage';
3
+ import PropTypes from 'prop-types';
4
+ import {
5
+ shallowEqual,
6
+ useDispatch,
7
+ useSelector,
8
+ } from 'react-redux';
6
9
  import Loading from '../../../components/Loading';
10
+ import EmptyStateMessage from '../../../components/Table/EmptyStateMessage';
7
11
  import getContentViewDetails from './ContentViewDetailActions';
8
- import { selectCVDetails,
12
+ import {
13
+ selectCVDetailError,
9
14
  selectCVDetailStatus,
10
- selectCVDetailError } from './ContentViewDetailSelectors';
15
+ } from './ContentViewDetailSelectors';
11
16
 
12
- const DetailsContainer = ({ children, cvId, isOpen }) => {
17
+ const DetailsContainer = ({ children, cvId }) => {
13
18
  const dispatch = useDispatch();
14
- const details = useSelector(state => selectCVDetails(state, cvId), shallowEqual);
15
19
  const status = useSelector(state => selectCVDetailStatus(state, cvId), shallowEqual);
16
20
  const error = useSelector(state => selectCVDetailError(state, cvId), shallowEqual);
17
21
 
18
22
  useEffect(() => {
19
- if (isOpen && Object.keys(details).length === 0) {
20
- dispatch(getContentViewDetails(cvId));
21
- }
22
- });
23
+ dispatch(getContentViewDetails(cvId));
24
+ }, [cvId, dispatch]);
23
25
 
24
26
  if (status === STATUS.PENDING) return (<Loading />);
25
27
  if (status === STATUS.ERROR) return (<EmptyStateMessage error={error} />);
26
- return (<React.Fragment>{children}</React.Fragment>);
28
+ return (<>{children}</>);
27
29
  };
28
30
 
29
31
  DetailsContainer.propTypes = {
30
32
  children: PropTypes.element.isRequired,
31
33
  cvId: PropTypes.number.isRequired,
32
- isOpen: PropTypes.bool,
33
- };
34
-
35
- DetailsContainer.defaultProps = {
36
- isOpen: true,
37
34
  };
38
35
 
39
36
  export default DetailsContainer;
@@ -153,6 +153,9 @@ const CVFilterAddModal = ({ cvId, onClose }) => {
153
153
  name="description"
154
154
  aria-label="input_description"
155
155
  value={description}
156
+ resizeOrientation="vertical"
157
+ autoResize
158
+ style={{ maxHeight: '200px', minHeight: '36px' }}
156
159
  onChange={value => setDescription(value)}
157
160
  />
158
161
  </FormGroup>
@@ -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
 
@@ -114,9 +114,9 @@ const CVContainerImageFilterContent = ({
114
114
  ];
115
115
 
116
116
  return (
117
- <Tabs activeKey={activeTabKey} onSelect={(_event, eventKey) => setActiveTabKey(eventKey)}>
117
+ <Tabs className="margin-0-24" activeKey={activeTabKey} onSelect={(_event, eventKey) => setActiveTabKey(eventKey)}>
118
118
  <Tab eventKey={0} title={<TabTitleText>{__('Tags')}</TabTitleText>}>
119
- <div className="tab-body-with-spacing">
119
+ <div className="margin-24-0">
120
120
  <TableWrapper
121
121
  {...{
122
122
  rows,
@@ -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')}
@@ -174,7 +174,7 @@ const CVContainerImageFilterContent = ({
174
174
  </Tab>
175
175
  {(repositories.length || showAffectedRepos) &&
176
176
  <Tab eventKey={1} title={<TabTitleText>{__('Affected repositories')}</TabTitleText>}>
177
- <div className="tab-body-with-spacing">
177
+ <div className="margin-24-0">
178
178
  <AffectedRepositoryTable cvId={cvId} filterId={filterId} repoType="docker" setShowAffectedRepos={setShowAffectedRepos} details={details} />
179
179
  </div>
180
180
  </Tab>
@@ -105,9 +105,9 @@ const CVErrataDateFilterContent = ({
105
105
  const tabTitle = inclusion ? __('Included errata') : __('Excluded errata');
106
106
 
107
107
  return (
108
- <Tabs activeKey={activeTabKey} onSelect={(_event, eventKey) => setActiveTabKey(eventKey)}>
108
+ <Tabs className="margin-0-24" activeKey={activeTabKey} onSelect={(_event, eventKey) => setActiveTabKey(eventKey)}>
109
109
  <Tab eventKey={0} title={<TabTitleText>{tabTitle}</TabTitleText>}>
110
- <div className="tab-body-with-spacing">
110
+ <div className="margin-24">
111
111
  <Form onSubmit={(e) => {
112
112
  e.preventDefault();
113
113
  onSave();
@@ -153,7 +153,7 @@ const CVErrataDateFilterContent = ({
153
153
  </SelectOption>
154
154
  </Select>
155
155
  </FlexItem>
156
- <FlexItem span={1} spacer={{ default: 'spacer3xl' }}>
156
+ <FlexItem span={1} spacer={{ default: 'spacerMd' }}>
157
157
  {(selectedTypes.length === 1) &&
158
158
  <Tooltip
159
159
  position="top"
@@ -238,7 +238,7 @@ const CVErrataDateFilterContent = ({
238
238
  {hasPermission(permissions, 'edit_content_views') &&
239
239
  <FlexItem>
240
240
  <Button
241
- disabled={saveDisabled}
241
+ isDisabled={saveDisabled}
242
242
  variant="link"
243
243
  onClick={resetFilters}
244
244
  isInline
@@ -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
  >
@@ -270,7 +270,7 @@ const CVErrataDateFilterContent = ({
270
270
  </Tab>
271
271
  {(repositories.length || showAffectedRepos) &&
272
272
  <Tab eventKey={1} title={<TabTitleText>{__('Affected repositories')}</TabTitleText>}>
273
- <div className="tab-body-with-spacing">
273
+ <div className="margin-24-0">
274
274
  <AffectedRepositoryTable cvId={cvId} filterId={filterId} repoType="yum" setShowAffectedRepos={setShowAffectedRepos} details={details} />
275
275
  </div>
276
276
  </Tab>}