katello 4.5.1 → 4.6.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.
- checksums.yaml +4 -4
- data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +10 -0
- data/app/controllers/katello/api/v2/activation_keys_controller.rb +7 -0
- data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +52 -22
- data/app/controllers/katello/api/v2/content_uploads_controller.rb +2 -0
- data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
- data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
- data/app/controllers/katello/api/v2/debs_controller.rb +42 -10
- data/app/controllers/katello/api/v2/host_collections_controller.rb +5 -1
- data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -0
- data/app/controllers/katello/api/v2/host_module_streams_controller.rb +9 -1
- data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +8 -1
- data/app/controllers/katello/api/v2/organizations_controller.rb +3 -1
- data/app/controllers/katello/api/v2/simple_content_access_controller.rb +8 -0
- data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +34 -11
- data/app/controllers/katello/concerns/organizations_controller_extensions.rb +7 -16
- data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +16 -0
- data/app/lib/actions/katello/alternate_content_source/create.rb +11 -5
- data/app/lib/actions/katello/alternate_content_source/destroy.rb +3 -4
- data/app/lib/actions/katello/alternate_content_source/refresh.rb +3 -5
- data/app/lib/actions/katello/alternate_content_source/update.rb +57 -13
- data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +2 -2
- data/app/lib/actions/katello/organization/manifest_refresh.rb +8 -4
- data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +1 -9
- data/app/lib/actions/katello/repository/create.rb +9 -0
- data/app/lib/actions/katello/repository/destroy.rb +21 -0
- data/app/lib/actions/katello/repository/errata_mail.rb +3 -3
- data/app/lib/actions/katello/repository/refresh_repository.rb +3 -0
- data/app/lib/actions/katello/repository/update.rb +33 -0
- data/app/lib/actions/katello/repository/update_redhat_repository.rb +1 -1
- data/app/lib/actions/pulp3/alternate_content_source/create.rb +5 -4
- data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +5 -4
- data/app/lib/actions/pulp3/alternate_content_source/delete.rb +4 -4
- data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +4 -4
- data/app/lib/actions/pulp3/alternate_content_source/refresh.rb +4 -4
- data/app/lib/actions/pulp3/alternate_content_source/update.rb +4 -4
- data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +5 -5
- data/app/lib/actions/pulp3/capsule_content/reclaim_space.rb +1 -0
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +3 -3
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +6 -7
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +2 -2
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +18 -0
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +3 -3
- data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
- data/app/lib/katello/concerns/base_template_scope_extensions.rb +1 -1
- data/app/lib/katello/errors.rb +1 -1
- data/app/lib/katello/resources/candlepin/owner.rb +9 -2
- data/app/lib/katello/validators/alternate_content_source_products_validator.rb +17 -0
- data/app/models/katello/alternate_content_source.rb +39 -8
- data/app/models/katello/alternate_content_source_product.rb +13 -0
- data/app/models/katello/concerns/host_managed_extensions.rb +12 -2
- data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
- data/app/models/katello/concerns/smart_proxy_extensions.rb +5 -6
- data/app/models/katello/content_view.rb +4 -0
- data/app/models/katello/content_view_deb_filter.rb +51 -0
- data/app/models/katello/content_view_deb_filter_rule.rb +24 -0
- data/app/models/katello/content_view_filter.rb +10 -3
- data/app/models/katello/glue/candlepin/owner.rb +0 -1
- data/app/models/katello/installed_package.rb +1 -0
- data/app/models/katello/product.rb +3 -0
- data/app/models/katello/repository.rb +2 -0
- data/app/models/katello/smart_proxy_alternate_content_source.rb +6 -0
- data/app/services/cert/certs.rb +8 -16
- data/app/services/katello/content_unit_indexer.rb +2 -1
- data/app/services/katello/organization_creator.rb +4 -4
- data/app/services/katello/pulp/server.rb +2 -2
- data/app/services/katello/pulp3/alternate_content_source.rb +22 -4
- data/app/services/katello/pulp3/api/apt.rb +12 -0
- data/app/services/katello/pulp3/erratum.rb +1 -4
- data/app/services/katello/pulp3/repository/apt.rb +186 -2
- data/app/services/katello/pulp3/repository.rb +4 -3
- data/app/services/katello/pulp3/service_common.rb +1 -1
- data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
- data/app/views/foreman/smart_proxies/show.html.erb +3 -3
- data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +18 -3
- data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +20 -0
- data/app/views/katello/api/v2/ansible_collections/compare.json.rabl +10 -0
- data/app/views/katello/api/v2/content_view_filters/base.json.rabl +5 -0
- data/app/views/katello/api/v2/module_streams/compare.json.rabl +10 -0
- data/app/views/katello/api/v2/repository_sets/show.json.rabl +4 -0
- data/app/views/katello/layouts/foreman_with_bastion.html.erb +1 -1
- data/app/views/katello/layouts/react.html.erb +1 -1
- data/app/views/overrides/organizations/_edit_override.html.erb +5 -8
- data/app/views/overrides/organizations/_index_row_override.html.erb +1 -1
- data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
- data/ca/redhat-uep.pem +18 -23
- data/config/katello.yaml.example +0 -2
- data/config/routes/api/v2.rb +2 -0
- data/config/routes/overrides.rb +1 -0
- data/db/migrate/20201116161820_create_content_view_deb_filter_rules.rb +17 -0
- data/db/migrate/20220524132259_remove_last_refreshed_from_katello_alternate_content_sources.rb +5 -0
- data/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb +5 -0
- data/db/migrate/20220610165621_add_repositories_and_products_to_acs.rb +23 -0
- data/db/seeds.d/102-organizations.rb +1 -1
- data/engines/bastion/app/views/bastion/layouts/application.html.erb +1 -1
- data/engines/bastion/app/views/bastion/layouts/application_ie.html.erb +1 -1
- data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +2 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment.controller.js +2 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +3 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -5
- data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -1
- data/lib/katello/engine.rb +1 -2
- data/lib/katello/permission_creator.rb +2 -2
- data/lib/katello/permissions/host_permissions.rb +1 -0
- data/lib/katello/plugin.rb +6 -12
- data/lib/katello/version.rb +1 -1
- data/locale/action_names.rb +49 -46
- data/locale/bn/katello.po +361 -53
- data/{webpack/scenes/AnsibleCollections/AnsibleCollectionsTables.scss → locale/bn/katello.po.time_stamp} +0 -0
- data/locale/cs/katello.po +361 -53
- data/locale/cs/katello.po.time_stamp +0 -0
- data/locale/de/katello.po +366 -58
- data/locale/de/katello.po.time_stamp +0 -0
- data/locale/en/katello.po +361 -53
- data/locale/en/katello.po.time_stamp +0 -0
- data/locale/es/katello.po +364 -56
- data/locale/es/katello.po.time_stamp +0 -0
- data/locale/fr/katello.po +376 -68
- data/locale/fr/katello.po.time_stamp +0 -0
- data/locale/gu/katello.po +361 -53
- data/locale/gu/katello.po.time_stamp +0 -0
- data/locale/hi/katello.po +361 -53
- data/locale/hi/katello.po.time_stamp +0 -0
- data/locale/it/katello.po +361 -53
- data/locale/it/katello.po.time_stamp +0 -0
- data/locale/ja/katello.po +374 -66
- data/locale/ja/katello.po.time_stamp +0 -0
- data/locale/katello.pot +1626 -1079
- data/locale/kn/katello.po +361 -53
- data/locale/kn/katello.po.time_stamp +0 -0
- data/locale/ko/katello.po +361 -53
- data/locale/ko/katello.po.time_stamp +0 -0
- data/locale/mr/katello.po +361 -53
- data/locale/mr/katello.po.time_stamp +0 -0
- data/locale/or/katello.po +361 -53
- data/locale/or/katello.po.time_stamp +0 -0
- data/locale/pa/katello.po +361 -53
- data/locale/pa/katello.po.time_stamp +0 -0
- data/locale/pt/katello.po +361 -53
- data/locale/pt/katello.po.time_stamp +0 -0
- data/locale/pt_BR/katello.po +364 -56
- data/locale/pt_BR/katello.po.time_stamp +0 -0
- data/locale/ru/katello.po +361 -53
- data/locale/ru/katello.po.time_stamp +0 -0
- data/locale/ta/katello.po +361 -53
- data/locale/ta/katello.po.time_stamp +0 -0
- data/locale/te/katello.po +361 -53
- data/locale/te/katello.po.time_stamp +0 -0
- data/locale/zh_CN/katello.po +374 -66
- data/locale/zh_CN/katello.po.time_stamp +0 -0
- data/locale/zh_TW/katello.po +361 -53
- data/locale/zh_TW/katello.po.time_stamp +0 -0
- data/package.json +0 -3
- data/webpack/components/EditableTextInput/EditableTextInput.js +3 -16
- data/webpack/components/EditableTextInput/PencilEditButton.js +33 -0
- data/webpack/components/Errata/index.js +18 -3
- data/webpack/components/Loading.js +1 -1
- data/webpack/components/RoutedTabs/index.js +1 -17
- data/webpack/components/Search/Search.js +0 -1
- data/webpack/components/Search/__tests__/search.test.js +1 -2
- data/webpack/components/SelectAllCheckbox/index.js +7 -4
- data/webpack/components/SelectableDropdown/SelectableDropdown.js +1 -0
- data/webpack/components/Table/EmptyStateMessage.js +77 -2
- data/webpack/components/Table/MainTable.js +46 -4
- data/webpack/components/Table/TableHooks.js +9 -6
- data/webpack/components/Table/TableWrapper.js +14 -8
- data/webpack/components/TypeAhead/TypeAhead.js +26 -11
- data/webpack/components/TypeAhead/pf3Search/TypeAheadItems.js +1 -1
- data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +2 -1
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +9 -4
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeActions.js +37 -0
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +173 -0
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +6 -0
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeConstants.js +6 -0
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +301 -0
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeSelectors.js +25 -0
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +108 -0
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +161 -0
- data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +12 -12
- data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +100 -0
- data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +26 -4
- data/webpack/components/extensions/HostDetails/HostDetailsConstants.js +3 -1
- data/webpack/components/extensions/HostDetails/HostDetailsReducer.js +14 -0
- data/webpack/components/extensions/HostDetails/HostDetailsSelectors.js +8 -2
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +8 -12
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +23 -2
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +5 -0
- data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +57 -7
- data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +2 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +3 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +4 -1
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +1 -10
- data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +1 -1
- data/webpack/components/extensions/RegistrationCommands/index.js +49 -17
- data/webpack/containers/Application/config.js +5 -10
- data/webpack/global_index.js +19 -7
- data/webpack/global_test_setup.js +14 -2
- data/webpack/ouia_id_check.js +95 -0
- data/webpack/redux/actions/RedHatRepositories/helpers.js +2 -0
- data/webpack/redux/reducers/index.js +2 -4
- data/webpack/scenes/AlternateContentSources/ACSActions.js +36 -3
- data/webpack/scenes/AlternateContentSources/ACSConstants.js +3 -0
- data/webpack/scenes/AlternateContentSources/ACSSelectors.js +15 -6
- data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +73 -42
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +26 -10
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSProducts.js +44 -0
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +59 -45
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +2 -1
- data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +0 -1
- data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +35 -19
- data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +120 -13
- data/webpack/scenes/AlternateContentSources/Create/__tests__/products.fixtures.json +92 -0
- data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +459 -0
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +354 -0
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +104 -0
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +120 -0
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +118 -0
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +118 -0
- data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +242 -0
- data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +106 -0
- data/webpack/scenes/AlternateContentSources/Details/__tests__/acsDetails.fixtures.json +49 -0
- data/webpack/scenes/AlternateContentSources/Details/__tests__/acsProducts.fixtures.json +95 -0
- data/webpack/scenes/AlternateContentSources/Details/__tests__/simplifiedAcsDetails.fixtures.json +39 -0
- data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +215 -87
- data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.scss +3 -0
- data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +1 -2
- data/webpack/scenes/Content/__tests__/contentTable.test.js +1 -2
- data/webpack/scenes/ContentViews/ContentViewsConstants.js +15 -4
- data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -0
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +113 -0
- data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +89 -0
- data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +32 -9
- data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +13 -3
- data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +39 -27
- data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +236 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +1 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +10 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +3 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +3 -1
- data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +17 -4
- data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +1 -0
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +34 -22
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +97 -0
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +128 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +56 -3
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +62 -8
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +1 -5
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +32 -2
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVContainerImageFilterContent.fixtures.json +13 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVPackageFilterRules.fixtures.json +13 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyContentViewFilters.fixtures.json +13 -0
- data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +5 -1
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +3 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +143 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +51 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +314 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +186 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +74 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/AnsibleCollectionsCompareAllContentData.fixtures.json +63 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +657 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionEmptyContentCompareData.fixtures.json +14 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ContainerTagsCompareAllContentData.fixtures.json +95 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/DebPackagesCompareAllContentData.fixtures.json +87 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareAllContentData.fixtures.json +319 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareThreeContentTypesData.fixtures.json +131 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareAllContentData.fixtures.json +51 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareThreeContentTypesData.fixtures.json +48 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ModuleStreamsCompareAllContentData.fixtures.json +239 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PackageGroupsCompareAllContentData.fixtures.json +51 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PythonPackagesCompareAllContentData.fixtures.json +315 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareAllContentData.fixtures.json +470 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareThreeContentTypesData.fixtures.json +475 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewDetails.fixtures.json +160 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionOneDetials.fixtures.json +161 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionThreeDetails.fixtures.json +154 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionTwoDetails.fixtures.json +211 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersions.fixtures.json +1013 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionOneDetails.fixtures.json +145 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionTwoDetails.fixtures.json +145 -0
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +102 -36
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +4 -2
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +113 -40
- data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +96 -81
- data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -2
- data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +7 -2
- data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +1 -1
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +0 -30
- data/webpack/test-utils/nockWrapper.js +7 -0
- metadata +100 -145
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +0 -34
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +0 -751
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-deletion.controller.js +0 -42
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +0 -81
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-confirm.controller.js +0 -65
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +0 -82
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-environments.controller.js +0 -76
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion.controller.js +0 -160
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/content-view-deletion.html +0 -58
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-activation-keys.html +0 -94
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-confirm.html +0 -76
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-content-hosts.html +0 -88
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-environments.html +0 -73
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-component.factory.js +0 -32
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +0 -75
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +0 -68
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-available-content-views.html +0 -81
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-content-views-list.html +0 -81
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite.html +0 -24
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-deb-repositories.controller.js +0 -50
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +0 -42
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-file-repositories.controller.js +0 -50
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +0 -42
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-repositories.controller.js +0 -45
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-deb-repositories-list.controller.js +0 -48
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +0 -100
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +0 -49
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-file-repositories-list.controller.js +0 -48
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +0 -49
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-promotion.controller.js +0 -129
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-publish.controller.js +0 -46
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories-list.controller.js +0 -42
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories.service.js +0 -91
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +0 -240
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +0 -115
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-module-stream-filter.controller.js +0 -68
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +0 -66
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/date-type-errata-filter.controller.js +0 -77
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/docker-tag-filter.controller.js +0 -137
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/edit-filter.controller.js +0 -36
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter-list.controller.js +0 -78
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter.controller.js +0 -74
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-content-type.filter.js +0 -21
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js +0 -34
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-helper.service.js +0 -30
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-repositories.controller.js +0 -86
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-rule-matching-package-modal.controller.js +0 -37
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-type.filter.js +0 -21
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter.factory.js +0 -66
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filters.controller.js +0 -85
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/module-stream-list-filter.controller.js +0 -73
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/new-filter.controller.js +0 -100
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-filter.controller.js +0 -179
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-group-list-filter.controller.js +0 -75
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/rule.factory.js +0 -21
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata-filter.html +0 -9
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata.html +0 -75
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-filter.html +0 -28
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-tag-filter-details.html +0 -65
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/edit-filter.html +0 -19
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +0 -63
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter.html +0 -50
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-details.html +0 -9
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-repositories.html +0 -121
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-rule-matching-package-modal.html +0 -43
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +0 -85
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +0 -58
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter.html +0 -43
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/new-filter.html +0 -62
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +0 -182
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter.html +0 -28
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter-details.html +0 -42
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter.html +0 -43
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/partials/filter-repositories-count.html +0 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +0 -47
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.factory.js +0 -22
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/views/content-view-history.html +0 -36
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-copy.html +0 -20
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-deb-repositories.html +0 -87
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details-tasks.html +0 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +0 -144
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-docker-repositories.html +0 -114
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-file-repositories.html +0 -87
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +0 -63
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-ostree-repositories.html +0 -87
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-promotion.html +0 -59
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +0 -58
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +0 -116
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -126
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +0 -78
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +0 -127
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +0 -138
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version.controller.js +0 -59
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-apt.html +0 -25
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-components.html +0 -19
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-deb.html +0 -19
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-details.html +0 -15
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-docker.html +0 -23
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-errata.html +0 -48
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-file.html +0 -21
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-module-streams.html +0 -8
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-package-groups.html +0 -21
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-packages.html +0 -27
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-yum.html +0 -42
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +0 -83
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +0 -74
- data/webpack/components/Table/__test__/useBulkSelect.test.js +0 -99
- data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +0 -30
- data/webpack/scenes/AnsibleCollections/AnsibleCollectionsConstants.js +0 -3
- data/webpack/scenes/AnsibleCollections/AnsibleCollectionsPage.js +0 -80
- data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +0 -39
- data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +0 -60
- data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetails.js +0 -94
- data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +0 -23
- data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsConstants.js +0 -3
- data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +0 -30
- data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionsSchema.js +0 -35
- data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailInfo.test.js +0 -16
- data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.fixtures.js +0 -25
- data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -27
- data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +0 -41
- data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsReducer.test.js +0 -33
- data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailInfo.test.js.snap +0 -83
- data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetails.test.js.snap +0 -190
- data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsActions.test.js.snap +0 -58
- data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsReducer.test.js.snap +0 -50
- data/webpack/scenes/AnsibleCollections/Details/index.js +0 -17
- data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -23
- data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollections.fixtures.js +0 -52
- data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsActions.test.js +0 -48
- data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsReducer.test.js +0 -46
- data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -25
- data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionPage.test.js.snap +0 -73
- data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionsTable.test.js.snap +0 -81
- data/webpack/scenes/AnsibleCollections/index.js +0 -17
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +0 -123
File without changes
|
data/package.json
CHANGED
@@ -27,9 +27,6 @@
|
|
27
27
|
"@babel/eslint-plugin": "^7.14.5",
|
28
28
|
"@sheerun/mutationobserver-shim": "^0.3.3",
|
29
29
|
"@testing-library/jest-dom": "^5.3.0",
|
30
|
-
"@types/jest": "^28.1.3",
|
31
|
-
"expect": "^28.1.3",
|
32
|
-
"pretty-format": "^28.1.3",
|
33
30
|
"@testing-library/react": "^10.0.2",
|
34
31
|
"@testing-library/user-event": "^13.5.0",
|
35
32
|
"@theforeman/builder": ">= 6.0.0",
|
@@ -1,17 +1,17 @@
|
|
1
1
|
import React, { useState, useEffect } from 'react';
|
2
2
|
import {
|
3
|
-
TextInput, TextArea, Text, Button, Split, SplitItem,
|
3
|
+
TextInput, TextArea, Text, Button, Split, SplitItem,
|
4
4
|
} from '@patternfly/react-core';
|
5
5
|
import {
|
6
6
|
EyeIcon,
|
7
7
|
EyeSlashIcon,
|
8
8
|
TimesIcon,
|
9
9
|
CheckIcon,
|
10
|
-
PencilAltIcon,
|
11
10
|
} from '@patternfly/react-icons';
|
12
11
|
import { translate as __ } from 'foremanReact/common/I18n';
|
13
12
|
import PropTypes from 'prop-types';
|
14
13
|
import './editableTextInput.scss';
|
14
|
+
import PencilEditButton from './PencilEditButton';
|
15
15
|
|
16
16
|
const PASSWORD_MASK = '••••••••';
|
17
17
|
|
@@ -129,20 +129,7 @@ const EditableTextInput = ({
|
|
129
129
|
</SplitItem >
|
130
130
|
{!disabled &&
|
131
131
|
<SplitItem>
|
132
|
-
<
|
133
|
-
position={TooltipPosition.top}
|
134
|
-
content={__('Edit')}
|
135
|
-
>
|
136
|
-
<Button
|
137
|
-
className="foreman-edit-icon"
|
138
|
-
ouiaId={`edit-button-${attribute}`}
|
139
|
-
aria-label={`edit ${attribute}`}
|
140
|
-
variant="plain"
|
141
|
-
onClick={onEditClick}
|
142
|
-
>
|
143
|
-
<PencilAltIcon />
|
144
|
-
</Button>
|
145
|
-
</Tooltip>
|
132
|
+
<PencilEditButton {...{ attribute, onEditClick }} />
|
146
133
|
</SplitItem>
|
147
134
|
}
|
148
135
|
</Split >
|
@@ -0,0 +1,33 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import {
|
4
|
+
Button, Tooltip, TooltipPosition,
|
5
|
+
} from '@patternfly/react-core';
|
6
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
7
|
+
import {
|
8
|
+
PencilAltIcon,
|
9
|
+
} from '@patternfly/react-icons';
|
10
|
+
|
11
|
+
const PencilEditButton = ({ attribute, onEditClick }) => (
|
12
|
+
<Tooltip
|
13
|
+
position={TooltipPosition.top}
|
14
|
+
content={__('Edit')}
|
15
|
+
>
|
16
|
+
<Button
|
17
|
+
className="foreman-edit-icon"
|
18
|
+
ouiaId={`edit-button-${attribute}`}
|
19
|
+
aria-label={`edit ${attribute}`}
|
20
|
+
variant="plain"
|
21
|
+
onClick={onEditClick}
|
22
|
+
>
|
23
|
+
<PencilAltIcon />
|
24
|
+
</Button>
|
25
|
+
</Tooltip>
|
26
|
+
);
|
27
|
+
|
28
|
+
export default PencilEditButton;
|
29
|
+
|
30
|
+
PencilEditButton.propTypes = {
|
31
|
+
attribute: PropTypes.string.isRequired,
|
32
|
+
onEditClick: PropTypes.func.isRequired,
|
33
|
+
};
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import PropTypes from 'prop-types';
|
3
3
|
import { TableText } from '@patternfly/react-table';
|
4
|
+
import { Tooltip } from '@patternfly/react-core';
|
4
5
|
import {
|
5
6
|
chart_color_black_500 as pfBlack,
|
6
7
|
chart_color_gold_400 as pfGold,
|
@@ -86,7 +87,9 @@ export const ErrataSummary = ({ type, count }) => {
|
|
86
87
|
<TableText>
|
87
88
|
<SquareIcon size="sm" color={color} />
|
88
89
|
<span style={{ marginLeft: '8px' }}>
|
89
|
-
<
|
90
|
+
<Tooltip content={label} >
|
91
|
+
<ErrataIcon />
|
92
|
+
</Tooltip>
|
90
93
|
{url}
|
91
94
|
</span>
|
92
95
|
</TableText>
|
@@ -124,7 +127,10 @@ export const ErrataType = ({ type }) => {
|
|
124
127
|
|
125
128
|
return (
|
126
129
|
<TableText wrapModifier="nowrap">
|
127
|
-
<
|
130
|
+
<Tooltip content={label} >
|
131
|
+
<ErrataIcon style={{ marginRight: '4px' }} />
|
132
|
+
</Tooltip>
|
133
|
+
{label}
|
128
134
|
</TableText>
|
129
135
|
);
|
130
136
|
};
|
@@ -157,7 +163,16 @@ export const ErrataSeverity = ({ severity }) => {
|
|
157
163
|
default:
|
158
164
|
label = __('N/A');
|
159
165
|
}
|
160
|
-
return
|
166
|
+
return (
|
167
|
+
<TableText wrapModifier="nowrap">
|
168
|
+
{color &&
|
169
|
+
<Tooltip content={label} >
|
170
|
+
<SecurityIcon color={color} />
|
171
|
+
</Tooltip>
|
172
|
+
}
|
173
|
+
{label}
|
174
|
+
</TableText>
|
175
|
+
);
|
161
176
|
};
|
162
177
|
|
163
178
|
ErrataSeverity.propTypes = {
|
@@ -14,7 +14,7 @@ const Loading = ({ size, showText, loadingText }) => (
|
|
14
14
|
<EmptyState>
|
15
15
|
<EmptyStateIcon size={size} variant="container" component={Spinner} />
|
16
16
|
{showText && (
|
17
|
-
<Title size={size} headingLevel="h4">
|
17
|
+
<Title size={size} headingLevel="h4" ouiaId="loading-title">
|
18
18
|
{loadingText || __('Loading')}
|
19
19
|
</Title>)}
|
20
20
|
</EmptyState>
|
@@ -1,33 +1,18 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { shape, string, number, element, arrayOf } from 'prop-types';
|
3
3
|
import { Tab, Tabs, TabTitleText } from '@patternfly/react-core';
|
4
|
-
import { Switch, Route, Redirect,
|
4
|
+
import { Switch, Route, Redirect, useLocation, withRouter, HashRouter } from 'react-router-dom';
|
5
5
|
import { head, last } from 'lodash';
|
6
6
|
|
7
7
|
const RoutedTabs = ({
|
8
8
|
tabs, defaultTabIndex,
|
9
9
|
}) => {
|
10
|
-
const { push } = useHistory();
|
11
10
|
const {
|
12
11
|
hash, key: locationKey,
|
13
12
|
} = useLocation();
|
14
13
|
|
15
14
|
// The below transforms #/history/6 to history
|
16
15
|
const currentTabFromUrl = head(last(hash.split('#/')).split('/'));
|
17
|
-
// Allows navigation back to mainTab
|
18
|
-
const onSubTab = currentTabFromUrl !== last(last(hash.split('#/')).split('/'));
|
19
|
-
|
20
|
-
const onSelect = (e, key) => {
|
21
|
-
e.preventDefault();
|
22
|
-
// See the below links for understanding of this mouseEvent
|
23
|
-
// https://www.w3schools.com/jsref/event_which.asp
|
24
|
-
// https://www.w3schools.com/jsref/event_button.asp
|
25
|
-
const middleMouseButtonNotUsed = !(e.button === 1 || e.buttons === 4 || e.which === 2);
|
26
|
-
const notCurrentTab = currentTabFromUrl !== key;
|
27
|
-
if (middleMouseButtonNotUsed && (notCurrentTab || !!onSubTab)) {
|
28
|
-
push(`#/${key}`);
|
29
|
-
}
|
30
|
-
};
|
31
16
|
|
32
17
|
return (
|
33
18
|
<>
|
@@ -39,7 +24,6 @@ const RoutedTabs = ({
|
|
39
24
|
<a
|
40
25
|
key={key}
|
41
26
|
href={`#/${key}`}
|
42
|
-
onMouseUp={e => onSelect(e, key)}
|
43
27
|
style={{ textDecoration: 'none' }}
|
44
28
|
>
|
45
29
|
<Tab
|
@@ -30,7 +30,6 @@ const Search = ({
|
|
30
30
|
const [items, setItems] = useState([]);
|
31
31
|
const dispatch = useDispatch();
|
32
32
|
const mountedRef = useRef(true);
|
33
|
-
|
34
33
|
const onInputUpdate = async (searchTerm = '') => {
|
35
34
|
const newItems = items.filter(({ text }) => stringIncludes(text, searchTerm));
|
36
35
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
|
3
|
-
import
|
3
|
+
import {
|
4
4
|
nockInstance, assertNockRequest, mockAutocomplete, mockSetting,
|
5
5
|
} from '../../../test-utils/nockWrapper';
|
6
6
|
import { AUTOSEARCH_WHILE_TYPING, AUTOSEARCH_DELAY } from '../../../scenes/Settings/SettingsConstants.js';
|
@@ -24,7 +24,6 @@ beforeEach(() => {
|
|
24
24
|
|
25
25
|
afterEach(() => {
|
26
26
|
assertNockRequest(searchDelayScope);
|
27
|
-
nock.cleanAll();
|
28
27
|
});
|
29
28
|
|
30
29
|
jest.mock('../../../utils/useDebounce', () => ({
|
@@ -68,16 +68,16 @@ const SelectAllCheckbox = ({
|
|
68
68
|
}, [selectedCount, areAllRowsSelected]);
|
69
69
|
|
70
70
|
const selectAllDropdownItems = [
|
71
|
-
<DropdownItem key="select-none" component="button" isDisabled={selectedCount === 0} onClick={handleSelectNone} >
|
71
|
+
<DropdownItem key="select-none" ouiaId="select-none" component="button" isDisabled={selectedCount === 0} onClick={handleSelectNone} >
|
72
72
|
{`${__('Select none')} (0)`}
|
73
73
|
</DropdownItem>,
|
74
|
-
<DropdownItem key="select-page" component="button" isDisabled={pageRowCount === 0 || areAllRowsOnPageSelected} onClick={handleSelectPage}>
|
74
|
+
<DropdownItem key="select-page" ouiaId="select-page" component="button" isDisabled={pageRowCount === 0 || areAllRowsOnPageSelected} onClick={handleSelectPage}>
|
75
75
|
{`${__('Select page')} (${pageRowCount})`}
|
76
76
|
</DropdownItem>,
|
77
77
|
];
|
78
78
|
if (canSelectAll) {
|
79
79
|
selectAllDropdownItems.push((
|
80
|
-
<DropdownItem key="select-all" id="all" component="button" isDisabled={totalCount === 0 || areAllRowsSelected} onClick={handleSelectAll}>
|
80
|
+
<DropdownItem key="select-all" id="all" ouiaId="select-all" component="button" isDisabled={totalCount === 0 || areAllRowsSelected} onClick={handleSelectAll}>
|
81
81
|
{`${__('Select all')} (${totalCount})`}
|
82
82
|
</DropdownItem>));
|
83
83
|
}
|
@@ -87,11 +87,13 @@ const SelectAllCheckbox = ({
|
|
87
87
|
toggle={
|
88
88
|
<DropdownToggle
|
89
89
|
onToggle={onSelectAllDropdownToggle}
|
90
|
-
id="
|
90
|
+
id="select-all-checkbox-dropdown-toggle"
|
91
|
+
ouiaId="select-all-checkbox-dropdown-toggle"
|
91
92
|
splitButtonItems={[
|
92
93
|
<DropdownToggleCheckbox
|
93
94
|
className="tablewrapper-select-all-checkbox"
|
94
95
|
key="tablewrapper-select-all-checkbox"
|
96
|
+
ouiaId="select-all-checkbox-dropdown-toggle-checkbox"
|
95
97
|
aria-label="Select all"
|
96
98
|
onChange={checked => onSelectAllCheckboxChange(checked)}
|
97
99
|
isChecked={selectionToggle}
|
@@ -105,6 +107,7 @@ const SelectAllCheckbox = ({
|
|
105
107
|
isOpen={isSelectAllDropdownOpen}
|
106
108
|
dropdownItems={selectAllDropdownItems}
|
107
109
|
id="selection-checkbox"
|
110
|
+
ouiaId="selection-checkbox"
|
108
111
|
/>
|
109
112
|
);
|
110
113
|
};
|
@@ -4,13 +4,17 @@ import {
|
|
4
4
|
EmptyStateBody,
|
5
5
|
EmptyStateIcon,
|
6
6
|
EmptyStateVariant,
|
7
|
+
EmptyStateSecondaryActions,
|
7
8
|
Bullseye,
|
8
9
|
Title,
|
10
|
+
Button,
|
9
11
|
} from '@patternfly/react-core';
|
10
12
|
import PropTypes from 'prop-types';
|
11
13
|
import { translate as __ } from 'foremanReact/common/I18n';
|
12
14
|
import { CubeIcon, ExclamationCircleIcon, SearchIcon, CheckCircleIcon } from '@patternfly/react-icons';
|
13
15
|
import { global_danger_color_200 as dangerColor, global_success_color_100 as successColor } from '@patternfly/react-tokens';
|
16
|
+
import { useDispatch, useSelector } from 'react-redux';
|
17
|
+
import { selectHostDetailsClearSearch } from '../extensions/HostDetails/HostDetailsSelectors';
|
14
18
|
|
15
19
|
const KatelloEmptyStateIcon = ({
|
16
20
|
error, search, customIcon, happyIcon,
|
@@ -23,10 +27,16 @@ const KatelloEmptyStateIcon = ({
|
|
23
27
|
};
|
24
28
|
|
25
29
|
const EmptyStateMessage = ({
|
26
|
-
title, body, error, search,
|
30
|
+
title, body, error, search,
|
31
|
+
customIcon, happy, ...extraTableProps
|
27
32
|
}) => {
|
28
33
|
let emptyStateTitle = title;
|
29
34
|
let emptyStateBody = body;
|
35
|
+
const {
|
36
|
+
primaryActionTitle, showPrimaryAction, showSecondaryAction,
|
37
|
+
secondaryActionTitle, primaryActionLink, secondaryActionLink, searchIsActive, resetFilters,
|
38
|
+
filtersAreActive, requestKey, primaryActionButton,
|
39
|
+
} = extraTableProps;
|
30
40
|
if (error) {
|
31
41
|
if (error?.response?.data?.error) {
|
32
42
|
const { response: { data: { error: { message, details } } } } = error;
|
@@ -38,6 +48,27 @@ const EmptyStateMessage = ({
|
|
38
48
|
emptyStateBody = error?.response?.data?.displayMessage || __('Something went wrong! Please check server logs!');
|
39
49
|
}
|
40
50
|
}
|
51
|
+
const secondaryActionText = searchIsActive ? __('Clear search') : __('Clear filters');
|
52
|
+
const dispatch = useDispatch();
|
53
|
+
const clearSearch = useSelector(selectHostDetailsClearSearch);
|
54
|
+
const handleClick = () => {
|
55
|
+
if (searchIsActive) {
|
56
|
+
clearSearch();
|
57
|
+
}
|
58
|
+
if (filtersAreActive) {
|
59
|
+
resetFilters();
|
60
|
+
}
|
61
|
+
dispatch({
|
62
|
+
type: `${requestKey}_REQUEST`,
|
63
|
+
key: requestKey,
|
64
|
+
});
|
65
|
+
};
|
66
|
+
|
67
|
+
const actionButton = primaryActionButton ?? (
|
68
|
+
<Button>
|
69
|
+
<a href={primaryActionLink} style={{ color: 'white', textDecoration: 'none' }}>{primaryActionTitle}</a>
|
70
|
+
</Button>
|
71
|
+
);
|
41
72
|
return (
|
42
73
|
<Bullseye>
|
43
74
|
<EmptyState
|
@@ -49,17 +80,34 @@ const EmptyStateMessage = ({
|
|
49
80
|
customIcon={customIcon}
|
50
81
|
happyIcon={happy}
|
51
82
|
/>
|
52
|
-
<Title headingLevel="h2" size="lg">
|
83
|
+
<Title headingLevel="h2" size="lg" ouiaId="empty-state-title">
|
53
84
|
{emptyStateTitle}
|
54
85
|
</Title>
|
55
86
|
<EmptyStateBody>
|
56
87
|
{emptyStateBody}
|
57
88
|
</EmptyStateBody>
|
89
|
+
{showPrimaryAction ? actionButton : null}
|
90
|
+
{showSecondaryAction &&
|
91
|
+
<EmptyStateSecondaryActions>
|
92
|
+
<Button variant="link">
|
93
|
+
<a href={secondaryActionLink} style={{ textDecoration: 'none' }}>{secondaryActionTitle}</a>
|
94
|
+
</Button>
|
95
|
+
</EmptyStateSecondaryActions>
|
96
|
+
}
|
97
|
+
|
98
|
+
{(searchIsActive || !!filtersAreActive) &&
|
99
|
+
<EmptyStateSecondaryActions>
|
100
|
+
<Button variant="link" onClick={handleClick}>
|
101
|
+
{secondaryActionText}
|
102
|
+
</Button>
|
103
|
+
</EmptyStateSecondaryActions>
|
104
|
+
}
|
58
105
|
</EmptyState>
|
59
106
|
</Bullseye>
|
60
107
|
);
|
61
108
|
};
|
62
109
|
|
110
|
+
|
63
111
|
KatelloEmptyStateIcon.propTypes = {
|
64
112
|
error: PropTypes.bool,
|
65
113
|
search: PropTypes.bool,
|
@@ -84,6 +132,27 @@ EmptyStateMessage.propTypes = {
|
|
84
132
|
search: PropTypes.bool,
|
85
133
|
customIcon: PropTypes.elementType,
|
86
134
|
happy: PropTypes.bool,
|
135
|
+
searchIsActive: PropTypes.bool,
|
136
|
+
activeFilters: PropTypes.arrayOf(PropTypes.oneOfType([
|
137
|
+
PropTypes.string,
|
138
|
+
PropTypes.arrayOf(PropTypes.string),
|
139
|
+
])),
|
140
|
+
defaultFilters: PropTypes.arrayOf(PropTypes.oneOfType([
|
141
|
+
PropTypes.string,
|
142
|
+
PropTypes.arrayOf(PropTypes.string),
|
143
|
+
])),
|
144
|
+
// eslint-disable-next-line react/require-default-props
|
145
|
+
resetFilters: (props, propName) => {
|
146
|
+
if (props.defaultFilters?.length || props.activeFilters?.length) {
|
147
|
+
if (typeof props[propName] !== 'function') {
|
148
|
+
return new Error(`A ${propName} function is required when using activeFilters or defaultFilters`);
|
149
|
+
}
|
150
|
+
}
|
151
|
+
return null;
|
152
|
+
},
|
153
|
+
showPrimaryAction: PropTypes.bool,
|
154
|
+
showSecondaryAction: PropTypes.bool,
|
155
|
+
primaryActionButton: PropTypes.element,
|
87
156
|
};
|
88
157
|
|
89
158
|
EmptyStateMessage.defaultProps = {
|
@@ -93,6 +162,12 @@ EmptyStateMessage.defaultProps = {
|
|
93
162
|
search: false,
|
94
163
|
customIcon: undefined,
|
95
164
|
happy: false,
|
165
|
+
searchIsActive: false,
|
166
|
+
activeFilters: [],
|
167
|
+
defaultFilters: [],
|
168
|
+
showPrimaryAction: false,
|
169
|
+
showSecondaryAction: false,
|
170
|
+
primaryActionButton: undefined,
|
96
171
|
};
|
97
172
|
|
98
173
|
export default EmptyStateMessage;
|
@@ -18,16 +18,36 @@ const MainTable = ({
|
|
18
18
|
status, cells, rows, error, emptyContentTitle, emptyContentBody,
|
19
19
|
emptySearchTitle, emptySearchBody, errorSearchTitle, errorSearchBody,
|
20
20
|
happyEmptyContent, searchIsActive, activeFilters, defaultFilters, actionButtons, rowsCount,
|
21
|
-
children,
|
21
|
+
children, showPrimaryAction, showSecondaryAction, primaryActionLink,
|
22
|
+
secondaryActionLink, primaryActionTitle, secondaryActionTitle, resetFilters,
|
23
|
+
updateSearchQuery, requestKey, primaryActionButton, ...extraTableProps
|
22
24
|
}) => {
|
23
25
|
const tableHasNoRows = () => {
|
24
26
|
if (children) return rowsCount === 0;
|
25
27
|
return rows.length === 0;
|
26
28
|
};
|
29
|
+
const callToActionProps = {
|
30
|
+
showPrimaryAction,
|
31
|
+
showSecondaryAction,
|
32
|
+
primaryActionLink,
|
33
|
+
primaryActionTitle,
|
34
|
+
secondaryActionLink,
|
35
|
+
secondaryActionTitle,
|
36
|
+
primaryActionButton,
|
37
|
+
};
|
27
38
|
const filtersAreActive = activeFilters?.length &&
|
28
39
|
!isEqual(new Set(activeFilters), new Set(defaultFilters));
|
29
40
|
const isFiltering = searchIsActive || filtersAreActive;
|
30
41
|
if (status === STATUS.PENDING) return (<Loading />);
|
42
|
+
const clearSearchProps = {
|
43
|
+
resetFilters,
|
44
|
+
searchIsActive,
|
45
|
+
updateSearchQuery,
|
46
|
+
filtersAreActive,
|
47
|
+
requestKey,
|
48
|
+
defaultFilters,
|
49
|
+
activeFilters,
|
50
|
+
};
|
31
51
|
// Can we display the error message?
|
32
52
|
if (status === STATUS.ERROR) return (<EmptyStateMessage error={error} />);
|
33
53
|
|
@@ -45,6 +65,7 @@ const MainTable = ({
|
|
45
65
|
title={emptySearchTitle}
|
46
66
|
body={emptySearchBody}
|
47
67
|
search
|
68
|
+
{...clearSearchProps}
|
48
69
|
/>);
|
49
70
|
}
|
50
71
|
if (status === STATUS.RESOLVED && tableHasNoRows()) {
|
@@ -54,6 +75,7 @@ const MainTable = ({
|
|
54
75
|
body={emptyContentBody}
|
55
76
|
happy={happyEmptyContent}
|
56
77
|
search={!happyEmptyContent}
|
78
|
+
{...callToActionProps}
|
57
79
|
/>
|
58
80
|
);
|
59
81
|
}
|
@@ -85,11 +107,11 @@ const MainTable = ({
|
|
85
107
|
MainTable.propTypes = {
|
86
108
|
status: PropTypes.string.isRequired,
|
87
109
|
cells: PropTypes.arrayOf(PropTypes.oneOfType([
|
88
|
-
PropTypes.shape({
|
110
|
+
PropTypes.shape({}),
|
89
111
|
PropTypes.string])),
|
90
|
-
rows: PropTypes.arrayOf(PropTypes.shape({
|
112
|
+
rows: PropTypes.arrayOf(PropTypes.shape({})),
|
91
113
|
error: PropTypes.oneOfType([
|
92
|
-
PropTypes.shape({
|
114
|
+
PropTypes.shape({}),
|
93
115
|
PropTypes.string,
|
94
116
|
]),
|
95
117
|
emptyContentTitle: PropTypes.string.isRequired,
|
@@ -114,6 +136,16 @@ MainTable.propTypes = {
|
|
114
136
|
PropTypes.node,
|
115
137
|
]),
|
116
138
|
happyEmptyContent: PropTypes.bool,
|
139
|
+
showPrimaryAction: PropTypes.bool,
|
140
|
+
showSecondaryAction: PropTypes.bool,
|
141
|
+
primaryActionLink: PropTypes.string,
|
142
|
+
secondaryActionLink: PropTypes.string,
|
143
|
+
secondaryActionTitle: PropTypes.string,
|
144
|
+
primaryActionTitle: PropTypes.string,
|
145
|
+
resetFilters: PropTypes.func,
|
146
|
+
updateSearchQuery: PropTypes.func,
|
147
|
+
requestKey: PropTypes.string,
|
148
|
+
primaryActionButton: PropTypes.element,
|
117
149
|
};
|
118
150
|
|
119
151
|
MainTable.defaultProps = {
|
@@ -129,6 +161,16 @@ MainTable.defaultProps = {
|
|
129
161
|
rows: undefined,
|
130
162
|
rowsCount: undefined,
|
131
163
|
happyEmptyContent: false,
|
164
|
+
showPrimaryAction: false,
|
165
|
+
showSecondaryAction: false,
|
166
|
+
primaryActionLink: '',
|
167
|
+
secondaryActionLink: '',
|
168
|
+
primaryActionTitle: '',
|
169
|
+
secondaryActionTitle: '',
|
170
|
+
resetFilters: undefined,
|
171
|
+
updateSearchQuery: undefined,
|
172
|
+
requestKey: '',
|
173
|
+
primaryActionButton: undefined,
|
132
174
|
};
|
133
175
|
|
134
176
|
export default MainTable;
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
|
2
2
|
import { isEmpty } from 'lodash';
|
3
3
|
import { useLocation } from 'react-router-dom';
|
4
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
4
5
|
import { friendlySearchParam } from '../../utils/helpers';
|
5
6
|
|
6
7
|
class ReactConnectedSet extends Set {
|
@@ -144,7 +145,6 @@ export const useBulkSelect = ({
|
|
144
145
|
initialArry = [],
|
145
146
|
initialSearchQuery = '',
|
146
147
|
idColumn = 'id',
|
147
|
-
filtersQuery = '',
|
148
148
|
isSelectable,
|
149
149
|
}) => {
|
150
150
|
const { selectionSet: inclusionSet, ...selectOptions } =
|
@@ -208,7 +208,7 @@ export const useBulkSelect = ({
|
|
208
208
|
|
209
209
|
const fetchBulkParams = (idColumnName = idColumn) => {
|
210
210
|
const searchQueryWithExclusionSet = () => {
|
211
|
-
const query = [searchQuery,
|
211
|
+
const query = [searchQuery,
|
212
212
|
!isEmpty(exclusionSet) && `${idColumnName} !^ (${[...exclusionSet].join(',')})`];
|
213
213
|
return query.filter(item => item).join(' and ');
|
214
214
|
};
|
@@ -269,12 +269,15 @@ export const useUrlParams = () => {
|
|
269
269
|
export const useTableSort = ({
|
270
270
|
allColumns,
|
271
271
|
columnsToSortParams,
|
272
|
-
initialSortColumnName
|
272
|
+
initialSortColumnName,
|
273
273
|
}) => {
|
274
|
-
|
275
|
-
|
274
|
+
const translatedInitialSortColumnName = initialSortColumnName
|
275
|
+
? __(initialSortColumnName)
|
276
|
+
: allColumns[0];
|
277
|
+
if (!Object.keys(columnsToSortParams).includes(translatedInitialSortColumnName)) {
|
278
|
+
throw new Error(`translatedInitialSortColumnName '${translatedInitialSortColumnName}' must also be defined in columnsToSortParams`);
|
276
279
|
}
|
277
|
-
const [activeSortColumn, setActiveSortColumn] = useState(
|
280
|
+
const [activeSortColumn, setActiveSortColumn] = useState(translatedInitialSortColumnName);
|
278
281
|
const [activeSortDirection, setActiveSortDirection] = useState('asc');
|
279
282
|
|
280
283
|
// Patternfly sort function
|
@@ -18,6 +18,7 @@ import { orgId } from '../../services/api';
|
|
18
18
|
/* Patternfly 4 table wrapper */
|
19
19
|
const TableWrapper = ({
|
20
20
|
actionButtons,
|
21
|
+
alwaysShowActionButtons,
|
21
22
|
toggleGroup,
|
22
23
|
children,
|
23
24
|
metadata,
|
@@ -55,11 +56,13 @@ const TableWrapper = ({
|
|
55
56
|
const { pageRowCount } = getPageStats({ total, page, perPage });
|
56
57
|
const unresolvedStatus = !!allTableProps?.status && allTableProps.status !== STATUS.RESOLVED;
|
57
58
|
const unresolvedStatusOrNoRows = unresolvedStatus || pageRowCount === 0;
|
58
|
-
const resolvedStatusNoContent =
|
59
|
-
!searchQuery && allTableProps.status === STATUS.RESOLVED && pageRowCount === 0;
|
60
59
|
const showPagination = !unresolvedStatusOrNoRows;
|
61
|
-
const
|
62
|
-
|
60
|
+
const filtersAreActive = activeFilters?.length &&
|
61
|
+
!isEqual(new Set(activeFilters), new Set(allTableProps.defaultFilters));
|
62
|
+
const hideToolbar = !searchQuery && !filtersAreActive &&
|
63
|
+
allTableProps.status === STATUS.RESOLVED && total === 0;
|
64
|
+
const showActionButtons = actionButtons && (alwaysShowActionButtons || !hideToolbar);
|
65
|
+
const showToggleGroup = toggleGroup && !hideToolbar;
|
63
66
|
const paginationParams = useCallback(() =>
|
64
67
|
({ per_page: perPage, page }), [perPage, page]);
|
65
68
|
const prevRequest = useRef({});
|
@@ -67,7 +70,6 @@ const TableWrapper = ({
|
|
67
70
|
const prevAdditionalListeners = useRef([]);
|
68
71
|
const prevActiveFilters = useRef([]);
|
69
72
|
const paginationChangePending = useRef(null);
|
70
|
-
|
71
73
|
const hasChanged = (oldValue, newValue) => !isEqual(oldValue, newValue);
|
72
74
|
|
73
75
|
const spawnFetch = useCallback((paginationData) => {
|
@@ -161,11 +163,10 @@ const TableWrapper = ({
|
|
161
163
|
spawnFetch(pagData);
|
162
164
|
paginationChangePending.current = pagData;
|
163
165
|
};
|
164
|
-
|
165
166
|
return (
|
166
167
|
<>
|
167
168
|
<Flex style={{ alignItems: 'center' }} className="margin-16-24">
|
168
|
-
{displaySelectAllCheckbox &&
|
169
|
+
{displaySelectAllCheckbox && !hideToolbar &&
|
169
170
|
<FlexItem alignSelf={{ default: 'alignSelfCenter' }}>
|
170
171
|
<SelectAllCheckbox
|
171
172
|
{...{
|
@@ -182,7 +183,7 @@ const TableWrapper = ({
|
|
182
183
|
/>
|
183
184
|
</FlexItem>
|
184
185
|
}
|
185
|
-
{!disableSearch && !
|
186
|
+
{!disableSearch && !hideToolbar &&
|
186
187
|
<FlexItem>
|
187
188
|
<Search
|
188
189
|
isDisabled={unresolvedStatusOrNoRows && !searchQuery}
|
@@ -226,6 +227,7 @@ const TableWrapper = ({
|
|
226
227
|
activeFilters={activeFilters}
|
227
228
|
rowsCount={pageRowCount}
|
228
229
|
emptySearchBody={emptySearchBody}
|
230
|
+
updateSearchQuery={updateSearchQuery}
|
229
231
|
{...allTableProps}
|
230
232
|
>
|
231
233
|
{children}
|
@@ -272,6 +274,7 @@ TableWrapper.propTypes = {
|
|
272
274
|
foremanApiAutoComplete: PropTypes.bool,
|
273
275
|
searchPlaceholderText: PropTypes.string,
|
274
276
|
actionButtons: PropTypes.node,
|
277
|
+
alwaysShowActionButtons: PropTypes.bool,
|
275
278
|
toggleGroup: PropTypes.node,
|
276
279
|
children: PropTypes.node,
|
277
280
|
// additionalListeners are anything that should trigger another API call, e.g. a filter
|
@@ -303,6 +306,7 @@ TableWrapper.propTypes = {
|
|
303
306
|
nodesBelowSearch: PropTypes.node,
|
304
307
|
bookmarkController: PropTypes.string,
|
305
308
|
readOnlyBookmarks: PropTypes.bool,
|
309
|
+
resetFilters: PropTypes.func,
|
306
310
|
};
|
307
311
|
|
308
312
|
TableWrapper.defaultProps = {
|
@@ -314,6 +318,7 @@ TableWrapper.defaultProps = {
|
|
314
318
|
foremanApiAutoComplete: false,
|
315
319
|
searchPlaceholderText: undefined,
|
316
320
|
actionButtons: null,
|
321
|
+
alwaysShowActionButtons: true,
|
317
322
|
toggleGroup: null,
|
318
323
|
displaySelectAllCheckbox: false,
|
319
324
|
selectedCount: 0,
|
@@ -330,6 +335,7 @@ TableWrapper.defaultProps = {
|
|
330
335
|
nodesBelowSearch: null,
|
331
336
|
bookmarkController: undefined,
|
332
337
|
readOnlyBookmarks: false,
|
338
|
+
resetFilters: undefined,
|
333
339
|
};
|
334
340
|
|
335
341
|
export default TableWrapper;
|