From 27f39ef917b492988ad14e3a2115ed3d04f913a5 Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Wed, 30 Jul 2025 19:41:01 +0000 Subject: [PATCH 1/4] search_homepage: add hook for ingestion cta experiment flag --- .../search/packages/shared-ui/src/constants.ts | 3 +++ .../hooks/use_ingestion_cta_feature_flag.ts | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/hooks/use_ingestion_cta_feature_flag.ts diff --git a/x-pack/solutions/search/packages/shared-ui/src/constants.ts b/x-pack/solutions/search/packages/shared-ui/src/constants.ts index 85b9d83845d6e..891b12586617e 100644 --- a/x-pack/solutions/search/packages/shared-ui/src/constants.ts +++ b/x-pack/solutions/search/packages/shared-ui/src/constants.ts @@ -7,3 +7,6 @@ export const WORKFLOW_LOCALSTORAGE_KEY = 'search_onboarding_workflow'; export const GLOBAL_EMPTY_STATE_SKIP_KEY = 'search_onboarding_global_empty_state_skip'; + +// Feature Flags +export const SEARCH_HOMEPAGE_INGESTION_CTA_FEATURE_FLAG = 'searchSolution.homepage.ingestionCTA'; diff --git a/x-pack/solutions/search/plugins/search_homepage/public/hooks/use_ingestion_cta_feature_flag.ts b/x-pack/solutions/search/plugins/search_homepage/public/hooks/use_ingestion_cta_feature_flag.ts new file mode 100644 index 0000000000000..cec946b8021fb --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/hooks/use_ingestion_cta_feature_flag.ts @@ -0,0 +1,16 @@ +/* + * 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 { SEARCH_HOMEPAGE_INGESTION_CTA_FEATURE_FLAG } from '@kbn/search-shared-ui/src/constants'; +import { useKibana } from './use_kibana'; + +export const useIngestionCtaFeatureFlag = (): boolean => { + const { cloud, featureFlags } = useKibana().services; + if (cloud?.isServerlessEnabled !== true) return false; + + return featureFlags.getBooleanValue(SEARCH_HOMEPAGE_INGESTION_CTA_FEATURE_FLAG, false); +}; From b9ba19d7d7f910aa1cc7f33539c9d218df8b1260 Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Wed, 30 Jul 2025 19:44:30 +0000 Subject: [PATCH 2/4] search_homepage: add loading state updated rendering to have a loading state while querying for the onboarding redirect. This will ensure the body is not rendered if we are going to redirect the user. This then should ensure we do not track loaded telemetry events unless we actually render the home page body for the user to view. --- .../public/components/search_homepage.tsx | 18 ++++++++++++------ .../hooks/use_search_home_page_redirect.tsx | 11 +++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/x-pack/solutions/search/plugins/search_homepage/public/components/search_homepage.tsx b/x-pack/solutions/search/plugins/search_homepage/public/components/search_homepage.tsx index 4518ec0c2ca9c..a75e3d1e4cf85 100644 --- a/x-pack/solutions/search/plugins/search_homepage/public/components/search_homepage.tsx +++ b/x-pack/solutions/search/plugins/search_homepage/public/components/search_homepage.tsx @@ -6,7 +6,7 @@ */ import React, { useEffect, useMemo } from 'react'; -import { EuiHorizontalRule } from '@elastic/eui'; +import { EuiHorizontalRule, EuiLoadingSpinner } from '@elastic/eui'; import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; import { useKibana } from '../hooks/use_kibana'; import { useSearchHomePageRedirect } from '../hooks/use_search_home_page_redirect'; @@ -22,7 +22,7 @@ export const SearchHomepagePage = () => { searchNavigation.breadcrumbs.setSearchBreadCrumbs([]); } }, [searchNavigation]); - useSearchHomePageRedirect(); + const { isLoading } = useSearchHomePageRedirect(); const embeddableConsole = useMemo( () => (consolePlugin?.EmbeddableConsole ? : null), @@ -37,10 +37,16 @@ export const SearchHomepagePage = () => { grow={false} solutionNav={searchNavigation?.useClassicNavigation(history)} > - - - - {embeddableConsole} + {isLoading ? ( + } /> + ) : ( + <> + + + + {embeddableConsole} + + )} ); }; diff --git a/x-pack/solutions/search/plugins/search_homepage/public/hooks/use_search_home_page_redirect.tsx b/x-pack/solutions/search/plugins/search_homepage/public/hooks/use_search_home_page_redirect.tsx index 5684e4ea74f51..a3078166f8505 100644 --- a/x-pack/solutions/search/plugins/search_homepage/public/hooks/use_search_home_page_redirect.tsx +++ b/x-pack/solutions/search/plugins/search_homepage/public/hooks/use_search_home_page_redirect.tsx @@ -22,10 +22,13 @@ export const useSearchHomePageRedirect = () => { const skipGlobalEmptyState = useMemo(() => { return localStorage.getItem(GLOBAL_EMPTY_STATE_SKIP_KEY) === 'true'; }, []); - const { data: indicesStatus } = useIndicesStatusQuery(undefined, !skipGlobalEmptyState); + const { data: indicesStatus, isLoading } = useIndicesStatusQuery( + undefined, + !skipGlobalEmptyState + ); const [hasDoneRedirect, setHasDoneRedirect] = useState(() => false); - return useEffect(() => { + useEffect(() => { if (hasDoneRedirect || skipGlobalEmptyState) { return; } @@ -58,4 +61,8 @@ export const useSearchHomePageRedirect = () => { userPrivileges, skipGlobalEmptyState, ]); + + return { + isLoading: skipGlobalEmptyState ? false : isLoading, + }; }; From 96b8f40b4ed44c5891d0cb98b9093255f07eb2f6 Mon Sep 17 00:00:00 2001 From: Rodney Norris Date: Wed, 30 Jul 2025 21:25:29 +0000 Subject: [PATCH 3/4] search: homepage ingestion variant view --- .../shared/deeplinks/search/constants.ts | 2 + .../packages/shared/deeplinks/search/index.ts | 3 + .../search_homepage/common/doc_links.ts | 3 + .../public/analytics/constants.ts | 17 ++ .../public/assets/arrow_deploy.svg | 22 ++ .../search_homepage/public/assets/go.svg | 1 + .../search_homepage/public/assets/java.svg | 1 + .../public/assets/javascript.svg | 1 + .../search_homepage/public/assets/php.svg | 1 + .../search_homepage/public/assets/python.svg | 1 + .../search_homepage/public/assets/ruby.svg | 1 + .../components/connect_to_elasticsearch.tsx | 18 +- .../connect_to_elasticsearch_side_panel.tsx | 10 +- .../connect_to_elasticsearch.tsx | 79 +++++++ .../explore_language_clients.tsx | 95 ++++++++ .../components/ingestion_body/index.tsx | 47 ++++ .../ingest_your_content_section.tsx | 211 ++++++++++++++++++ .../components/sample_data_action_button.tsx | 21 +- .../public/components/search_homepage.tsx | 9 +- .../components/search_homepage_body.tsx | 67 +++--- .../public/components/shared/i18n.ts | 29 +++ 21 files changed, 579 insertions(+), 60 deletions(-) create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/analytics/constants.ts create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/assets/arrow_deploy.svg create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/assets/go.svg create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/assets/java.svg create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/assets/javascript.svg create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/assets/php.svg create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/assets/python.svg create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/assets/ruby.svg create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/connect_to_elasticsearch.tsx create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/explore_language_clients.tsx create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/index.tsx create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/ingest_your_content_section.tsx create mode 100644 x-pack/solutions/search/plugins/search_homepage/public/components/shared/i18n.ts diff --git a/src/platform/packages/shared/deeplinks/search/constants.ts b/src/platform/packages/shared/deeplinks/search/constants.ts index 3569c33bab103..f814a04aaf846 100644 --- a/src/platform/packages/shared/deeplinks/search/constants.ts +++ b/src/platform/packages/shared/deeplinks/search/constants.ts @@ -9,6 +9,8 @@ export const ENTERPRISE_SEARCH_APP_ID = 'enterpriseSearch'; export const ENTERPRISE_SEARCH_CONTENT_APP_ID = 'enterpriseSearchContent'; +export const ENTERPRISE_SEARCH_CONNECTORS_ID = `${ENTERPRISE_SEARCH_CONTENT_APP_ID}:connectors`; +export const ENTERPRISE_SEARCH_WEB_CRAWLERS_ID = `${ENTERPRISE_SEARCH_CONTENT_APP_ID}:webCrawlers`; export const ENTERPRISE_SEARCH_APPLICATIONS_APP_ID = 'enterpriseSearchApplications'; export const ENTERPRISE_SEARCH_ANALYTICS_APP_ID = 'enterpriseSearchAnalytics'; export const SERVERLESS_ES_APP_ID = 'serverlessElasticsearch'; diff --git a/src/platform/packages/shared/deeplinks/search/index.ts b/src/platform/packages/shared/deeplinks/search/index.ts index 68a0aea809dff..97a8ed7ef9ed4 100644 --- a/src/platform/packages/shared/deeplinks/search/index.ts +++ b/src/platform/packages/shared/deeplinks/search/index.ts @@ -10,11 +10,14 @@ export { ENTERPRISE_SEARCH_APP_ID, ENTERPRISE_SEARCH_CONTENT_APP_ID, + ENTERPRISE_SEARCH_CONNECTORS_ID, + ENTERPRISE_SEARCH_WEB_CRAWLERS_ID, ENTERPRISE_SEARCH_APPLICATIONS_APP_ID, ENTERPRISE_SEARCH_ANALYTICS_APP_ID, SERVERLESS_ES_APP_ID, SEARCH_HOMEPAGE, SERVERLESS_ES_CONNECTORS_ID, + SERVERLESS_ES_WEB_CRAWLERS_ID, ES_SEARCH_PLAYGROUND_ID, SEARCH_INDICES_START, SEARCH_INDICES, diff --git a/x-pack/solutions/search/plugins/search_homepage/common/doc_links.ts b/x-pack/solutions/search/plugins/search_homepage/common/doc_links.ts index 84ca692cc6623..dd36ffb8d3300 100644 --- a/x-pack/solutions/search/plugins/search_homepage/common/doc_links.ts +++ b/x-pack/solutions/search/plugins/search_homepage/common/doc_links.ts @@ -18,6 +18,8 @@ class ESDocLinks { public ingestDataToSecurity: string = ''; public cloudSecurityPosture: string = ''; public installElasticDefend: string = ''; + public languageClients: string = ''; + constructor() {} setDocLinks(newDocLinks: DocLinks) { @@ -31,6 +33,7 @@ class ESDocLinks { this.ingestDataToSecurity = newDocLinks.siem.ingestDataToSecurity; this.cloudSecurityPosture = newDocLinks.securitySolution.cloudSecurityPosture; this.installElasticDefend = newDocLinks.securitySolution.installElasticDefend; + this.languageClients = newDocLinks.clients.guide; } } diff --git a/x-pack/solutions/search/plugins/search_homepage/public/analytics/constants.ts b/x-pack/solutions/search/plugins/search_homepage/public/analytics/constants.ts new file mode 100644 index 0000000000000..7be4264738d9d --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/analytics/constants.ts @@ -0,0 +1,17 @@ +/* + * 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 AnalyticsEvents { + homepageLoaded = 'homepage_loaded', + installSampleDataClick = 'homepage_install_sample_data_click', + ingestionCTAVariantLoaded = 'homepage_ingestion_cta_variant_loaded', + ingestVariantInstallSampleDataClick = 'homepage_ingest_variant_install_sample_data_click', + ingestVariantUploadFileClick = 'homepage_ingest_variant_upload_file_click', + ingestVariantWebCrawlerClick = 'homepage_ingest_variant_web_crawler_click', + ingestVariantConnectorsClick = 'homepage_ingest_variant_add_connector_click', + ingestVariantManageAPIKeysClick = 'homepage_ingest_variant_manage_api_keys_click', +} diff --git a/x-pack/solutions/search/plugins/search_homepage/public/assets/arrow_deploy.svg b/x-pack/solutions/search/plugins/search_homepage/public/assets/arrow_deploy.svg new file mode 100644 index 0000000000000..6e0798c238432 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/assets/arrow_deploy.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/x-pack/solutions/search/plugins/search_homepage/public/assets/go.svg b/x-pack/solutions/search/plugins/search_homepage/public/assets/go.svg new file mode 100644 index 0000000000000..3962bf336d7e8 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/assets/go.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x-pack/solutions/search/plugins/search_homepage/public/assets/java.svg b/x-pack/solutions/search/plugins/search_homepage/public/assets/java.svg new file mode 100644 index 0000000000000..fece567af05b5 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/assets/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x-pack/solutions/search/plugins/search_homepage/public/assets/javascript.svg b/x-pack/solutions/search/plugins/search_homepage/public/assets/javascript.svg new file mode 100644 index 0000000000000..57a773816348d --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/assets/javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x-pack/solutions/search/plugins/search_homepage/public/assets/php.svg b/x-pack/solutions/search/plugins/search_homepage/public/assets/php.svg new file mode 100644 index 0000000000000..c3ac00333ae78 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/assets/php.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x-pack/solutions/search/plugins/search_homepage/public/assets/python.svg b/x-pack/solutions/search/plugins/search_homepage/public/assets/python.svg new file mode 100644 index 0000000000000..ef8c2af2ea877 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/assets/python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x-pack/solutions/search/plugins/search_homepage/public/assets/ruby.svg b/x-pack/solutions/search/plugins/search_homepage/public/assets/ruby.svg new file mode 100644 index 0000000000000..09bdc5e541d50 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/assets/ruby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch.tsx b/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch.tsx index 2a0b9f49bc50a..1611bb5591fbd 100644 --- a/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch.tsx +++ b/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch.tsx @@ -14,6 +14,7 @@ import { ConnectToElasticsearchSidePanel } from './connect_to_elasticsearch_side import { AISearchCapabilities } from './ai_search_capabilities/ai_search_capabilities'; import { useElasticsearchUrl } from '../hooks/use_elasticsearch_url'; import { ApiKeyForm } from './api_key_form'; +import { CONNECT_TO_ELASTICSEARCH_TITLE, ELASTICSEARCH_ENDPOINT_LABEL } from './shared/i18n'; export const ConnectToElasticsearch = () => { const elasticsearchUrl = useElasticsearchUrl(); @@ -25,12 +26,8 @@ export const ConnectToElasticsearch = () => { - -

- {i18n.translate('xpack.searchHomepage.connectToElasticsearch.title', { - defaultMessage: 'Connect to Elasticsearch', - })} -

+ +

{CONNECT_TO_ELASTICSEARCH_TITLE}

@@ -51,14 +48,7 @@ export const ConnectToElasticsearch = () => { - - {i18n.translate( - 'xpack.searchHomepage.connectToElasticsearch.elasticSearchEndpointLabel', - { - defaultMessage: 'Elasticsearch endpoint', - } - )} - + {ELASTICSEARCH_ENDPOINT_LABEL} diff --git a/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch_side_panel.tsx b/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch_side_panel.tsx index 9acd3e1960529..e64b69c1051ec 100644 --- a/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch_side_panel.tsx +++ b/x-pack/solutions/search/plugins/search_homepage/public/components/connect_to_elasticsearch_side_panel.tsx @@ -8,17 +8,15 @@ import React, { useCallback, useMemo } from 'react'; import { EuiCard, EuiButtonEmpty, EuiFlexGroup, EuiPanel } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; -import { SampleDataActionButton } from './sample_data_action_button'; -import { useIngestSampleData } from '../hooks/use_ingest_data'; + import { useKibana } from '../hooks/use_kibana'; import { useUserPrivilegesQuery } from '../hooks/api/use_user_permissions'; import { generateRandomIndexName } from '../utils/indices'; +import { SampleDataActionButton } from './sample_data_action_button'; export const ConnectToElasticsearchSidePanel = () => { const { application, sampleDataIngest } = useKibana().services; - const { ingestSampleData, isLoading } = useIngestSampleData(); - const onFileUpload = useCallback(() => { application.navigateToApp('ml', { path: 'filedatavisualizer' }); }, [application]); @@ -75,9 +73,7 @@ export const ConnectToElasticsearchSidePanel = () => { defaultMessage="Add data sets with sample visualizations, dashboards, and more." /> } - footer={ - - } + footer={} /> )} diff --git a/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/connect_to_elasticsearch.tsx b/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/connect_to_elasticsearch.tsx new file mode 100644 index 0000000000000..71afbec44c250 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/connect_to_elasticsearch.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 { css } from '@emotion/react'; +import { EuiFlexGroup, EuiFlexItem, EuiText, EuiTitle, useEuiTheme } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormInfoField } from '@kbn/search-shared-ui'; + +import { useElasticsearchUrl } from '../../hooks/use_elasticsearch_url'; +import { CONNECT_TO_ELASTICSEARCH_TITLE, ELASTICSEARCH_ENDPOINT_LABEL } from '../shared/i18n'; +import { ExploreLanguageClients } from './explore_language_clients'; +import { ApiKeyForm } from '../api_key_form'; + +export const ConnectToElasticsearch = () => { + const { euiTheme } = useEuiTheme(); + const elasticsearchUrl = useElasticsearchUrl(); + + return ( + + + +

{CONNECT_TO_ELASTICSEARCH_TITLE}

+
+ +

+ {i18n.translate( + 'xpack.searchHomepage.connectToElasticsearchIngestionVariant.description', + { + defaultMessage: + 'Interact and add documents directly to your Elasticsearch index using your preferred language client.', + } + )} +

+
+
+ + + + + + + + {ELASTICSEARCH_ENDPOINT_LABEL} + + + + + + + + + + + + + + + + +
+ ); +}; diff --git a/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/explore_language_clients.tsx b/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/explore_language_clients.tsx new file mode 100644 index 0000000000000..f39c3d5759c00 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/explore_language_clients.tsx @@ -0,0 +1,95 @@ +/* + * 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 { css } from '@emotion/react'; +import { EuiIcon, EuiFlexGroup, EuiFlexItem, EuiLink, useEuiTheme } from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; + +import { docLinks } from '../../../common/doc_links'; +import { useAssetBasePath } from '../../hooks/use_asset_base_path'; + +const LanguageIcons = [ + { + id: 'python', + icon: 'python.svg', + title: i18n.translate('xpack.xpack.searchHomepage.exploreLanguageClients.python.title', { + defaultMessage: 'Python logo', + }), + }, + { + id: 'javascript', + icon: 'javascript.svg', + title: i18n.translate('xpack.xpack.searchHomepage.exploreLanguageClients.js.title', { + defaultMessage: 'Javascript logo', + }), + }, + { + id: 'php', + icon: 'php.svg', + title: i18n.translate('xpack.xpack.searchHomepage.exploreLanguageClients.php.title', { + defaultMessage: 'PHP logo', + }), + }, + { + id: 'golang', + icon: 'go.svg', + title: i18n.translate('xpack.xpack.searchHomepage.exploreLanguageClients.golang.title', { + defaultMessage: 'Go language logo', + }), + }, + { + id: 'ruby', + icon: 'ruby.svg', + title: i18n.translate('xpack.xpack.searchHomepage.exploreLanguageClients.ruby.title', { + defaultMessage: 'Ruby logo', + }), + }, +]; + +export const ExploreLanguageClients = () => { + const { euiTheme } = useEuiTheme(); + const assetBasePath = useAssetBasePath(); + + return ( + + + + {LanguageIcons.map((icon) => ( + + + + ))} + + + + + {i18n.translate('xpack.xpack.searchHomepage.exploreLanguageClients.link', { + defaultMessage: 'Explore our language clients', + })} + + + + ); +}; diff --git a/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/index.tsx b/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/index.tsx new file mode 100644 index 0000000000000..2d029aa3a64e6 --- /dev/null +++ b/x-pack/solutions/search/plugins/search_homepage/public/components/ingestion_body/index.tsx @@ -0,0 +1,47 @@ +/* + * 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, { useEffect } from 'react'; +import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template'; +import { EuiFlexGroup, EuiHorizontalRule } from '@elastic/eui'; + +import { useUsageTracker } from '../../hooks/use_usage_tracker'; + +import { AlternateSolutions } from '../alternate_solutions/alternate_solutions'; +import { DiveDeeperWithElasticsearch } from '../dive_deeper/dive_deeper_with_elasticsearch'; +import { Footer } from '../footer/footer'; +import { AnalyticsEvents } from '../../analytics/constants'; +import { AISearchCapabilities } from '../ai_search_capabilities/ai_search_capabilities'; + +import { ConnectToElasticsearch } from './connect_to_elasticsearch'; +import { IngestYourContentSection } from './ingest_your_content_section'; + +export const SearchHomepageIngestionVariantBody = () => { + const usageTracker = useUsageTracker(); + + useEffect(() => { + usageTracker.load(AnalyticsEvents.ingestionCTAVariantLoaded); + }, [usageTracker]); + + return ( + + + + + + + + + + + + +