diff --git a/src/platform/packages/shared/deeplinks/security/deep_links.ts b/src/platform/packages/shared/deeplinks/security/deep_links.ts
index dd18c50add694..0cc59583018c3 100644
--- a/src/platform/packages/shared/deeplinks/security/deep_links.ts
+++ b/src/platform/packages/shared/deeplinks/security/deep_links.ts
@@ -79,6 +79,7 @@ export enum SecurityPageName {
siemMigrationsLanding = 'siem_migrations',
siemMigrationsRules = 'siem_migrations-rules',
siemMigrationsDashboards = 'siem_migrations-dashboards',
+ siemMigrationsManage = 'siem_migrations-manage',
/*
* Warning: Computed values are not permitted in an enum with string valued members
* All threat intelligence page names must match `TIPageId` in x-pack/solutions/security/plugins/threat_intelligence/public/common/navigation/types.ts
diff --git a/x-pack/platform/plugins/private/translations/translations/de-DE.json b/x-pack/platform/plugins/private/translations/translations/de-DE.json
index 6efd5f2a390fd..774159b4ba255 100644
--- a/x-pack/platform/plugins/private/translations/translations/de-DE.json
+++ b/x-pack/platform/plugins/private/translations/translations/de-DE.json
@@ -36763,19 +36763,6 @@
"xpack.securitySolution.onboarding.footer.labs.description": "Einblicke von Sicherheitsforschern",
"xpack.securitySolution.onboarding.footer.labs.link.title": "Weitere Informationen",
"xpack.securitySolution.onboarding.footer.labs.title": "Elastic Security Labs",
- "xpack.securitySolution.onboarding.header.card.demo.description": "Entdecken Sie die Demo, keine Einrichtung erforderlich!",
- "xpack.securitySolution.onboarding.header.card.demo.link.title": "Demo erkunden",
- "xpack.securitySolution.onboarding.header.card.demo.title": "Elastic Security in Aktion erleben",
- "xpack.securitySolution.onboarding.header.card.teammates.description": "Erhöhen Sie die Zusammenarbeit in Ihrer Organisation",
- "xpack.securitySolution.onboarding.header.card.teammates.link.title": "Nutzer hinzufügen",
- "xpack.securitySolution.onboarding.header.card.teammates.title": "Teammitglieder hinzufügen",
- "xpack.securitySolution.onboarding.header.card.video.description": "Machen Sie sich mit Elastic Security vertraut",
- "xpack.securitySolution.onboarding.header.card.video.link.title": "Video ansehen",
- "xpack.securitySolution.onboarding.header.card.video.title": "Sehen Sie sich das 2-minütige Überblicksvideo an",
- "xpack.securitySolution.onboarding.header.card.videoModal.buttonClose": "Schließen",
- "xpack.securitySolution.onboarding.header.card.videoModal.description": "Wir freuen uns, Sie beim Schutz der Daten Ihres Unternehmens zu unterstützen. Hier ist eine Vorschau der Schritte, die Sie zur Einrichtung ausführen sollten.",
- "xpack.securitySolution.onboarding.header.card.videoModal.title": "Willkommen bei Elastic Security!",
- "xpack.securitySolution.onboarding.header.card.videoModal.viewTitle": "Elastic Security",
"xpack.securitySolution.onboarding.integrationsCard.agent.link": "hier",
"xpack.securitySolution.onboarding.integrationsCard.agent.text": "Für eine oder mehrere Ihrer Integrationen wird Elastic Agent benötigt. Elastic Agent hinzufügen",
"xpack.securitySolution.onboarding.integrationsCard.badge.completeText": "{count} {count, plural, one {integration} other {Integrationen}} hinzugefügt",
diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json
index 3515848aa5f58..430b4692b094d 100644
--- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json
+++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json
@@ -37146,19 +37146,6 @@
"xpack.securitySolution.onboarding.footer.labs.description": "Points de vue des chercheurs en sécurité",
"xpack.securitySolution.onboarding.footer.labs.link.title": "En savoir plus",
"xpack.securitySolution.onboarding.footer.labs.title": "Ateliers Elastic Security",
- "xpack.securitySolution.onboarding.header.card.demo.description": "Explorez la démonstration, aucune configuration requise !",
- "xpack.securitySolution.onboarding.header.card.demo.link.title": "Explorer la démonstration",
- "xpack.securitySolution.onboarding.header.card.demo.title": "Découvrez Elastic Security en action",
- "xpack.securitySolution.onboarding.header.card.teammates.description": "Augmentez la collaboration au sein de votre organisation",
- "xpack.securitySolution.onboarding.header.card.teammates.link.title": "Ajouter des utilisateurs",
- "xpack.securitySolution.onboarding.header.card.teammates.title": "Ajouter des coéquipiers",
- "xpack.securitySolution.onboarding.header.card.video.description": "Familiarisez-vous avec Elastic Security",
- "xpack.securitySolution.onboarding.header.card.video.link.title": "Regarder la vidéo",
- "xpack.securitySolution.onboarding.header.card.video.title": "Regardez la vidéo d'aperçu de 2 minutes",
- "xpack.securitySolution.onboarding.header.card.videoModal.buttonClose": "Fermer",
- "xpack.securitySolution.onboarding.header.card.videoModal.description": "Nous sommes ravis de vous aider à protéger les données de votre organisation. Voici un aperçu des différentes étapes à suivre pour la configuration.",
- "xpack.securitySolution.onboarding.header.card.videoModal.title": "Bienvenue dans Elastic Security !",
- "xpack.securitySolution.onboarding.header.card.videoModal.viewTitle": "Elastic Security",
"xpack.securitySolution.onboarding.integrationsCard.agent.link": "ici",
"xpack.securitySolution.onboarding.integrationsCard.agent.text": "Elastic Agent est requis pour une ou plusieurs de vos intégrations. Ajouter Elastic Agent",
"xpack.securitySolution.onboarding.integrationsCard.badge.completeText": "{count} {count, plural, one {integration} other {intégrations}} ajoutées",
diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json
index b4cf601d0d373..99bbc4ae2c64a 100644
--- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json
+++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json
@@ -37205,19 +37205,6 @@
"xpack.securitySolution.onboarding.footer.labs.description": "セキュリティ研究者によるインサイト",
"xpack.securitySolution.onboarding.footer.labs.link.title": "詳しくはこちら",
"xpack.securitySolution.onboarding.footer.labs.title": "Elastic Security Labs",
- "xpack.securitySolution.onboarding.header.card.demo.description": "デモを探索してください。設定は不要です!",
- "xpack.securitySolution.onboarding.header.card.demo.link.title": "デモの探索",
- "xpack.securitySolution.onboarding.header.card.demo.title": "Elastic Securityの活用事例を見る",
- "xpack.securitySolution.onboarding.header.card.teammates.description": "組織全体でコラボレーションを強化",
- "xpack.securitySolution.onboarding.header.card.teammates.link.title": "ユーザーを追加",
- "xpack.securitySolution.onboarding.header.card.teammates.title": "チームメイトを追加",
- "xpack.securitySolution.onboarding.header.card.video.description": "Elastic Securityを使い始める",
- "xpack.securitySolution.onboarding.header.card.video.link.title": "動画を見る",
- "xpack.securitySolution.onboarding.header.card.video.title": "2分間の概要動画を見る",
- "xpack.securitySolution.onboarding.header.card.videoModal.buttonClose": "閉じる",
- "xpack.securitySolution.onboarding.header.card.videoModal.description": "Elasticが組織のデータ保護をサポートします。以下は、設定する手順のプレビューです。",
- "xpack.securitySolution.onboarding.header.card.videoModal.title": "Elastic Securityへようこそ!",
- "xpack.securitySolution.onboarding.header.card.videoModal.viewTitle": "Elasticセキュリティ",
"xpack.securitySolution.onboarding.integrationsCard.agent.link": "こちら",
"xpack.securitySolution.onboarding.integrationsCard.agent.text": "1つ以上の統合には、Elasticエージェントが必要です。Elasticエージェントの追加",
"xpack.securitySolution.onboarding.integrationsCard.badge.completeText": "{count} {count, plural, one {integration} other {個の統合}}が追加されました",
diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json
index e445ee58b041b..6fbb84d0b9dd7 100644
--- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json
+++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json
@@ -37185,19 +37185,6 @@
"xpack.securitySolution.onboarding.footer.labs.description": "安全研究员的见解",
"xpack.securitySolution.onboarding.footer.labs.link.title": "了解详情",
"xpack.securitySolution.onboarding.footer.labs.title": "Elastic Security Labs",
- "xpack.securitySolution.onboarding.header.card.demo.description": "浏览演示,而无需设置!",
- "xpack.securitySolution.onboarding.header.card.demo.link.title": "浏览演示",
- "xpack.securitySolution.onboarding.header.card.demo.title": "查看 Elastic Security 的实际应用",
- "xpack.securitySolution.onboarding.header.card.teammates.description": "加强跨组织协作",
- "xpack.securitySolution.onboarding.header.card.teammates.link.title": "添加用户",
- "xpack.securitySolution.onboarding.header.card.teammates.title": "添加队友",
- "xpack.securitySolution.onboarding.header.card.video.description": "开始了解 Elastic Security",
- "xpack.securitySolution.onboarding.header.card.video.link.title": "观看视频",
- "xpack.securitySolution.onboarding.header.card.video.title": "观看 2 分钟概览视频",
- "xpack.securitySolution.onboarding.header.card.videoModal.buttonClose": "关闭",
- "xpack.securitySolution.onboarding.header.card.videoModal.description": "我们很高兴为您提供支持,帮助保护您组织的数据。此处提供了您完成设置所需执行步骤的预览。",
- "xpack.securitySolution.onboarding.header.card.videoModal.title": "欢迎使用 Elastic Security!",
- "xpack.securitySolution.onboarding.header.card.videoModal.viewTitle": "Elastic Security",
"xpack.securitySolution.onboarding.integrationsCard.agent.link": "此处",
"xpack.securitySolution.onboarding.integrationsCard.agent.text": "您的一个或多个集成需要 Elastic 代理。添加 Elastic 代理",
"xpack.securitySolution.onboarding.integrationsCard.badge.completeText": "已添加 {count} 个{count, plural, one {集成} other {集成}}",
diff --git a/x-pack/solutions/security/plugins/security_solution/common/constants.ts b/x-pack/solutions/security/plugins/security_solution/common/constants.ts
index e7b09e7f7d0ea..b89dd470028bf 100644
--- a/x-pack/solutions/security/plugins/security_solution/common/constants.ts
+++ b/x-pack/solutions/security/plugins/security_solution/common/constants.ts
@@ -172,6 +172,7 @@ export const APP_RESPONSE_ACTIONS_HISTORY_PATH =
export const APP_SCRIPT_LIBRARY_PATH = `${APP_PATH}${SCRIPT_LIBRARY_PATH}` as const;
export const NOTES_PATH = `${MANAGEMENT_PATH}/notes` as const;
export const SIEM_MIGRATIONS_PATH = '/siem_migrations' as const;
+export const SIEM_MIGRATIONS_MANAGE_PATH = `${SIEM_MIGRATIONS_PATH}/manage` as const;
export const SIEM_MIGRATIONS_LANDING_PATH = `${SIEM_MIGRATIONS_PATH}/landing` as const;
export const SIEM_MIGRATIONS_RULES_PATH = `${SIEM_MIGRATIONS_PATH}/rules` as const;
export const SIEM_MIGRATIONS_DASHBOARDS_PATH = `${SIEM_MIGRATIONS_PATH}/dashboards` as const;
diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/icon.svg b/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/icon.svg
new file mode 100644
index 0000000000000..ba5943e2e9821
--- /dev/null
+++ b/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/icon.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/icon_dark.svg b/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/icon_dark.svg
new file mode 100644
index 0000000000000..7340eda29a35f
--- /dev/null
+++ b/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/icon_dark.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/index.tsx
new file mode 100644
index 0000000000000..3f667f539a9e3
--- /dev/null
+++ b/x-pack/solutions/security/plugins/security_solution/public/common/icons/agent/index.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.
+ */
+import React from 'react';
+import { EuiIcon, type EuiIconProps } from '@elastic/eui';
+import { useKibanaIsDarkMode } from '@kbn/react-kibana-context-theme';
+import IconSVG from './icon.svg';
+import IconDarkSVG from './icon_dark.svg';
+
+export const IconAgent = React.memo>((props) => {
+ const isDark = useKibanaIsDarkMode();
+ const Icon = isDark ? IconDarkSVG : IconSVG;
+
+ return ;
+});
+IconAgent.displayName = 'IconAgent';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_topic_id.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_topic_id.ts
index 6c56ddb41eed1..00d8780e40806 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_topic_id.ts
+++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/hooks/use_topic_id.ts
@@ -13,7 +13,10 @@ import type { OnboardingRouteParams } from '../../types';
* Hook that returns the topic id from the URL, or the default topic id if none is present
* This is the Single Source of Truth for the topic id
*/
-export const useTopicId = (): OnboardingTopicId => {
- const { topicId = OnboardingTopicId.default } = useParams();
- return topicId;
+export const useTopicId = (topicId?: OnboardingTopicId): OnboardingTopicId => {
+ const { topicId: urlTopicId = OnboardingTopicId.default } = useParams();
+ if (topicId) {
+ return topicId;
+ }
+ return urlTopicId;
};
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/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
index dc0654b401e7d..aa42fc6aa57b5 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/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
@@ -19,6 +19,9 @@ jest.mock('../../../../../hooks/use_onboarding_service', () => ({
jest.mock('./agentless_available_callout');
jest.mock('./active_integrations_callout');
jest.mock('./endpoint_callout');
+jest.mock('./migrations_callout', () => ({
+ MigrationsCallout: () => null,
+}));
describe('IntegrationCardTopCallout', () => {
beforeEach(() => {
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
index a58c8507cd4ff..07bbd43a31daf 100644
--- 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
@@ -6,6 +6,7 @@
*/
import React from 'react';
+import { EuiSpacer } from '@elastic/eui';
import useObservable from 'react-use/lib/useObservable';
import { useOnboardingService } from '../../../../../hooks/use_onboarding_service';
@@ -13,6 +14,7 @@ import { AgentlessAvailableCallout } from './agentless_available_callout';
import { ActiveIntegrationsCallout } from './active_integrations_callout';
import { EndpointCallout } from './endpoint_callout';
import { IntegrationTabId } from '../../../../../../../common/lib/integrations/types';
+import { MigrationsCallout } from './migrations_callout';
export const IntegrationCardTopCallout = React.memo<{
activeIntegrationsCount: number;
@@ -32,12 +34,12 @@ export const IntegrationCardTopCallout = React.memo<{
const showEndpointCallout =
activeIntegrationsCount === 0 && selectedTabId === IntegrationTabId.endpoint;
- if (!showAgentlessCallout && !showEndpointCallout && !showActiveCallout) {
- return null;
- }
+ const showAnyLegacyCallout = showAgentlessCallout || showEndpointCallout || showActiveCallout;
return (
<>
+
+ {showAnyLegacyCallout && }
{showEndpointCallout && }
{showAgentlessCallout && }
{showActiveCallout && (
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/migrations_callout.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/migrations_callout.tsx
new file mode 100644
index 0000000000000..ea71210960405
--- /dev/null
+++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/common/integrations/callouts/migrations_callout.tsx
@@ -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 React, { memo, useMemo, useCallback } from 'react';
+import { FormattedMessage } from '@kbn/i18n-react';
+import { EuiPanel, EuiButton, EuiFlexItem, EuiFlexGroup } from '@elastic/eui';
+import { SecurityPageName, useNavigateTo } from '@kbn/security-solution-navigation';
+import { IconAgent } from '../../../../../../../common/icons/agent';
+import { useGetSecuritySolutionUrl } from '../../../../../../../common/components/link_to';
+
+export const MigrationsCallout = memo(() => {
+ const { navigateTo } = useNavigateTo();
+ const getSecuritySolutionUrl = useGetSecuritySolutionUrl();
+ const href = useMemo(
+ () => getSecuritySolutionUrl({ deepLinkId: SecurityPageName.siemMigrationsManage }),
+ [getSecuritySolutionUrl]
+ );
+ const onClick = useCallback(
+ (e: React.SyntheticEvent) => {
+ e.preventDefault();
+ navigateTo({ deepLinkId: SecurityPageName.siemMigrationsManage });
+ },
+ [navigateTo]
+ );
+
+ return (
+
+
+
+
+
+
+ {' '}
+
+
+
+
+
+
+
+
+
+ );
+});
+
+MigrationsCallout.displayName = 'MigrationsCallout';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_body_config.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_body_config.ts
index 0d6a26a3439d6..262ef7d5cc9cc 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_body_config.ts
+++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/hooks/use_body_config.ts
@@ -8,14 +8,15 @@
import { useMemo } from 'react';
import { useOnboardingContext } from '../../onboarding_context';
import { useTopicId } from '../../hooks/use_topic_id';
+import type { OnboardingTopicId } from '../../../constants';
import type { OnboardingGroupConfig } from '../../../types';
/**
* Hook that returns the body config for the selected topic
*/
-export const useBodyConfig = (): OnboardingGroupConfig[] => {
- const topicId = useTopicId();
+export const useBodyConfig = (topicIdOverride?: OnboardingTopicId): OnboardingGroupConfig[] => {
const { config } = useOnboardingContext();
+ const topicId = useTopicId(topicIdOverride);
const topicBodyConfig = useMemo(() => {
let bodyConfig: OnboardingGroupConfig[] = [];
const topicConfig = config.get(topicId);
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_body.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_body.tsx
index 8f759b31c8e67..e0ce3cd069d80 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_body.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/onboarding_body.tsx
@@ -8,7 +8,7 @@
import React, { Suspense, useCallback } from 'react';
import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui';
import { CenteredLoadingSpinner } from '../../../common/components/centered_loading_spinner';
-import type { OnboardingCardId } from '../../constants';
+import type { OnboardingCardId, OnboardingTopicId } from '../../constants';
import { useBodyConfig } from './hooks/use_body_config';
import { OnboardingCardGroup } from './onboarding_card_group';
import { OnboardingCardPanel } from './onboarding_card_panel';
@@ -16,8 +16,8 @@ import { useExpandedCard } from './hooks/use_expanded_card';
import { useCompletedCards } from './hooks/use_completed_cards';
import type { IsCardAvailable } from '../../types';
-export const OnboardingBody = React.memo(() => {
- const bodyConfig = useBodyConfig();
+export const OnboardingBody = React.memo<{ topicId?: OnboardingTopicId }>(({ topicId }) => {
+ const bodyConfig = useBodyConfig(topicId);
const { expandedCardId, setExpandedCardId } = useExpandedCard();
const { isCardComplete, setCardComplete, getCardCheckCompleteResult, checkCardComplete } =
useCompletedCards(bodyConfig);
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.styles.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.styles.ts
deleted file mode 100644
index 4e028bb13a105..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.styles.ts
+++ /dev/null
@@ -1,50 +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 { useEuiTheme } from '@elastic/eui';
-import { css } from '@emotion/css';
-
-import { useKibanaIsDarkMode } from '@kbn/react-kibana-context-theme';
-
-export const useCardStyles = () => {
- const { euiTheme } = useEuiTheme();
- const isDarkMode = useKibanaIsDarkMode();
-
- return css`
- min-width: 315px;
- /* We needed to add the "headerCard" class to make it take priority over the default EUI card styles */
- .headerCardLink {
- color: ${euiTheme.colors.textPrimary};
- font-weight: ${euiTheme.font.weight.semiBold};
- }
-
- &.headerCard:hover {
- *:not(.headerCardLink) {
- text-decoration: none;
- }
- .headerCardLink,
- .headerCardLink * {
- text-decoration: underline;
- text-decoration-color: ${euiTheme.colors.textPrimary};
- color: ${euiTheme.colors.textPrimary};
- }
- }
-
- .headerCardTitle {
- font-weight: ${euiTheme.font.weight.semiBold};
- font-size: 1rem;
- }
-
- ${isDarkMode
- ? `
- background-color: ${euiTheme.colors.backgroundBasePlain};
- box-shadow: none;
- border: ${euiTheme.border.width.thin} solid ${euiTheme.colors.borderBasePlain};
- `
- : ''}
- `;
-};
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
deleted file mode 100644
index a121d9ba41e3f..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.test.tsx
+++ /dev/null
@@ -1,68 +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 { render } from '@testing-library/react';
-import { LinkCard } from './link_card';
-import { OnboardingHeaderCardId, TELEMETRY_HEADER_CARD } from '../../constants';
-import { mockReportLinkClick } from '../../../__mocks__/mocks';
-
-jest.mock('../../../lib/telemetry');
-jest.mock('../../../onboarding_context');
-
-describe('DataIngestionHubHeaderCardComponent', () => {
- beforeEach(() => {
- jest.clearAllMocks();
- });
-
- it('should render the title, description, and icon', () => {
- const { getByTestId, getByText } = render(
-
- );
-
- expect(getByText('Mock Title')).toBeInTheDocument();
- expect(getByText('Mock Description')).toBeInTheDocument();
- expect(getByTestId('data-ingestion-header-card-icon')).toHaveAttribute('src', 'mockIcon.png');
- });
-
- it('should track the link card click', () => {
- const { getByTestId } = render(
-
- );
-
- getByTestId('headerCardLink').click();
- expect(mockReportLinkClick).toHaveBeenCalledWith(
- `${TELEMETRY_HEADER_CARD}_${OnboardingHeaderCardId.demo}`
- );
- });
-
- it('should apply dark mode styles when color mode is DARK', () => {
- const { container } = render(
-
- );
- const cardElement = container.querySelector('.euiCard');
- expect(cardElement).toHaveStyle('background-color:rgb(255, 255, 255)');
- });
-});
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
deleted file mode 100644
index b1fad9f1da7ee..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/common/link_card.tsx
+++ /dev/null
@@ -1,92 +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, { useCallback } from 'react';
-import {
- EuiCard,
- EuiFlexGroup,
- EuiFlexItem,
- EuiIcon,
- EuiImage,
- EuiSpacer,
- EuiText,
- useGeneratedHtmlId,
-} from '@elastic/eui';
-import classNames from 'classnames';
-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;
- icon: string;
- title: string;
- description: string;
- linkText: string;
- onClick?: () => void;
- href?: string;
- target?: string;
-}
-
-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: { reportLinkClick },
- } = useOnboardingContext();
- const onClickWithReport = useCallback(() => {
- reportLinkClick?.(`${TELEMETRY_HEADER_CARD}_${id}`);
- onClick?.();
- }, [id, onClick, reportLinkClick]);
-
- const panelTitleId = useGeneratedHtmlId();
-
- return (
-
- }
- title={
-
- {title}
-
- }
- description={{description}}
- >
-
-
-
-
- {linkText}
-
-
- {target === '_blank' && (
-
-
-
- )}
-
-
- );
- }
-);
-
-LinkCard.displayName = 'LinkCard';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/demo_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/demo_card.tsx
deleted file mode 100644
index 9daf13527108d..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/demo_card.tsx
+++ /dev/null
@@ -1,28 +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 { LinkCard } from '../common/link_card';
-import demoImage from './images/demo_card.png';
-import darkDemoImage from './images/demo_card_dark.png';
-import * as i18n from './translations';
-import { OnboardingHeaderCardId } from '../../constants';
-
-export const DemoCard = React.memo<{ isDarkMode: boolean }>(({ isDarkMode }) => {
- return (
-
- );
-});
-DemoCard.displayName = 'DemoCard';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/images/demo_card.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/images/demo_card.png
deleted file mode 100644
index 825aa84564d86..0000000000000
Binary files a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/images/demo_card.png and /dev/null differ
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/images/demo_card_dark.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/images/demo_card_dark.png
deleted file mode 100644
index 9fba407a811b8..0000000000000
Binary files a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/images/demo_card_dark.png and /dev/null differ
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/index.ts
deleted file mode 100644
index 78dea5ca094c8..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/index.ts
+++ /dev/null
@@ -1,8 +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 { DemoCard } from './demo_card';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/translations.ts
deleted file mode 100644
index 3082a1c197ee3..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/demo_card/translations.ts
+++ /dev/null
@@ -1,29 +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 { i18n } from '@kbn/i18n';
-
-export const ONBOARDING_HEADER_DEMO_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.demo.title',
- {
- defaultMessage: 'See Elastic Security in action',
- }
-);
-
-export const ONBOARDING_HEADER_DEMO_DESCRIPTION = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.demo.description',
- {
- defaultMessage: 'Explore the demo, no setup required!',
- }
-);
-
-export const ONBOARDING_HEADER_DEMO_LINK_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.demo.link.title',
- {
- defaultMessage: 'Explore Demo',
- }
-);
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/images/teammates_card.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/images/teammates_card.png
deleted file mode 100644
index 47d5b6431a6a4..0000000000000
Binary files a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/images/teammates_card.png and /dev/null differ
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/images/teammates_card_dark.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/images/teammates_card_dark.png
deleted file mode 100644
index f58f80c6b2577..0000000000000
Binary files a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/images/teammates_card_dark.png and /dev/null differ
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/index.ts
deleted file mode 100644
index dde87215dbddb..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/index.ts
+++ /dev/null
@@ -1,8 +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 { TeammatesCard } from './teammates_card';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/teammates_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/teammates_card.tsx
deleted file mode 100644
index 0a425acd0a93f..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/teammates_card.tsx
+++ /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.
- */
-
-import React from 'react';
-import useObservable from 'react-use/lib/useObservable';
-import { OnboardingHeaderCardId } from '../../constants';
-import { useOnboardingService } from '../../../hooks/use_onboarding_service';
-import { LinkCard } from '../common/link_card';
-import teammatesImage from './images/teammates_card.png';
-import darkTeammatesImage from './images/teammates_card_dark.png';
-import * as i18n from './translations';
-
-export const TeammatesCard = React.memo<{ isDarkMode: boolean }>(({ isDarkMode }) => {
- const { usersUrl$ } = useOnboardingService();
- const usersUrl = useObservable(usersUrl$, undefined);
- return (
-
- );
-});
-TeammatesCard.displayName = 'TeammatesCard';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/translations.ts
deleted file mode 100644
index 721807721c254..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/teammates_card/translations.ts
+++ /dev/null
@@ -1,29 +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 { i18n } from '@kbn/i18n';
-
-export const ONBOARDING_HEADER_TEAMMATES_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.teammates.title',
- {
- defaultMessage: 'Add teammates',
- }
-);
-
-export const ONBOARDING_HEADER_TEAMMATES_DESCRIPTION = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.teammates.description',
- {
- defaultMessage: 'Increase collaboration across your org',
- }
-);
-
-export const ONBOARDING_HEADER_TEAMMATES_LINK_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.teammates.link.title',
- {
- defaultMessage: 'Add users',
- }
-);
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/images/video_card.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/images/video_card.png
deleted file mode 100644
index b2fa70927ebbe..0000000000000
Binary files a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/images/video_card.png and /dev/null differ
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/images/video_card_dark.png b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/images/video_card_dark.png
deleted file mode 100644
index 65b7c8d15ad73..0000000000000
Binary files a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/images/video_card_dark.png and /dev/null differ
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/index.ts
deleted file mode 100644
index aa3018a3b032e..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/index.ts
+++ /dev/null
@@ -1,8 +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 { VideoCard } from './video_card';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/translations.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/translations.ts
deleted file mode 100644
index 373f587fe84a7..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/translations.ts
+++ /dev/null
@@ -1,58 +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 { i18n } from '@kbn/i18n';
-
-export const ONBOARDING_HEADER_VIDEO_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.video.title',
- {
- defaultMessage: 'Watch 2 minute overview video',
- }
-);
-
-export const ONBOARDING_HEADER_VIDEO_DESCRIPTION = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.video.description',
- {
- defaultMessage: 'Get acquainted with Elastic Security',
- }
-);
-
-export const ONBOARDING_HEADER_VIDEO_LINK_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.video.link.title',
- {
- defaultMessage: 'Watch video',
- }
-);
-
-export const ONBOARDING_HEADER_VIDEO_MODAL_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.videoModal.title',
- {
- defaultMessage: 'Welcome to Elastic Security!',
- }
-);
-
-export const ONBOARDING_HEADER_VIDEO_MODAL_DESCRIPTION = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.videoModal.description',
- {
- defaultMessage:
- "We're excited to support you in protecting your organization's data. Here's a preview of the steps you'll take to set up.",
- }
-);
-
-export const ONBOARDING_HEADER_VIDEO_MODAL_BUTTON_CLOSE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.videoModal.buttonClose',
- {
- defaultMessage: 'Close',
- }
-);
-
-export const ONBOARDING_HEADER_VIDEO_MODAL_VIDEO_TITLE = i18n.translate(
- 'xpack.securitySolution.onboarding.header.card.videoModal.viewTitle',
- {
- defaultMessage: 'Elastic Security',
- }
-);
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/video_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/video_card.tsx
deleted file mode 100644
index 15a8950aed277..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/video_card.tsx
+++ /dev/null
@@ -1,40 +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, { useCallback, useState } from 'react';
-import { OnboardingHeaderCardId } from '../../constants';
-import { OnboardingHeaderVideoModal } from './video_modal';
-import * as i18n from './translations';
-import videoImage from './images/video_card.png';
-import darkVideoImage from './images/video_card_dark.png';
-import { LinkCard } from '../common/link_card';
-
-export const VideoCard = React.memo<{ isDarkMode: boolean }>(({ isDarkMode }) => {
- const [isModalVisible, setIsModalVisible] = useState(false);
-
- const closeVideoModal = useCallback(() => {
- setIsModalVisible(false);
- }, []);
- const showVideoModal = useCallback(() => {
- setIsModalVisible(true);
- }, []);
-
- return (
- <>
-
- {isModalVisible && }
- >
- );
-});
-VideoCard.displayName = 'VideoCard';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/video_modal.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/video_modal.tsx
deleted file mode 100644
index 41186988c5e88..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/cards/video_card/video_modal.tsx
+++ /dev/null
@@ -1,83 +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 {
- EuiButton,
- EuiFlexGroup,
- EuiFlexItem,
- EuiModal,
- EuiModalBody,
- EuiModalFooter,
- EuiModalHeaderTitle,
- EuiText,
- useGeneratedHtmlId,
-} from '@elastic/eui';
-import { css } from '@emotion/css';
-import { ONBOARDING_VIDEO_SOURCE } from '../../../../../common/constants';
-import * as i18n from './translations';
-
-// Not ideal, but we could not find any other way to remove the padding from the modal body
-const modalStyles = css`
- .euiModalBody__overflow {
- overflow: hidden;
- padding: 0px;
- mask-image: none;
- }
-`;
-
-interface OnboardingHeaderVideoModalProps {
- onClose: () => void;
-}
-
-export const OnboardingHeaderVideoModal = React.memo(
- ({ onClose }) => {
- const modalTitle = useGeneratedHtmlId();
-
- return (
-
-
-
-
-
-
-
-
- {i18n.ONBOARDING_HEADER_VIDEO_MODAL_TITLE}
-
-
-
-
- {i18n.ONBOARDING_HEADER_VIDEO_MODAL_DESCRIPTION}
-
-
-
-
- {i18n.ONBOARDING_HEADER_VIDEO_MODAL_BUTTON_CLOSE}
-
-
-
-
-
- );
- }
-);
-OnboardingHeaderVideoModal.displayName = 'DataIngestionHubVideoModal';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx
index 947732e880068..d6353526548ca 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header.tsx
@@ -10,13 +10,9 @@ import { EuiFlexGroup, EuiFlexItem, EuiImage, EuiSpacer, EuiText, EuiTitle } fro
import { useKibanaIsDarkMode } from '@kbn/react-kibana-context-theme';
import { useCurrentUser } from '../../../common/lib/kibana/hooks';
-import { OnboardingHeaderTopicSelector } from './onboarding_header_topic_selector';
import { useOnboardingHeaderStyles } from './onboarding_header.styles';
import rocketImage from './images/header_rocket.png';
import rocketDarkImage from './images/header_rocket_dark.png';
-import { TeammatesCard } from './cards/teammates_card';
-import { VideoCard } from './cards/video_card';
-import { DemoCard } from './cards/demo_card';
import { defaultHeaderConfig, headerConfig } from './onboarding_header_configs';
import { hasCapabilities } from '../../../common/lib/capabilities';
import { useKibana } from '../../../common/lib/kibana';
@@ -66,21 +62,9 @@ export const OnboardingHeader = React.memo(() => {
{filteredHeaderConfig.description}
-
-
-
-
-
-
-
-
-
-
-
-
>
);
});
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header_topic_selector.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header_topic_selector.tsx
deleted file mode 100644
index a09105943d6f1..0000000000000
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_header/onboarding_header_topic_selector.tsx
+++ /dev/null
@@ -1,44 +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, { useMemo } from 'react';
-import { EuiButtonGroup } from '@elastic/eui';
-import type { OnboardingTopicId } from '../../constants';
-import { useOnboardingContext } from '../onboarding_context';
-import { useUrlDetail } from '../hooks/use_url_detail';
-
-export const OnboardingHeaderTopicSelector = React.memo(() => {
- const { config } = useOnboardingContext();
- const { topicId, setTopic } = useUrlDetail();
-
- const selectorOptions = useMemo(
- () =>
- [...config.values()].map((topicConfig) => ({
- id: topicConfig.id,
- label: topicConfig.title,
- })),
- [config]
- );
-
- if (selectorOptions.length < 2) {
- return null;
- }
-
- return (
- setTopic(id as OnboardingTopicId)}
- isFullWidth
- />
- );
-});
-OnboardingHeaderTopicSelector.displayName = 'OnboardingHeaderTopicSelector';
diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_router.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_router.tsx
index 0470e3ea147ab..54cbaad9d4998 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_router.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_router.tsx
@@ -10,7 +10,7 @@ import React, { useMemo } from 'react';
import type { RouteComponentProps } from 'react-router-dom';
import { Routes, Route } from '@kbn/shared-ux-router';
import { Redirect } from 'react-router-dom';
-import { ONBOARDING_PATH } from '../../../common/constants';
+import { ONBOARDING_PATH, SIEM_MIGRATIONS_MANAGE_PATH } from '../../../common/constants';
import type { OnboardingRouteParams } from '../types';
import { OnboardingTopicId } from '../constants';
import { getCardIdFromHash, useSyncUrlDetails } from './hooks/use_url_detail';
@@ -35,6 +35,12 @@ export const OnboardingRouter = React.memo(() => {
return (
+ (
+
+ )}
+ />
} />
@@ -49,7 +55,6 @@ const OnboardingRoute = React.memo(({ match: { params }, l
pathTopicId: params.topicId || null,
hashCardId: getCardIdFromHash(location.hash),
});
-
if (isLoading) {
return ;
}
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 bcfbfa73bf9ff..4a8c2517799f7 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
@@ -28,4 +28,5 @@ export enum OnboardingCardId {
siemMigrationsRules = 'migrate_rules',
siemMigrationIntegrations = 'migration_integrations',
siemMigrationsDashboards = 'migrate_dashboards',
+ migrationsLandingPage = 'migrations_landing_page',
}
diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/links.ts b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/links.ts
index faf36b6c305e2..6f114eb388e9d 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/links.ts
+++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/links.ts
@@ -15,13 +15,30 @@ import {
SIEM_MIGRATIONS_DASHBOARDS_PATH,
SIEM_MIGRATIONS_LANDING_PATH,
SIEM_MIGRATIONS_RULES_PATH,
+ SIEM_MIGRATIONS_MANAGE_PATH,
SecurityPageName,
} from '../../common/constants';
import type { LinkItem } from '../common/links/types';
import { IconDashboards } from '../common/icons/dashboards';
import { IconRules } from '../common/icons/rules';
+import { IconAgent } from '../common/icons/agent';
const subLinks: LinkItem[] = [
+ {
+ id: SecurityPageName.siemMigrationsManage,
+ title: i18n.translate('xpack.securitySolution.appLinks.automaticMigrations.title', {
+ defaultMessage: 'Manage Automatic Migrations',
+ }),
+ description: i18n.translate('xpack.securitySolution.appLinks.automaticMigrations.description', {
+ defaultMessage: 'Manage your AI powered Automatic Migrations to Elastic.',
+ }),
+ landingIcon: IconAgent,
+ path: SIEM_MIGRATIONS_MANAGE_PATH,
+ capabilities: [[SECURITY_UI_SHOW_PRIVILEGE, `${SIEM_MIGRATIONS_FEATURE_ID}.all`]],
+ skipUrlState: true,
+ hideTimeline: true,
+ hideWhenExperimentalKey: 'siemMigrationsDisabled',
+ },
{
id: SecurityPageName.siemMigrationsRules,
title: i18n.translate('xpack.securitySolution.appLinks.automaticMigrationRules.title', {
@@ -67,7 +84,7 @@ const subLinks: LinkItem[] = [
export const links: LinkItem = {
id: SecurityPageName.siemMigrationsLanding,
title: i18n.translate('xpack.securitySolution.appLinks.automaticMigrations.title', {
- defaultMessage: 'Migrations',
+ defaultMessage: 'Automatic migrations',
}),
path: SIEM_MIGRATIONS_LANDING_PATH,
capabilities: [
@@ -78,15 +95,23 @@ export const links: LinkItem = {
i18n.translate('xpack.securitySolution.appLinks.migrations', {
defaultMessage: 'Migrations',
}),
+ i18n.translate('xpack.securitySolution.appLinks.automaticMigrations.title', {
+ defaultMessage: 'Automatic migrations',
+ }),
],
links: subLinks,
skipUrlState: true,
+ globalNavPosition: 13,
categories: [
{
label: i18n.translate('xpack.securitySolution.appLinks.category.automaticMigrations', {
defaultMessage: 'Automatic migrations',
}),
- linkIds: [SecurityPageName.siemMigrationsRules, SecurityPageName.siemMigrationsDashboards],
+ linkIds: [
+ SecurityPageName.siemMigrationsManage,
+ SecurityPageName.siemMigrationsRules,
+ SecurityPageName.siemMigrationsDashboards,
+ ],
},
],
};
diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/manage.tsx b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/manage.tsx
new file mode 100644
index 0000000000000..814c632a35c3e
--- /dev/null
+++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/manage.tsx
@@ -0,0 +1,44 @@
+/*
+ * 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 { EuiSpacer, EuiPageBody } from '@elastic/eui';
+import { SecuritySolutionPageWrapper } from '../common/components/page_wrapper';
+import { PageTitle } from './common/components/page_title';
+import { useSpaceId } from '../common/hooks/use_space_id';
+import { OnboardingBody } from '../onboarding/components/onboarding_body/onboarding_body';
+import { OnboardingTopicId } from '../onboarding/constants';
+import { CenteredLoadingSpinner } from '../common/components/centered_loading_spinner';
+import { OnboardingContextProvider } from '../onboarding/components/onboarding_context';
+import { HeaderPage } from '../common/components/header_page';
+
+const SIEM_MIGRATIONS_PAGE_TITLE = i18n.translate(
+ 'xpack.securitySolution.siemMigrations.manage.pageTitle',
+ {
+ defaultMessage: 'Manage Automatic Migrations',
+ }
+);
+
+export const SiemMigrationsManagePage = () => {
+ const spaceId = useSpaceId();
+
+ if (!spaceId) {
+ return ;
+ }
+
+ return (
+
+
+ } border />
+
+
+
+
+
+
+ );
+};
diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/routes.tsx b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/routes.tsx
index 052c05e5ff91c..be09448d6ba31 100644
--- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/routes.tsx
+++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/routes.tsx
@@ -11,6 +11,7 @@ import { Routes, Route } from '@kbn/shared-ux-router';
import type { ExperimentalFeatures } from '../../common';
import type { SecuritySubPluginRoutes } from '../app/types';
import {
+ SIEM_MIGRATIONS_MANAGE_PATH,
SIEM_MIGRATIONS_DASHBOARDS_PATH,
SIEM_MIGRATIONS_LANDING_PATH,
SIEM_MIGRATIONS_RULES_PATH,
@@ -21,6 +22,7 @@ import { MigrationRulesPage } from './rules/pages';
import { PluginTemplateWrapper } from '../common/components/plugin_template_wrapper';
import { SecurityRoutePageWrapper } from '../common/components/security_route_page_wrapper';
import { MigrationsLandingPage } from './landing';
+import { SiemMigrationsManagePage } from './manage';
const SiemMigrationsLandingRoutes = () => {
return (
@@ -34,6 +36,18 @@ const SiemMigrationsLandingRoutes = () => {
);
};
+const SiemMigrationsManageRoutes = () => {
+ return (
+
+
+
+
+
+
+
+ );
+};
+
const SiemMigrationsRulesRoutes = () => {
return (
@@ -72,6 +86,10 @@ export const getSiemMigrationsRoutes = (
return [
...(isSiemMigrationsEnabled
? [
+ {
+ path: SIEM_MIGRATIONS_MANAGE_PATH,
+ component: SiemMigrationsManageRoutes,
+ },
{
path: SIEM_MIGRATIONS_LANDING_PATH,
component: SiemMigrationsLandingRoutes,
diff --git a/x-pack/solutions/security/plugins/security_solution_ess/public/navigation/navigation_tree.ts b/x-pack/solutions/security/plugins/security_solution_ess/public/navigation/navigation_tree.ts
index 51c51ae2b08e6..0289e09166b6f 100644
--- a/x-pack/solutions/security/plugins/security_solution_ess/public/navigation/navigation_tree.ts
+++ b/x-pack/solutions/security/plugins/security_solution_ess/public/navigation/navigation_tree.ts
@@ -109,6 +109,10 @@ export const createNavigationTree = (
{
title: i18nStrings.launchPad.migrations.title,
children: [
+ {
+ id: SecurityPageName.siemMigrationsManage,
+ link: securityLink(SecurityPageName.siemMigrationsManage),
+ },
{
id: SecurityPageName.siemMigrationsRules,
link: securityLink(SecurityPageName.siemMigrationsRules),
diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/navigation/navigation_tree.ts b/x-pack/solutions/security/plugins/security_solution_serverless/public/navigation/navigation_tree.ts
index 213c6c133ac33..99f6638f10272 100644
--- a/x-pack/solutions/security/plugins/security_solution_serverless/public/navigation/navigation_tree.ts
+++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/navigation/navigation_tree.ts
@@ -116,6 +116,10 @@ export const createNavigationTree = async (
{
title: i18nStrings.launchPad.migrations.title,
children: [
+ {
+ id: SecurityPageName.siemMigrationsManage,
+ link: securityLink(SecurityPageName.siemMigrationsManage),
+ },
{
id: SecurityPageName.siemMigrationsRules,
link: securityLink(SecurityPageName.siemMigrationsRules),
diff --git a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/onboarding.cy.ts b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/onboarding.cy.ts
index 844c22c3c9998..4c7b0c759710c 100644
--- a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/onboarding.cy.ts
+++ b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/onboarding.cy.ts
@@ -106,7 +106,7 @@ describe(
},
{ interval: 500, timeout: 12000 }
);
- visit(GET_STARTED_URL);
+ visit(`${GET_STARTED_URL}/siem_migrations`);
});
after(() => {
diff --git a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/translated_dashboards_page.cy.ts b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/translated_dashboards_page.cy.ts
index 6cd6585c1c247..981f6c22b2ac6 100644
--- a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/translated_dashboards_page.cy.ts
+++ b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/dashboards/translated_dashboards_page.cy.ts
@@ -61,7 +61,7 @@ describe.skip(
);
role.login();
- visit(GET_STARTED_URL);
+ visit(`${GET_STARTED_URL}/siem_migrations`);
selectMigrationConnector();
goToTranslatedDashboardsPageFromOnboarding();
});
diff --git a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/onboarding.cy.ts b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/onboarding.cy.ts
index 70790e15b39d8..11df1110ef401 100644
--- a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/onboarding.cy.ts
+++ b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/onboarding.cy.ts
@@ -93,7 +93,7 @@ describe(
role.login();
createBedrockConnector();
- visit(GET_STARTED_URL);
+ visit(`${GET_STARTED_URL}/siem_migrations`);
});
after(() => {
diff --git a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/qradar_onboarding.cy.ts b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/qradar_onboarding.cy.ts
index 934bc403e92c3..3f0c8899571a5 100644
--- a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/qradar_onboarding.cy.ts
+++ b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/qradar_onboarding.cy.ts
@@ -46,7 +46,7 @@ describe(
createBedrockConnector();
role.login();
cy.log('Creating Bedrock connector');
- visit(GET_STARTED_URL);
+ visit(`${GET_STARTED_URL}/siem_migrations`);
selectMigrationConnector();
openUploadRulesFlyout();
selectQRadarMigrationSource();
diff --git a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/translated_rules_page.cy.ts b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/translated_rules_page.cy.ts
index df1111be0be60..712ae2a30e93d 100644
--- a/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/translated_rules_page.cy.ts
+++ b/x-pack/solutions/security/test/security_solution_cypress/cypress/e2e/investigations/siem_migrations/rules/translated_rules_page.cy.ts
@@ -50,7 +50,7 @@ describe(
createBedrockConnector();
role.login();
- visit(GET_STARTED_URL);
+ visit(`${GET_STARTED_URL}/siem_migrations`);
selectMigrationConnector();
navigateToTranslatedRulesPage();
});
diff --git a/x-pack/solutions/security/test/security_solution_cypress/cypress/tasks/siem_migrations.ts b/x-pack/solutions/security/test/security_solution_cypress/cypress/tasks/siem_migrations.ts
index add185fb0c939..a86c04dfa8469 100644
--- a/x-pack/solutions/security/test/security_solution_cypress/cypress/tasks/siem_migrations.ts
+++ b/x-pack/solutions/security/test/security_solution_cypress/cypress/tasks/siem_migrations.ts
@@ -42,7 +42,6 @@ export const selectAutomaticMigrationTopic = () => {
};
export const selectMigrationConnector = () => {
- selectAutomaticMigrationTopic();
toggleSiemMigrationsCard();
cy.get(SELECTORS.ONBOARDING_SIEM_MIGRATION_CARDS.SELECT_CONNECTORS).click();
cy.get(SELECTORS.FAKE_BEDROCK_SELECTOR).click();