From 56b80e6f066b9e124d39a589d431ca91a0a35233 Mon Sep 17 00:00:00 2001 From: Angela Chuang <6295984+angorayc@users.noreply.github.com> Date: Thu, 24 Apr 2025 09:06:44 +0100 Subject: [PATCH 1/3] New onboarding hub (#218122) https://www.figma.com/design/DYs7j4GQdAhg7aWTLI4R69/AI4DSOC?node-id=6037-42160&m=dev https://www.figma.com/design/DYs7j4GQdAhg7aWTLI4R69/AI4DSOC?node-id=6163-99294&m=dev Search AI Lake: ai4soc Screenshot 2025-04-22 at 17 57 23 ai4soc_onboarding Others: others_integration others_onboarding Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - [x] 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) - [x] [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 (cherry picked from commit f985d24d67f5ec3709d61709a5781ad9074e6178) --- .../components/installation_status.test.tsx | 1 - .../epm/components/installation_status.tsx | 99 ++++++++---- .../sections/epm/components/package_card.tsx | 2 + .../sections/epm/screens/home/card_utils.tsx | 1 + .../common/hooks/use_add_integrations_url.ts | 27 +++- .../components/__mocks__/index.tsx | 9 ++ .../__mocks__/integration_card_grid_tabs.tsx | 0 .../__mocks__/package_list_grid.tsx | 0 .../__mocks__/with_filtered_integrations.tsx | 9 ++ .../components/available_integrations.tsx | 41 +++++ .../lib/integrations/components/index.tsx | 33 ++++ .../components/integration_card_grid_tabs.tsx | 41 +++++ ...gration_card_grid_tabs_component.test.tsx} | 137 +++++----------- .../integration_card_grid_tabs_component.tsx} | 153 +++++++++--------- .../components/with_filtered_integrations.tsx | 21 +++ .../configs}/integration_tabs_configs.ts | 8 +- .../lib/integrations/constants/index.ts} | 25 +-- .../hooks/__mocks__/integration_context.tsx | 19 +++ .../lib/integrations/hooks/__mocks__/mocks.ts | 19 +++ .../integration_card_grid_tabs.styles.ts | 37 +++++ .../hooks/integration_context.tsx | 39 +++++ .../integrations/hooks/use_filter_cards.tsx | 55 +++++++ .../hooks}/use_integration_card_list.test.ts | 11 +- .../hooks}/use_integration_card_list.ts | 46 ++++-- .../integrations/hooks/use_selected_tab.tsx | 41 +++++ .../integrations/hooks/use_stored_state.ts | 43 +++++ .../common/lib/integrations/types/index.ts | 57 +++++++ .../use_enhanced_integration_cards.tsx | 27 +++- .../onboarding/components/__mocks__/mocks.ts | 8 +- .../components/hooks/use_stored_state.ts | 35 +--- .../onboarding/components/lib/telemetry.ts | 2 + .../components/onboarding_body/body_config.ts | 16 +- .../onboarding_body/cards/alerts/index.ts | 2 + .../onboarding_body/cards/assistant/index.ts | 7 +- .../cards/common/card_selector_list.tsx | 3 +- .../connectors}/assistant_check_complete.ts | 8 +- .../__mocks__/agent_required_callout.tsx | 0 .../__mocks__/agentless_available_callout.tsx | 0 .../callouts/__mocks__/endpoint_callout.tsx | 0 .../installed_integrations_callout.tsx | 0 .../integration_card_top_callout.tsx | 0 .../__mocks__/manage_integrations_callout.tsx | 0 .../callouts/agent_required_callout.test.tsx | 9 +- .../callouts/agent_required_callout.tsx | 16 +- .../agentless_available_callout.test.tsx | 12 +- .../callouts/agentless_available_callout.tsx | 15 +- .../callouts/endpoint_callout.test.tsx | 10 +- .../callouts/endpoint_callout.tsx | 16 +- .../installed_integrations_callout.test.tsx | 0 .../installed_integrations_callout.tsx | 33 ++-- .../integration_card_top_callout.test.tsx | 6 +- .../callouts/integration_card_top_callout.tsx | 65 ++++++++ .../manage_integrations_callout.test.tsx | 8 +- .../callouts/manage_integrations_callout.tsx | 15 +- .../cards/common/integrations/constants.ts | 15 ++ .../integrations/images/integrations_icon.png | Bin .../images/integrations_icon_dark.png | Bin .../integrations_check_complete.test.ts | 4 +- .../integrations_check_complete.ts | 85 ++++++++++ .../onboarding_body/cards/dashboards/index.ts | 3 +- .../callouts/integration_card_top_callout.tsx | 53 ------ .../cards/integrations/index.ts | 9 +- .../integrations/integrations_card.test.tsx | 7 +- .../cards/integrations/integrations_card.tsx | 23 ++- .../integrations_check_complete.ts | 67 ++------ .../cards/integrations/types.ts | 32 ---- .../onboarding_body/cards/rules/index.ts | 2 + .../integrations_search_ai_lake/index.ts | 34 ++++ .../integration_tabs_configs.ts | 25 +++ .../integrations_card.test.tsx | 43 +++++ .../integrations_card.tsx | 88 ++++++++++ .../integrations_check_complete.ts | 46 ++++++ .../knowledge_source/constants.ts | 12 ++ .../knowledge_source/images/custom_rules.png | Bin 0 -> 152425 bytes .../knowledge_source/images/preview_rules.png | Bin 0 -> 235219 bytes .../knowledge_source/images/rules_icon.png | Bin 0 -> 1251 bytes .../images/rules_icon_dark.png | Bin 0 -> 1304 bytes .../search_ai_lake/knowledge_source/index.ts | 31 ++++ .../knowledge_source_card.test.tsx | 79 +++++++++ .../knowledge_source_card.tsx | 128 +++++++++++++++ .../knowledge_source_card_config.ts | 63 ++++++++ .../knowledge_source_check_complete.ts | 28 ++++ .../knowledge_source/translations.ts | 58 +++++++ .../search_ai_lake/knowledge_source/types.ts | 11 ++ .../llm/connectors_check_complete.ts | 35 ++++ .../cards/search_ai_lake/llm/index.ts | 30 ++++ .../search_ai_lake/llm/llm_connector_card.tsx | 126 +++++++++++++++ .../cards/search_ai_lake/llm/translations.ts | 43 +++++ .../cards/search_ai_lake/llm/types.ts | 13 ++ .../ai_connector/ai_connector_card.tsx | 2 +- .../components/onboarding_context.tsx | 22 +-- .../onboarding_footer.test.tsx | 5 +- .../onboarding_footer/onboarding_footer.tsx | 10 +- .../cards/common/link_card.test.tsx | 5 +- .../cards/common/link_card.tsx | 10 +- .../onboarding_header/onboarding_header.tsx | 25 ++- .../onboarding_header_configs.ts | 33 ++++ .../onboarding_header/translations.ts | 14 ++ .../components/onboarding_telemetry.test.ts | 42 +++-- .../components/onboarding_telemetry.ts | 11 +- .../public/onboarding/config.ts | 2 + .../public/onboarding/constants.ts | 3 + 102 files changed, 2097 insertions(+), 567 deletions(-) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/index.tsx rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations => common/lib/integrations/components}/__mocks__/integration_card_grid_tabs.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations => common/lib/integrations/components}/__mocks__/package_list_grid.tsx (100%) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/with_filtered_integrations.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/available_integrations.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/index.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs.tsx rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.test.tsx => common/lib/integrations/components/integration_card_grid_tabs_component.test.tsx} (50%) rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.tsx => common/lib/integrations/components/integration_card_grid_tabs_component.tsx} (59%) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/with_filtered_integrations.tsx rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations => common/lib/integrations/configs}/integration_tabs_configs.ts (91%) rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations/constants.ts => common/lib/integrations/constants/index.ts} (58%) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/integration_context.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/mocks.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_card_grid_tabs.styles.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_context.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_filter_cards.tsx rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations => common/lib/integrations/hooks}/use_integration_card_list.test.ts (88%) rename x-pack/solutions/security/plugins/security_solution/public/{onboarding/components/onboarding_body/cards/integrations => common/lib/integrations/hooks}/use_integration_card_list.ts (79%) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_selected_tab.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_stored_state.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/types/index.ts rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{assistant => common/connectors}/assistant_check_complete.ts (80%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/__mocks__/agent_required_callout.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/__mocks__/agentless_available_callout.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/__mocks__/endpoint_callout.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/__mocks__/installed_integrations_callout.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/__mocks__/integration_card_top_callout.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/__mocks__/manage_integrations_callout.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/agent_required_callout.test.tsx (79%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/agent_required_callout.tsx (80%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/agentless_available_callout.test.tsx (82%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/agentless_available_callout.tsx (86%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/endpoint_callout.test.tsx (76%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/endpoint_callout.tsx (83%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/installed_integrations_callout.test.tsx (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/installed_integrations_callout.tsx (50%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/integration_card_top_callout.test.tsx (90%) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/integration_card_top_callout.tsx rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/manage_integrations_callout.test.tsx (84%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/callouts/manage_integrations_callout.tsx (81%) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/constants.ts rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/images/integrations_icon.png (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/images/integrations_icon_dark.png (100%) rename x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/{ => common}/integrations/integrations_check_complete.test.ts (96%) create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/integrations_check_complete.ts delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/integration_card_top_callout.tsx delete mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/types.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/index.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integration_tabs_configs.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.test.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_check_complete.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/constants.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/custom_rules.png create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/preview_rules.png create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/rules_icon.png create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/rules_icon_dark.png create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/index.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.test.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card_config.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_check_complete.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/translations.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/types.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/connectors_check_complete.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/index.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/llm_connector_card.tsx create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/translations.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/types.ts create mode 100644 x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header_configs.ts diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.test.tsx index a37730ad1570c..bff42170311d4 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.test.tsx @@ -124,7 +124,6 @@ describe('InstallationStatus', () => { const callout = getByTestId('installation-status-callout'); expect(spacer).toHaveStyle('background: #FFFFFF'); - expect(callout).toHaveStyle('padding: 8px 16px'); expect(callout).toHaveTextContent('Installed'); }); }); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.tsx index 7b0a0da308c2f..8a92635751c6b 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/installation_status.tsx @@ -7,9 +7,9 @@ import React from 'react'; -import { EuiCallOut, EuiSpacer, useEuiTheme } from '@elastic/eui'; +import { COLOR_MODES_STANDARD, EuiCallOut, EuiIcon, EuiSpacer, useEuiTheme } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; -import { css } from '@emotion/react'; +import { css } from '@emotion/css'; import { installationStatuses } from '../../../../../../common/constants'; import type { EpmPackageInstallStatus } from '../../../../../../common/types'; @@ -37,8 +37,50 @@ const installStatusMapToColor: Record< interface InstallationStatusProps { installStatus: EpmPackageInstallStatus | null | undefined; showInstallationStatus?: boolean; + compressed?: boolean; } +const useInstallationStatusStyles = () => { + const { euiTheme, colorMode } = useEuiTheme(); + const successBackgroundColor = euiTheme.colors.backgroundBaseSuccess; + const isDarkMode = colorMode === COLOR_MODES_STANDARD.dark; + + return { + installationStatus: css` + position: absolute; + border-radius: 0 0 ${euiTheme.border.radius.medium} ${euiTheme.border.radius.medium}; + bottom: 0; + left: 0; + width: 100%; + overflow: hidden; + `, + compressedInstallationStatus: css` + position: absolute; + border-radius: 0 ${euiTheme.border.radius.medium} ${euiTheme.border.radius.medium} 0; + bottom: 0; + right: 0; + width: 65px; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + background-color: ${isDarkMode ? euiTheme.colors.success : successBackgroundColor}; + color: ${isDarkMode ? euiTheme.colors.emptyShade : euiTheme.colors.textSuccess}; + `, + compressedInstallationStatusIcon: css` + color: ${isDarkMode ? euiTheme.colors.emptyShade : euiTheme.colors.textSuccess}; + `, + installationStatusCallout: css` + padding: ${euiTheme.size.s} ${euiTheme.size.m}; + text-align: center; + `, + installationStatusSpacer: css` + background: ${euiTheme.colors.emptyShade}; + `, + }; +}; + export const getLineClampStyles = (lineClamp?: number) => lineClamp ? `-webkit-line-clamp: ${lineClamp};display: -webkit-box;-webkit-box-orient: vertical;overflow: hidden;` @@ -53,35 +95,32 @@ export const shouldShowInstallationStatus = ({ installStatus === installationStatuses.InstallFailed); export const InstallationStatus: React.FC = React.memo( - ({ installStatus, showInstallationStatus }) => { - const { euiTheme } = useEuiTheme(); + ({ installStatus, showInstallationStatus, compressed }) => { + const styles = useInstallationStatusStyles(); + + const cardPanelClassName = compressed + ? styles.compressedInstallationStatus + : styles.installationStatus; + return shouldShowInstallationStatus({ installStatus, showInstallationStatus }) ? ( -
- - -
+ compressed ? ( +
+ +
+ ) : ( +
+ + +
+ ) ) : null; } ); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/package_card.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/package_card.tsx index c581e000f7fa3..e61d0235f720e 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/package_card.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/components/package_card.tsx @@ -69,6 +69,7 @@ export function PackageCard({ isUpdateAvailable, showLabels = true, showInstallationStatus, + showCompressedInstallationStatus, extraLabelsBadges, isQuickstart = false, installStatus, @@ -258,6 +259,7 @@ export function PackageCard({ diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/card_utils.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/card_utils.tsx index aad4ecbc6fd57..b38e08f395d8c 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/card_utils.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/home/card_utils.tsx @@ -60,6 +60,7 @@ export interface IntegrationCardItem { release?: IntegrationCardReleaseLabel; showDescription?: boolean; showInstallationStatus?: boolean; + showCompressedInstallationStatus?: boolean; showLabels?: boolean; showReleaseBadge?: boolean; title: string; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_add_integrations_url.ts b/x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_add_integrations_url.ts index e80c1e871d49a..700e776c4455f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_add_integrations_url.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/hooks/use_add_integrations_url.ts @@ -6,23 +6,44 @@ */ import { useCallback, useMemo } from 'react'; import { useLocation } from 'react-router-dom'; -import { ADD_DATA_PATH, ADD_THREAT_INTELLIGENCE_DATA_PATH } from '../../../common/constants'; +import { useNavigateTo, useGetAppUrl } from '@kbn/security-solution-navigation'; +import { + ADD_DATA_PATH, + ADD_THREAT_INTELLIGENCE_DATA_PATH, + SECURITY_FEATURE_ID, + SecurityPageName, +} from '../../../common/constants'; import { isThreatIntelligencePath } from '../../helpers'; -import { useKibana, useNavigateTo } from '../lib/kibana'; +import { useKibana } from '../lib/kibana'; +import { hasCapabilities } from '../lib/capabilities'; export const useAddIntegrationsUrl = () => { const { http: { basePath: { prepend }, }, + application: { capabilities }, } = useKibana().services; const { pathname } = useLocation(); + const { getAppUrl } = useGetAppUrl(); const { navigateTo } = useNavigateTo(); const isThreatIntelligence = isThreatIntelligencePath(pathname); + const hasSearchAILakeAccess = hasCapabilities(capabilities, [ + [`${SECURITY_FEATURE_ID}.external_detections`], + ]); - const integrationsUrl = isThreatIntelligence ? ADD_THREAT_INTELLIGENCE_DATA_PATH : ADD_DATA_PATH; + const searchAILakeIntegrationsPath = getAppUrl({ + deepLinkId: SecurityPageName.configurationsIntegrations, + path: 'browse', + }); + + const integrationsUrl = isThreatIntelligence + ? ADD_THREAT_INTELLIGENCE_DATA_PATH + : hasSearchAILakeAccess + ? searchAILakeIntegrationsPath + : ADD_DATA_PATH; const href = useMemo(() => prepend(integrationsUrl), [prepend, integrationsUrl]); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/index.tsx new file mode 100644 index 0000000000000..39e4652fe6dfe --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/index.tsx @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; + +export const SecurityIntegrations = () =>
; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/__mocks__/integration_card_grid_tabs.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/integration_card_grid_tabs.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/__mocks__/integration_card_grid_tabs.tsx rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/integration_card_grid_tabs.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/__mocks__/package_list_grid.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/package_list_grid.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/__mocks__/package_list_grid.tsx rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/package_list_grid.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/with_filtered_integrations.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/with_filtered_integrations.tsx new file mode 100644 index 0000000000000..bc3f25f0ada64 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/__mocks__/with_filtered_integrations.tsx @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; + +export const WithFilteredIntegrations = () =>
; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/available_integrations.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/available_integrations.tsx new file mode 100644 index 0000000000000..b0df5de2a0b23 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/available_integrations.tsx @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { AvailablePackagesHookType } from '@kbn/fleet-plugin/public'; +import type { UseSelectedTabReturn } from '../hooks/use_selected_tab'; +import type { IntegrationCardMetadata, RenderChildrenType, TopCalloutRenderer } from '../types'; +import { useFilterCards } from '../hooks/use_filter_cards'; + +export const AvailableIntegrationsComponent: React.FC<{ + useAvailablePackages: AvailablePackagesHookType; + renderChildren: RenderChildrenType; + prereleaseIntegrationsEnabled: boolean; + checkCompleteMetadata?: IntegrationCardMetadata; + selectedTabResult: UseSelectedTabReturn; + topCalloutRenderer?: TopCalloutRenderer; +}> = ({ + useAvailablePackages, + renderChildren, + prereleaseIntegrationsEnabled, + checkCompleteMetadata, + selectedTabResult, + topCalloutRenderer, +}) => { + const { availablePackagesResult, allowedIntegrations } = useFilterCards({ + featuredCardIds: selectedTabResult.selectedTab?.featuredCardIds, + useAvailablePackages, + prereleaseIntegrationsEnabled, + }); + + return renderChildren({ + allowedIntegrations, + availablePackagesResult, + checkCompleteMetadata, + selectedTabResult, + topCalloutRenderer, + }); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/index.tsx new file mode 100644 index 0000000000000..7965c62f1fbcb --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/index.tsx @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { useSelectedTab } from '../hooks/use_selected_tab'; +import { INTEGRATION_TABS } from '../configs/integration_tabs_configs'; +import { IntegrationsCardGridTabs } from './integration_card_grid_tabs'; +import { WithFilteredIntegrations } from './with_filtered_integrations'; +import type { IntegrationCardMetadata, TopCalloutRenderer } from '../types'; +import { useIntegrationContext } from '../hooks/integration_context'; + +export const SecurityIntegrations: React.FC<{ + checkCompleteMetadata?: IntegrationCardMetadata; + topCalloutRenderer?: TopCalloutRenderer; +}> = ({ checkCompleteMetadata, topCalloutRenderer }) => { + const { spaceId } = useIntegrationContext(); + const selectedTabResult = useSelectedTab({ + spaceId, + integrationTabs: INTEGRATION_TABS, + }); + return ( + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs.tsx new file mode 100644 index 0000000000000..6c481686c080b --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs.tsx @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import type { RenderChildrenType } from '../types'; +import { useIntegrationCardList } from '../hooks/use_integration_card_list'; +import { IntegrationsCardGridTabsComponent } from './integration_card_grid_tabs_component'; + +export const DEFAULT_CHECK_COMPLETE_METADATA = { + installedIntegrationsCount: 0, + isAgentRequired: false, +}; + +export const IntegrationsCardGridTabs: RenderChildrenType = ({ + topCalloutRenderer, + allowedIntegrations, + availablePackagesResult, + checkCompleteMetadata = DEFAULT_CHECK_COMPLETE_METADATA, + selectedTabResult, +}) => { + const list = useIntegrationCardList({ + integrationsList: allowedIntegrations, + featuredCardIds: selectedTabResult.selectedTab?.featuredCardIds, + }); + + const { installedIntegrationsCount, isAgentRequired } = checkCompleteMetadata; + + return ( + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs_component.test.tsx similarity index 50% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.test.tsx rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs_component.test.tsx index 8abc77140d917..a94f943a2518c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs_component.test.tsx @@ -7,21 +7,20 @@ import React from 'react'; import { render, fireEvent, waitFor, act } from '@testing-library/react'; -import { IntegrationsCardGridTabsComponent } from './integration_card_grid_tabs'; +import { IntegrationsCardGridTabsComponent } from './integration_card_grid_tabs_component'; import * as module from '@kbn/fleet-plugin/public'; import { useStoredIntegrationSearchTerm, useStoredIntegrationTabId, -} from '../../../hooks/use_stored_state'; -import { DEFAULT_TAB } from './constants'; -import { trackOnboardingLinkClick } from '../../../lib/telemetry'; - -jest.mock('../../../onboarding_context'); -jest.mock('../../../hooks/use_stored_state'); -jest.mock('../../../lib/telemetry'); -jest.mock('../../../../../common/lib/kibana', () => ({ - ...jest.requireActual('../../../../../common/lib/kibana'), +} from '../hooks/use_stored_state'; +import { INTEGRATION_TABS } from '../configs/integration_tabs_configs'; +import { mockTrackLinkClick } from '../hooks/__mocks__/mocks'; + +jest.mock('../hooks/integration_context'); +jest.mock('../hooks/use_stored_state'); +jest.mock('../../kibana', () => ({ + ...jest.requireActual('../../kibana'), useNavigation: jest.fn().mockReturnValue({ navigateTo: jest.fn(), getAppUrl: jest.fn(), @@ -39,7 +38,6 @@ jest .mockImplementation(() => Promise.resolve({ PackageListGrid: mockPackageList })); describe('IntegrationsCardGridTabsComponent', () => { - const mockUseAvailablePackages = jest.fn(); const mockSetTabId = jest.fn(); const mockSetCategory = jest.fn(); const mockSetSelectedSubCategory = jest.fn(); @@ -47,49 +45,43 @@ describe('IntegrationsCardGridTabsComponent', () => { const props = { installedIntegrationsCount: 1, isAgentRequired: false, - useAvailablePackages: mockUseAvailablePackages, + availablePackagesResult: { + isLoading: false, + setCategory: mockSetCategory, + setSelectedSubCategory: mockSetSelectedSubCategory, + setSearchTerm: mockSetSearchTerm, + searchTerm: 'new search term', + }, + integrationList: [], + selectedTabResult: { + selectedTab: INTEGRATION_TABS[0], + toggleIdSelected: INTEGRATION_TABS[0].id, + setSelectedTabIdToStorage: mockSetTabId, + integrationTabs: INTEGRATION_TABS, + }, }; beforeEach(() => { jest.clearAllMocks(); - (useStoredIntegrationTabId as jest.Mock).mockReturnValue([DEFAULT_TAB.id, jest.fn()]); + (useStoredIntegrationTabId as jest.Mock).mockReturnValue([INTEGRATION_TABS[0].id, jest.fn()]); (useStoredIntegrationSearchTerm as jest.Mock).mockReturnValue(['', jest.fn()]); }); it('renders loading skeleton when data is loading', () => { - mockUseAvailablePackages.mockReturnValue({ - isLoading: true, - filteredCards: [], - setCategory: mockSetCategory, - setSelectedSubCategory: mockSetSelectedSubCategory, - setSearchTerm: mockSetSearchTerm, - }); - - const { getByTestId } = render( - - ); + const testProps = { + ...props, + availablePackagesResult: { + ...props.availablePackagesResult, + isLoading: true, + }, + }; + const { getByTestId } = render(); expect(getByTestId('loadingPackages')).toBeInTheDocument(); }); it('renders the package list when data is available', async () => { - mockUseAvailablePackages.mockReturnValue({ - isLoading: false, - filteredCards: [{ id: 'card1', name: 'Card 1', url: 'https://mock-url' }], - setCategory: mockSetCategory, - setSelectedSubCategory: mockSetSelectedSubCategory, - setSearchTerm: mockSetSearchTerm, - }); - - const { getByTestId } = render( - - ); + const { getByTestId } = render(); await waitFor(() => { expect(getByTestId('packageList')).toBeInTheDocument(); @@ -99,20 +91,7 @@ describe('IntegrationsCardGridTabsComponent', () => { it('saves the selected tab to storage', () => { (useStoredIntegrationTabId as jest.Mock).mockReturnValue(['recommended', mockSetTabId]); - mockUseAvailablePackages.mockReturnValue({ - isLoading: false, - filteredCards: [], - setCategory: mockSetCategory, - setSelectedSubCategory: mockSetSelectedSubCategory, - setSearchTerm: mockSetSearchTerm, - }); - - const { getByTestId } = render( - - ); + const { getByTestId } = render(); const tabButton = getByTestId('user'); @@ -125,20 +104,7 @@ describe('IntegrationsCardGridTabsComponent', () => { it('tracks the tab clicks', () => { (useStoredIntegrationTabId as jest.Mock).mockReturnValue(['recommended', mockSetTabId]); - mockUseAvailablePackages.mockReturnValue({ - isLoading: false, - filteredCards: [], - setCategory: mockSetCategory, - setSelectedSubCategory: mockSetSelectedSubCategory, - setSearchTerm: mockSetSearchTerm, - }); - - const { getByTestId } = render( - - ); + const { getByTestId } = render(); const tabButton = getByTestId('user'); @@ -146,24 +112,11 @@ describe('IntegrationsCardGridTabsComponent', () => { fireEvent.click(tabButton); }); - expect(trackOnboardingLinkClick).toHaveBeenCalledWith('tab_user'); + expect(mockTrackLinkClick).toHaveBeenCalledWith('tab_user'); }); it('renders no search tools when showSearchTools is false', async () => { - mockUseAvailablePackages.mockReturnValue({ - isLoading: false, - filteredCards: [], - setCategory: mockSetCategory, - setSelectedSubCategory: mockSetSelectedSubCategory, - setSearchTerm: mockSetSearchTerm, - }); - - render( - - ); + render(); await waitFor(() => { expect(mockPackageList.mock.calls[0][0].showSearchTools).toEqual(false); @@ -177,21 +130,7 @@ describe('IntegrationsCardGridTabsComponent', () => { mockSetSearchTermToStorage, ]); - mockUseAvailablePackages.mockReturnValue({ - isLoading: false, - filteredCards: [], - setCategory: mockSetCategory, - setSelectedSubCategory: mockSetSelectedSubCategory, - setSearchTerm: mockSetSearchTerm, - searchTerm: 'new search term', - }); - - render( - - ); + render(); await waitFor(() => { expect(mockPackageList.mock.calls[0][0].searchTerm).toEqual('new search term'); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs_component.tsx similarity index 59% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.tsx rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs_component.tsx index 6b5e3f60a24e1..43374033cb66b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_card_grid_tabs.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/integration_card_grid_tabs_component.tsx @@ -4,37 +4,47 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import React, { lazy, Suspense, useMemo, useCallback, useEffect, useRef } from 'react'; -import { EuiButtonGroup, EuiFlexGroup, EuiFlexItem, EuiSkeletonText } from '@elastic/eui'; -import type { AvailablePackagesHookType, IntegrationCardItem } from '@kbn/fleet-plugin/public'; +import React, { lazy, Suspense, useCallback, useEffect, useRef } from 'react'; +import { + COLOR_MODES_STANDARD, + EuiButtonGroup, + EuiFlexGroup, + EuiFlexItem, + EuiSkeletonText, + useEuiTheme, +} from '@elastic/eui'; +import type { IntegrationCardItem } from '@kbn/fleet-plugin/public'; import { noop } from 'lodash'; import { css } from '@emotion/react'; -import { withLazyHook } from '../../../../../common/components/with_lazy_hook'; -import { - useStoredIntegrationSearchTerm, - useStoredIntegrationTabId, -} from '../../../hooks/use_stored_state'; -import { useOnboardingContext } from '../../../onboarding_context'; +import { useIntegrationCardGridTabsStyles } from '../hooks/integration_card_grid_tabs.styles'; import { - DEFAULT_TAB, + DEFAULT_INTEGRATION_CARD_CONTENT_HEIGHT, LOADING_SKELETON_TEXT_LINES, SCROLL_ELEMENT_ID, SEARCH_FILTER_CATEGORIES, TELEMETRY_INTEGRATION_TAB, - WITHOUT_SEARCH_BOX_HEIGHT, - WITH_SEARCH_BOX_HEIGHT, -} from './constants'; -import { INTEGRATION_TABS, INTEGRATION_TABS_BY_ID } from './integration_tabs_configs'; -import { useIntegrationCardList } from './use_integration_card_list'; -import { IntegrationTabId } from './types'; -import { IntegrationCardTopCallout } from './callouts/integration_card_top_callout'; -import { trackOnboardingLinkClick } from '../../../lib/telemetry'; +} from '../constants'; +import type { AvailablePackagesResult } from '../types'; +import { IntegrationTabId } from '../types'; +import type { UseSelectedTabReturn } from '../hooks/use_selected_tab'; +import { useStoredIntegrationSearchTerm } from '../hooks/use_stored_state'; +import { useIntegrationContext } from '../hooks/integration_context'; export interface IntegrationsCardGridTabsProps { installedIntegrationsCount: number; isAgentRequired: boolean; - useAvailablePackages: AvailablePackagesHookType; + availablePackagesResult: AvailablePackagesResult; + topCalloutRenderer?: React.FC<{ + installedIntegrationsCount: number; + isAgentRequired: boolean; + selectedTabId: IntegrationTabId; + }>; + integrationList: IntegrationCardItem[]; + selectedTabResult: UseSelectedTabReturn; + packageListGridOptions?: { + showCardLabels?: boolean; + }; } const emptyStateStyles = { paddingTop: '16px' }; @@ -45,14 +55,26 @@ export const PackageListGrid = lazy(async () => ({ .then((pkg) => pkg.PackageListGrid), })); +// beware if local storage, need to add project id to the key export const IntegrationsCardGridTabsComponent = React.memo( - ({ installedIntegrationsCount, isAgentRequired, useAvailablePackages }) => { - const { spaceId } = useOnboardingContext(); - const scrollElement = useRef(null); - const [toggleIdSelected, setSelectedTabIdToStorage] = useStoredIntegrationTabId( + ({ + isAgentRequired, + installedIntegrationsCount, + topCalloutRenderer: TopCallout, + integrationList, + availablePackagesResult, + selectedTabResult, + packageListGridOptions, + }) => { + const { spaceId, - DEFAULT_TAB.id - ); + telemetry: { trackLinkClick }, + } = useIntegrationContext(); + const scrollElement = useRef(null); + const { colorMode } = useEuiTheme(); + const isDark = colorMode === COLOR_MODES_STANDARD.dark; + const { selectedTab, toggleIdSelected, setSelectedTabIdToStorage, integrationTabs } = + selectedTabResult; const [searchTermFromStorage, setSearchTermToStorage] = useStoredIntegrationSearchTerm(spaceId); const onTabChange = useCallback( (stringId: string) => { @@ -60,23 +82,15 @@ export const IntegrationsCardGridTabsComponent = React.memo INTEGRATION_TABS_BY_ID[toggleIdSelected], [toggleIdSelected]); + const buttonGroupStyles = useIntegrationCardGridTabsStyles(); const onSearchTermChanged = useCallback( (searchQuery: string) => { @@ -117,11 +131,6 @@ export const IntegrationsCardGridTabsComponent = React.memo - - - + {integrationTabs.length > 1 && ( + + + + )} + TopCallout ? ( + + ) : null } calloutTopSpacerSize="m" categories={SEARCH_FILTER_CATEGORIES} // We do not want to show categories and subcategories as the search bar filter emptyStateStyles={emptyStateStyles} - list={list} + list={integrationList} // Todo: fix this scrollElementId={SCROLL_ELEMENT_ID} searchTerm={searchTerm} selectedCategory={selectedTab.category ?? ''} @@ -185,7 +197,7 @@ export const IntegrationsCardGridTabsComponent = React.memo import('@kbn/fleet-plugin/public').then((module) => module.AvailablePackagesHook()), - -); -IntegrationsCardGridTabs.displayName = 'IntegrationsCardGridTabs'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/with_filtered_integrations.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/with_filtered_integrations.tsx new file mode 100644 index 0000000000000..a5303823d102d --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/components/with_filtered_integrations.tsx @@ -0,0 +1,21 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { EuiSkeletonText } from '@elastic/eui'; +import { withLazyHook } from '../../../components/with_lazy_hook'; +import { LOADING_SKELETON_TEXT_LINES } from '../constants'; +import { AvailableIntegrationsComponent } from './available_integrations'; + +export const WithFilteredIntegrations = withLazyHook( + AvailableIntegrationsComponent, + () => import('@kbn/fleet-plugin/public').then((module) => module.AvailablePackagesHook()), + +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_tabs_configs.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/configs/integration_tabs_configs.ts similarity index 91% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_tabs_configs.ts rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/configs/integration_tabs_configs.ts index 2e673d98278a3..8d1ee44c4dbc3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integration_tabs_configs.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/configs/integration_tabs_configs.ts @@ -5,7 +5,8 @@ * 2.0. */ -import { IntegrationTabId, type Tab } from './types'; +import { INTEGRATION_CARD_HEIGHT } from '../constants'; +import { IntegrationTabId, type Tab } from '../types'; export const INTEGRATION_TABS: Tab[] = [ { @@ -28,6 +29,7 @@ export const INTEGRATION_TABS: Tab[] = [ 'epr:network_traffic', 'epr:osquery_manager', ], + height: `${INTEGRATION_CARD_HEIGHT * 3.5}px`, }, { category: 'security', @@ -77,7 +79,3 @@ export const INTEGRATION_TABS: Tab[] = [ sortByFeaturedIntegrations: true, }, ]; - -export const INTEGRATION_TABS_BY_ID = Object.fromEntries( - INTEGRATION_TABS.map((tab) => [tab.id, tab]) -) as Record; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/constants.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/constants/index.ts similarity index 58% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/constants.ts rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/constants/index.ts index f8d60a11481ca..e7bd1270a631c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/constants/index.ts @@ -4,29 +4,18 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - import type { CategoryFacet } from '@kbn/fleet-plugin/public'; -import { INTEGRATION_TABS } from './integration_tabs_configs'; -import type { Tab } from './types'; -export const ADD_AGENT_PATH = `/agents`; -export const AGENT_INDEX = `logs-elastic_agent*`; -export const CARD_DESCRIPTION_LINE_CLAMP = 3; // 3 lines of text -export const CARD_TITLE_LINE_CLAMP = 1; // 1 line of text -export const DEFAULT_TAB: Tab = INTEGRATION_TABS[0]; -export const FLEET_APP_ID = `fleet`; -export const INTEGRATION_APP_ID = `integrations`; -export const LOADING_SKELETON_TEXT_LINES = 10; // 10 lines of text +export const INTEGRATION_CARD_HEIGHT = 156; +export const TELEMETRY_INTEGRATION_CARD = `card`; export const MAX_CARD_HEIGHT_IN_PX = 127; // px export const RETURN_APP_ID = 'returnAppId'; export const RETURN_PATH = 'returnPath'; +export const INTEGRATION_APP_ID = `integrations`; +export const CARD_TITLE_LINE_CLAMP = 1; // 1 line of text +export const CARD_DESCRIPTION_LINE_CLAMP = 3; // 3 lines of text +export const LOADING_SKELETON_TEXT_LINES = 10; // 10 lines of text export const SCROLL_ELEMENT_ID = 'integrations-scroll-container'; export const SEARCH_FILTER_CATEGORIES: CategoryFacet[] = []; -export const WITH_SEARCH_BOX_HEIGHT = '568px'; -export const WITHOUT_SEARCH_BOX_HEIGHT = '513px'; -export const TELEMETRY_MANAGE_INTEGRATIONS = `manage_integrations`; -export const TELEMETRY_ENDPOINT_LEARN_MORE = `endpoint_learn_more`; -export const TELEMETRY_AGENTLESS_LEARN_MORE = `agentless_learn_more`; -export const TELEMETRY_AGENT_REQUIRED = `agent_required`; -export const TELEMETRY_INTEGRATION_CARD = `card`; +export const DEFAULT_INTEGRATION_CARD_CONTENT_HEIGHT = `${INTEGRATION_CARD_HEIGHT * 3.5 + 55}px`; export const TELEMETRY_INTEGRATION_TAB = `tab`; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/integration_context.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/integration_context.tsx new file mode 100644 index 0000000000000..7485fcbdc1793 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/integration_context.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IntegrationContextValue } from '../integration_context'; +import { mockIntegrationContext } from './mocks'; + +export const useIntegrationContext = (): IntegrationContextValue => { + return mockIntegrationContext(); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/mocks.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/mocks.ts new file mode 100644 index 0000000000000..e27e078d6a1dd --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/__mocks__/mocks.ts @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const mockTrackLinkClick = jest.fn(); + +export const telemetry = { + trackLinkClick: mockTrackLinkClick, +}; +export const mockTelemetry = jest.fn(() => telemetry); + +export const integrationContext = { + spaceId: 'default', + telemetry: mockTelemetry(), +}; +export const mockIntegrationContext = jest.fn(() => integrationContext); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_card_grid_tabs.styles.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_card_grid_tabs.styles.ts new file mode 100644 index 0000000000000..82eba378f8405 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_card_grid_tabs.styles.ts @@ -0,0 +1,37 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { css } from '@emotion/react'; +import { useEuiTheme } from '@elastic/eui'; + +export const useIntegrationCardGridTabsStyles = () => { + const { euiTheme } = useEuiTheme(); + return css` + button { + position: relative; + } + button:not(:first-child)::before { + position: absolute; + left: 0px; + content: ' '; + width: 1px; + height: 70%; + background-color: ${euiTheme.colors.darkShade}; + top: 50%; + transform: translateY(-50%); + } + button[aria-pressed='true'], + button[aria-pressed='true'] + button { + &::before { + content: none; + } + } + button[aria-pressed='true'] { + text-decoration: none; + } + `; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_context.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_context.tsx new file mode 100644 index 0000000000000..a205d10366fb0 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/integration_context.tsx @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PropsWithChildren } from 'react'; +import React, { createContext, useContext, useMemo } from 'react'; + +export type TrackLinkClick = (link: string) => void; + +export interface IntegrationContextValue { + spaceId: string; + telemetry: { trackLinkClick?: TrackLinkClick }; +} +const IntegrationContext = createContext(null); + +export const IntegrationContextProvider: React.FC< + PropsWithChildren<{ spaceId: string; trackLinkClick?: TrackLinkClick }> +> = React.memo(({ children, spaceId, trackLinkClick }) => { + const value = useMemo( + () => ({ spaceId, telemetry: { trackLinkClick } }), + [spaceId, trackLinkClick] + ); + + return {children}; +}); +IntegrationContextProvider.displayName = 'IntegrationContextProvider'; + +export const useIntegrationContext = () => { + const context = useContext(IntegrationContext); + if (!context) { + throw new Error( + 'No IntegrationContext found. Please wrap the application with IntegrationContextProvider' + ); + } + return context; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_filter_cards.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_filter_cards.tsx new file mode 100644 index 0000000000000..17e652312ca3f --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_filter_cards.tsx @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { AvailablePackagesHookType } from '@kbn/fleet-plugin/public'; +import { useMemo } from 'react'; + +export const useFilterCards = ({ + useAvailablePackages, + featuredCardIds, + prereleaseIntegrationsEnabled, +}: { + useAvailablePackages: AvailablePackagesHookType; + featuredCardIds?: string[]; + prereleaseIntegrationsEnabled: boolean; +}) => { + const { + isLoading, + searchTerm, + setCategory, + setSearchTerm, + setSelectedSubCategory, + filteredCards, + } = useAvailablePackages({ + prereleaseIntegrationsEnabled, + }); + + return useMemo( + () => ({ + availablePackagesResult: { + isLoading, + searchTerm, + setCategory, + setSearchTerm, + setSelectedSubCategory, + }, + allowedIntegrations: filteredCards.filter( + (card) => + (featuredCardIds?.includes(card.name) || featuredCardIds?.includes(card.id)) ?? true + ), + }), + [ + featuredCardIds, + filteredCards, + isLoading, + searchTerm, + setCategory, + setSearchTerm, + setSelectedSubCategory, + ] + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/use_integration_card_list.test.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_integration_card_list.test.ts similarity index 88% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/use_integration_card_list.test.ts rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_integration_card_list.test.ts index 555d68c73a830..5e69784835495 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/use_integration_card_list.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_integration_card_list.test.ts @@ -7,11 +7,12 @@ import { renderHook } from '@testing-library/react'; import { useIntegrationCardList } from './use_integration_card_list'; -import { trackOnboardingLinkClick } from '../../../lib/telemetry'; +import { mockTrackLinkClick } from './__mocks__/mocks'; -jest.mock('../../../lib/telemetry'); -jest.mock('../../../../../common/lib/kibana', () => ({ - ...jest.requireActual('../../../../../common/lib/kibana'), +jest.mock('./integration_context'); + +jest.mock('../../kibana', () => ({ + ...jest.requireActual('../../kibana'), useNavigation: jest.fn().mockReturnValue({ navigateTo: jest.fn(), getAppUrl: jest.fn().mockReturnValue(''), @@ -87,6 +88,6 @@ describe('useIntegrationCardList', () => { const card = result.current[0]; card.onCardClick?.(); - expect(trackOnboardingLinkClick).toHaveBeenCalledWith('card_epr:endpoint'); + expect(mockTrackLinkClick).toHaveBeenCalledWith('card_epr:endpoint'); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/use_integration_card_list.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_integration_card_list.ts similarity index 79% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/use_integration_card_list.ts rename to x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_integration_card_list.ts index 4a4eb99689c3d..21a49639609f3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/use_integration_card_list.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_integration_card_list.ts @@ -7,12 +7,9 @@ import { useMemo } from 'react'; import type { IntegrationCardItem } from '@kbn/fleet-plugin/public'; import { SECURITY_UI_APP_ID } from '@kbn/security-solution-navigation'; -import { useNavigation } from '../../../../../common/lib/kibana'; -import { - APP_INTEGRATIONS_PATH, - APP_UI_ID, - ONBOARDING_PATH, -} from '../../../../../../common/constants'; +import { useNavigation } from '../../kibana'; +import { APP_INTEGRATIONS_PATH, APP_UI_ID, ONBOARDING_PATH } from '../../../../../common/constants'; + import { CARD_DESCRIPTION_LINE_CLAMP, CARD_TITLE_LINE_CLAMP, @@ -21,9 +18,10 @@ import { RETURN_APP_ID, RETURN_PATH, TELEMETRY_INTEGRATION_CARD, -} from './constants'; -import type { GetAppUrl, NavigateTo } from '../../../../../common/lib/kibana'; -import { trackOnboardingLinkClick } from '../../../lib/telemetry'; +} from '../constants'; +import type { GetAppUrl, NavigateTo } from '../../kibana'; +import type { TrackLinkClick } from './integration_context'; +import { useIntegrationContext } from './integration_context'; const addPathParamToUrl = (url: string, onboardingLink: string) => { const encoded = encodeURIComponent(onboardingLink); @@ -50,15 +48,23 @@ const getFilteredCards = ({ installedIntegrationList, integrationsList, navigateTo, + trackLinkClick, }: { featuredCardIds?: string[]; getAppUrl: GetAppUrl; installedIntegrationList?: IntegrationCardItem[]; integrationsList: IntegrationCardItem[]; navigateTo: NavigateTo; + trackLinkClick?: TrackLinkClick; }) => { const securityIntegrationsList = integrationsList.map((card) => - addSecuritySpecificProps({ navigateTo, getAppUrl, card, installedIntegrationList }) + addSecuritySpecificProps({ + navigateTo, + getAppUrl, + card, + installedIntegrationList, + trackLinkClick, + }) ); if (!featuredCardIds) { return { featuredCards: [], integrationCards: securityIntegrationsList }; @@ -74,11 +80,13 @@ const addSecuritySpecificProps = ({ navigateTo, getAppUrl, card, + trackLinkClick, }: { navigateTo: NavigateTo; getAppUrl: GetAppUrl; card: IntegrationCardItem; installedIntegrationList?: IntegrationCardItem[]; + trackLinkClick?: TrackLinkClick; }): IntegrationCardItem => { const onboardingLink = getAppUrl({ appId: SECURITY_UI_APP_ID, path: ONBOARDING_PATH }); const integrationRootUrl = getAppUrl({ appId: INTEGRATION_APP_ID }); @@ -91,6 +99,7 @@ const addSecuritySpecificProps = ({ card.url.indexOf(APP_INTEGRATIONS_PATH) >= 0 && onboardingLink ? addPathParamToUrl(card.url, ONBOARDING_PATH) : card.url; + return { ...card, titleLineClamp: CARD_TITLE_LINE_CLAMP, @@ -100,7 +109,7 @@ const addSecuritySpecificProps = ({ url, onCardClick: () => { const trackId = `${TELEMETRY_INTEGRATION_CARD}_${card.id}`; - trackOnboardingLinkClick(trackId); + trackLinkClick?.(trackId); if (url.startsWith(APP_INTEGRATIONS_PATH)) { navigateTo({ appId: INTEGRATION_APP_ID, @@ -124,10 +133,19 @@ export const useIntegrationCardList = ({ featuredCardIds?: string[] | undefined; }): IntegrationCardItem[] => { const { navigateTo, getAppUrl } = useNavigation(); - + const { + telemetry: { trackLinkClick }, + } = useIntegrationContext(); const { featuredCards, integrationCards } = useMemo( - () => getFilteredCards({ navigateTo, getAppUrl, integrationsList, featuredCardIds }), - [navigateTo, getAppUrl, integrationsList, featuredCardIds] + () => + getFilteredCards({ + navigateTo, + getAppUrl, + integrationsList, + featuredCardIds, + trackLinkClick, + }), + [navigateTo, getAppUrl, integrationsList, featuredCardIds, trackLinkClick] ); if (featuredCardIds && featuredCardIds.length > 0) { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_selected_tab.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_selected_tab.tsx new file mode 100644 index 0000000000000..32420203a4f96 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_selected_tab.tsx @@ -0,0 +1,41 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; +import { useStoredIntegrationTabId } from './use_stored_state'; +import type { Tab } from '../types'; + +export type UseSelectedTabReturn = ReturnType; + +export const useSelectedTab = ({ + spaceId, + integrationTabs, +}: { + spaceId: string; + integrationTabs: Tab[]; +}) => { + const [toggleIdSelected, setSelectedTabIdToStorage] = useStoredIntegrationTabId( + spaceId, + integrationTabs[0].id + ); + + const integrationTabsById = useMemo( + () => Object.fromEntries(integrationTabs.map((tab: Tab) => [tab.id, tab])), + [integrationTabs] + ); + + const selectedTab = useMemo( + /** + * When toggleIdSelected from the local storage is not found in the integrationTabs, + * we fallback to the first tab in the integrationTabs array. + */ + () => integrationTabsById[toggleIdSelected] ?? integrationTabs[0], + [integrationTabs, integrationTabsById, toggleIdSelected] + ); + + return { selectedTab, toggleIdSelected, setSelectedTabIdToStorage, integrationTabs }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_stored_state.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_stored_state.ts new file mode 100644 index 0000000000000..0443c1e97bd8f --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/hooks/use_stored_state.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import useLocalStorage from 'react-use/lib/useLocalStorage'; +import type { IntegrationTabId } from '../types'; + +const LocalStorageKey = { + selectedIntegrationTabId: 'securitySolution.onboarding.selectedIntegrationTabId', + integrationSearchTerm: 'securitySolution.onboarding.integrationSearchTerm', +} as const; + +/** + * Wrapper hook for useLocalStorage, but always returns the default value when not defined instead of `undefined`. + */ +export const useDefinedLocalStorage = (key: string, defaultValue: T) => { + const [value, setValue] = useLocalStorage(key, defaultValue); + return [value ?? defaultValue, setValue] as const; +}; + +/** + * Stores the selected integration tab ID per space + */ +export const useStoredIntegrationTabId = ( + spaceId: string, + defaultSelectedTabId: IntegrationTabId +) => + useDefinedLocalStorage( + `${LocalStorageKey.selectedIntegrationTabId}.${spaceId}`, + defaultSelectedTabId + ); + +/** + * Stores the integration search term per space + */ +export const useStoredIntegrationSearchTerm = (spaceId: string) => + useDefinedLocalStorage( + `${LocalStorageKey.integrationSearchTerm}.${spaceId}`, + null + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/types/index.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/types/index.ts new file mode 100644 index 0000000000000..4dfcb54abd8dd --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/integrations/types/index.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import type { AvailablePackagesHookType, IntegrationCardItem } from '@kbn/fleet-plugin/public'; +import type { UseSelectedTabReturn } from '../hooks/use_selected_tab'; + +export interface IntegrationCardMetadata { + installedIntegrationsCount: number; + isAgentRequired: boolean; +} + +export interface Tab { + category: string; + featuredCardIds?: Array; + iconType?: string; + id: IntegrationTabId; + label: string; + overflow?: 'hidden' | 'scroll'; + showSearchTools?: boolean; + subCategory?: string; + sortByFeaturedIntegrations: boolean; + height?: string; +} + +export enum IntegrationTabId { + recommended = 'recommended', + recommendedSearchAILake = 'recommendedSearchAILake', + network = 'network', + user = 'user', + endpoint = 'endpoint', + cloud = 'cloud', + threatIntel = 'threatIntel', + all = 'all', +} + +export type TopCalloutRenderer = React.FC<{ + installedIntegrationsCount: number; + isAgentRequired: boolean; + selectedTabId: IntegrationTabId; +}>; + +export type AvailablePackagesResult = Pick< + ReturnType, + 'isLoading' | 'searchTerm' | 'setCategory' | 'setSearchTerm' | 'setSelectedSubCategory' +>; + +export type RenderChildrenType = React.FC<{ + allowedIntegrations: IntegrationCardItem[]; + availablePackagesResult: AvailablePackagesResult; + checkCompleteMetadata?: IntegrationCardMetadata; + featuredCardIds?: string[]; + selectedTabResult: UseSelectedTabReturn; + topCalloutRenderer?: TopCalloutRenderer; +}>; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/search_ai_lake/hooks/integrations/use_enhanced_integration_cards.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/lib/search_ai_lake/hooks/integrations/use_enhanced_integration_cards.tsx index 28dfd2f50cb63..076995185716c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/lib/search_ai_lake/hooks/integrations/use_enhanced_integration_cards.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/search_ai_lake/hooks/integrations/use_enhanced_integration_cards.tsx @@ -13,6 +13,12 @@ import { CONFIGURATIONS_PATH } from '../../../../../../common/constants'; import { IntegrationsFacets } from '../../../../../configurations/constants'; import { RETURN_APP_ID, RETURN_PATH } from './constants'; +export interface EnhancedCardOptions { + showInstallationStatus?: boolean; + showCompressedInstallationStatus?: boolean; + returnPath?: string; +} + const FEATURED_INTEGRATION_SORT_ORDER = [ 'epr:splunk', 'epr:google_secops', @@ -38,14 +44,17 @@ export const getCategoryBadgeIfAny = (categories: string[]): string | null => { export const applyCategoryBadgeAndStyling = ( card: IntegrationCardItem, - callerView: IntegrationsFacets + callerView: IntegrationsFacets, + options?: EnhancedCardOptions ): IntegrationCardItem => { - const returnPath = `${CONFIGURATIONS_PATH}/integrations/${callerView}`; + const returnPath = options?.returnPath ?? `${CONFIGURATIONS_PATH}/integrations/${callerView}`; const url = addPathParamToUrl(card.url, returnPath); const categoryBadge = getCategoryBadgeIfAny(card.categories); return { ...card, url, + showInstallationStatus: options?.showInstallationStatus, + showCompressedInstallationStatus: options?.showCompressedInstallationStatus, showDescription: false, showReleaseBadge: false, extraLabelsBadges: categoryBadge @@ -62,7 +71,9 @@ export const applyCategoryBadgeAndStyling = ( }; }; -const applyCustomDisplayOrder = (integrationsList: IntegrationCardItem[]) => { +const applyCustomDisplayOrder = ( + integrationsList: IntegrationCardItem[] +): IntegrationCardItem[] => { return integrationsList.sort( (a, b) => FEATURED_INTEGRATION_SORT_ORDER.indexOf(a.id) - FEATURED_INTEGRATION_SORT_ORDER.indexOf(b.id) @@ -70,13 +81,17 @@ const applyCustomDisplayOrder = (integrationsList: IntegrationCardItem[]) => { }; export const useEnhancedIntegrationCards = ( - integrationsList: IntegrationCardItem[] + integrationsList: IntegrationCardItem[], + options?: EnhancedCardOptions ): { available: IntegrationCardItem[]; installed: IntegrationCardItem[] } => { const sorted = applyCustomDisplayOrder(integrationsList); const available = useMemo( - () => sorted.map((card) => applyCategoryBadgeAndStyling(card, IntegrationsFacets.available)), - [sorted] + () => + sorted.map((card) => + applyCategoryBadgeAndStyling(card, IntegrationsFacets.available, options) + ), + [sorted, options] ); const installed = useMemo( diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/__mocks__/mocks.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/__mocks__/mocks.ts index cabdf29fe57f1..91bbd5954ee88 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/__mocks__/mocks.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/__mocks__/mocks.ts @@ -4,23 +4,19 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ export const mockReportCardOpen = jest.fn(); export const mockReportCardComplete = jest.fn(); export const mockReportCardLinkClicked = jest.fn(); export const mockReportCardSelectorClicked = jest.fn(); +export const mockTrackLinkClick = jest.fn(); export const telemetry = { reportCardOpen: mockReportCardOpen, reportCardComplete: mockReportCardComplete, reportCardLinkClicked: mockReportCardLinkClicked, reportCardSelectorClicked: mockReportCardSelectorClicked, + trackLinkClick: mockTrackLinkClick, }; export const mockTelemetry = jest.fn(() => telemetry); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts index 2e382929c39e5..881831681935d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_stored_state.ts @@ -7,8 +7,8 @@ import useLocalStorage from 'react-use/lib/useLocalStorage'; import type { OnboardingCardId } from '../../constants'; -import type { IntegrationTabId } from '../onboarding_body/cards/integrations/types'; import type { CardSelectorListItem } from '../onboarding_body/cards/common/card_selector_list'; +import { useDefinedLocalStorage } from '../../../common/lib/integrations/hooks/use_stored_state'; const LocalStorageKey = { avcBannerDismissed: 'securitySolution.onboarding.avcBannerDismissed', @@ -16,20 +16,10 @@ const LocalStorageKey = { completeCards: 'securitySolution.onboarding.completeCards', expandedCard: 'securitySolution.onboarding.expandedCard', urlDetails: 'securitySolution.onboarding.urlDetails', - selectedIntegrationTabId: 'securitySolution.onboarding.selectedIntegrationTabId', selectedCardItemId: 'securitySolution.onboarding.selectedCardItem', - integrationSearchTerm: 'securitySolution.onboarding.integrationSearchTerm', assistantConnectorId: 'securitySolution.onboarding.assistantCard.connectorId', } as const; -/** - * Wrapper hook for useLocalStorage, but always returns the default value when not defined instead of `undefined`. - */ -export const useDefinedLocalStorage = (key: string, defaultValue: T) => { - const [value, setValue] = useLocalStorage(key, defaultValue); - return [value ?? defaultValue, setValue] as const; -}; - /** * Stores the AVC banner dismissed state */ @@ -52,7 +42,7 @@ export const useStoredUrlDetails = (spaceId: string) => * Stores the selected selectable card ID per space */ export const useStoredSelectedCardItemId = ( - cardType: 'alerts' | 'dashboards' | 'rules', + cardType: 'alerts' | 'dashboards' | 'rules' | 'knowledgeSource', spaceId: string, defaultSelectedCardItemId: CardSelectorListItem['id'] ) => @@ -61,27 +51,6 @@ export const useStoredSelectedCardItemId = ( defaultSelectedCardItemId ); -/** - * Stores the selected integration tab ID per space - */ -export const useStoredIntegrationTabId = ( - spaceId: string, - defaultSelectedTabId: IntegrationTabId -) => - useDefinedLocalStorage( - `${LocalStorageKey.selectedIntegrationTabId}.${spaceId}`, - defaultSelectedTabId - ); - -/** - * Stores the integration search term per space - */ -export const useStoredIntegrationSearchTerm = (spaceId: string) => - useDefinedLocalStorage( - `${LocalStorageKey.integrationSearchTerm}.${spaceId}`, - null - ); - /** * Stores the integration search term per space */ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/lib/telemetry.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/lib/telemetry.ts index a88ae651ae600..332e9c5be1675 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/lib/telemetry.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/lib/telemetry.ts @@ -7,6 +7,8 @@ import { METRIC_TYPE, TELEMETRY_EVENT, track } from '../../../common/lib/telemetry'; +export type TrackLinkClick = (linkId: string) => void; + export const trackOnboardingLinkClick = (linkId: string) => { track(METRIC_TYPE.CLICK, `${TELEMETRY_EVENT.ONBOARDING}_${linkId}`); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts index 59d11314171a6..32eaac17cd736 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/body_config.ts @@ -14,13 +14,21 @@ import { alertsCardConfig } from './cards/alerts'; import { assistantCardConfig } from './cards/assistant'; import { aiConnectorCardConfig } from './cards/siem_migrations/ai_connector'; import { startMigrationCardConfig } from './cards/siem_migrations/start_migration'; +import { integrationsSearchAILakeCardConfig } from './cards/search_ai_lake/integrations_search_ai_lake'; +import { knowledgeSourceCardConfig } from './cards/search_ai_lake/knowledge_source'; +import { llmConnectorCardConfig } from './cards/search_ai_lake/llm'; export const defaultBodyConfig: OnboardingGroupConfig[] = [ { title: i18n.translate('xpack.securitySolution.onboarding.dataGroup.title', { defaultMessage: 'Ingest your data', }), - cards: [integrationsCardConfig, dashboardsCardConfig], + cards: [ + integrationsCardConfig, + integrationsSearchAILakeCardConfig, + dashboardsCardConfig, + knowledgeSourceCardConfig, + ], }, { title: i18n.translate('xpack.securitySolution.onboarding.alertsGroup.title', { @@ -35,6 +43,12 @@ export const defaultBodyConfig: OnboardingGroupConfig[] = [ // TODO: Add attackDiscoveryCardConfig when it is ready (https://github.com/elastic/kibana/issues/189487) cards: [assistantCardConfig], }, + { + title: i18n.translate('xpack.securitySolution.onboarding.customizeLLM.title', { + defaultMessage: 'Customize your LLM', + }), + cards: [llmConnectorCardConfig], + }, ]; export const siemMigrationsBodyConfig: OnboardingGroupConfig[] = [ diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts index 97eb85636913f..11dcab9da2043 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts @@ -11,6 +11,7 @@ import { OnboardingCardId } from '../../../../constants'; import { ALERTS_CARD_TITLE } from './translations'; import alertsIcon from './images/alerts_icon.png'; import alertsDarkIcon from './images/alerts_icon_dark.png'; +import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const alertsCardConfig: OnboardingCardConfig = { id: OnboardingCardId.alerts, @@ -24,4 +25,5 @@ export const alertsCardConfig: OnboardingCardConfig = { './alerts_card' ) ), + capabilitiesRequired: [`${SECURITY_FEATURE_ID}.detections`], }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts index e1a8640249b39..6c13e8c0f6d40 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts @@ -10,8 +10,9 @@ import { AssistantIcon } from '@kbn/ai-assistant-icon'; import type { OnboardingCardConfig } from '../../../../types'; import { OnboardingCardId } from '../../../../constants'; import { ASSISTANT_CARD_TITLE } from './translations'; -import { checkAssistantCardComplete } from './assistant_check_complete'; +import { checkAssistantCardComplete } from '../common/connectors/assistant_check_complete'; import type { AssistantCardMetadata } from './types'; +import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const assistantCardConfig: OnboardingCardConfig = { id: OnboardingCardId.assistant, @@ -25,6 +26,8 @@ export const assistantCardConfig: OnboardingCardConfig = ) ), checkComplete: checkAssistantCardComplete, - capabilitiesRequired: ['securitySolutionAssistant.ai-assistant'], + capabilitiesRequired: [ + ['securitySolutionAssistant.ai-assistant', `${SECURITY_FEATURE_ID}.detections`], + ], licenseTypeRequired: 'enterprise', }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_selector_list.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_selector_list.tsx index 3f00656b319cf..12019f4dcbaaa 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_selector_list.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/card_selector_list.tsx @@ -13,9 +13,10 @@ import type { DashboardsCardItemId } from '../dashboards/types'; import { useCardSelectorListStyles } from './card_selector_list.styles'; import { HEIGHT_ANIMATION_DURATION } from '../../onboarding_card_panel.styles'; import { useOnboardingContext } from '../../../onboarding_context'; +import type { KnowledgeSourceCardItemId } from '../search_ai_lake/knowledge_source/types'; export interface CardSelectorListItem { - id: RulesCardItemId | AlertsCardItemId | DashboardsCardItemId; + id: RulesCardItemId | AlertsCardItemId | DashboardsCardItemId | KnowledgeSourceCardItemId; title: string; description: string; } diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/connectors/assistant_check_complete.ts similarity index 80% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/connectors/assistant_check_complete.ts index 27bc4fafff872..4609bbc9846a8 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/assistant_check_complete.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/connectors/assistant_check_complete.ts @@ -6,10 +6,10 @@ */ import { i18n } from '@kbn/i18n'; -import type { OnboardingCardCheckComplete } from '../../../../types'; -import { loadAiConnectors } from '../common/connectors/ai_connectors'; -import { getConnectorsAuthz } from '../common/connectors/authz'; -import type { AssistantCardMetadata } from './types'; +import type { OnboardingCardCheckComplete } from '../../../../../types'; +import { loadAiConnectors } from './ai_connectors'; +import { getConnectorsAuthz } from './authz'; +import type { AssistantCardMetadata } from '../../assistant/types'; const completeBadgeText = (count: number) => i18n.translate('xpack.securitySolution.onboarding.assistantCard.badge.completeText', { diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/agent_required_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/agent_required_callout.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/agent_required_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/agent_required_callout.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/agentless_available_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/agentless_available_callout.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/agentless_available_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/agentless_available_callout.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/endpoint_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/endpoint_callout.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/endpoint_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/endpoint_callout.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/installed_integrations_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/installed_integrations_callout.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/installed_integrations_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/installed_integrations_callout.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/integration_card_top_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/integration_card_top_callout.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/integration_card_top_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/integration_card_top_callout.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/manage_integrations_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/manage_integrations_callout.tsx similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/__mocks__/manage_integrations_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/__mocks__/manage_integrations_callout.tsx diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agent_required_callout.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agent_required_callout.test.tsx similarity index 79% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agent_required_callout.test.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agent_required_callout.test.tsx index 4f5ae2f919d66..4a9a859fed382 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agent_required_callout.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agent_required_callout.test.tsx @@ -13,11 +13,10 @@ import React from 'react'; import { render } from '@testing-library/react'; import { AgentRequiredCallout } from './agent_required_callout'; -import { TestProviders } from '../../../../../../common/mock/test_providers'; -import { trackOnboardingLinkClick } from '../../../../lib/telemetry'; +import { TestProviders } from '../../../../../../../common/mock/test_providers'; +import { mockTrackLinkClick } from '../../../../../../../common/lib/integrations/hooks/__mocks__/mocks'; -jest.mock('../../../../../../common/lib/kibana'); -jest.mock('../../../../lib/telemetry'); +jest.mock('../../../../../../../common/lib/integrations/hooks/integration_context'); describe('AgentRequiredCallout', () => { beforeEach(() => { @@ -38,6 +37,6 @@ describe('AgentRequiredCallout', () => { getByTestId('agentLink').click(); - expect(trackOnboardingLinkClick).toHaveBeenCalledWith('agent_required'); + expect(mockTrackLinkClick).toHaveBeenCalledWith('agent_required'); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agent_required_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agent_required_callout.tsx similarity index 80% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agent_required_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agent_required_callout.tsx index 763dfe749adba..0cf7f0cddb841 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agent_required_callout.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agent_required_callout.tsx @@ -8,24 +8,28 @@ import React, { useCallback } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiIcon } from '@elastic/eui'; -import { LinkAnchor } from '../../../../../../common/components/links'; -import { CardCallOut } from '../../common/card_callout'; -import { useNavigation } from '../../../../../../common/lib/kibana'; +import { LinkAnchor } from '../../../../../../../common/components/links'; +import { CardCallOut } from '../../card_callout'; +import { useNavigation } from '../../../../../../../common/lib/kibana'; import { FLEET_APP_ID, ADD_AGENT_PATH, TELEMETRY_AGENT_REQUIRED } from '../constants'; -import { trackOnboardingLinkClick } from '../../../../lib/telemetry'; +import { useIntegrationContext } from '../../../../../../../common/lib/integrations/hooks/integration_context'; const fleetAgentLinkProps = { appId: FLEET_APP_ID, path: ADD_AGENT_PATH }; export const AgentRequiredCallout = React.memo(() => { const { getAppUrl, navigateTo } = useNavigation(); const addAgentLink = getAppUrl(fleetAgentLinkProps); + const { + telemetry: { trackLinkClick }, + } = useIntegrationContext(); + const onAddAgentClick = useCallback( (e: React.MouseEvent) => { e.preventDefault(); - trackOnboardingLinkClick(TELEMETRY_AGENT_REQUIRED); + trackLinkClick?.(TELEMETRY_AGENT_REQUIRED); navigateTo(fleetAgentLinkProps); }, - [navigateTo] + [navigateTo, trackLinkClick] ); return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agentless_available_callout.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agentless_available_callout.test.tsx similarity index 82% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agentless_available_callout.test.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agentless_available_callout.test.tsx index e761381747f46..5d013ea34f1ad 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agentless_available_callout.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agentless_available_callout.test.tsx @@ -7,13 +7,13 @@ import { render } from '@testing-library/react'; import React from 'react'; -import { TestProviders } from '../../../../../../common/mock/test_providers'; +import { TestProviders } from '../../../../../../../common/mock/test_providers'; import { AgentlessAvailableCallout } from './agentless_available_callout'; -import { useKibana } from '../../../../../../common/lib/kibana'; -import { trackOnboardingLinkClick } from '../../../../lib/telemetry'; +import { useKibana } from '../../../../../../../common/lib/kibana'; +import { mockTrackLinkClick } from '../../../../../__mocks__/mocks'; -jest.mock('../../../../../../common/lib/kibana'); -jest.mock('../../../../lib/telemetry'); +jest.mock('../../../../../../../common/lib/kibana'); +jest.mock('../../../../../onboarding_context'); describe('AgentlessAvailableCallout', () => { const mockUseKibana = useKibana as jest.Mock; @@ -70,6 +70,6 @@ describe('AgentlessAvailableCallout', () => { getByTestId('agentlessLearnMoreLink').click(); - expect(trackOnboardingLinkClick).toHaveBeenCalledWith('agentless_learn_more'); + expect(mockTrackLinkClick).toHaveBeenCalledWith('agentless_learn_more'); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agentless_available_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agentless_available_callout.tsx similarity index 86% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agentless_available_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agentless_available_callout.tsx index 81c4db22f39ab..191467c9745cc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/agentless_available_callout.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/agentless_available_callout.tsx @@ -10,19 +10,22 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiIcon, useEuiTheme } from '@elastic/eui'; import { css } from '@emotion/react'; -import { useKibana } from '../../../../../../common/lib/kibana'; -import { LinkAnchor } from '../../../../../../common/components/links'; -import { trackOnboardingLinkClick } from '../../../../lib/telemetry'; -import { CardCallOut } from '../../common/card_callout'; +import { useKibana } from '../../../../../../../common/lib/kibana'; +import { LinkAnchor } from '../../../../../../../common/components/links'; +import { CardCallOut } from '../../card_callout'; import { TELEMETRY_AGENTLESS_LEARN_MORE } from '../constants'; +import { useOnboardingContext } from '../../../../../onboarding_context'; export const AgentlessAvailableCallout = React.memo(() => { const { euiTheme } = useEuiTheme(); const { docLinks } = useKibana().services; + const { + telemetry: { trackLinkClick }, + } = useOnboardingContext(); const onClick = useCallback(() => { - trackOnboardingLinkClick(TELEMETRY_AGENTLESS_LEARN_MORE); - }, []); + trackLinkClick?.(TELEMETRY_AGENTLESS_LEARN_MORE); + }, [trackLinkClick]); /* @ts-expect-error: add the blog link to `packages/kbn-doc-links/src/get_doc_links.ts` when it is ready and remove this exit condition*/ if (!docLinks.links.fleet.agentlessBlog) { diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/endpoint_callout.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/endpoint_callout.test.tsx similarity index 76% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/endpoint_callout.test.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/endpoint_callout.test.tsx index 7d89003359743..df23ab0e838ef 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/endpoint_callout.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/endpoint_callout.test.tsx @@ -13,11 +13,11 @@ import React from 'react'; import { render } from '@testing-library/react'; import { EndpointCallout } from './endpoint_callout'; -import { TestProviders } from '../../../../../../common/mock/test_providers'; -import { trackOnboardingLinkClick } from '../../../../lib/telemetry'; +import { TestProviders } from '../../../../../../../common/mock/test_providers'; +import { mockTrackLinkClick } from '../../../../../../../common/lib/integrations/hooks/__mocks__/mocks'; -jest.mock('../../../../../../common/lib/kibana'); -jest.mock('../../../../lib/telemetry'); +jest.mock('../../../../../../../common/lib/kibana'); +jest.mock('../../../../../../../common/lib/integrations/hooks/integration_context'); describe('EndpointCallout', () => { beforeEach(() => { @@ -38,6 +38,6 @@ describe('EndpointCallout', () => { getByTestId('endpointLearnMoreLink').click(); - expect(trackOnboardingLinkClick).toHaveBeenCalledWith('endpoint_learn_more'); + expect(mockTrackLinkClick).toHaveBeenCalledWith('endpoint_learn_more'); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/endpoint_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/endpoint_callout.tsx similarity index 83% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/endpoint_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/endpoint_callout.tsx index b761a17901a38..d2fae2e733bac 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/endpoint_callout.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/endpoint_callout.tsx @@ -10,18 +10,22 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { EuiIcon, useEuiTheme } from '@elastic/eui'; import { css } from '@emotion/react'; -import { useKibana } from '../../../../../../common/lib/kibana/kibana_react'; -import { LinkAnchor } from '../../../../../../common/components/links'; -import { CardCallOut } from '../../common/card_callout'; -import { trackOnboardingLinkClick } from '../../../../lib/telemetry'; +import { useKibana } from '../../../../../../../common/lib/kibana'; +import { LinkAnchor } from '../../../../../../../common/components/links'; +import { CardCallOut } from '../../card_callout'; import { TELEMETRY_ENDPOINT_LEARN_MORE } from '../constants'; +import { useIntegrationContext } from '../../../../../../../common/lib/integrations/hooks/integration_context'; export const EndpointCallout = React.memo(() => { const { euiTheme } = useEuiTheme(); const { docLinks } = useKibana().services; + const { + telemetry: { trackLinkClick }, + } = useIntegrationContext(); + const onClick = useCallback(() => { - trackOnboardingLinkClick(TELEMETRY_ENDPOINT_LEARN_MORE); - }, []); + trackLinkClick?.(TELEMETRY_ENDPOINT_LEARN_MORE); + }, [trackLinkClick]); return ( { - if (!installedIntegrationsCount) { - return null; - } - - return isAgentRequired ? ( - - ) : ( - - ); +export const InstalledIntegrationsCalloutComponent: React.FC<{ + installedIntegrationsCount: number; + isAgentRequired: boolean; +}> = ({ installedIntegrationsCount, isAgentRequired }) => { + if (!installedIntegrationsCount) { + return null; } -); + + return isAgentRequired ? ( + + ) : ( + + ); +}; + +export const InstalledIntegrationsCallout = React.memo(InstalledIntegrationsCalloutComponent); InstalledIntegrationsCallout.displayName = 'InstalledIntegrationsCallout'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/integration_card_top_callout.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/integration_card_top_callout.test.tsx similarity index 90% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/integration_card_top_callout.test.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/integration_card_top_callout.test.tsx index 9cf346aeed901..5a1b81d773c08 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/integration_card_top_callout.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/integration_card_top_callout.test.tsx @@ -9,10 +9,10 @@ import React from 'react'; import { render, waitFor } from '@testing-library/react'; import { of } from 'rxjs'; import { IntegrationCardTopCallout } from './integration_card_top_callout'; -import { useOnboardingService } from '../../../../hooks/use_onboarding_service'; -import { IntegrationTabId } from '../types'; +import { useOnboardingService } from '../../../../../hooks/use_onboarding_service'; +import { IntegrationTabId } from '../../../../../../../common/lib/integrations/types'; -jest.mock('../../../../hooks/use_onboarding_service', () => ({ +jest.mock('../../../../../hooks/use_onboarding_service', () => ({ useOnboardingService: jest.fn(), })); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/integration_card_top_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/integration_card_top_callout.tsx new file mode 100644 index 0000000000000..c09d3fc2c54a2 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/integration_card_top_callout.tsx @@ -0,0 +1,65 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import useObservable from 'react-use/lib/useObservable'; + +import { useOnboardingService } from '../../../../../hooks/use_onboarding_service'; +import { AgentlessAvailableCallout } from './agentless_available_callout'; +import { InstalledIntegrationsCallout } from './installed_integrations_callout'; +import { EndpointCallout } from './endpoint_callout'; +import { IntegrationTabId } from '../../../../../../../common/lib/integrations/types'; + +export const useShowInstalledCallout = ({ + installedIntegrationsCount, + isAgentRequired, +}: { + installedIntegrationsCount: number; + isAgentRequired: boolean; +}) => { + return installedIntegrationsCount > 0 || isAgentRequired; +}; + +export const IntegrationCardTopCalloutComponent: React.FC<{ + installedIntegrationsCount: number; + isAgentRequired: boolean; + selectedTabId: IntegrationTabId; +}> = ({ installedIntegrationsCount, isAgentRequired, selectedTabId }) => { + const { isAgentlessAvailable$ } = useOnboardingService(); + const isAgentlessAvailable = useObservable(isAgentlessAvailable$, undefined); + const showInstalledCallout = useShowInstalledCallout({ + installedIntegrationsCount, + isAgentRequired, + }); + const showAgentlessCallout = + isAgentlessAvailable && + installedIntegrationsCount === 0 && + selectedTabId !== IntegrationTabId.endpoint; + const showEndpointCallout = + installedIntegrationsCount === 0 && selectedTabId === IntegrationTabId.endpoint; + + if (!showAgentlessCallout && !showEndpointCallout && !showInstalledCallout) { + return null; + } + + return ( + <> + {showEndpointCallout && } + {showAgentlessCallout && } + {showInstalledCallout && ( + + )} + + ); +}; + +export const IntegrationCardTopCallout = React.memo(IntegrationCardTopCalloutComponent); + +IntegrationCardTopCallout.displayName = 'IntegrationCardTopCallout'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/manage_integrations_callout.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/manage_integrations_callout.test.tsx similarity index 84% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/manage_integrations_callout.test.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/manage_integrations_callout.test.tsx index 5f16bf3981f5f..27fec4759e01e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/manage_integrations_callout.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/manage_integrations_callout.test.tsx @@ -7,16 +7,16 @@ import React from 'react'; import { render } from '@testing-library/react'; import { ManageIntegrationsCallout } from './manage_integrations_callout'; -import { TestProviders } from '../../../../../../common/mock/test_providers'; - -jest.mock('../../../../../../common/hooks/use_add_integrations_url', () => ({ +import { TestProviders } from '../../../../../../../common/mock/test_providers'; +jest.mock('../../../../../../../common/lib/integrations/hooks/integration_context'); +jest.mock('../../../../../../../common/hooks/use_add_integrations_url', () => ({ useAddIntegrationsUrl: jest.fn().mockReturnValue({ href: '/test-url', onClick: jest.fn(), }), })); -jest.mock('../../common/card_callout', () => ({ +jest.mock('../../card_callout', () => ({ CardCallOut: ({ text }: { text: React.ReactNode }) =>
{text}
, })); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/manage_integrations_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/manage_integrations_callout.tsx similarity index 81% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/manage_integrations_callout.tsx rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/manage_integrations_callout.tsx index 4085f2310d570..4fa45abb877cb 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/manage_integrations_callout.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/manage_integrations_callout.tsx @@ -8,23 +8,26 @@ import React, { useCallback } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiIcon } from '@elastic/eui'; -import { LinkAnchor } from '../../../../../../common/components/links'; -import { CardCallOut } from '../../common/card_callout'; -import { useAddIntegrationsUrl } from '../../../../../../common/hooks/use_add_integrations_url'; -import { trackOnboardingLinkClick } from '../../../../lib/telemetry'; +import { LinkAnchor } from '../../../../../../../common/components/links'; +import { CardCallOut } from '../../card_callout'; +import { useAddIntegrationsUrl } from '../../../../../../../common/hooks/use_add_integrations_url'; import { TELEMETRY_MANAGE_INTEGRATIONS } from '../constants'; +import { useIntegrationContext } from '../../../../../../../common/lib/integrations/hooks/integration_context'; export const ManageIntegrationsCallout = React.memo( ({ installedIntegrationsCount }: { installedIntegrationsCount: number }) => { const { href: integrationUrl, onClick: onAddIntegrationClicked } = useAddIntegrationsUrl(); + const { + telemetry: { trackLinkClick }, + } = useIntegrationContext(); const onClick = useCallback( (e: React.MouseEvent) => { e.preventDefault(); - trackOnboardingLinkClick(TELEMETRY_MANAGE_INTEGRATIONS); + trackLinkClick?.(TELEMETRY_MANAGE_INTEGRATIONS); onAddIntegrationClicked(e); }, - [onAddIntegrationClicked] + [onAddIntegrationClicked, trackLinkClick] ); if (!installedIntegrationsCount) { diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/constants.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/constants.ts new file mode 100644 index 0000000000000..5724df0c7bbd4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/constants.ts @@ -0,0 +1,15 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const ADD_AGENT_PATH = `/agents`; +export const AGENT_INDEX = `logs-elastic_agent*`; +export const FLEET_APP_ID = `fleet`; +export const INTEGRATION_CARD_HEIGHT = 156; +export const TELEMETRY_MANAGE_INTEGRATIONS = `manage_integrations`; +export const TELEMETRY_ENDPOINT_LEARN_MORE = `endpoint_learn_more`; +export const TELEMETRY_AGENTLESS_LEARN_MORE = `agentless_learn_more`; +export const TELEMETRY_AGENT_REQUIRED = `agent_required`; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/images/integrations_icon.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/images/integrations_icon.png similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/images/integrations_icon.png rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/images/integrations_icon.png diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/images/integrations_icon_dark.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/images/integrations_icon_dark.png similarity index 100% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/images/integrations_icon_dark.png rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/images/integrations_icon_dark.png diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_check_complete.test.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/integrations_check_complete.test.ts similarity index 96% rename from x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_check_complete.test.ts rename to x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/integrations_check_complete.test.ts index 961f1981291b8..910b49674f6c8 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_check_complete.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/integrations_check_complete.test.ts @@ -4,11 +4,11 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { checkIntegrationsCardComplete } from './integrations_check_complete'; import { installationStatuses } from '@kbn/fleet-plugin/public'; -import type { StartServices } from '../../../../../types'; +import type { StartServices } from '../../../../../../types'; import { lastValueFrom } from 'rxjs'; +import { checkIntegrationsCardComplete } from '../../integrations/integrations_check_complete'; jest.mock('rxjs', () => ({ ...jest.requireActual('rxjs'), diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/integrations_check_complete.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/integrations_check_complete.ts new file mode 100644 index 0000000000000..7e7bc28947d8b --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/integrations_check_complete.ts @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { GetPackagesResponse, IntegrationCardItem } from '@kbn/fleet-plugin/public'; +import { EPM_API_ROUTES, installationStatuses } from '@kbn/fleet-plugin/public'; +import { i18n } from '@kbn/i18n'; +import { lastValueFrom } from 'rxjs'; +import { AGENT_INDEX } from './constants'; +import type { StartServices } from '../../../../../../types'; + +export const getCompleteBadgeText = (installedCount: number) => + i18n.translate('xpack.securitySolution.onboarding.integrationsCard.badge.completeText', { + defaultMessage: '{count} {count, plural, one {integration} other {integrations}} added', + values: { count: installedCount }, + }); + +export const getIntegrationList = async ( + services: StartServices, + /** + * The list of available integrations to check against. + * If provided, only installed integrations that are in this list will be considered complete. + * If not provided, all installed integrations will be considered complete. + */ + availableIntegrations?: Array +) => { + const packageData = await services.http + .get(EPM_API_ROUTES.INSTALL_BY_UPLOAD_PATTERN, { + version: '2023-10-31', + }) + .catch((err: Error) => { + const emptyItems: GetPackagesResponse['items'] = []; + services.notifications.toasts.addError(err, { + title: i18n.translate( + 'xpack.securitySolution.onboarding.integrationsCard.checkComplete.fetchIntegrations.errorTitle', + { + defaultMessage: 'Error fetching integrations data', + } + ), + }); + return { items: emptyItems }; + }); + + const installedPackages = packageData?.items?.filter((pkg) => { + const integrationCardId = `epr:${pkg.id}`; + const isInstalled = + pkg.status === installationStatuses.Installed || + pkg.status === installationStatuses.InstallFailed; + return availableIntegrations + ? isInstalled && + availableIntegrations.some( + (availableIntegration) => + availableIntegration === integrationCardId || availableIntegration === pkg.name + ) + : isInstalled; + }); + const isComplete = installedPackages && installedPackages.length > 0; + + return { isComplete, installedPackages }; +}; + +export const getAgentsData = async (services: StartServices, isComplete: boolean) => { + const agentsData = await lastValueFrom( + services.data.search.search({ + params: { index: AGENT_INDEX, body: { size: 1 } }, + }) + ).catch((err: Error) => { + services.notifications.toasts.addError(err, { + title: i18n.translate( + 'xpack.securitySolution.onboarding.integrationsCard.checkComplete.fetchAgents.errorTitle', + { + defaultMessage: 'Error fetching agents data', + } + ), + }); + return { rawResponse: { hits: { total: 0 } } }; + }); + + const agentsDataAvailable = !!agentsData?.rawResponse?.hits?.total; + const isAgentRequired = isComplete && !agentsDataAvailable; + return { isAgentRequired, agentsData }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts index e744b999ecca1..36184a40eb250 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts @@ -11,6 +11,7 @@ import { OnboardingCardId } from '../../../../constants'; import { DASHBOARDS_CARD_TITLE } from './translations'; import dashboardsIcon from './images/dashboards_icon.png'; import dashboardsDarkIcon from './images/dashboards_icon_dark.png'; +import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const dashboardsCardConfig: OnboardingCardConfig = { id: OnboardingCardId.dashboards, @@ -24,5 +25,5 @@ export const dashboardsCardConfig: OnboardingCardConfig = { './dashboards_card' ) ), - capabilitiesRequired: ['dashboard.show'], + capabilitiesRequired: [['dashboard_v2.show', `${SECURITY_FEATURE_ID}.detections`]], }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/integration_card_top_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/integration_card_top_callout.tsx deleted file mode 100644 index 40f4ae95cf088..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/callouts/integration_card_top_callout.tsx +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import React from 'react'; -import useObservable from 'react-use/lib/useObservable'; - -import { useOnboardingService } from '../../../../hooks/use_onboarding_service'; -import { AgentlessAvailableCallout } from './agentless_available_callout'; -import { InstalledIntegrationsCallout } from './installed_integrations_callout'; -import { IntegrationTabId } from '../types'; -import { EndpointCallout } from './endpoint_callout'; - -export const IntegrationCardTopCallout = React.memo( - ({ - installedIntegrationsCount, - isAgentRequired, - selectedTabId, - }: { - installedIntegrationsCount: number; - isAgentRequired: boolean; - selectedTabId: IntegrationTabId; - }) => { - const { isAgentlessAvailable$ } = useOnboardingService(); - const isAgentlessAvailable = useObservable(isAgentlessAvailable$, undefined); - - const showAgentlessCallout = - isAgentlessAvailable && - installedIntegrationsCount === 0 && - selectedTabId !== IntegrationTabId.endpoint; - const showEndpointCallout = - installedIntegrationsCount === 0 && selectedTabId === IntegrationTabId.endpoint; - const showInstalledCallout = installedIntegrationsCount > 0 || isAgentRequired; - - return ( - <> - {showEndpointCallout && } - {showAgentlessCallout && } - {showInstalledCallout && ( - - )} - - ); - } -); - -IntegrationCardTopCallout.displayName = 'IntegrationCardTopCallout'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts index ba7b89d5aba7b..490a0b2b882d4 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts @@ -10,9 +10,10 @@ import { i18n } from '@kbn/i18n'; import type { OnboardingCardConfig } from '../../../../types'; import { checkIntegrationsCardComplete } from './integrations_check_complete'; import { OnboardingCardId } from '../../../../constants'; -import type { IntegrationCardMetadata } from './types'; -import integrationsIcon from './images/integrations_icon.png'; -import integrationsDarkIcon from './images/integrations_icon_dark.png'; +import integrationsIcon from '../common/integrations/images/integrations_icon.png'; +import integrationsDarkIcon from '../common/integrations/images/integrations_icon_dark.png'; +import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; +import type { IntegrationCardMetadata } from '../../../../../common/lib/integrations/types'; export const integrationsCardConfig: OnboardingCardConfig = { id: OnboardingCardId.integrations, @@ -29,5 +30,5 @@ export const integrationsCardConfig: OnboardingCardConfig { @@ -38,6 +39,6 @@ describe('IntegrationsCard', () => { /> ); expect(queryByTestId('loadingInstalledIntegrations')).not.toBeInTheDocument(); - expect(queryByTestId('integrationsCardGridTabs')).toBeInTheDocument(); + expect(queryByTestId('securityIntegrations')).toBeInTheDocument(); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_card.tsx index 2fafc0405efe4..fe29daad91385 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_card.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_card.tsx @@ -8,23 +8,32 @@ import React from 'react'; import type { OnboardingCardComponent } from '../../../../types'; import { OnboardingCardContentPanel } from '../common/card_content_panel'; -import { IntegrationsCardGridTabs } from './integration_card_grid_tabs'; import { CenteredLoadingSpinner } from '../../../../../common/components/centered_loading_spinner'; -import type { IntegrationCardMetadata } from './types'; +import { useOnboardingContext } from '../../../onboarding_context'; +import type { IntegrationCardMetadata } from '../../../../../common/lib/integrations/types'; +import { SecurityIntegrations } from '../../../../../common/lib/integrations/components'; +import { IntegrationCardTopCallout } from '../common/integrations/callouts/integration_card_top_callout'; +import { IntegrationContextProvider } from '../../../../../common/lib/integrations/hooks/integration_context'; export const IntegrationsCard: OnboardingCardComponent = React.memo( ({ checkCompleteMetadata }) => { + const { + spaceId, + telemetry: { trackLinkClick }, + } = useOnboardingContext(); + if (!checkCompleteMetadata) { return ; } - const { installedIntegrationsCount, isAgentRequired } = checkCompleteMetadata; return ( - + + + ); } diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_check_complete.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_check_complete.ts index d4193dd8b9ded..7f92e38b9783a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_check_complete.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/integrations_check_complete.ts @@ -5,66 +5,21 @@ * 2.0. */ -import type { GetPackagesResponse } from '@kbn/fleet-plugin/public'; -import { EPM_API_ROUTES, installationStatuses } from '@kbn/fleet-plugin/public'; -import { i18n } from '@kbn/i18n'; -import { lastValueFrom } from 'rxjs'; -import type { OnboardingCardCheckComplete } from '../../../../types'; -import { AGENT_INDEX } from './constants'; +import type { IntegrationCardMetadata } from '../../../../../common/lib/integrations/types'; import type { StartServices } from '../../../../../types'; -import type { IntegrationCardMetadata } from './types'; +import type { OnboardingCardCheckComplete } from '../../../../types'; +import { + getAgentsData, + getCompleteBadgeText, + getIntegrationList, +} from '../common/integrations/integrations_check_complete'; export const checkIntegrationsCardComplete: OnboardingCardCheckComplete< IntegrationCardMetadata > = async (services: StartServices) => { - const packageData = await services.http - .get(EPM_API_ROUTES.INSTALL_BY_UPLOAD_PATTERN, { - version: '2023-10-31', - }) - .catch((err: Error) => { - services.notifications.toasts.addError(err, { - title: i18n.translate( - 'xpack.securitySolution.onboarding.integrationsCard.checkComplete.fetchIntegrations.errorTitle', - { - defaultMessage: 'Error fetching integrations data', - } - ), - }); - return { items: [] }; - }); - - const agentsData = await lastValueFrom( - services.data.search.search({ - params: { index: AGENT_INDEX, body: { size: 1 } }, - }) - ).catch((err: Error) => { - services.notifications.toasts.addError(err, { - title: i18n.translate( - 'xpack.securitySolution.onboarding.integrationsCard.checkComplete.fetchAgents.errorTitle', - { - defaultMessage: 'Error fetching agents data', - } - ), - }); - return { rawResponse: { hits: { total: 0 } } }; - }); - - const installed = packageData?.items?.filter( - (pkg) => - pkg.status === installationStatuses.Installed || - pkg.status === installationStatuses.InstallFailed - ); - const isComplete = installed && installed.length > 0; - const agentsDataAvailable = !!agentsData?.rawResponse?.hits?.total; - const isAgentRequired = isComplete && !agentsDataAvailable; + const { isComplete, installedPackages } = await getIntegrationList(services); - const completeBadgeText = i18n.translate( - 'xpack.securitySolution.onboarding.integrationsCard.badge.completeText', - { - defaultMessage: '{count} {count, plural, one {integration} other {integrations}} added', - values: { count: installed.length }, - } - ); + const { isAgentRequired } = await getAgentsData(services, isComplete); if (!isComplete) { return { @@ -78,9 +33,9 @@ export const checkIntegrationsCardComplete: OnboardingCardCheckComplete< return { isComplete, - completeBadgeText, + completeBadgeText: getCompleteBadgeText(installedPackages.length), metadata: { - installedIntegrationsCount: installed.length, + installedIntegrationsCount: installedPackages.length, isAgentRequired, }, }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/types.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/types.ts deleted file mode 100644 index 849e9cdd2336b..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/types.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ -export interface Tab { - category: string; - featuredCardIds?: string[]; - iconType?: string; - id: IntegrationTabId; - label: string; - overflow?: 'hidden' | 'scroll'; - showSearchTools?: boolean; - subCategory?: string; - sortByFeaturedIntegrations: boolean; -} - -export enum IntegrationTabId { - recommended = 'recommended', - network = 'network', - user = 'user', - endpoint = 'endpoint', - cloud = 'cloud', - threatIntel = 'threatIntel', - all = 'all', -} - -export interface IntegrationCardMetadata { - installedIntegrationsCount: number; - isAgentRequired: boolean; -} diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts index 59b86df834646..65a6160870f2f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts @@ -12,6 +12,7 @@ import { RULES_CARD_TITLE } from './translations'; import { checkRulesComplete } from './rules_check_complete'; import rulesIcon from './images/rules_icon.png'; import rulesDarkIcon from './images/rules_icon_dark.png'; +import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const rulesCardConfig: OnboardingCardConfig = { id: OnboardingCardId.rules, @@ -26,4 +27,5 @@ export const rulesCardConfig: OnboardingCardConfig = { ) ), checkComplete: checkRulesComplete, + capabilitiesRequired: [`${SECURITY_FEATURE_ID}.detections`], }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/index.ts new file mode 100644 index 0000000000000..5a73524a4d600 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/index.ts @@ -0,0 +1,34 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { i18n } from '@kbn/i18n'; +import type { OnboardingCardConfig } from '../../../../../types'; +import { checkIntegrationsCardComplete } from './integrations_check_complete'; +import { OnboardingCardId } from '../../../../../constants'; +import integrationsIcon from '../../common/integrations/images/integrations_icon.png'; +import integrationsDarkIcon from '../../common/integrations/images/integrations_icon_dark.png'; +import { SECURITY_FEATURE_ID } from '../../../../../../../common/constants'; +import type { IntegrationCardMetadata } from '../../../../../../common/lib/integrations/types'; + +export const integrationsSearchAILakeCardConfig: OnboardingCardConfig = { + id: OnboardingCardId.integrationsSearchAILake, + title: i18n.translate('xpack.securitySolution.onboarding.integrationsSearchAILakeCard.title', { + defaultMessage: 'Add data with integrations', + }), + icon: integrationsIcon, + iconDark: integrationsDarkIcon, + Component: React.lazy( + () => + import( + /* webpackChunkName: "onboarding_search_ai_lake_integrations_card" */ + './integrations_card' + ) + ), + checkComplete: checkIntegrationsCardComplete, + capabilitiesRequired: [`${SECURITY_FEATURE_ID}.external_detections`], +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integration_tabs_configs.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integration_tabs_configs.ts new file mode 100644 index 0000000000000..38e65251d8131 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integration_tabs_configs.ts @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { INTEGRATION_CARD_HEIGHT } from '../../common/integrations/constants'; +import { SEARCH_AI_LAKE_ALLOWED_INTEGRATIONS } from '../../../../../../common/lib/search_ai_lake/integrations'; +import { IntegrationTabId, type Tab } from '../../../../../../common/lib/integrations/types'; + +export const INTEGRATION_TABS: Tab[] = [ + { + category: '', + id: IntegrationTabId.recommendedSearchAILake, + label: 'Recommended', + overflow: 'hidden', + showSearchTools: false, + // Fleet has a default sorting for integrations by category that Security Solution does not want to apply + // so we need to disable the sorting for the recommended tab to allow static ordering according to the featuredCardIds + sortByFeaturedIntegrations: false, + featuredCardIds: SEARCH_AI_LAKE_ALLOWED_INTEGRATIONS, + height: `${INTEGRATION_CARD_HEIGHT * 1.8}px`, + }, +]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.test.tsx new file mode 100644 index 0000000000000..b520dfc7f48e5 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.test.tsx @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import IntegrationsCard from './integrations_card'; +import { render } from '@testing-library/react'; +jest.mock('../../../../onboarding_context'); +jest.mock('../../../../../../common/lib/integrations/components/with_filtered_integrations'); +const props = { + setComplete: jest.fn(), + checkComplete: jest.fn(), + isCardComplete: jest.fn(), + setExpandedCardId: jest.fn(), + isCardAvailable: jest.fn(), +}; + +describe('IntegrationsCard', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders a loading spinner when checkCompleteMetadata is undefined', () => { + const { getByTestId } = render( + + ); + expect(getByTestId('loadingInstalledIntegrations')).toBeInTheDocument(); + }); + + it('renders the content', () => { + const { queryByTestId } = render( + + ); + expect(queryByTestId('loadingInstalledIntegrations')).not.toBeInTheDocument(); + expect(queryByTestId('withFilteredIntegrations')).toBeInTheDocument(); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.tsx new file mode 100644 index 0000000000000..e39730067b43d --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_card.tsx @@ -0,0 +1,88 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; + +import type { OnboardingCardComponent } from '../../../../../types'; +import { OnboardingCardContentPanel } from '../../common/card_content_panel'; +import { CenteredLoadingSpinner } from '../../../../../../common/components/centered_loading_spinner'; +import { INTEGRATION_TABS } from './integration_tabs_configs'; +import { ManageIntegrationsCallout } from '../../common/integrations/callouts/manage_integrations_callout'; +import { useOnboardingContext } from '../../../../onboarding_context'; +import { useEnhancedIntegrationCards } from '../../../../../../common/lib/search_ai_lake/hooks'; +import { useSelectedTab } from '../../../../../../common/lib/integrations/hooks/use_selected_tab'; +import type { + RenderChildrenType, + IntegrationCardMetadata, +} from '../../../../../../common/lib/integrations/types'; +import { WithFilteredIntegrations } from '../../../../../../common/lib/integrations/components/with_filtered_integrations'; +import { IntegrationsCardGridTabsComponent } from '../../../../../../common/lib/integrations/components/integration_card_grid_tabs_component'; +import { DEFAULT_CHECK_COMPLETE_METADATA } from '../../../../../../common/lib/integrations/components/integration_card_grid_tabs'; +import { IntegrationContextProvider } from '../../../../../../common/lib/integrations/hooks/integration_context'; +import { ONBOARDING_PATH } from '../../../../../../../common/constants'; + +const IntegrationsCardGridTabs: RenderChildrenType = ({ + allowedIntegrations, + availablePackagesResult, + checkCompleteMetadata = DEFAULT_CHECK_COMPLETE_METADATA, + selectedTabResult, +}) => { + const { available: list } = useEnhancedIntegrationCards(allowedIntegrations, { + showInstallationStatus: true, + showCompressedInstallationStatus: true, + returnPath: ONBOARDING_PATH, + }); + const { installedIntegrationsCount, isAgentRequired } = checkCompleteMetadata; + + return ( + + ); +}; + +export const IntegrationsCard: OnboardingCardComponent = React.memo( + ({ checkCompleteMetadata }) => { + const { + spaceId, + telemetry: { trackLinkClick }, + } = useOnboardingContext(); + + const selectedTabResult = useSelectedTab({ + spaceId, + integrationTabs: INTEGRATION_TABS, + }); + + if (!checkCompleteMetadata) { + return ; + } + + return ( + + + + + + ); + } +); +IntegrationsCard.displayName = 'IntegrationsCard'; + +// eslint-disable-next-line import/no-default-export +export default IntegrationsCard; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_check_complete.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_check_complete.ts new file mode 100644 index 0000000000000..70009d0ffc40f --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/integrations_search_ai_lake/integrations_check_complete.ts @@ -0,0 +1,46 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { IntegrationCardMetadata } from '../../../../../../common/lib/integrations/types'; +import type { StartServices } from '../../../../../../types'; +import type { OnboardingCardCheckComplete } from '../../../../../types'; +import { + getCompleteBadgeText, + getAgentsData, + getIntegrationList, +} from '../../common/integrations/integrations_check_complete'; +import { INTEGRATION_TABS } from './integration_tabs_configs'; + +export const checkIntegrationsCardComplete: OnboardingCardCheckComplete< + IntegrationCardMetadata +> = async (services: StartServices) => { + const { isComplete, installedPackages } = await getIntegrationList( + services, + INTEGRATION_TABS[0].featuredCardIds + ); + + const { isAgentRequired } = await getAgentsData(services, isComplete); + + if (!isComplete) { + return { + isComplete, + metadata: { + installedIntegrationsCount: 0, + isAgentRequired: false, + }, + }; + } + + return { + isComplete, + completeBadgeText: getCompleteBadgeText(installedPackages.length), + metadata: { + installedIntegrationsCount: installedPackages.length, + isAgentRequired, + }, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/constants.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/constants.ts new file mode 100644 index 0000000000000..69fef7bf2a720 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/constants.ts @@ -0,0 +1,12 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { CardSelectorListItem } from '../../common/card_selector_list'; +import { KNOWLEDGE_SOURCE_CARD_ITEMS } from './knowledge_source_card_config'; + +export const DEFAULT_KNOWLEDGE_SOURCE_CARD_ITEM_SELECTED: CardSelectorListItem = + KNOWLEDGE_SOURCE_CARD_ITEMS[0]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/custom_rules.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/custom_rules.png new file mode 100644 index 0000000000000000000000000000000000000000..d9272d3ad908b9dcf6bd10520fd90d32515a8d3d GIT binary patch literal 152425 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 O4HwTr{=l8}x%WTj$FbJ{ literal 0 HcmV?d00001 diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/rules_icon.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/images/rules_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..89f8732bbd56da80aef22c54074632021b243c32 GIT binary patch literal 1251 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9EO-XP4l)OOlRpde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N+zL+@$B+ufw{zlyq#Ol~RkKa<`k9iKkhefx zz+d61y@`LsRHd-EBf=f(0`Wm@HXd<2Zflj)8T=QRUr_##GE>8PW~4*%ox3_4oXvgy zuUd0yZfe)7{FyJ`{bXrKlwji(e7@{yj3aBTz5U7~RkfFVF8!W(V8J0Kg~LRk$!&&8 zvvvJWU*CQ^@v*kFd{^ewb=R}n%?;FgS{ZJBT|0A1kUPWnnJa!zQUCt_;O+QxwQKeX zCFRSsDC}o>nUJ?Uc4bEnm<`ra~u z``Lxte@;x9bvf{#nBmhed-r!`dSpswX^+K!)o}m zy8cHyP{{o8goWx24YL=V)_xr=*>UpKtK~N*EEE%Hp2wi2)BD9pKv@4O-Ag4n%U<8ijBZc0`uM6N(D{>tTlnVLzZj0O7%wSZ z@G0)M;{G|>CI5ovy{vLN@_+W0GmN|fEh$p3!Z$N?vYt8P`n9AdN4B6WNOSf&b)L?d zhtIIOD8_coT(`Wgsyt!CpS`JZ+0PgbO<3P@_VVi6Xa2wbZtwj3x9|R3-ybL68;Y&# zs7n8P?zPG0C)-y~jR-lFf2-6iGuD>-zl=ky%^lyVufH1Y>@x4!_=&Z&RinIKjVbS# zB67kL{+TLdYhEu2Yr)B08xFI_ z%DdQaUO)I<(!6Mg;5jgR3=A9lx&I`x0=a8FT^vIy7~jsdEfx+JX*<7Do8R;KpQetP zA}^UzXR%D5$s#me^FY{S7hi?_44=6<&KMY(Xn!`GVkFUa$-(*cq$bI4>MIs7EV+An zZ+7>?$L}`9hd=kIo+oKqT`vA{-=(|7=WBDBIhqtEG`jjpwe;^=_xSHUeL;Z@KJS+^ zvmQwJWt7dq5wYz1Vh06R9tAfd(6RvQS=`Oh)yqX5y|=n}?&I6r{7!4X`u%_N^7sY? zofgKhipvrEIi&m~8#nv=d|76hU;O)7v&VXt?7#MzW*Mgr)N$>q%YLtvbz}P@@%>)q zg+{fR>sg;|Fgw7NVfP_AK(Jc3T=<4mK=>cYm7M19;~AE1Fi9vVzoM&V=hnWy#^k|M z>2kSw3~d`s7?#g9NUz8_v$I5JUft*OJMZ`1p5C|oxao_yd6J%!V%XX?7$2znwOM|L z#LFGUoAwu0t-c;Df4=Wq_3Oa@cV;f^Q_r5MHlzAh7T1h}=NM{kpPaFN?T=+!&YZjz zp&TS^(lb|GB~@$X&ja~fK_8l{6>jPZm3a9w?06*Q%xceU{6lg=!{@}6j}q9q?k8K7 z$X!41&hgB7hL+Il5BFE?mveA@vt1!MLv+SQgR?sdOp?^&gbhp%#2(#KcU9A-HYMCT zKF;`zbX};xBgbPOc{S?zzwcb3oWN$yoV0en1-sAk%^tG#XV+Dn-MP;2_A0it4aN^% zR~Vg2iefRC$J<(v^x#c|TZ(ZARvqEx_-@Aoe zi+-$?T7B+G%ggU`&gVxyp74s@;#0y-#bTYAd3yur_O6+9#m~^~gRiW5gJaUNY5IR< zTy}NsW8q1RY`c};7`B0rw{gaw;~y{QC+_Ck@OxLg?76BN)qiTgozXLB{pzIiwm@l3 z=<54twMku3j9f2 zEgSMfH{;E%LYG{Z}Hfcj+Bz*YAp6uuK)gJ)#v&@kCxXzPjZ<2 ztL7U|#5a?o*jd-yYpXt|`YT^Q*lxFKg)Vc`MV~~=U)^R>6j}3n@vUiYdcEnjA-6A`So(2I ze^#{APLp|GPrhl>%a+=yIqQ=9R^8qhx&6OZY+E|<^dnS#-TAebralHn*MG^(C(a^a zUdppmE8k`;?5=#z{^N@JUBT>NshwPQUp-G>Fk3ot^@HH~-(NRuTQYI=Bk%eBVoA9k zV2{jS+cMp@H)i^>uP1AxfMGi|S!$-0sNrJHT91D(d}DV=TwoFMRe@*bWdT-IGcTR6 zTd~+*k$K0Gi93Vb + import( + /* webpackChunkName: "onboarding_knowledge_source_card" */ + './knowledge_source_card' + ) + ), + checkComplete: checkKnowledgeSourceComplete, + capabilitiesRequired: [`${SECURITY_FEATURE_ID}.external_detections`], +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.test.tsx new file mode 100644 index 0000000000000..624e55d7742fd --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.test.tsx @@ -0,0 +1,79 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { render } from '@testing-library/react'; +import { TestProviders } from '../../../../../../common/mock'; +import { OnboardingContextProvider } from '../../../../onboarding_context'; +import KnowledgeSourceCard from './knowledge_source_card'; +import { ExperimentalFeaturesService } from '../../../../../../common/experimental_features_service'; + +jest.mock('../../../../../../common/experimental_features_service', () => ({ + ExperimentalFeaturesService: { get: jest.fn() }, +})); +const mockExperimentalFeatures = ExperimentalFeaturesService.get as jest.Mock; + +const mockSetComplete = jest.fn(); +const mockSetExpandedCardId = jest.fn(); +const mockIsCardComplete = jest.fn(); +const mockIsCardAvailable = jest.fn(); + +const props = { + setComplete: mockSetComplete, + checkComplete: jest.fn(), + isCardComplete: mockIsCardComplete, + setExpandedCardId: mockSetExpandedCardId, + isExpanded: true, + isCardAvailable: jest.fn(), +}; + +describe('KnowledgeSourceCard', () => { + beforeEach(() => { + mockExperimentalFeatures.mockReturnValue({}); + jest.clearAllMocks(); + }); + + it('description should be in the document', () => { + const { getByTestId } = render( + + + + + + ); + + expect(getByTestId('knowledgeSourceCardDescription')).toBeInTheDocument(); + }); + + it('card callout should not be rendered if integrations card is not available', () => { + mockIsCardAvailable.mockReturnValueOnce(false); + + const { queryByText } = render( + + + + + + ); + + expect(queryByText('To add knowledge sources add integrations first.')).not.toBeInTheDocument(); + }); + + it('renders an enabled button if integrations card is complete', () => { + mockIsCardAvailable.mockReturnValueOnce(true); + mockIsCardComplete.mockReturnValueOnce(true); + + const { getByTestId } = render( + + + + + + ); + + expect(getByTestId('knowledgeSourceCardButton').querySelector('button')).not.toBeDisabled(); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.tsx new file mode 100644 index 0000000000000..057fabfac5ce1 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card.tsx @@ -0,0 +1,128 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiSpacer } from '@elastic/eui'; +import { SecurityPageName } from '@kbn/security-solution-navigation'; +import { KNOWLEDGE_BASE_TAB } from '@kbn/elastic-assistant/impl/assistant/settings/const'; +import { SecuritySolutionLinkButton } from '../../../../../../common/components/links'; +import { OnboardingCardId } from '../../../../../constants'; +import type { OnboardingCardComponent } from '../../../../../types'; +import { OnboardingCardContentAssetPanel } from '../../common/card_content_asset_panel'; +import { CardCallOut } from '../../common/card_callout'; + +import { CardSubduedText } from '../../common/card_subdued_text'; +import * as i18n from './translations'; +import type { CardSelectorListItem } from '../../common/card_selector_list'; +import { CardSelectorList } from '../../common/card_selector_list'; +import { useOnboardingContext } from '../../../../onboarding_context'; +import { + KNOWLEDGE_SOURCE_CARD_ITEMS_BY_ID, + KNOWLEDGE_SOURCE_CARD_ITEMS, +} from './knowledge_source_card_config'; +import { DEFAULT_KNOWLEDGE_SOURCE_CARD_ITEM_SELECTED } from './constants'; +import type { CardSelectorAssetListItem } from '../../types'; +import { useStoredSelectedCardItemId } from '../../../../hooks/use_stored_state'; + +export const KnowledgeSourceCard: OnboardingCardComponent = ({ + isCardComplete, + setExpandedCardId, + isCardAvailable, +}) => { + const { spaceId } = useOnboardingContext(); + + const [selectedRuleId, setSelectedRuleId] = useStoredSelectedCardItemId( + 'knowledgeSource', + spaceId, + DEFAULT_KNOWLEDGE_SOURCE_CARD_ITEM_SELECTED.id + ); + const selectedCardItem = useMemo( + () => KNOWLEDGE_SOURCE_CARD_ITEMS_BY_ID[selectedRuleId], + [selectedRuleId] + ); + + const isIntegrationsCardComplete = useMemo( + () => isCardComplete(OnboardingCardId.integrationsSearchAILake), + [isCardComplete] + ); + + const isIntegrationsCardAvailable = useMemo( + () => isCardAvailable(OnboardingCardId.integrationsSearchAILake), + [isCardAvailable] + ); + + const expandIntegrationsCard = useCallback(() => { + setExpandedCardId(OnboardingCardId.integrationsSearchAILake, { scroll: true }); + }, [setExpandedCardId]); + + const onSelectCard = useCallback( + (item: CardSelectorListItem) => { + setSelectedRuleId(item.id); + }, + [setSelectedRuleId] + ); + + return ( + + + + + {i18n.KNOWLEDGE_SOURCE_CARD_DESCRIPTION} + + + + {isIntegrationsCardAvailable && !isIntegrationsCardComplete && ( + <> + + + + + {i18n.KNOWLEDGE_SOURCE_CARD_CALLOUT_INTEGRATIONS_BUTTON} + + + + + + + } + /> + + )} + + + + {i18n.KNOWLEDGE_SOURCE_CARD_ADD_BUTTON} + + + + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default KnowledgeSourceCard; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card_config.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card_config.ts new file mode 100644 index 0000000000000..8b20c6e8377cb --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_card_config.ts @@ -0,0 +1,63 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; +import { KnowledgeSourceCardItemId } from './types'; +import type { CardSelectorAssetListItem } from '../../types'; +import { CardAssetType } from '../../types'; + +export const KNOWLEDGE_SOURCE_CARD_ITEMS: CardSelectorAssetListItem[] = [ + { + id: KnowledgeSourceCardItemId.install, + title: i18n.translate('xpack.securitySolution.onboarding.knowledgeSourceCards.install.title', { + defaultMessage: 'How to add knowledge sources', + }), + description: i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCards.install.description', + { + defaultMessage: 'Connect internal data to enrich the AI Assistant’s context', + } + ), + // FIXME: update the video + asset: { + type: CardAssetType.video, + source: 'https://ela.st/ai4dsoc-gs1', + alt: i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCards.install.description', + { + defaultMessage: 'Connect internal data to enrich the AI Assistant’s context', + } + ), + }, + }, + { + id: KnowledgeSourceCardItemId.create, + title: i18n.translate('xpack.securitySolution.onboarding.knowledgeSourceCards.create.title', { + defaultMessage: 'Leveraging knowledge sources in a cyber context', + }), + description: i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCards.create.description', + { + defaultMessage: 'Use custom data to improve threat detection and response', + } + ), + asset: { + type: CardAssetType.video, + source: 'http://ela.st/ai4dsoc-gs2', + alt: i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCards.create.description', + { + defaultMessage: 'Use custom data to improve threat detection and response', + } + ), + }, + }, +]; + +export const KNOWLEDGE_SOURCE_CARD_ITEMS_BY_ID = Object.fromEntries( + KNOWLEDGE_SOURCE_CARD_ITEMS.map((card) => [card.id, card]) +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_check_complete.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_check_complete.ts new file mode 100644 index 0000000000000..7d6507b144885 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/knowledge_source_check_complete.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getKnowledgeBaseStatus } from '@kbn/elastic-assistant/impl/assistant/api/knowledge_base/api'; +import type { OnboardingCardCheckComplete } from '../../../../../types'; +import { KNOWLEDGE_SOURCE_CARD_CHECK_COMPLETE_ERROR_MESSAGE } from './translations'; + +export const checkKnowledgeSourceComplete: OnboardingCardCheckComplete = async ({ + http, + notifications: { toasts }, +}) => { + const kbStatus = await getKnowledgeBaseStatus({ + http, + }); + if (kbStatus instanceof Error) { + toasts.addError(kbStatus, { title: KNOWLEDGE_SOURCE_CARD_CHECK_COMPLETE_ERROR_MESSAGE }); + return { + isComplete: false, + }; + } + return { + isComplete: (kbStatus?.elser_exists && kbStatus?.security_labs_exists) ?? false, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/translations.ts new file mode 100644 index 0000000000000..168650e005e46 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/translations.ts @@ -0,0 +1,58 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const KNOWLEDGE_SOURCE_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCard.title', + { + defaultMessage: 'Add knowledge sources', + } +); + +export const KNOWLEDGE_SOURCE_CARD_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCard.description', + { + defaultMessage: + 'Integrate knowledge from third-party sources to use with the AI Assistant during incident response.', + } +); + +export const KNOWLEDGE_SOURCE_CARD_CALLOUT_INTEGRATIONS_TEXT = i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCard.calloutIntegrationsText', + { + defaultMessage: 'To add knowledge sources add integrations first.', + } +); + +export const KNOWLEDGE_SOURCE_CARD_CALLOUT_INTEGRATIONS_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCard.calloutIntegrationsButton', + { + defaultMessage: 'Add integrations step', + } +); + +export const KNOWLEDGE_SOURCE_CARD_ADD_BUTTON = i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCard.addButton', + { + defaultMessage: 'Add knowledge sources', + } +); + +export const KNOWLEDGE_SOURCE_CARD_CHECK_COMPLETE_ERROR_MESSAGE = i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCard.checkCompleteErrorMessage', + { + defaultMessage: 'Failed to check Card knowledge source completion.', + } +); + +export const KNOWLEDGE_SOURCE_CARD_STEP_SELECTOR_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.knowledgeSourceCard.stepSelectorTitle', + { + defaultMessage: 'More detail on how to use knowledge sources', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/types.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/types.ts new file mode 100644 index 0000000000000..2b3d103298a38 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/knowledge_source/types.ts @@ -0,0 +1,11 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export enum KnowledgeSourceCardItemId { + install = 'install', + create = 'create', +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/connectors_check_complete.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/connectors_check_complete.ts new file mode 100644 index 0000000000000..0270cbeec873e --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/connectors_check_complete.ts @@ -0,0 +1,35 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { i18n } from '@kbn/i18n'; +import type { OnboardingCardCheckComplete } from '../../../../../types'; +import { loadAiConnectors } from '../../common/connectors/ai_connectors'; +import { getConnectorsAuthz } from '../../common/connectors/authz'; +import type { AIConnectorCardMetadata } from './types'; + +const completeBadgeText = (count: number) => + i18n.translate('xpack.securitySolution.onboarding.llmConnector.badge.completeText', { + defaultMessage: '{count} AI {count, plural, one {connector} other {connectors}} added', + values: { count }, + }); + +export const checkAiConnectorsCardComplete: OnboardingCardCheckComplete< + AIConnectorCardMetadata +> = async ({ http, application }) => { + const authz = getConnectorsAuthz(application.capabilities); + + if (!authz.canReadConnectors) { + return { isComplete: false, metadata: { connectors: [], ...authz } }; + } + + const aiConnectors = await loadAiConnectors(http); + + return { + isComplete: aiConnectors.length > 0, + completeBadgeText: completeBadgeText(aiConnectors.length), + metadata: { connectors: aiConnectors, ...authz }, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/index.ts new file mode 100644 index 0000000000000..7f1c867396ed7 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/index.ts @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { AssistantIcon } from '@kbn/ai-assistant-icon'; +import type { OnboardingCardConfig } from '../../../../../types'; +import { OnboardingCardId } from '../../../../../constants'; +import { AI_CONNECTOR_CARD_TITLE } from './translations'; +import type { AIConnectorCardMetadata } from './types'; +import { SECURITY_FEATURE_ID } from '../../../../../../../common/constants'; +import { checkAssistantCardComplete } from '../../common/connectors/assistant_check_complete'; + +export const llmConnectorCardConfig: OnboardingCardConfig = { + id: OnboardingCardId.searchAiLakeLLM, + title: AI_CONNECTOR_CARD_TITLE, + icon: AssistantIcon, + Component: React.lazy( + () => + import( + /* webpackChunkName: "onboarding_search_ai_lake_llm_connector_card" */ + './llm_connector_card' + ) + ), + checkComplete: checkAssistantCardComplete, + capabilitiesRequired: [`${SECURITY_FEATURE_ID}.external_detections`], +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/llm_connector_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/llm_connector_card.tsx new file mode 100644 index 0000000000000..4c5eae8bec468 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/llm_connector_card.tsx @@ -0,0 +1,126 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React, { useCallback, useMemo } from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; +import { CenteredLoadingSpinner } from '../../../../../../common/components/centered_loading_spinner'; +import { useKibana } from '../../../../../../common/lib/kibana/kibana_react'; +import type { OnboardingCardComponent } from '../../../../../types'; +import * as i18n from './translations'; +import { OnboardingCardContentPanel } from '../../common/card_content_panel'; +import { ConnectorCards } from '../../common/connectors/connector_cards'; +import { CardSubduedText } from '../../common/card_subdued_text'; +import { ConnectorsMissingPrivilegesCallOut } from '../../common/connectors/missing_privileges'; +import type { AIConnector } from '../../common/connectors/types'; +import type { AIConnectorCardMetadata } from './types'; +import { useDefinedLocalStorage } from '../../../../../../common/lib/integrations/hooks/use_stored_state'; + +const LlmPerformanceMatrixDocsLink = React.memo<{ text: string }>(({ text }) => { + const { llmPerformanceMatrix } = useKibana().services.docLinks.links.securitySolution; + return ( + + {text} + + ); +}); +LlmPerformanceMatrixDocsLink.displayName = 'LlmPerformanceMatrixDocsLink'; + +const SiemMigrationDocsLink = React.memo<{ text: string }>(({ text }) => { + const { siemMigrations } = useKibana().services.docLinks.links.securitySolution; + return ( + + {text} + + ); +}); +SiemMigrationDocsLink.displayName = 'SiemMigrationDocsLink'; + +export const AIConnectorCard: OnboardingCardComponent = ({ + checkCompleteMetadata, + checkComplete, + setComplete, +}) => { + const { siemMigrations } = useKibana().services; + const [storedConnectorId, setStoredConnectorId] = useDefinedLocalStorage( + siemMigrations.rules.connectorIdStorage.key, + undefined + ); + const setSelectedConnector = useCallback( + (connector: AIConnector) => { + setStoredConnectorId(connector.id); + setComplete(true); + siemMigrations.rules.telemetry.reportConnectorSelected({ connector }); + }, + [setComplete, setStoredConnectorId, siemMigrations] + ); + + const isInferenceConnector = useMemo(() => { + if (!checkCompleteMetadata?.connectors?.length || !storedConnectorId) { + return false; + } + const connector = checkCompleteMetadata.connectors.find((c) => c.id === storedConnectorId); + return connector?.actionTypeId === '.inference' ?? false; + }, [checkCompleteMetadata, storedConnectorId]); + + if (!checkCompleteMetadata) { + return ( + + + + ); + } + + const { connectors, canExecuteConnectors, canCreateConnectors } = checkCompleteMetadata; + + return ( + + {canExecuteConnectors ? ( + + + + {i18n.AI_CONNECTOR_CARD_DESCRIPTION_START} + {isInferenceConnector ? ( + , + docsLink: , + }} + /> + ) : ( + , + docsLink: , + }} + /> + )} + + + + + + + ) : ( + + )} + + ); +}; + +// eslint-disable-next-line import/no-default-export +export default AIConnectorCard; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/translations.ts new file mode 100644 index 0000000000000..a797896040b0b --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/translations.ts @@ -0,0 +1,43 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { i18n } from '@kbn/i18n'; + +export const AI_CONNECTOR_CARD_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.llmConnector.title', + { + defaultMessage: 'Configure LLMs', + } +); + +export const AI_CONNECTOR_CARD_DESCRIPTION_START = i18n.translate( + 'xpack.securitySolution.onboarding.llmConnector.descriptionStart', + { defaultMessage: 'This feature relies on an AI connector for rule translation. ' } +); + +export const AI_CONNECTOR_CARD_DESCRIPTION_INFERENCE_CONNECTOR = i18n.translate( + 'xpack.securitySolution.onboarding.llmConnector.descriptionInferenceConnector', + { + defaultMessage: + 'The Elastic-provided connector is selected by default. You can configure another connector and model if you prefer. ', + } +); + +export const LLM_MATRIX_LINK = i18n.translate( + 'xpack.securitySolution.onboarding.llmConnector.llmMatrixLink', + { defaultMessage: 'model performance' } +); + +export const AI_POWERED_MIGRATIONS_LINK = i18n.translate( + 'xpack.securitySolution.onboarding.llmConnector.siemMigrationLink', + { defaultMessage: 'AI-powered SIEM migration' } +); + +export const LEARN_MORE_LINK = i18n.translate( + 'xpack.securitySolution.onboarding.llmConnector.learnMoreLink', + { defaultMessage: 'Learn more' } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/types.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/types.ts new file mode 100644 index 0000000000000..c736760b541be --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/search_ai_lake/llm/types.ts @@ -0,0 +1,13 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ActionConnector } from '@kbn/alerts-ui-shared'; +import type { ConnectorsAuthz } from '../../common/connectors/authz'; + +export interface AIConnectorCardMetadata extends ConnectorsAuthz { + connectors: ActionConnector[]; +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx index 4fa8e2e1c7320..4c5eae8bec468 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/ai_connector_card.tsx @@ -10,7 +10,6 @@ import { EuiFlexGroup, EuiFlexItem, EuiLink } from '@elastic/eui'; import { FormattedMessage } from '@kbn/i18n-react'; import { CenteredLoadingSpinner } from '../../../../../../common/components/centered_loading_spinner'; import { useKibana } from '../../../../../../common/lib/kibana/kibana_react'; -import { useDefinedLocalStorage } from '../../../../hooks/use_stored_state'; import type { OnboardingCardComponent } from '../../../../../types'; import * as i18n from './translations'; import { OnboardingCardContentPanel } from '../../common/card_content_panel'; @@ -19,6 +18,7 @@ import { CardSubduedText } from '../../common/card_subdued_text'; import { ConnectorsMissingPrivilegesCallOut } from '../../common/connectors/missing_privileges'; import type { AIConnector } from '../../common/connectors/types'; import type { AIConnectorCardMetadata } from './types'; +import { useDefinedLocalStorage } from '../../../../../../common/lib/integrations/hooks/use_stored_state'; const LlmPerformanceMatrixDocsLink = React.memo<{ text: string }>(({ text }) => { const { llmPerformanceMatrix } = useKibana().services.docLinks.links.securitySolution; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_context.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_context.tsx index 864804e0e4d40..6015b3905a776 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_context.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_context.tsx @@ -19,6 +19,7 @@ import type { } from '../types'; import { onboardingConfig } from '../config'; import { useOnboardingTelemetry, type OnboardingTelemetry } from './onboarding_telemetry'; +import type { TrackLinkClick } from './lib/telemetry'; export type OnboardingConfig = Map; export interface OnboardingContextValue { @@ -28,18 +29,19 @@ export interface OnboardingContextValue { } const OnboardingContext = createContext(null); -export const OnboardingContextProvider: React.FC> = - React.memo(({ children, spaceId }) => { - const config = useFilteredConfig(); - const telemetry = useOnboardingTelemetry(); +export const OnboardingContextProvider: React.FC< + PropsWithChildren<{ spaceId: string; trackLinkClick?: TrackLinkClick }> +> = React.memo(({ children, spaceId, trackLinkClick }) => { + const config = useFilteredConfig(); + const telemetry = useOnboardingTelemetry({ trackLinkClick }); - const value = useMemo( - () => ({ spaceId, telemetry, config }), - [spaceId, telemetry, config] - ); + const value = useMemo( + () => ({ spaceId, telemetry, config }), + [spaceId, telemetry, config] + ); - return {children}; - }); + return {children}; +}); OnboardingContextProvider.displayName = 'OnboardingContextProvider'; export const useOnboardingContext = () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.test.tsx index 2b663add12248..f7e4c9de279a0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.test.tsx @@ -7,11 +7,12 @@ import React from 'react'; import { render } from '@testing-library/react'; -import { trackOnboardingLinkClick } from '../lib/telemetry'; import { FooterLinkItem } from './onboarding_footer'; import { OnboardingFooterLinkItemId, TELEMETRY_FOOTER_LINK } from './constants'; +import { mockTrackLinkClick } from '../__mocks__/mocks'; jest.mock('../lib/telemetry'); +jest.mock('../onboarding_context'); describe('OnboardingFooterComponent', () => { beforeEach(() => { @@ -45,7 +46,7 @@ describe('OnboardingFooterComponent', () => { ); getByTestId('footerLinkItem').click(); - expect(trackOnboardingLinkClick).toHaveBeenCalledWith( + expect(mockTrackLinkClick).toHaveBeenCalledWith( `${TELEMETRY_FOOTER_LINK}_${OnboardingFooterLinkItemId.documentation}` ); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.tsx index a5a5c06254b73..e7c91c0de94a5 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_footer/onboarding_footer.tsx @@ -18,9 +18,9 @@ import { } from '@elastic/eui'; import { useFooterStyles } from './onboarding_footer.styles'; import { useFooterItems } from './footer_items'; -import { trackOnboardingLinkClick } from '../lib/telemetry'; import type { OnboardingFooterLinkItemId } from './constants'; import { TELEMETRY_FOOTER_LINK } from './constants'; +import { useOnboardingContext } from '../onboarding_context'; export const OnboardingFooter = React.memo(() => { const styles = useFooterStyles(); @@ -52,9 +52,13 @@ interface FooterLinkItemProps { export const FooterLinkItem = React.memo( ({ id, title, icon, description, link }) => { + const { + telemetry: { trackLinkClick }, + } = useOnboardingContext(); + const onClickWithReport = useCallback(() => { - trackOnboardingLinkClick(`${TELEMETRY_FOOTER_LINK}_${id}`); - }, [id]); + trackLinkClick?.(`${TELEMETRY_FOOTER_LINK}_${id}`); + }, [id, trackLinkClick]); return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.test.tsx index febc8431627b8..b722f54630036 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.test.tsx @@ -9,9 +9,10 @@ import React from 'react'; import { render } from '@testing-library/react'; import { LinkCard } from './link_card'; import { OnboardingHeaderCardId, TELEMETRY_HEADER_CARD } from '../../constants'; -import { trackOnboardingLinkClick } from '../../../lib/telemetry'; +import { mockTrackLinkClick } from '../../../__mocks__/mocks'; jest.mock('../../../lib/telemetry'); +jest.mock('../../../onboarding_context'); describe('DataIngestionHubHeaderCardComponent', () => { beforeEach(() => { @@ -46,7 +47,7 @@ describe('DataIngestionHubHeaderCardComponent', () => { ); getByTestId('headerCardLink').click(); - expect(trackOnboardingLinkClick).toHaveBeenCalledWith( + expect(mockTrackLinkClick).toHaveBeenCalledWith( `${TELEMETRY_HEADER_CARD}_${OnboardingHeaderCardId.demo}` ); }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.tsx index 71ab7b007b35f..ea7c37b48087c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.tsx @@ -8,10 +8,10 @@ import React, { useCallback } from 'react'; import { EuiCard, EuiImage, EuiLink, EuiSpacer, EuiText, EuiTitle } from '@elastic/eui'; import classNames from 'classnames'; -import { trackOnboardingLinkClick } from '../../../lib/telemetry'; import { useCardStyles } from './link_card.styles'; import type { OnboardingHeaderCardId } from '../../constants'; import { TELEMETRY_HEADER_CARD } from '../../constants'; +import { useOnboardingContext } from '../../../onboarding_context'; interface LinkCardProps { id: OnboardingHeaderCardId; @@ -28,11 +28,13 @@ export const LinkCard: React.FC = React.memo( ({ id, icon, title, description, onClick, href, target, linkText }) => { const cardStyles = useCardStyles(); const cardClassName = classNames(cardStyles, 'headerCard'); - + const { + telemetry: { trackLinkClick }, + } = useOnboardingContext(); const onClickWithReport = useCallback(() => { - trackOnboardingLinkClick(`${TELEMETRY_HEADER_CARD}_${id}`); + trackLinkClick?.(`${TELEMETRY_HEADER_CARD}_${id}`); onClick?.(); - }, [id, onClick]); + }, [id, onClick, trackLinkClick]); return ( { const currentUser = useCurrentUser(); @@ -28,6 +30,17 @@ export const OnboardingHeader = React.memo(() => { // Full name could be null, user name should always exist const currentUserName = currentUser?.fullName || currentUser?.username; + const { capabilities } = useKibana().services.application; + + const filteredHeaderConfig = useMemo(() => { + return ( + headerConfig.find( + (item) => + !item.capabilitiesRequired || + (item.capabilitiesRequired && hasCapabilities(capabilities, item.capabilitiesRequired)) + ) ?? defaultHeaderConfig + ); + }, [capabilities]); return ( <> @@ -35,22 +48,22 @@ export const OnboardingHeader = React.memo(() => { {currentUserName && ( - {i18n.ONBOARDING_PAGE_TITLE(currentUserName)} + {filteredHeaderConfig.getTitle(currentUserName)} )} -

{i18n.ONBOARDING_PAGE_SUBTITLE}

+

{filteredHeaderConfig.subTitle}

- {i18n.ONBOARDING_PAGE_DESCRIPTION} + {filteredHeaderConfig.description} diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header_configs.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header_configs.ts new file mode 100644 index 0000000000000..636ed97971fa2 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header_configs.ts @@ -0,0 +1,33 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { SECURITY_FEATURE_ID } from '../../../../common/constants'; +import type { OnboardingConfigAvailabilityProps } from '../../types'; +import * as i18n from './translations'; + +interface HeaderConfig { + getTitle: (name: string) => string; + subTitle: string; + description: string; + capabilitiesRequired?: OnboardingConfigAvailabilityProps['capabilitiesRequired']; +} + +export const defaultHeaderConfig: HeaderConfig = { + getTitle: i18n.ONBOARDING_PAGE_TITLE, + subTitle: i18n.ONBOARDING_PAGE_SUBTITLE, + description: i18n.ONBOARDING_PAGE_DESCRIPTION, + capabilitiesRequired: [`${SECURITY_FEATURE_ID}.detections`], +}; + +export const headerConfig: HeaderConfig[] = [ + defaultHeaderConfig, + { + getTitle: i18n.ONBOARDING_PAGE_TITLE, + subTitle: i18n.ONBOARDING_SEARCH_AI_LAKE_PAGE_TITLE, + description: i18n.ONBOARDING_SEARCH_AI_LAKE_PAGE_SUB_DESCRIPTION, + capabilitiesRequired: [`${SECURITY_FEATURE_ID}.external_detections`], + }, +]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts index 90f5db2d77b30..6b3b102cc6fec 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/translations.ts @@ -26,3 +26,17 @@ export const ONBOARDING_PAGE_DESCRIPTION = i18n.translate( defaultMessage: `A SIEM with AI-driven security analytics, XDR and Cloud Security.`, } ); + +export const ONBOARDING_SEARCH_AI_LAKE_PAGE_TITLE = i18n.translate( + 'xpack.securitySolution.onboarding.searchAILake.title', + { + defaultMessage: `Welcome to Elastic’s AI for the SOC`, + } +); + +export const ONBOARDING_SEARCH_AI_LAKE_PAGE_SUB_DESCRIPTION = i18n.translate( + 'xpack.securitySolution.onboarding.searchAILake.subDescription', + { + defaultMessage: `Empowering SOCs for faster threat detection, investigation, and response.`, + } +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.test.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.test.ts index aed608186d64c..d8c9bcc388a92 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.test.ts @@ -24,6 +24,8 @@ const telemetryMock = { reportEvent: jest.fn() }; services: { telemetry: telemetryMock }, }); +const mockTrackLinkClick = jest.fn(); + describe('useOnboardingTelemetry', () => { beforeEach(() => { jest.clearAllMocks(); @@ -31,7 +33,9 @@ describe('useOnboardingTelemetry', () => { describe('when opening a card', () => { it('should report card open event on default topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardOpen('testCard' as OnboardingCardId); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( @@ -41,7 +45,9 @@ describe('useOnboardingTelemetry', () => { }); it('should report card open event on another topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardOpen('testCard2' as OnboardingCardId); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( OnboardingHubEventTypes.OnboardingHubStepOpen, @@ -50,7 +56,9 @@ describe('useOnboardingTelemetry', () => { }); it('should report card auto open event', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardOpen('testCard' as OnboardingCardId, { auto: true }); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( OnboardingHubEventTypes.OnboardingHubStepOpen, @@ -61,7 +69,9 @@ describe('useOnboardingTelemetry', () => { describe('when completing a card', () => { it('should report card complete event on the default topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardComplete('testCard' as OnboardingCardId); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( @@ -71,7 +81,9 @@ describe('useOnboardingTelemetry', () => { }); it('should report card complete event on the another topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardComplete('testCard2' as OnboardingCardId); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( @@ -81,7 +93,9 @@ describe('useOnboardingTelemetry', () => { }); it('should report card auto complete event', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardComplete('testCard' as OnboardingCardId, { auto: true }); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( @@ -93,7 +107,9 @@ describe('useOnboardingTelemetry', () => { describe('when clicking a card link', () => { it('should report card link clicked event on the default topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardLinkClicked('testCard' as OnboardingCardId, 'link1'); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( @@ -103,7 +119,9 @@ describe('useOnboardingTelemetry', () => { }); it('should report card link clicked event on another topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardLinkClicked('testCard2' as OnboardingCardId, 'link1'); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( @@ -115,7 +133,9 @@ describe('useOnboardingTelemetry', () => { describe('when clicking a card selector', () => { it('should report card selector clicked event on the default topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardSelectorClicked('testCard' as OnboardingCardId, 'selector1'); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( @@ -125,7 +145,9 @@ describe('useOnboardingTelemetry', () => { }); it('should report card selector clicked event on another topic', () => { - const { result } = renderHook(useOnboardingTelemetry); + const { result } = renderHook(() => + useOnboardingTelemetry({ trackLinkClick: mockTrackLinkClick }) + ); result.current.reportCardSelectorClicked('testCard2' as OnboardingCardId, 'selector2'); expect(telemetryMock.reportEvent).toHaveBeenCalledWith( diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.ts index 87977e34eebb0..e23369cab7659 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_telemetry.ts @@ -11,15 +11,21 @@ import type { OnboardingCardId } from '../constants'; import { OnboardingTopicId } from '../constants'; import { OnboardingHubEventTypes } from '../../common/lib/telemetry'; import { onboardingConfig } from '../config'; +import type { TrackLinkClick } from './lib/telemetry'; export interface OnboardingTelemetry { reportCardOpen: (cardId: OnboardingCardId, options?: { auto?: boolean }) => void; reportCardComplete: (cardId: OnboardingCardId, options?: { auto?: boolean }) => void; reportCardLinkClicked: (cardId: OnboardingCardId, linkId: string) => void; reportCardSelectorClicked: (cardId: OnboardingCardId, selectorId: string) => void; + trackLinkClick?: TrackLinkClick; } -export const useOnboardingTelemetry = (): OnboardingTelemetry => { +export const useOnboardingTelemetry = ({ + trackLinkClick, +}: { + trackLinkClick?: TrackLinkClick; +}): OnboardingTelemetry => { const { telemetry } = useKibana().services; return useMemo( () => ({ @@ -47,8 +53,9 @@ export const useOnboardingTelemetry = (): OnboardingTelemetry => { selectorId, }); }, + trackLinkClick, }), - [telemetry] + [telemetry, trackLinkClick] ); }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts index bbe7f19cd1c53..20a08d544f875 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts @@ -12,6 +12,7 @@ import { siemMigrationsBodyConfig, } from './components/onboarding_body/body_config'; import type { TopicConfig } from './types'; +import { SECURITY_FEATURE_ID } from '../../common/constants'; export const onboardingConfig: TopicConfig[] = [ { @@ -28,5 +29,6 @@ export const onboardingConfig: TopicConfig[] = [ }), body: siemMigrationsBodyConfig, disabledExperimentalFlagRequired: 'siemMigrationsDisabled', + capabilitiesRequired: `${SECURITY_FEATURE_ID}.advancedInsights`, }, ]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/constants.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/constants.ts index 0e6c94c7ed23f..d9b85015136cf 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/constants.ts @@ -13,6 +13,9 @@ export enum OnboardingTopicId { export enum OnboardingCardId { integrations = 'integrations', + integrationsSearchAILake = 'integrations_search_ai_lake', + knowledgeSource = 'knowledge_source', + searchAiLakeLLM = 'search_ai_lake_llm', dashboards = 'dashboards', rules = 'rules', alerts = 'alerts', From eb5f8844287cee1fdc4dc603494aad52273f850f Mon Sep 17 00:00:00 2001 From: Angela Chuang Date: Tue, 3 Jun 2025 17:59:21 +0100 Subject: [PATCH 2/3] capability --- .../onboarding/components/onboarding_body/cards/alerts/index.ts | 1 - .../components/onboarding_body/cards/assistant/index.ts | 2 +- .../components/onboarding_body/cards/dashboards/index.ts | 2 +- .../components/onboarding_body/cards/integrations/index.ts | 2 +- .../onboarding/components/onboarding_body/cards/rules/index.ts | 1 - .../plugins/security_solution/public/onboarding/config.ts | 1 - 6 files changed, 3 insertions(+), 6 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts index 11dcab9da2043..6d7c2f5e81400 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts @@ -25,5 +25,4 @@ export const alertsCardConfig: OnboardingCardConfig = { './alerts_card' ) ), - capabilitiesRequired: [`${SECURITY_FEATURE_ID}.detections`], }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts index 6c13e8c0f6d40..2c76f5f0987d9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts @@ -27,7 +27,7 @@ export const assistantCardConfig: OnboardingCardConfig = ), checkComplete: checkAssistantCardComplete, capabilitiesRequired: [ - ['securitySolutionAssistant.ai-assistant', `${SECURITY_FEATURE_ID}.detections`], + ['securitySolutionAssistant.ai-assistant'], ], licenseTypeRequired: 'enterprise', }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts index 36184a40eb250..04a9fc864d8d2 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts @@ -25,5 +25,5 @@ export const dashboardsCardConfig: OnboardingCardConfig = { './dashboards_card' ) ), - capabilitiesRequired: [['dashboard_v2.show', `${SECURITY_FEATURE_ID}.detections`]], + capabilitiesRequired: 'dashboard_v2.show', }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts index 490a0b2b882d4..cd97b29c6d17b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts @@ -30,5 +30,5 @@ export const integrationsCardConfig: OnboardingCardConfig Date: Tue, 3 Jun 2025 17:24:42 +0000 Subject: [PATCH 3/3] [CI] Auto-commit changed files from 'node scripts/eslint --no-cache --fix' --- .../components/onboarding_body/cards/alerts/index.ts | 1 - .../components/onboarding_body/cards/assistant/index.ts | 5 +---- .../components/onboarding_body/cards/dashboards/index.ts | 1 - .../components/onboarding_body/cards/integrations/index.ts | 1 - .../components/onboarding_body/cards/rules/index.ts | 1 - .../plugins/security_solution/public/onboarding/config.ts | 1 - 6 files changed, 1 insertion(+), 9 deletions(-) diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts index 6d7c2f5e81400..97eb85636913f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/alerts/index.ts @@ -11,7 +11,6 @@ import { OnboardingCardId } from '../../../../constants'; import { ALERTS_CARD_TITLE } from './translations'; import alertsIcon from './images/alerts_icon.png'; import alertsDarkIcon from './images/alerts_icon_dark.png'; -import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const alertsCardConfig: OnboardingCardConfig = { id: OnboardingCardId.alerts, diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts index 2c76f5f0987d9..f9fc850c98540 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/assistant/index.ts @@ -12,7 +12,6 @@ import { OnboardingCardId } from '../../../../constants'; import { ASSISTANT_CARD_TITLE } from './translations'; import { checkAssistantCardComplete } from '../common/connectors/assistant_check_complete'; import type { AssistantCardMetadata } from './types'; -import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const assistantCardConfig: OnboardingCardConfig = { id: OnboardingCardId.assistant, @@ -26,8 +25,6 @@ export const assistantCardConfig: OnboardingCardConfig = ) ), checkComplete: checkAssistantCardComplete, - capabilitiesRequired: [ - ['securitySolutionAssistant.ai-assistant'], - ], + capabilitiesRequired: [['securitySolutionAssistant.ai-assistant']], licenseTypeRequired: 'enterprise', }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts index 04a9fc864d8d2..5b0a4e44bdcad 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/dashboards/index.ts @@ -11,7 +11,6 @@ import { OnboardingCardId } from '../../../../constants'; import { DASHBOARDS_CARD_TITLE } from './translations'; import dashboardsIcon from './images/dashboards_icon.png'; import dashboardsDarkIcon from './images/dashboards_icon_dark.png'; -import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const dashboardsCardConfig: OnboardingCardConfig = { id: OnboardingCardId.dashboards, diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts index cd97b29c6d17b..806e77e1dc77d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/integrations/index.ts @@ -12,7 +12,6 @@ import { checkIntegrationsCardComplete } from './integrations_check_complete'; import { OnboardingCardId } from '../../../../constants'; import integrationsIcon from '../common/integrations/images/integrations_icon.png'; import integrationsDarkIcon from '../common/integrations/images/integrations_icon_dark.png'; -import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; import type { IntegrationCardMetadata } from '../../../../../common/lib/integrations/types'; export const integrationsCardConfig: OnboardingCardConfig = { diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts index e7ef7c4b2aa1c..59b86df834646 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/rules/index.ts @@ -12,7 +12,6 @@ import { RULES_CARD_TITLE } from './translations'; import { checkRulesComplete } from './rules_check_complete'; import rulesIcon from './images/rules_icon.png'; import rulesDarkIcon from './images/rules_icon_dark.png'; -import { SECURITY_FEATURE_ID } from '../../../../../../common/constants'; export const rulesCardConfig: OnboardingCardConfig = { id: OnboardingCardId.rules, diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts index 3189a819a133f..bbe7f19cd1c53 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts @@ -12,7 +12,6 @@ import { siemMigrationsBodyConfig, } from './components/onboarding_body/body_config'; import type { TopicConfig } from './types'; -import { SECURITY_FEATURE_ID } from '../../common/constants'; export const onboardingConfig: TopicConfig[] = [ {