From 2298869a1a0f73830f16ed978130828c8b7d4de4 Mon Sep 17 00:00:00 2001 From: Julia Bardi <90178898+juliaElastic@users.noreply.github.com> Date: Wed, 29 Oct 2025 08:38:58 +0100 Subject: [PATCH] [Fleet] Show prerelease upgrade versions in Install integrations UI (#240317) Closes https://github.com/elastic/kibana/issues/237003 Show prerelease upgrade versions if beta integrations are enabled. Verification: - Install a prerelease integration with an old version ``` POST kbn:/api/fleet/epm/packages/entityanalytics_ad/0.13.0 { "force": true } ``` - Switch on Show beta integrations on Integrations landing page - Go to Installed Integrations UI - Verify that the available upgrade is visible image Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md) - [ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials - [ ] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - [ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker) - [ ] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations. - [ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) - [ ] Review the [backport guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing) and apply applicable `backport:*` labels. --- .../sections/epm/screens/home/index.tsx | 4 +++- .../hooks/use_installed_integrations.tsx | 4 +++- .../epm/screens/installed_integrations/index.tsx | 15 +++++++++++---- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx index 8eb75156f9c4f..ac97e467bfdd2 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/index.tsx @@ -113,7 +113,9 @@ export const EPMHomePage: React.FC = () => { {installedIntegrationsTabularUI ? ( - + ) : ( )} diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/hooks/use_installed_integrations.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/hooks/use_installed_integrations.tsx index 9e288668bbb6a..c7058b6006b34 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/hooks/use_installed_integrations.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/hooks/use_installed_integrations.tsx @@ -53,10 +53,12 @@ export function useInstalledIntegrations( filters: InstalledIntegrationsFilter, pagination: Pagination, upgradingIntegrations?: InstalledPackageUIPackageListItem[], - uninstallingIntegrations?: InstalledPackageUIPackageListItem[] + uninstallingIntegrations?: InstalledPackageUIPackageListItem[], + prereleaseIntegrationsEnabled?: boolean ) { const { data, isInitialLoading, isLoading } = useGetPackagesQuery({ withPackagePoliciesCount: true, + prerelease: prereleaseIntegrationsEnabled, }); const internalInstalledPackages: InstalledPackageUIPackageListItem[] = useMemo( diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/index.tsx index c3e2121d6aaa6..7230e2406a5c7 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/installed_integrations/index.tsx @@ -21,7 +21,9 @@ import { useInstalledIntegrationsActions } from './hooks/use_installed_integrati import { BulkActionContextProvider } from './hooks/use_bulk_actions_context'; import { PackagePoliciesPanel } from './components/package_policies_panel'; -const InstalledIntegrationsPageContent: React.FunctionComponent = () => { +const InstalledIntegrationsPageContent: React.FunctionComponent<{ + prereleaseIntegrationsEnabled: boolean; +}> = ({ prereleaseIntegrationsEnabled }) => { // State management const filters = useUrlFilters(); const { selectedPackageViewPolicies } = useViewPolicies(); @@ -38,7 +40,8 @@ const InstalledIntegrationsPageContent: React.FunctionComponent = () => { filters, pagination.pagination, upgradingIntegrations, - uninstallingIntegrations + uninstallingIntegrations, + prereleaseIntegrationsEnabled ); const [selectedItems, setSelectedItems] = useState([]); @@ -85,10 +88,14 @@ const InstalledIntegrationsPageContent: React.FunctionComponent = () => { ); }; -export const InstalledIntegrationsPage: React.FunctionComponent = () => { +export const InstalledIntegrationsPage: React.FunctionComponent<{ + prereleaseIntegrationsEnabled: boolean; +}> = ({ prereleaseIntegrationsEnabled }) => { return ( - + ); };