katello 4.8.4 → 4.9.0.rc1

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 (481) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +40 -4
  3. data/app/assets/javascripts/katello/locale/bn/katello.js +1 -0
  4. data/app/assets/javascripts/katello/locale/cs/katello.js +1 -0
  5. data/app/assets/javascripts/katello/locale/de/katello.js +1 -0
  6. data/app/assets/javascripts/katello/locale/en/katello.js +1 -0
  7. data/app/assets/javascripts/katello/locale/es/katello.js +1 -0
  8. data/app/assets/javascripts/katello/locale/fr/katello.js +1 -0
  9. data/app/assets/javascripts/katello/locale/gu/katello.js +1 -0
  10. data/app/assets/javascripts/katello/locale/hi/katello.js +1 -0
  11. data/app/assets/javascripts/katello/locale/it/katello.js +1 -0
  12. data/app/assets/javascripts/katello/locale/ja/katello.js +1 -0
  13. data/app/assets/javascripts/katello/locale/ka/katello.js +1 -0
  14. data/app/assets/javascripts/katello/locale/kn/katello.js +1 -0
  15. data/app/assets/javascripts/katello/locale/ko/katello.js +1 -0
  16. data/app/assets/javascripts/katello/locale/locale/katello.js +1 -0
  17. data/app/assets/javascripts/katello/locale/mr/katello.js +1 -0
  18. data/app/assets/javascripts/katello/locale/or/katello.js +1 -0
  19. data/app/assets/javascripts/katello/locale/pa/katello.js +1 -0
  20. data/app/assets/javascripts/katello/locale/pt/katello.js +1 -0
  21. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +1 -0
  22. data/app/assets/javascripts/katello/locale/ru/katello.js +1 -0
  23. data/app/assets/javascripts/katello/locale/ta/katello.js +1 -0
  24. data/app/assets/javascripts/katello/locale/te/katello.js +1 -0
  25. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +1 -0
  26. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +1 -0
  27. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +10 -0
  28. data/app/controllers/katello/api/v2/activation_keys_controller.rb +1 -0
  29. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +2 -0
  30. data/app/controllers/katello/api/v2/content_views_controller.rb +22 -12
  31. data/app/controllers/katello/api/v2/environments_controller.rb +5 -1
  32. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +1 -1
  33. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +1 -2
  34. data/app/controllers/katello/api/v2/organizations_controller.rb +11 -0
  35. data/app/controllers/katello/api/v2/repositories_controller.rb +4 -3
  36. data/app/controllers/katello/api/v2/repository_sets_controller.rb +13 -4
  37. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +1 -3
  38. data/app/controllers/katello/concerns/api/api_controller.rb +2 -2
  39. data/app/controllers/katello/concerns/content_facet_hosts_controller_extensions.rb +1 -1
  40. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +6 -4
  41. data/app/lib/actions/candlepin/product/content_add.rb +13 -1
  42. data/app/lib/actions/candlepin/product/content_update.rb +2 -1
  43. data/app/lib/actions/katello/agent_action.rb +3 -4
  44. data/app/lib/actions/katello/bulk_agent_action.rb +1 -4
  45. data/app/lib/actions/katello/content_view/publish.rb +1 -0
  46. data/app/lib/actions/katello/content_view_version/incremental_update.rb +1 -0
  47. data/app/lib/actions/katello/host/update_content_view.rb +2 -4
  48. data/app/lib/actions/katello/organization/simple_content_access/enable.rb +0 -10
  49. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +2 -12
  50. data/app/lib/actions/katello/product/content_create.rb +2 -2
  51. data/app/lib/actions/katello/repository/destroy.rb +15 -7
  52. data/app/lib/actions/katello/repository/update.rb +23 -1
  53. data/app/lib/actions/pulp3/abstract_async_task.rb +2 -0
  54. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +5 -12
  55. data/app/lib/katello/concerns/base_template_scope_extensions.rb +34 -2
  56. data/app/lib/katello/event_daemon/runner.rb +8 -4
  57. data/app/lib/katello/repo_discovery.rb +3 -1
  58. data/app/lib/katello/resources/cdn/katello_cdn.rb +4 -8
  59. data/app/lib/katello/util/default_enablement_migrator.rb +183 -0
  60. data/app/models/katello/activation_key.rb +4 -0
  61. data/app/models/katello/alternate_content_source.rb +13 -8
  62. data/app/models/katello/candlepin/repository_mapper.rb +0 -1
  63. data/app/models/katello/concerns/content_view_filter_rule_common.rb +42 -0
  64. data/app/models/katello/concerns/host_managed_extensions.rb +9 -40
  65. data/app/models/katello/concerns/smart_proxy_extensions.rb +24 -23
  66. data/app/models/katello/content.rb +9 -0
  67. data/app/models/katello/content_view.rb +99 -4
  68. data/app/models/katello/content_view_environment_content_facet.rb +12 -0
  69. data/app/models/katello/content_view_filter.rb +5 -1
  70. data/app/models/katello/content_view_package_filter_rule.rb +0 -1
  71. data/app/models/katello/content_view_repository.rb +0 -1
  72. data/app/models/katello/content_view_version.rb +26 -0
  73. data/app/models/katello/docker_meta_tag.rb +4 -0
  74. data/app/models/katello/host/content_facet.rb +2 -0
  75. data/app/models/katello/kt_environment.rb +13 -3
  76. data/app/models/katello/ping.rb +1 -1
  77. data/app/models/katello/product.rb +1 -1
  78. data/app/models/katello/product_content.rb +13 -15
  79. data/app/models/katello/root_repository.rb +21 -2
  80. data/app/models/katello/sync_plan.rb +2 -6
  81. data/app/presenters/katello/host_package_presenter.rb +5 -3
  82. data/app/services/katello/product_content_finder.rb +6 -1
  83. data/app/services/katello/pulp3/alternate_content_source.rb +5 -0
  84. data/app/services/katello/pulp3/module_stream.rb +2 -12
  85. data/app/services/katello/pulp3/repository/yum.rb +3 -0
  86. data/app/views/foreman/job_templates/install_errata.erb +4 -4
  87. data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +4 -7
  88. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +5 -6
  89. data/app/views/katello/api/v2/activation_keys/base.json.rabl +6 -0
  90. data/app/views/katello/api/v2/common/destroy.json.rabl +2 -1
  91. data/app/views/katello/api/v2/content_credentials/show.json.rabl +1 -1
  92. data/app/views/katello/api/v2/content_facet/base.json.rabl +10 -9
  93. data/app/views/katello/api/v2/content_view_repositories/show_all.json.rabl +6 -0
  94. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +11 -1
  95. data/app/views/katello/api/v2/content_views/base.json.rabl +3 -0
  96. data/app/views/katello/api/v2/docker_tags/_base.json.rabl +4 -0
  97. data/app/views/katello/api/v2/environments/show.json.rabl +10 -0
  98. data/app/views/katello/api/v2/host_subscriptions/show.json.rabl +1 -0
  99. data/app/views/katello/api/v2/repositories/index.json.rabl +6 -0
  100. data/app/views/katello/api/v2/repositories/show.json.rabl +1 -0
  101. data/app/views/katello/api/v2/repository_sets/show.json.rabl +8 -2
  102. data/app/views/overrides/activation_keys/_host_environment_select.html.erb +22 -15
  103. data/app/views/smart_proxies/_disk_usage.html.erb +2 -0
  104. data/ca/redhat-uep.pem +53 -53
  105. data/db/migrate/20220228173251_remove_drpm_from_ignorable_content.rb +0 -1
  106. data/db/migrate/20230328180352_add_applied_filters_to_katello_content_view_versions.rb +5 -0
  107. data/db/migrate/20230503190626_add_metadata_expire_to_root.rb +5 -0
  108. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  109. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-associations.controller.js +4 -2
  110. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-repository-sets.controller.js +16 -0
  111. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-associations-content-hosts.html +4 -3
  112. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-repository-sets.html +15 -1
  113. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-subscriptions.html +1 -1
  114. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/katello-agent-notice.html +1 -1
  115. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/views/content-credentials.html +1 -1
  116. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-errata-modal.controller.js +4 -2
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-host-bulk-module-streams-modal.html +1 -1
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-environment-modal.html +1 -1
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-errata-modal.html +10 -4
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-host-collections-modal.html +1 -1
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-repository-sets-modal.html +1 -1
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-subscriptions-modal.html +2 -2
  123. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html +1 -1
  124. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-errata.html +2 -0
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +1 -0
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-applicable.html +1 -0
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-installed.html +2 -0
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +2 -4
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +2 -4
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +0 -1
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +0 -4
  132. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb.controller.js +4 -2
  133. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-info.html +12 -3
  134. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/docker-tag-repositories.controller.js +43 -0
  135. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/views/docker-tag-details.html +7 -0
  136. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/views/docker-tag-environments.html +0 -1
  137. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/views/docker-tag-info.html +0 -7
  138. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/details/views/docker-tag-repositories.html +60 -0
  139. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/docker-tags.controller.js +0 -8
  140. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/docker-tags.routes.js +10 -0
  141. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/docker-tags/views/docker-tags.html +0 -4
  142. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +1 -1
  143. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/erratum-content-hosts.controller.js +4 -2
  144. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-content-hosts.html +5 -4
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-info.html +2 -2
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-packages.html +2 -2
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/apply-errata-confirm.html +7 -0
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/errata.html +1 -1
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-add-hosts.controller.js +4 -2
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/host-collection-hosts.controller.js +4 -2
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-add-hosts.html +4 -3
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-hosts-list.html +4 -3
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +590 -175
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +5157 -0
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +5157 -0
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +5157 -0
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +5204 -0
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +5153 -0
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +5159 -0
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +5157 -0
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +5158 -0
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +5153 -0
  163. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +5153 -0
  164. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +5157 -0
  165. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +5157 -0
  166. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +5191 -0
  167. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +5157 -0
  168. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +5136 -0
  169. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +5303 -0
  170. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +34 -14
  171. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +5157 -0
  172. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +5153 -0
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +5157 -0
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +5161 -0
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +5157 -0
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +5157 -0
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +5192 -0
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +5187 -0
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +5174 -0
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +5170 -0
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +5170 -0
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +5279 -0
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +5191 -0
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +5158 -0
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +5157 -0
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +5157 -0
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +5157 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +5157 -0
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +5136 -0
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +5136 -0
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +5136 -0
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +38 -1
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/views/organization-selector.html +1 -1
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/package.controller.js +8 -2
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-info.html +12 -3
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/views/products-bulk-advanced-sync-modal.html +1 -1
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/views/products-bulk-http-proxy-modal.html +1 -1
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/views/products-bulk-sync-plan-modal.html +1 -1
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +13 -4
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +1 -1
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +12 -2
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details-reclaim-space-modal.html +1 -1
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +6 -0
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +17 -0
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-docker-manifest-lists.html +1 -1
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-docker-manifests.html +1 -1
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-docker-tags.html +0 -4
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +6 -4
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +20 -1
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository.factory.js +1 -0
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories-reclaim-space-modal.html +1 -1
  212. data/engines/bastion_katello/app/assets/stylesheets/bastion_katello/activation_keys.scss +13 -0
  213. data/engines/bastion_katello/app/assets/stylesheets/bastion_katello/bastion_katello.scss +1 -0
  214. data/lib/katello/engine.rb +0 -7
  215. data/lib/katello/plugin.rb +18 -15
  216. data/lib/katello/tasks/upgrades/4.9/update_custom_products_enablement.rake +11 -0
  217. data/lib/katello/version.rb +1 -1
  218. data/locale/action_names.rb +1 -2
  219. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  220. data/locale/bn/katello.po +215 -183
  221. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  222. data/locale/bn_IN/katello.po +8901 -0
  223. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  224. data/locale/ca/katello.po +8900 -0
  225. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  226. data/locale/cs/katello.po +216 -185
  227. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  228. data/locale/cs_CZ/katello.po +8906 -0
  229. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  230. data/locale/de/katello.po +223 -191
  231. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  232. data/locale/de_AT/katello.po +8897 -0
  233. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  234. data/locale/de_DE/katello.po +8906 -0
  235. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  236. data/locale/el/katello.po +8900 -0
  237. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  238. data/locale/en/katello.po +215 -183
  239. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  240. data/locale/en_GB/katello.po +8902 -0
  241. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  242. data/locale/en_US/katello.po +8897 -0
  243. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  244. data/locale/es/katello.po +218 -187
  245. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  246. data/locale/et_EE/katello.po +8897 -0
  247. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  248. data/locale/fr/katello.po +233 -204
  249. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  250. data/locale/gl/katello.po +8900 -0
  251. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  252. data/locale/gu/katello.po +215 -183
  253. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  254. data/locale/he_IL/katello.po +8902 -0
  255. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  256. data/locale/hi/katello.po +215 -183
  257. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  258. data/locale/id/katello.po +8896 -0
  259. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  260. data/locale/it/katello.po +216 -185
  261. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  262. data/locale/ja/katello.po +233 -202
  263. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  264. data/locale/ka/katello.po +223 -191
  265. data/locale/katello.pot +1844 -1796
  266. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  267. data/locale/kn/katello.po +215 -183
  268. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  269. data/locale/ko/katello.po +216 -183
  270. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  271. data/locale/ml_IN/katello.po +8897 -0
  272. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  273. data/locale/mr/katello.po +215 -183
  274. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  275. data/locale/nl_NL/katello.po +8907 -0
  276. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  277. data/locale/or/katello.po +215 -183
  278. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  279. data/locale/pa/katello.po +215 -183
  280. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  281. data/locale/pl/katello.po +8903 -0
  282. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  283. data/locale/pl_PL/katello.po +8899 -0
  284. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  285. data/locale/pt/katello.po +215 -183
  286. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  287. data/locale/pt_BR/katello.po +218 -187
  288. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  289. data/locale/ro/katello.po +8897 -0
  290. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  291. data/locale/ro_RO/katello.po +8898 -0
  292. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  293. data/locale/ru/katello.po +216 -184
  294. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  295. data/locale/sl/katello.po +8901 -0
  296. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  297. data/locale/sv_SE/katello.po +8903 -0
  298. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  299. data/locale/ta/katello.po +215 -183
  300. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  301. data/locale/ta_IN/katello.po +8901 -0
  302. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  303. data/locale/te/katello.po +215 -183
  304. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  305. data/locale/tr/katello.po +8900 -0
  306. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  307. data/locale/vi/katello.po +8896 -0
  308. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  309. data/locale/vi_VN/katello.po +8897 -0
  310. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  311. data/locale/zh/katello.po +8896 -0
  312. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  313. data/locale/zh_CN/katello.po +233 -202
  314. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  315. data/locale/zh_TW/katello.po +216 -183
  316. data/package.json +1 -0
  317. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +1 -0
  318. data/webpack/components/Bookmark/AddBookmarkModal.js +8 -2
  319. data/webpack/components/Content/ContentTable.js +1 -0
  320. data/webpack/components/Content/Details/ContentDetailInfo.js +1 -1
  321. data/webpack/components/Content/Details/ContentDetails.js +3 -3
  322. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetailInfo.test.js.snap +1 -0
  323. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +4 -0
  324. data/webpack/components/Content/__tests__/__snapshots__/ContentTable.test.js.snap +1 -0
  325. data/webpack/components/RoutedTabs/index.js +1 -1
  326. data/webpack/components/SelectOrg/SetOrganization.js +7 -1
  327. data/webpack/components/Table/EmptyStateMessage.js +8 -3
  328. data/webpack/components/Table/MainTable.js +8 -2
  329. data/webpack/components/TooltipButton/TooltipButton.js +2 -2
  330. data/webpack/components/TooltipButton/__snapshots__/TooltipButton.test.js.snap +3 -0
  331. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +2 -0
  332. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +81 -24
  333. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.scss +3 -0
  334. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +10 -3
  335. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewActions.js +8 -0
  336. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +3 -2
  337. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +3 -1
  338. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +1 -1
  339. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +0 -4
  340. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErratumExpansionDetail.js +2 -2
  341. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +1 -5
  342. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +20 -0
  343. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +1 -0
  344. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsConstants.js +16 -0
  345. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +54 -8
  346. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +1 -0
  347. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +8 -1
  348. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/Force.test.js.snap +1 -0
  349. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/IgnoreSubmanErrors.test.js.snap +1 -0
  350. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/LifeCycleEnvironment.test.js.snap +1 -0
  351. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +2 -1
  352. data/webpack/components/extensions/RegistrationCommands/fields/Force.js +1 -0
  353. data/webpack/components/extensions/RegistrationCommands/fields/IgnoreSubmanErrors.js +1 -0
  354. data/webpack/components/extensions/RegistrationCommands/fields/LifecycleEnvironment.js +1 -0
  355. data/webpack/components/extensions/about/index.js +2 -2
  356. data/webpack/components/pf3Table/components/Table.js +1 -0
  357. data/webpack/scenes/AlternateContentSources/ACSIndexPage.js +6 -1
  358. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +15 -2
  359. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +6 -1
  360. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +4 -1
  361. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +9 -0
  362. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +1 -0
  363. data/webpack/scenes/Content/Details/ContentDetails.js +4 -2
  364. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -1
  365. data/webpack/scenes/Content/GenericContentPage.js +1 -1
  366. data/webpack/scenes/Content/Table/ContentTable.js +2 -2
  367. data/webpack/scenes/ContentViews/ContentViewsConstants.js +4 -0
  368. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignActivationKeysForm.js +26 -13
  369. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +27 -13
  370. data/webpack/scenes/ContentViews/Delete/__tests__/cvVersionsData.fixtures.json +8 -4
  371. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +3 -2
  372. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentEnvironments.js +1 -1
  373. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +25 -24
  374. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +1 -1
  375. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +19 -3
  376. data/webpack/scenes/ContentViews/Details/ContentViewDetailReducer.js +6 -0
  377. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +2 -0
  378. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +2 -2
  379. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +15 -2
  380. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +5 -1
  381. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +13 -9
  382. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +19 -6
  383. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +5 -1
  384. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +50 -51
  385. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +45 -44
  386. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +45 -44
  387. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +13 -8
  388. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +4 -3
  389. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +5 -2
  390. data/webpack/scenes/ContentViews/Details/Filters/FilterRuleConstants.js +6 -0
  391. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +3 -2
  392. data/webpack/scenes/ContentViews/Details/Filters/Rules/ContainerTag/AddEditContainerTagRuleModal.js +10 -2
  393. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +5 -1
  394. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +7 -0
  395. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +37 -24
  396. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +3 -3
  397. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -1
  398. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +78 -8
  399. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +27 -8
  400. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailNoReposAdded.fixtures.json +13 -0
  401. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/ActionSummary.js +1 -1
  402. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignActivationKeys.js +16 -16
  403. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignHosts.js +16 -16
  404. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteVersions.fixtures.json +6 -3
  405. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/contentViewVersion.fixtures.json +10 -5
  406. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +9 -2
  407. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +1 -0
  408. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionOneDetials.fixtures.json +2 -1
  409. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionThreeDetails.fixtures.json +2 -1
  410. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionTwoDetails.fixtures.json +2 -1
  411. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersions.fixtures.json +12 -6
  412. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionOneDetails.fixtures.json +2 -1
  413. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionTwoDetails.fixtures.json +2 -1
  414. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +25 -4
  415. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +4 -2
  416. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +26 -13
  417. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +30 -17
  418. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +1 -0
  419. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/versionsResponseData.fixtures.json +6 -3
  420. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -1
  421. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +2 -2
  422. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +8 -1
  423. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +1 -1
  424. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +55 -6
  425. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionComponent.fixtures.json +6 -3
  426. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.fixtures.json +2 -1
  427. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.fixtures.json +8 -4
  428. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +1 -1
  429. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersionsWithTask.fixtures.json +4 -2
  430. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json +1 -0
  431. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +4 -2
  432. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +30 -3
  433. data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +24 -2
  434. data/webpack/scenes/ContentViews/Publish/cvPublishForm.scss +4 -0
  435. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +2 -2
  436. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -3
  437. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +2 -1
  438. data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelect.js +2 -1
  439. data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelectOption.js +3 -2
  440. data/webpack/scenes/ContentViews/components/ContentViewSelect/helpers.js +32 -0
  441. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +52 -42
  442. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +1 -0
  443. data/webpack/scenes/ContentViews/components/FiltersAppliedIcon.js +17 -0
  444. data/webpack/scenes/ContentViews/components/NeedsPublishIcon.js +45 -0
  445. data/webpack/scenes/ContentViews/components/NeedsPublishIcon.scss +9 -0
  446. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +1 -1
  447. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +49 -22
  448. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +7 -1
  449. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +1 -0
  450. data/webpack/scenes/Hosts/ChangeContentSource/components/HostsModal.js +2 -0
  451. data/webpack/scenes/Hosts/ChangeContentSource/index.js +2 -0
  452. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetailInfo.test.js.snap +1 -0
  453. data/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamsTable.test.js.snap +1 -0
  454. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +2 -0
  455. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +2 -0
  456. data/webpack/scenes/RedHatRepositories/components/RecommendedRepositorySetsToggler.js +6 -1
  457. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositories.js +1 -1
  458. data/webpack/scenes/RedHatRepositories/components/__tests__/__snapshots__/RecommendedRepositorySetsToggler.test.js.snap +1 -0
  459. data/webpack/scenes/RedHatRepositories/components/__tests__/__snapshots__/RepositorySetRepositories.test.js.snap +1 -0
  460. data/webpack/scenes/RedHatRepositories/helpers.js +2 -0
  461. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailAssociations.js +1 -1
  462. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailInfo.js +2 -2
  463. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +4 -4
  464. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetailAssociations.test.js.snap +1 -0
  465. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetailInfo.test.js.snap +2 -0
  466. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +4 -0
  467. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/NetworkSyncForm.js +2 -1
  468. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +5 -4
  469. data/webpack/scenes/Subscriptions/Manifest/SimpleContentAccess.js +1 -0
  470. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +1 -1
  471. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +3 -1
  472. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/__snapshots__/UpstreamSubscriptionsPage.test.js.snap +3 -0
  473. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +1 -0
  474. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js +1 -1
  475. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +5 -6
  476. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +60 -5
  477. data/webpack/utils/useKatelloDocUrl.js +18 -0
  478. metadata +163 -22
  479. data/app/lib/actions/katello/organization/simple_content_access/prepare_content_overrides.rb +0 -36
  480. data/app/lib/katello/util/content_overrides_migrator.rb +0 -98
  481. data/webpack/components/extensions/HostDetails/common/KatelloAgentDeprecationAlert.js +0 -23
@@ -58,14 +58,14 @@ const ContentTable = ({
58
58
  }
59
59
  >
60
60
  <Thead>
61
- <Tr>
61
+ <Tr ouiaId="content-table-tr">
62
62
  {columnHeaders.map(col =>
63
63
  <Th key={col.title}>{col.title}</Th>)}
64
64
  </Tr>
65
65
  </Thead>
66
66
  <Tbody>
67
67
  {results?.map(details => (
68
- <Tr key={details.id}>
68
+ <Tr key={`${details.id}`} ouiaId={`${details.id}-tr`}>
69
69
  {columnHeaders.map((col, index) =>
70
70
  <Td key={index}>{col.getProperty(details)}</Td>)
71
71
  }
@@ -17,6 +17,7 @@ export const DELETE_CONTENT_VIEW_FILTERS_KEY = 'CONTENT_VIEW_FILTERS_DELETE';
17
17
  export const DELETE_CONTENT_VIEW_FILTER_RULES_KEY = 'CONTENT_VIEW_FILTER_RULES_DELETE';
18
18
  export const ADD_CONTENT_VIEW_FILTER_RULES_KEY = 'CONTENT_VIEW_FILTER_RULES_ADD';
19
19
  export const PUBLISH_CONTENT_VIEW_KEY = 'CONTENT_VIEW_PUBLISH';
20
+ export const CONTENT_VIEW_VERSION_REPUBLISH_REPO_METADATA_KEY = 'CONTENT_VIEW_VERSION_REPUBLISH_REPO_METADATA';
20
21
  export const UPDATE_CONTENT_VIEW = 'UPDATE_CONTENT_VIEW';
21
22
  export const UPDATE_CONTENT_VIEW_SUCCESS = 'UPDATE_CONTENT_VIEW_SUCCESS';
22
23
  export const UPDATE_CONTENT_VIEW_FAILURE = 'UPDATE_CONTENT_VIEW_FAILURE';
@@ -34,6 +35,8 @@ export const MODULE_STREAMS_CONTENT = 'MODULE_STREAMS_CONTENT';
34
35
  export const DEB_PACKAGES_CONTENT = 'DEB_PACKAGES_CONTENT';
35
36
  export const RPM_PACKAGES_CONTENT = 'RPM_PACKAGES_CONTENT';
36
37
  export const FILE_CONTENT = 'FILE_CONTENT';
38
+ export const CONTENT_VIEW_NEEDS_PUBLISH = 'CV_NEEDS_PUBLISH';
39
+ export const CONTENT_VIEW_NEEDS_PUBLISH_RESET = 'CV_NEEDS_PUBLISH_RESET';
37
40
  export const generatedContentKey = pluralLabel => `${toUpper(pluralLabel)}_CONTENT`;
38
41
  export const cvDetailsKey = cvId => `${CONTENT_VIEWS_KEY}_${cvId}`;
39
42
  export const cvDetailsRepoKey = cvId => `${CONTENT_VIEWS_KEY}_REPOSITORIES_${cvId}`;
@@ -54,6 +57,7 @@ export const bulkRemoveVersionKey = cvId => `BULK_REMOVE_CV_VERSION_${cvId}`;
54
57
  export const cvRemoveVersionKey = (versionId, versionEnvironments) => `REMOVE_CV_VERSION_${versionId}_${versionEnvironments.length}`;
55
58
  export const cvVersionPromoteKey = (versionId, environmentIds) => `PROMOTE_CONTENT_VIEW_VERSION_${versionId}_${environmentIds.length}`;
56
59
  export const cvVersionDetailsKey = (cvId, versionId) => `CONTENT_VIEW_VERSION_DETAILS_${cvId}_${versionId}`;
60
+ export const cvVersionRepublishRepoMetadataKey = (cvId, versionId) => `${CONTENT_VIEW_VERSION_REPUBLISH_REPO_METADATA_KEY}_${cvId}_${versionId}`;
57
61
  export const cvVersionPublishKey = (cvId, versionCount) => `${PUBLISH_CONTENT_VIEW_KEY}_${cvId}_VERSION_${versionCount}`;
58
62
  export const cvVersionTaskPollingKey = cvId => `CONTENT_VIEW_VERSION_POLLING_${cvId}`;
59
63
  export const cvAddComponentKey = cvId => `${CONTENT_VIEWS_KEY}_ADD_COMPONENT_${cvId}`;
@@ -10,6 +10,7 @@ import CVDeleteContext from '../CVDeleteContext';
10
10
  import EnvironmentPaths from '../../components/EnvironmentPaths/EnvironmentPaths';
11
11
  import AffectedActivationKeys from '../../Details/Versions/Delete/affectedActivationKeys';
12
12
  import ContentViewSelect from '../../components/ContentViewSelect/ContentViewSelect';
13
+ import { getCVPlaceholderText, shouldDisableCVSelect } from '../../components/ContentViewSelect/helpers';
13
14
 
14
15
  const CVDeletionReassignActivationKeysForm = () => {
15
16
  const dispatch = useDispatch();
@@ -78,6 +79,20 @@ const CVDeletionReassignActivationKeysForm = () => {
78
79
  setCVSelectOpen(false);
79
80
  };
80
81
 
82
+ const placeholderText = getCVPlaceholderText({
83
+ contentSourceId: null,
84
+ environments: selectedEnvForAK,
85
+ contentViewsStatus: contentViewsInEnvStatus,
86
+ cvSelectOptions,
87
+ });
88
+
89
+ const disableCVSelect = shouldDisableCVSelect({
90
+ contentSourceId: null,
91
+ environments: selectedEnvForAK,
92
+ contentViewsStatus: contentViewsInEnvStatus,
93
+ cvSelectOptions,
94
+ });
95
+
81
96
  return (
82
97
  <>
83
98
  <EnvironmentPaths
@@ -87,19 +102,17 @@ const CVDeletionReassignActivationKeysForm = () => {
87
102
  headerText={__('Select lifecycle environment')}
88
103
  multiSelect={false}
89
104
  />
90
- {!cvInEnvLoading && selectedEnvForAK.length > 0 &&
91
- <ContentViewSelect
92
- selections={selectedCVForAK}
93
- onSelect={onSelect}
94
- onClear={onClear}
95
- isOpen={cvSelectOpen}
96
- isDisabled={cvSelectOptions.length === 0}
97
- onToggle={isExpanded => setCVSelectOpen(isExpanded)}
98
- placeholderText={(cvSelectOptions.length === 0) ? __('No content views available') : __('Select a content view')}
99
- >
100
- {cvSelectOptions}
101
- </ContentViewSelect>
102
- }
105
+ <ContentViewSelect
106
+ selections={selectedCVForAK}
107
+ onSelect={onSelect}
108
+ onClear={onClear}
109
+ isOpen={cvSelectOpen}
110
+ isDisabled={disableCVSelect}
111
+ onToggle={isExpanded => setCVSelectOpen(isExpanded)}
112
+ placeholderText={placeholderText}
113
+ >
114
+ {cvSelectOptions}
115
+ </ContentViewSelect>
103
116
  <ExpandableSection
104
117
  toggleText={showActivationKeys ?
105
118
  'Hide activation keys' :
@@ -10,6 +10,7 @@ import CVDeleteContext from '../CVDeleteContext';
10
10
  import EnvironmentPaths from '../../components/EnvironmentPaths/EnvironmentPaths';
11
11
  import AffectedHosts from '../../Details/Versions/Delete/affectedHosts';
12
12
  import ContentViewSelect from '../../components/ContentViewSelect/ContentViewSelect';
13
+ import { getCVPlaceholderText, shouldDisableCVSelect } from '../../components/ContentViewSelect/helpers';
13
14
 
14
15
 
15
16
  const CVDeletionReassignHostsForm = () => {
@@ -79,6 +80,21 @@ const CVDeletionReassignHostsForm = () => {
79
80
  setCVSelectOpen(false);
80
81
  };
81
82
 
83
+ const placeholderText = getCVPlaceholderText({
84
+ contentSourceId: null,
85
+ environments: selectedEnvForHost,
86
+ contentViewsStatus: contentViewsInEnvStatus,
87
+ cvSelectOptions,
88
+ });
89
+
90
+ const disableCVSelect = shouldDisableCVSelect({
91
+ contentSourceId: null,
92
+ environments: selectedEnvForHost,
93
+ contentViewsStatus: contentViewsInEnvStatus,
94
+ cvSelectOptions,
95
+ });
96
+
97
+
82
98
  return (
83
99
  <>
84
100
  <EnvironmentPaths
@@ -88,19 +104,17 @@ const CVDeletionReassignHostsForm = () => {
88
104
  headerText={__('Select lifecycle environment')}
89
105
  multiSelect={false}
90
106
  />
91
- {selectedEnvForHost.length > 0 &&
92
- <ContentViewSelect
93
- selections={selectedCVForHosts}
94
- onSelect={onSelect}
95
- onClear={onClear}
96
- isOpen={cvSelectOpen}
97
- isDisabled={cvSelectOptions.length === 0}
98
- onToggle={isExpanded => setCVSelectOpen(isExpanded)}
99
- placeholderText={(cvSelectOptions.length === 0) ? __('No content views available') : __('Select a content view')}
100
- >
101
- {cvSelectOptions}
102
- </ContentViewSelect>
103
- }
107
+ <ContentViewSelect
108
+ selections={selectedCVForHosts}
109
+ onSelect={onSelect}
110
+ onClear={onClear}
111
+ isOpen={cvSelectOpen}
112
+ isDisabled={disableCVSelect}
113
+ onToggle={isExpanded => setCVSelectOpen(isExpanded)}
114
+ placeholderText={placeholderText}
115
+ >
116
+ {cvSelectOptions}
117
+ </ContentViewSelect>
104
118
  <ExpandableSection
105
119
  toggleText={showHosts ? 'Hide hosts' : 'Show hosts'}
106
120
  onToggle={expanded => setShowHosts(expanded)}
@@ -261,7 +261,8 @@
261
261
  },
262
262
  "permissions": {
263
263
  "deletable": true
264
- }
264
+ },
265
+ "filters_applied": true
265
266
  },
266
267
  {
267
268
  "version": "3.0",
@@ -531,7 +532,8 @@
531
532
  },
532
533
  "permissions": {
533
534
  "deletable": true
534
- }
535
+ },
536
+ "filters_applied": true
535
537
  },
536
538
  {
537
539
  "version": "2.0",
@@ -693,7 +695,8 @@
693
695
  },
694
696
  "permissions": {
695
697
  "deletable": true
696
- }
698
+ },
699
+ "filters_applied": true
697
700
  },
698
701
  {
699
702
  "version": "1.0",
@@ -855,7 +858,8 @@
855
858
  },
856
859
  "permissions": {
857
860
  "deletable": true
858
- }
861
+ },
862
+ "filters_applied": true
859
863
  }
860
864
  ]
861
865
  }
@@ -15,6 +15,7 @@ import {
15
15
  selectCVDetailError,
16
16
  } from '../../Details/ContentViewDetailSelectors';
17
17
  import { addComponent } from '../ContentViewDetailActions';
18
+ import { CONTENT_VIEW_NEEDS_PUBLISH } from '../../ContentViewsConstants';
18
19
 
19
20
  const ComponentContentViewAddModal = ({
20
21
  cvId, componentCvId, componentId, latest, show, setIsOpen,
@@ -73,12 +74,12 @@ const ComponentContentViewAddModal = ({
73
74
  dispatch(addComponent({
74
75
  compositeContentViewId: cvId,
75
76
  components: getUpdateParams(),
76
- }));
77
+ }, () => dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH })));
77
78
  } else {
78
79
  dispatch(addComponent({
79
80
  compositeContentViewId: cvId,
80
81
  components: getAddParams(),
81
- }));
82
+ }, () => dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH })));
82
83
  }
83
84
  setIsOpen(false);
84
85
  };
@@ -10,7 +10,7 @@ const ComponentEnvironments = ({ environments }) => environments.map((env, index
10
10
  href={`/lifecycle_environments/${env.id}`}
11
11
  isTruncated
12
12
  >
13
- {env.name}
13
+ {`${env.name}`}
14
14
  </Label>
15
15
  ));
16
16
 
@@ -30,7 +30,7 @@ import AddedStatusLabel from '../../../../components/AddedStatusLabel';
30
30
  import ComponentVersion from './ComponentVersion';
31
31
  import ComponentEnvironments from './ComponentEnvironments';
32
32
  import ContentViewIcon from '../../components/ContentViewIcon';
33
- import { ADDED, ALL_STATUSES, NOT_ADDED } from '../../ContentViewsConstants';
33
+ import { ADDED, ALL_STATUSES, CONTENT_VIEW_NEEDS_PUBLISH, NOT_ADDED } from '../../ContentViewsConstants';
34
34
  import SelectableDropdown from '../../../../components/SelectableDropdown/SelectableDropdown';
35
35
  import '../../../../components/EditableTextInput/editableTextInput.scss';
36
36
  import ComponentContentViewAddModal from './ComponentContentViewAddModal';
@@ -73,7 +73,7 @@ const ContentViewComponents = ({ cvId, details }) => {
73
73
  const addComponentsResolved = componentAddedStatus === STATUS.RESOLVED;
74
74
  const removeComponentsResolved = componentRemovedStatus === STATUS.RESOLVED;
75
75
 
76
- const { label, permissions } = details || {};
76
+ const { permissions } = details || {};
77
77
 
78
78
  const bulkRemoveEnabled = () => rows.some(row => row.selected && row.added);
79
79
  const bulkAddEnabled = () => rows.some(row => row.selected && !row.added);
@@ -92,7 +92,7 @@ const ContentViewComponents = ({ cvId, details }) => {
92
92
  dispatch(addComponent({
93
93
  compositeContentViewId: cvId,
94
94
  components: [{ latest: true, content_view_id: componentCvId }],
95
- }));
95
+ }, () => dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH })));
96
96
  }
97
97
  }, [cvId, dispatch]);
98
98
 
@@ -102,7 +102,7 @@ const ContentViewComponents = ({ cvId, details }) => {
102
102
  dispatch(removeComponent({
103
103
  compositeContentViewId: cvId,
104
104
  component_ids: componentIds,
105
- }));
105
+ }, () => dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH })));
106
106
  };
107
107
 
108
108
  const addBulk = () => {
@@ -116,7 +116,7 @@ const ContentViewComponents = ({ cvId, details }) => {
116
116
  dispatch(removeComponent({
117
117
  compositeContentViewId: cvId,
118
118
  component_ids: [componentIdToRemove],
119
- }));
119
+ }, () => dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH })));
120
120
  };
121
121
 
122
122
  const toggleBulkAction = () => {
@@ -216,8 +216,8 @@ const ContentViewComponents = ({ cvId, details }) => {
216
216
  </DropdownItem>,
217
217
  ];
218
218
 
219
- const emptyContentTitle = __(`No content views belong to ${label}`);
220
- const emptyContentBody = __('Please add some content views.');
219
+ const emptyContentTitle = __('No content views to add yet');
220
+ const emptyContentBody = __('Please create some content views.');
221
221
  const emptySearchTitle = __('No matching content views found');
222
222
  const emptySearchBody = __('Try changing your search settings.');
223
223
  const activeFilters = [statusSelected];
@@ -257,19 +257,20 @@ const ContentViewComponents = ({ cvId, details }) => {
257
257
  fetchItems={useCallback(params =>
258
258
  getContentViewComponents(cvId, params, statusSelected), [cvId, statusSelected])}
259
259
  additionalListeners={[statusSelected, addComponentsResolved, removeComponentsResolved]}
260
- actionButtons={
261
- <>
262
- <Split hasGutter>
263
- <SplitItem>
264
- <SelectableDropdown
265
- items={[ALL_STATUSES, ADDED, NOT_ADDED]}
266
- title={__('Status')}
267
- selected={statusSelected}
268
- setSelected={setStatusSelected}
269
- placeholderText={__('Status')}
270
- />
271
- </SplitItem>
272
- {hasPermission(permissions, 'edit_content_views') &&
260
+ actionButtons={hasPermission(permissions, 'edit_content_views') &&
261
+ status === STATUS.RESOLVED && rows.length !== 0 &&
262
+ <>
263
+ <Split hasGutter>
264
+ <SplitItem>
265
+ <SelectableDropdown
266
+ items={[ALL_STATUSES, ADDED, NOT_ADDED]}
267
+ title={__('Status')}
268
+ selected={statusSelected}
269
+ setSelected={setStatusSelected}
270
+ placeholderText={__('Status')}
271
+ />
272
+ </SplitItem>
273
+ {hasPermission(permissions, 'edit_content_views') &&
273
274
  <SplitItem>
274
275
  <ActionList>
275
276
  <ActionListItem>
@@ -289,8 +290,8 @@ const ContentViewComponents = ({ cvId, details }) => {
289
290
  </ActionList>
290
291
  </SplitItem>
291
292
  }
292
- </Split>
293
- {versionEditing &&
293
+ </Split>
294
+ {versionEditing &&
294
295
  <ComponentContentViewAddModal
295
296
  cvId={compositeCvEditing}
296
297
  componentCvId={componentCvEditing}
@@ -300,14 +301,14 @@ const ContentViewComponents = ({ cvId, details }) => {
300
301
  setIsOpen={setVersionEditing}
301
302
  aria-label="edit_component_modal"
302
303
  />}
303
- {bulkAdding &&
304
+ {bulkAdding &&
304
305
  <ComponentContentViewBulkAddModal
305
306
  cvId={compositeCvEditing}
306
307
  rowsToAdd={selectedComponentsToAdd}
307
308
  onClose={() => setBulkAdding(false)}
308
309
  aria-label="bulk_add_components_modal"
309
310
  />}
310
- </>
311
+ </>
311
312
  }
312
313
  />
313
314
  );
@@ -179,7 +179,7 @@ test('Can handle no components being present', async (done) => {
179
179
  renderWithRedux(<ContentViewComponents cvId={4} details={mockDetails} />, renderOptions);
180
180
 
181
181
  expect(queryByText(firstComponent.content_view.label)).toBeNull();
182
- await patientlyWaitFor(() => expect(queryByText('No content views belong to test_empty')).toBeInTheDocument());
182
+ await patientlyWaitFor(() => expect(queryByText('No content views to add yet')).toBeInTheDocument());
183
183
  assertNockRequest(autocompleteScope);
184
184
  assertNockRequest(scope, done);
185
185
  });
@@ -37,6 +37,7 @@ import {
37
37
  addComponentSuccessMessage,
38
38
  removeComponentSuccessMessage,
39
39
  cvVersionPromoteKey,
40
+ cvVersionRepublishRepoMetadataKey,
40
41
  cvFilterRepoKey,
41
42
  cvVersionDetailsKey,
42
43
  cvRemoveVersionKey,
@@ -229,29 +230,32 @@ export const updateContentView = (cvId, params, handleSuccess) => put({
229
230
  },
230
231
  });
231
232
 
232
- export const addComponent = params => put({
233
+ export const addComponent = (params, handleSuccess) => put({
233
234
  type: API_OPERATIONS.PUT,
234
235
  key: cvAddComponentKey(params.compositeContentViewId),
235
236
  url: api.getApiUrl(`/content_views/${params.compositeContentViewId}/content_view_components/${params.components.id ? params.components.id : 'add'}`),
236
237
  params: params.components.id ? params.components : params,
238
+ handleSuccess,
237
239
  successToast: () => addComponentSuccessMessage(params.components.id),
238
240
  errorToast: error => __(`Something went wrong while adding component! ${getResponseErrorMsgs(error.response)}`),
239
241
  });
240
242
 
241
- export const removeComponent = params => put({
243
+ export const removeComponent = (params, handleSuccess) => put({
242
244
  type: API_OPERATIONS.PUT,
243
245
  key: cvRemoveComponentKey(params.compositeContentViewId),
244
246
  url: api.getApiUrl(`/content_views/${params.compositeContentViewId}/content_view_components/remove`),
245
247
  params,
248
+ handleSuccess,
246
249
  successToast: () => removeComponentSuccessMessage(params.component_ids.length),
247
250
  errorToast: error => __(`Something went wrong while removing component! ${getResponseErrorMsgs(error.response)}`),
248
251
  });
249
252
 
250
- export const createContentViewFilter = (cvId, params) => post({
253
+ export const createContentViewFilter = (cvId, params, handleSuccess) => post({
251
254
  type: API_OPERATIONS.POST,
252
255
  key: CREATE_CONTENT_VIEW_FILTER_KEY,
253
256
  url: api.getApiUrl(`/content_view_filters?content_view_id=${cvId}`),
254
257
  params,
258
+ handleSuccess,
255
259
  successToast: () => __('Filter created'),
256
260
  errorToast: error => __(`Something went wrong while creating the filter! ${getResponseErrorMsgs(error.response)}`),
257
261
  });
@@ -584,4 +588,16 @@ export const promoteContentViewVersion = (params, handleSuccess) => post({
584
588
  errorToast: error => cvErrorToast(error),
585
589
  });
586
590
 
591
+ export const republishCVVRepoMetadata = (params, handleSuccess) => put({
592
+ type: API_OPERATIONS.PUT,
593
+ key: cvVersionRepublishRepoMetadataKey(params.cvId, params.id),
594
+ url: api.getApiUrl(`/content_view_versions/${params.id}/republish_repositories`),
595
+ params: { ...params, force: true },
596
+ handleSuccess: (response) => {
597
+ if (handleSuccess) return handleSuccess();
598
+ return renderTaskStartedToast(response.data);
599
+ },
600
+ errorToast: error => cvErrorToast(error),
601
+ });
602
+
587
603
  export default getContentViewDetails;
@@ -3,6 +3,8 @@ import {
3
3
  UPDATE_CONTENT_VIEW,
4
4
  UPDATE_CONTENT_VIEW_FAILURE,
5
5
  UPDATE_CONTENT_VIEW_SUCCESS,
6
+ CONTENT_VIEW_NEEDS_PUBLISH,
7
+ CONTENT_VIEW_NEEDS_PUBLISH_RESET,
6
8
  } from '../ContentViewsConstants';
7
9
 
8
10
  const initialState = Immutable({
@@ -17,6 +19,10 @@ export default (state = initialState, action) => {
17
19
  return state.merge({ updating: false });
18
20
  case UPDATE_CONTENT_VIEW_FAILURE:
19
21
  return state.set('updating', false);
22
+ case CONTENT_VIEW_NEEDS_PUBLISH:
23
+ return state.set('needsPublish', true);
24
+ case CONTENT_VIEW_NEEDS_PUBLISH_RESET:
25
+ return state.set('needsPublish', false);
20
26
  default:
21
27
  return state;
22
28
  }
@@ -389,3 +389,5 @@ export const selectRemoveCVVersionError = (state, versionId, versionEnvironments
389
389
 
390
390
 
391
391
  export const selectIsCVUpdating = state => state.katello?.contentViewDetails?.updating;
392
+
393
+ export const selectCVNeedsPublish = state => state.katello?.contentViewDetails?.needsPublish;
@@ -14,7 +14,7 @@ import { selectCreateContentViewFilter, selectCreateContentViewFilterStatus,
14
14
  selectCreateContentViewFilterError, selectCreateFilterRule,
15
15
  selectCreateFilterRuleError, selectCreateFilterRuleStatus,
16
16
  selectRepoTypes, selectRepoTypesStatus } from '../../../Details/ContentViewDetailSelectors';
17
- import { FILTER_TYPES } from '../../../ContentViewsConstants';
17
+ import { CONTENT_VIEW_NEEDS_PUBLISH, FILTER_TYPES } from '../../../ContentViewsConstants';
18
18
  import ContentType from '../ContentType';
19
19
 
20
20
  const CVFilterAddModal = ({ cvId, onClose }) => {
@@ -46,7 +46,7 @@ const CVFilterAddModal = ({ cvId, onClose }) => {
46
46
  cvId,
47
47
  {
48
48
  name, description, inclusion, type,
49
- },
49
+ }, () => dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH }),
50
50
  ));
51
51
  };
52
52
 
@@ -28,6 +28,7 @@ import TableWrapper from '../../../../../components/Table/TableWrapper';
28
28
  import RepoIcon from '../../Repositories/RepoIcon';
29
29
  import SelectableDropdown from '../../../../../components/SelectableDropdown/SelectableDropdown';
30
30
  import { hasPermission } from '../../../helpers';
31
+ import { CONTENT_VIEW_NEEDS_PUBLISH } from '../../../ContentViewsConstants';
31
32
 
32
33
  const allProducts = 'All products';
33
34
 
@@ -131,6 +132,7 @@ const AffectedRepositoryTable = ({
131
132
  filterId,
132
133
  { id: filterId, repository_ids: repositoryIds.concat(repos) }, () => {
133
134
  dispatch(getCVFilterDetails(cvId, filterId));
135
+ dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH });
134
136
  },
135
137
  ));
136
138
  };
@@ -142,7 +144,10 @@ const AffectedRepositoryTable = ({
142
144
  dispatch(editCVFilter(
143
145
  filterId,
144
146
  { id: filterId, repository_ids: deletedRepos },
145
- () => dispatch(getCVFilterDetails(cvId, filterId, {})),
147
+ () => {
148
+ dispatch(getCVFilterDetails(cvId, filterId, {}));
149
+ dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH });
150
+ },
146
151
  ));
147
152
  if (deletedRepos.length === 0) setShowAffectedRepos(false);
148
153
  };
@@ -182,7 +187,14 @@ const AffectedRepositoryTable = ({
182
187
  setProductSelected(allProducts);
183
188
  };
184
189
  const dropdownItems = [
185
- <DropdownItem aria-label="bulk_remove" key="bulk_remove" isDisabled={!hasAddedSelected} component="button" onClick={removeBulk}>
190
+ <DropdownItem
191
+ ouiaId="bulk-remove-dropdown-item"
192
+ aria-label="bulk_remove"
193
+ key="bulk_remove"
194
+ isDisabled={!hasAddedSelected}
195
+ component="button"
196
+ onClick={removeBulk}
197
+ >
186
198
  {__('Remove')}
187
199
  </DropdownItem>,
188
200
  ];
@@ -234,6 +246,7 @@ const AffectedRepositoryTable = ({
234
246
  </ActionListItem>
235
247
  <ActionListItem>
236
248
  <Dropdown
249
+ ouiaId="bulk-actions-dropdown"
237
250
  toggle={<KebabToggle aria-label="bulk_actions" onToggle={toggleBulkAction} />}
238
251
  isOpen={bulkActionOpen}
239
252
  isPlain
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types';
4
4
  import { Switch } from '@patternfly/react-core';
5
5
  import { translate as __ } from 'foremanReact/common/I18n';
6
6
  import { editCVFilter } from '../ContentViewDetailActions';
7
+ import { CONTENT_VIEW_NEEDS_PUBLISH } from '../../ContentViewsConstants';
7
8
 
8
9
  export const ArtifactsWithNoErrataRenderer = ({ filterDetails }) => {
9
10
  const dispatch = useDispatch();
@@ -18,7 +19,10 @@ export const ArtifactsWithNoErrataRenderer = ({ filterDetails }) => {
18
19
  const setArtifactsNoErrata = (checked) => {
19
20
  enableArtifactsNoErrata(checked);
20
21
  setLoading(true);
21
- dispatch(editCVFilter(id, { [artifactAttribute]: checked }, () => setLoading(false)));
22
+ dispatch(editCVFilter(id, { [artifactAttribute]: checked }, () => {
23
+ setLoading(false);
24
+ dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH });
25
+ }));
22
26
  };
23
27
  const getLabel = () => {
24
28
  switch (true) {
@@ -28,11 +28,11 @@ import { deleteContentViewFilterRules, getCVFilterRules, removeCVFilterRule } fr
28
28
  import AddEditContainerTagRuleModal from './Rules/ContainerTag/AddEditContainerTagRuleModal';
29
29
  import AffectedRepositoryTable from './AffectedRepositories/AffectedRepositoryTable';
30
30
  import { hasPermission } from '../../helpers';
31
-
32
- const emptyContentTitle = __('No rules have been added to this filter.');
33
- const emptyContentBody = __('Items will appear here when a filter rule is added.');
34
- const emptySearchTitle = __('No matching filter rules found.');
35
- const emptySearchBody = __('Try changing your search settings.');
31
+ import { emptyContentTitle,
32
+ emptyContentBody,
33
+ emptySearchTitle,
34
+ emptySearchBody } from './FilterRuleConstants';
35
+ import { CONTENT_VIEW_NEEDS_PUBLISH } from '../../ContentViewsConstants';
36
36
 
37
37
  const CVContainerImageFilterContent = ({
38
38
  cvId, filterId, showAffectedRepos, setShowAffectedRepos, details,
@@ -80,8 +80,10 @@ const CVContainerImageFilterContent = ({
80
80
  setBulkActionOpen(false);
81
81
  const tagFilterIds =
82
82
  rows.filter(row => row.selected).map(selected => selected.id);
83
- dispatch(deleteContentViewFilterRules(filterId, tagFilterIds, () =>
84
- dispatch(getCVFilterRules(filterId))));
83
+ dispatch(deleteContentViewFilterRules(filterId, tagFilterIds, () => {
84
+ dispatch(getCVFilterRules(filterId));
85
+ dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH });
86
+ }));
85
87
  deselectAll();
86
88
  };
87
89
 
@@ -111,8 +113,10 @@ const CVContainerImageFilterContent = ({
111
113
  {
112
114
  title: __('Remove'),
113
115
  onClick: (_event, _rowId, { id }) => {
114
- dispatch(removeCVFilterRule(filterId, id, () =>
115
- dispatch(getCVFilterRules(filterId))));
116
+ dispatch(removeCVFilterRule(filterId, id, () => {
117
+ dispatch(getCVFilterRules(filterId));
118
+ dispatch({ type: CONTENT_VIEW_NEEDS_PUBLISH });
119
+ }));
116
120
  },
117
121
  },
118
122
  {
@@ -18,6 +18,10 @@ import CVDebMatchContentModal from './MatchContentModal/CVDebMatchContentModal';
18
18
  import AddEditDebPackageRuleModal from './Rules/DebPackage/AddEditDebPackageRuleModal';
19
19
  import AffectedRepositoryTable from './AffectedRepositories/AffectedRepositoryTable';
20
20
  import { hasPermission } from '../../helpers';
21
+ import { emptyContentTitle,
22
+ emptyContentBody,
23
+ emptySearchTitle,
24
+ emptySearchBody } from './FilterRuleConstants';
21
25
 
22
26
  const CVDebFilterContent = ({
23
27
  cvId, filterId, inclusion, showAffectedRepos, setShowAffectedRepos, details,
@@ -104,10 +108,6 @@ const CVDebFilterContent = ({
104
108
  }
105
109
  }, [showAffectedRepos, repositories.length]);
106
110
 
107
- const emptyContentTitle = __('No rules have been added to this filter.');
108
- const emptyContentBody = __("Add to this filter using the 'Add Deb rule' button.");
109
- const emptySearchTitle = __('No matching rules found.');
110
- const emptySearchBody = __('Try changing your search settings.');
111
111
  const tabTitle = (inclusion ? __('Included') : __('Excluded')) + __(' DEBs');
112
112
 
113
113
 
@@ -184,17 +184,30 @@ const CVDebFilterContent = ({
184
184
  />}
185
185
  <Split hasGutter>
186
186
  <SplitItem>
187
- <Button onClick={() => setModalOpen(true)} variant="secondary" aria-label="create_deb_rule">
187
+ <Button
188
+ ouiaId="create-deb-rule-button"
189
+ onClick={() => setModalOpen(true)}
190
+ variant="secondary"
191
+ aria-label="create_deb_rule"
192
+ >
188
193
  {__('Add DEB rule')}
189
194
  </Button>
190
195
  </SplitItem>
191
196
  <SplitItem>
192
197
  <Dropdown
198
+ ouiaId="bulk-actions-dropdown"
193
199
  toggle={<KebabToggle aria-label="bulk_actions" onToggle={toggleBulkAction} />}
194
200
  isOpen={bulkActionOpen}
195
201
  isPlain
196
202
  dropdownItems={[
197
- <DropdownItem aria-label="bulk_remove" key="bulk_remove" isDisabled={!hasSelected} component="button" onClick={bulkRemove}>
203
+ <DropdownItem
204
+ ouiaId="bulk-remove-dropdown-item"
205
+ aria-label="bulk_remove"
206
+ key="bulk_remove"
207
+ isDisabled={!hasSelected}
208
+ component="button"
209
+ onClick={bulkRemove}
210
+ >
198
211
  {__('Remove')}
199
212
  </DropdownItem>]
200
213
  }