[Stateful sidenav] Update static definitions (#179043)

This commit is contained in:
Sébastien Loix 2024-04-03 15:43:21 +01:00 committed by GitHub
parent 3f91198827
commit 43de4b5d57
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 1118 additions and 99 deletions

5
.github/CODEOWNERS vendored
View file

@ -798,8 +798,9 @@ packages/kbn-shared-ux-utility @elastic/appex-sharedux
x-pack/plugins/observability_solution/slo @elastic/obs-ux-management-team
x-pack/packages/kbn-slo-schema @elastic/obs-ux-management-team
x-pack/plugins/snapshot_restore @elastic/kibana-management
packages/solution-nav/es @elastic/appex-sharedux
packages/solution-nav/oblt @elastic/appex-sharedux
packages/solution-nav/analytics @elastic/appex-sharedux @elastic/kibana-data-discovery @elastic/kibana-presentation @elastic/kibana-visualizations
packages/solution-nav/es @elastic/appex-sharedux @elastic/enterprise-search-frontend
packages/solution-nav/oblt @elastic/appex-sharedux @elastic/obs-ux-management-team
packages/kbn-some-dev-log @elastic/kibana-operations
packages/kbn-sort-package-json @elastic/kibana-operations
packages/kbn-sort-predicates @elastic/kibana-visualizations

View file

@ -800,6 +800,7 @@
"@kbn/slo-plugin": "link:x-pack/plugins/observability_solution/slo",
"@kbn/slo-schema": "link:x-pack/packages/kbn-slo-schema",
"@kbn/snapshot-restore-plugin": "link:x-pack/plugins/snapshot_restore",
"@kbn/solution-nav-analytics": "link:packages/solution-nav/analytics",
"@kbn/solution-nav-es": "link:packages/solution-nav/es",
"@kbn/solution-nav-oblt": "link:packages/solution-nav/oblt",
"@kbn/sort-predicates": "link:packages/kbn-sort-predicates",

View file

@ -20,7 +20,16 @@ import type {
AppId as ManagementApp,
DeepLinkId as ManagementLink,
} from '@kbn/deeplinks-management';
import type { AppId as SearchApp, DeepLinkId as SearchLink } from '@kbn/deeplinks-search';
import type {
EnterpriseSearchApp,
EnterpriseSearchContentApp,
EnterpriseSearchApplicationsApp,
EnterpriseSearchAnalyticsApp,
EnterpriseSearchAppsearchApp,
EnterpriseSearchWorkplaceSearchApp,
ServerlessSearchApp,
DeepLinkId as SearchLink,
} from '@kbn/deeplinks-search';
import type {
AppId as ObservabilityApp,
DeepLinkId as ObservabilityLink,
@ -39,7 +48,13 @@ export type AppId =
| AnalyticsApp
| MlApp
| ManagementApp
| SearchApp
| EnterpriseSearchApp
| EnterpriseSearchContentApp
| EnterpriseSearchApplicationsApp
| EnterpriseSearchAnalyticsApp
| EnterpriseSearchAppsearchApp
| EnterpriseSearchWorkplaceSearchApp
| ServerlessSearchApp
| ObservabilityApp
| SecurityApp
| FleetApp

View file

@ -12,6 +12,12 @@ export const DASHBOARD_APP_ID = 'dashboards';
export const VISUALIZE_APP_ID = 'visualize';
export const MAPS_APP_ID = 'maps';
export const CANVAS_APP_ID = 'canvas';
export const GRAPH_APP_ID = 'graph';
export const DISCOVER_ESQL_LOCATOR = 'DISCOVER_ESQL_LOCATOR';
export const DASHBOARD_APP_LOCATOR = 'DASHBOARD_APP_LOCATOR';

View file

@ -11,9 +11,18 @@ import {
DISCOVER_APP_ID,
DISCOVER_ESQL_LOCATOR,
VISUALIZE_APP_ID,
MAPS_APP_ID,
CANVAS_APP_ID,
GRAPH_APP_ID,
} from './constants';
export type AppId = typeof DISCOVER_APP_ID | typeof DASHBOARD_APP_ID | typeof VISUALIZE_APP_ID;
export type AppId =
| typeof DISCOVER_APP_ID
| typeof DASHBOARD_APP_ID
| typeof VISUALIZE_APP_ID
| typeof MAPS_APP_ID
| typeof CANVAS_APP_ID
| typeof GRAPH_APP_ID;
export type DeepLinkId = AppId;

View file

@ -21,3 +21,9 @@ export const SYNTHETICS_APP_ID = 'synthetics';
export const OBSERVABILITY_ONBOARDING_APP_ID = 'observabilityOnboarding';
export const SLO_APP_ID = 'slo';
export const AI_ASSISTANT_APP_ID = 'observabilityAIAssistant';
export const OBLT_UX_APP_ID = 'ux';
export const OBLT_PROFILING_APP_ID = 'profiling';

View file

@ -15,6 +15,9 @@ import {
OBSERVABILITY_OVERVIEW_APP_ID,
SYNTHETICS_APP_ID,
SLO_APP_ID,
AI_ASSISTANT_APP_ID,
OBLT_UX_APP_ID,
OBLT_PROFILING_APP_ID,
} from './constants';
type LogsApp = typeof LOGS_APP_ID;
@ -24,7 +27,10 @@ type MetricsApp = typeof METRICS_APP_ID;
type ApmApp = typeof APM_APP_ID;
type SyntheticsApp = typeof SYNTHETICS_APP_ID;
type ObservabilityOnboardingApp = typeof OBSERVABILITY_ONBOARDING_APP_ID;
type SLO_APP = typeof SLO_APP_ID;
type SloApp = typeof SLO_APP_ID;
type AiAssistantApp = typeof AI_ASSISTANT_APP_ID;
type ObltUxApp = typeof OBLT_UX_APP_ID;
type ObltProfilingApp = typeof OBLT_PROFILING_APP_ID;
export type AppId =
| LogsApp
@ -34,7 +40,10 @@ export type AppId =
| ApmApp
| MetricsApp
| SyntheticsApp
| SLO_APP;
| SloApp
| AiAssistantApp
| ObltUxApp
| ObltProfilingApp;
export type LogsLinkId = 'log-categories' | 'settings' | 'anomalies' | 'stream';
@ -63,7 +72,7 @@ export type ApmLinkId =
export type SyntheticsLinkId = 'certificates' | 'overview';
export type SLOLinkId = 'slo';
export type ProfilingLinkId = 'stacktraces' | 'flamegraphs' | 'functions';
export type LinkId =
| LogsLinkId
@ -71,7 +80,7 @@ export type LinkId =
| MetricsLinkId
| ApmLinkId
| SyntheticsLinkId
| SLOLinkId;
| ProfilingLinkId;
export type DeepLinkId =
| AppId
@ -79,4 +88,5 @@ export type DeepLinkId =
| `${ObservabilityOverviewApp}:${ObservabilityOverviewLinkId}`
| `${MetricsApp}:${MetricsLinkId}`
| `${ApmApp}:${ApmLinkId}`
| `${SyntheticsApp}:${SyntheticsLinkId}`;
| `${SyntheticsApp}:${SyntheticsLinkId}`
| `${ObltProfilingApp}:${ProfilingLinkId}`;

View file

@ -11,6 +11,9 @@ export {
OBSERVABILITY_LOGS_EXPLORER_APP_ID,
OBSERVABILITY_ONBOARDING_APP_ID,
OBSERVABILITY_OVERVIEW_APP_ID,
AI_ASSISTANT_APP_ID,
OBLT_UX_APP_ID,
OBLT_PROFILING_APP_ID,
} from './constants';
export type { AppId, DeepLinkId } from './deep_links';
export * from './locators';

View file

@ -6,5 +6,11 @@
* Side Public License, v 1.
*/
export const ENTERPRISE_SEARCH_APP_ID = 'enterpriseSearch';
export const ENTERPRISE_SEARCH_CONTENT_APP_ID = 'enterpriseSearchContent';
export const ENTERPRISE_SEARCH_APPLICATIONS_APP_ID = 'enterpriseSearchApplications';
export const ENTERPRISE_SEARCH_ANALYTICS_APP_ID = 'enterpriseSearchAnalytics';
export const ENTERPRISE_SEARCH_APPSEARCH_APP_ID = 'appSearch';
export const ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID = 'workplaceSearch';
export const SERVERLESS_ES_APP_ID = 'serverlessElasticsearch';
export const SERVERLESS_ES_CONNECTORS_ID = 'serverlessConnectors';

View file

@ -6,9 +6,41 @@
* Side Public License, v 1.
*/
import { SERVERLESS_ES_APP_ID, SERVERLESS_ES_CONNECTORS_ID } from './constants';
import {
SERVERLESS_ES_APP_ID,
SERVERLESS_ES_CONNECTORS_ID,
ENTERPRISE_SEARCH_APP_ID,
ENTERPRISE_SEARCH_CONTENT_APP_ID,
ENTERPRISE_SEARCH_APPLICATIONS_APP_ID,
ENTERPRISE_SEARCH_ANALYTICS_APP_ID,
ENTERPRISE_SEARCH_APPSEARCH_APP_ID,
ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID,
} from './constants';
export type AppId = typeof SERVERLESS_ES_APP_ID;
export type EnterpriseSearchApp = typeof ENTERPRISE_SEARCH_APP_ID;
export type EnterpriseSearchContentApp = typeof ENTERPRISE_SEARCH_CONTENT_APP_ID;
export type EnterpriseSearchApplicationsApp = typeof ENTERPRISE_SEARCH_APPLICATIONS_APP_ID;
export type EnterpriseSearchAnalyticsApp = typeof ENTERPRISE_SEARCH_ANALYTICS_APP_ID;
export type EnterpriseSearchAppsearchApp = typeof ENTERPRISE_SEARCH_APPSEARCH_APP_ID;
export type EnterpriseSearchWorkplaceSearchApp = typeof ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID;
export type ServerlessSearchApp = typeof SERVERLESS_ES_APP_ID;
export type ConnectorsId = typeof SERVERLESS_ES_CONNECTORS_ID;
export type DeepLinkId = AppId | ConnectorsId;
export type ContentLinkId = 'searchIndices' | 'connectors' | 'webCrawlers' | 'playground';
export type ApplicationsLinkId = 'searchApplications';
export type AppsearchLinkId = 'engines';
export type DeepLinkId =
| EnterpriseSearchApp
| EnterpriseSearchContentApp
| EnterpriseSearchApplicationsApp
| EnterpriseSearchAnalyticsApp
| EnterpriseSearchAppsearchApp
| EnterpriseSearchWorkplaceSearchApp
| ServerlessSearchApp
| ConnectorsId
| `${EnterpriseSearchContentApp}:${ContentLinkId}`
| `${EnterpriseSearchApplicationsApp}:${ApplicationsLinkId}`
| `${EnterpriseSearchAppsearchApp}:${AppsearchLinkId}`;

View file

@ -6,6 +6,24 @@
* Side Public License, v 1.
*/
export { SERVERLESS_ES_APP_ID, SERVERLESS_ES_CONNECTORS_ID } from './constants';
export {
ENTERPRISE_SEARCH_APP_ID,
ENTERPRISE_SEARCH_CONTENT_APP_ID,
ENTERPRISE_SEARCH_APPLICATIONS_APP_ID,
ENTERPRISE_SEARCH_ANALYTICS_APP_ID,
ENTERPRISE_SEARCH_APPSEARCH_APP_ID,
ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID,
SERVERLESS_ES_APP_ID,
SERVERLESS_ES_CONNECTORS_ID,
} from './constants';
export type { AppId, DeepLinkId } from './deep_links';
export type {
EnterpriseSearchApp,
EnterpriseSearchContentApp,
EnterpriseSearchApplicationsApp,
EnterpriseSearchAnalyticsApp,
EnterpriseSearchAppsearchApp,
EnterpriseSearchWorkplaceSearchApp,
ServerlessSearchApp,
DeepLinkId,
} from './deep_links';

View file

@ -0,0 +1,3 @@
# @kbn/solution-nav-analytics
## This package contains the navigation definition for the Analytics in Kibana stateful.

View file

@ -0,0 +1,185 @@
/*
* 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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import { i18n } from '@kbn/i18n';
import type {
SolutionNavigationDefinition,
NavigationTreeDefinition,
} from '@kbn/core-chrome-browser';
import { of } from 'rxjs';
const title = i18n.translate(
'navigation.analyticsNav.headerSolutionSwitcher.analyticsSolutionTitle',
{
defaultMessage: 'Analytics',
}
);
const icon = 'visualizeApp';
const navTree: NavigationTreeDefinition = {
body: [
{ type: 'recentlyAccessed' },
{
type: 'navGroup',
id: 'analytics_project_nav',
title,
icon,
defaultIsCollapsed: false,
isCollapsible: false,
breadcrumbStatus: 'hidden',
children: [
{ link: 'discover' },
{
link: 'dashboards',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/dashboards'));
},
},
{
title: i18n.translate('navigation.analyticsNav.visualizationLinkTitle', {
defaultMessage: 'Visualizations',
}),
link: 'visualize',
getIsActive: ({ pathNameSerialized, prepend }) => {
return (
pathNameSerialized.startsWith(prepend('/app/visualize')) ||
pathNameSerialized.startsWith(prepend('/app/lens'))
);
},
},
{
id: 'moreEditorsGroup',
title: i18n.translate('navigation.analyticsNav.moreEditorsGroupTitle', {
defaultMessage: 'More editors...',
}),
renderAs: 'accordion',
spaceBefore: null,
children: [
{
link: 'canvas',
},
{
link: 'graph',
},
{
link: 'maps',
},
],
},
],
},
],
footer: [
{
title: i18n.translate('navigation.analyticsNav.management.getStarted', {
defaultMessage: 'Get started',
}),
icon: 'launch',
type: 'navItem',
link: 'home',
},
{
type: 'navItem',
id: 'devTools',
title: i18n.translate('navigation.obltNav.devTools', {
defaultMessage: 'Developer tools',
}),
link: 'dev_tools:console',
icon: 'editorCodeBlock',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/dev_tools'));
},
},
{
type: 'navGroup',
id: 'project_settings_project_nav',
title: i18n.translate('navigation.analyticsNav.management', {
defaultMessage: 'Management',
}),
icon: 'gear',
breadcrumbStatus: 'hidden',
children: [
{
link: 'management',
title: i18n.translate('navigation.analyticsNav.mngt', {
defaultMessage: 'Stack Management',
}),
spaceBefore: null,
renderAs: 'panelOpener',
children: [
{
title: 'Ingest',
children: [{ link: 'management:ingest_pipelines' }, { link: 'management:pipelines' }],
},
{
title: 'Data',
children: [
{ link: 'management:index_management' },
{ link: 'management:index_lifecycle_management' },
{ link: 'management:snapshot_restore' },
{ link: 'management:rollup_jobs' },
{ link: 'management:transform' },
{ link: 'management:cross_cluster_replication' },
{ link: 'management:remote_clusters' },
{ link: 'management:migrate_data' },
],
},
{
title: 'Alerts and Insights',
children: [
{ link: 'management:triggersActions' },
{ link: 'management:cases' },
{ link: 'management:triggersActionsConnectors' },
{ link: 'management:reporting' },
{ link: 'management:jobsListLink' },
{ link: 'management:watcher' },
{ link: 'management:maintenanceWindows' },
],
},
{
title: 'Security',
children: [
{ link: 'management:users' },
{ link: 'management:roles' },
{ link: 'management:api_keys' },
{ link: 'management:role_mappings' },
],
},
{
title: 'Kibana',
children: [
{ link: 'management:dataViews' },
{ link: 'management:filesManagement' },
{ link: 'management:objects' },
{ link: 'management:tags' },
{ link: 'management:search_sessions' },
{ link: 'management:spaces' },
{ link: 'management:settings' },
],
},
{
title: 'Stack',
children: [
{ link: 'management:license_management' },
{ link: 'management:upgrade_assistant' },
],
},
],
},
],
},
],
};
export const definition: SolutionNavigationDefinition = {
id: 'analytics',
title,
icon,
homePage: 'home',
navigationTree$: of(navTree),
};

View file

@ -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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
export { definition } from './definition';

View file

@ -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 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
module.exports = {
preset: '@kbn/test',
rootDir: '../../..',
roots: ['<rootDir>/packages/solution-nav/analytics'],
};

View file

@ -0,0 +1,10 @@
{
"type": "shared-common",
"id": "@kbn/solution-nav-analytics",
"owner": [
"@elastic/appex-sharedux",
"@elastic/kibana-data-discovery",
"@elastic/kibana-presentation",
"@elastic/kibana-visualizations"
]
}

View file

@ -0,0 +1,6 @@
{
"name": "@kbn/solution-nav-analytics",
"private": true,
"version": "1.0.0",
"license": "SSPL-1.0 OR Elastic License 2.0"
}

View file

@ -0,0 +1,22 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"outDir": "target/types",
"types": [
"jest",
"node",
"react"
]
},
"include": [
"**/*.ts",
"**/*.tsx",
],
"exclude": [
"target/**/*"
],
"kbn_references": [
"@kbn/i18n",
"@kbn/core-chrome-browser",
]
}

View file

@ -6,37 +6,277 @@
* Side Public License, v 1.
*/
import type { SolutionNavigationDefinition } from '@kbn/core-chrome-browser';
import { i18n } from '@kbn/i18n';
import type {
SolutionNavigationDefinition,
NavigationTreeDefinition,
} from '@kbn/core-chrome-browser';
import { of } from 'rxjs';
const title = i18n.translate('navigation.searchNav.headerSolutionSwitcher.searchSolutionTitle', {
defaultMessage: 'Search',
});
const icon = 'logoElasticsearch';
const navTree: NavigationTreeDefinition = {
body: [
{ type: 'recentlyAccessed' },
{
type: 'navGroup',
id: 'search_project_nav',
title,
icon,
defaultIsCollapsed: false,
isCollapsible: false,
breadcrumbStatus: 'hidden',
children: [
{
link: 'enterpriseSearch',
},
{
id: 'dev_tools',
title: i18n.translate('navigation.searchNav.devTools', {
defaultMessage: 'Dev Tools',
}),
link: 'dev_tools:console',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/dev_tools'));
},
},
{
id: 'kibana',
title: i18n.translate('navigation.searchNav.kibana', {
defaultMessage: 'Kibana',
}),
children: [
{
link: 'discover',
},
{
link: 'dashboards',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/dashboards'));
},
},
],
},
{
id: 'content',
title: i18n.translate('navigation.searchNav.content', {
defaultMessage: 'Content',
}),
children: [
{
link: 'enterpriseSearchContent:searchIndices',
// TODO: Build the children dynamically
// https://github.com/elastic/kibana/issues/179751
// renderAs: 'accordion',
// children: [
// {
// title: i18n.translate(
// 'navigation.searchNav.content.indices.searchGithub.overview',
// {
// defaultMessage: 'Overview',
// }
// ),
// link: 'management:index_management',
// breadcrumbStatus:
// 'hidden' /* management sub-pages set their breadcrumbs themselves */,
// },
// {
// title: i18n.translate(
// 'navigation.searchNav.content.indices.searchGithub.documents',
// {
// defaultMessage: 'Documents',
// }
// ),
// link: 'management:index_management',
// },
// {
// title: i18n.translate(
// 'navigation.searchNav.content.indices.searchGithub.indexMappings',
// {
// defaultMessage: 'Index Mappings',
// }
// ),
// link: 'management:index_management',
// },
// {
// title: i18n.translate(
// 'navigation.searchNav.content.indices.searchGithub.pipelines',
// {
// defaultMessage: 'Pipelines',
// }
// ),
// link: 'management:ingest_pipelines',
// },
// ],
},
{ link: 'enterpriseSearchContent:connectors' },
{ link: 'enterpriseSearchContent:webCrawlers' },
],
},
{
id: 'build',
title: i18n.translate('navigation.searchNav.build', {
defaultMessage: 'Build',
}),
children: [
{
link: 'enterpriseSearchContent:playground',
},
{
title: i18n.translate('navigation.searchNav.build.searchApplications', {
defaultMessage: 'Search applications',
}),
link: 'enterpriseSearchApplications:searchApplications',
// TODO: Build the children dynamically
// https://github.com/elastic/kibana/issues/179751
// renderAs: 'accordion',
// children: [
// {
// title: i18n.translate(
// 'navigation.searchNav.build.searchApplications.docsExplorer',
// {
// defaultMessage: 'Docs explorer',
// }
// ),
// link: 'home',
// },
// {
// title: i18n.translate('navigation.searchNav.build.searchApplications.content', {
// defaultMessage: 'Content',
// }),
// link: 'home',
// },
// {
// title: i18n.translate('navigation.searchNav.build.searchApplications.connect', {
// defaultMessage: 'Connect',
// }),
// link: 'home',
// },
// ],
},
{
link: 'enterpriseSearchAnalytics',
},
],
},
{
id: 'entsearch',
title: i18n.translate('navigation.searchNav.entsearch', {
defaultMessage: 'Enterprise Search',
}),
children: [
{
title: i18n.translate('navigation.searchNav.entsearch.appSearch', {
defaultMessage: 'App Search',
}),
link: 'appSearch:engines',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/enterprise_search/app_search'));
},
},
{
link: 'workplaceSearch',
},
],
},
],
},
],
footer: [
{
type: 'navGroup',
id: 'project_settings_project_nav',
title: i18n.translate('navigation.searchNav.management', {
defaultMessage: 'Management',
}),
icon: 'gear',
breadcrumbStatus: 'hidden',
children: [
{
title: i18n.translate('navigation.searchNav.management.trainedModels', {
defaultMessage: 'Trained models',
}),
link: 'ml:modelManagement',
},
{
link: 'management',
title: i18n.translate('navigation.searchNav.mngt', {
defaultMessage: 'Stack Management',
}),
spaceBefore: null,
renderAs: 'panelOpener',
children: [
{
title: 'Ingest',
children: [{ link: 'management:ingest_pipelines' }, { link: 'management:pipelines' }],
},
{
title: 'Data',
children: [
{ link: 'management:index_management' },
{ link: 'management:index_lifecycle_management' },
{ link: 'management:snapshot_restore' },
{ link: 'management:rollup_jobs' },
{ link: 'management:transform' },
{ link: 'management:cross_cluster_replication' },
{ link: 'management:remote_clusters' },
{ link: 'management:migrate_data' },
],
},
{
title: 'Alerts and Insights',
children: [
{ link: 'management:triggersActions' },
{ link: 'management:cases' },
{ link: 'management:triggersActionsConnectors' },
{ link: 'management:reporting' },
{ link: 'management:jobsListLink' },
{ link: 'management:watcher' },
{ link: 'management:maintenanceWindows' },
],
},
{
title: 'Security',
children: [
{ link: 'management:users' },
{ link: 'management:roles' },
{ link: 'management:api_keys' },
{ link: 'management:role_mappings' },
],
},
{
title: 'Kibana',
children: [
{ link: 'management:dataViews' },
{ link: 'management:filesManagement' },
{ link: 'management:objects' },
{ link: 'management:tags' },
{ link: 'management:search_sessions' },
{ link: 'management:spaces' },
{ link: 'management:settings' },
],
},
{
title: 'Stack',
children: [
{ link: 'management:license_management' },
{ link: 'management:upgrade_assistant' },
],
},
],
},
],
},
],
};
export const definition: SolutionNavigationDefinition = {
id: 'es',
title: 'Search',
icon: 'logoElasticsearch',
homePage: 'dev_tools', // Temp. Wil be updated when all links are registered
navigationTree$: of({
body: [
// Temp. In future work this will be loaded from a package
{
type: 'navGroup',
id: 'search_project_nav',
title: 'Search',
icon: 'logoElasticsearch',
defaultIsCollapsed: false,
isCollapsible: false,
breadcrumbStatus: 'hidden',
children: [
{
id: 'dev_tools',
title: 'Dev Tools',
link: 'dev_tools:console',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/dev_tools'));
},
spaceBefore: 'm',
},
],
},
],
}),
title,
icon,
homePage: 'enterpriseSearch',
navigationTree$: of(navTree),
};

View file

@ -1,5 +1,8 @@
{
"type": "shared-common",
"id": "@kbn/solution-nav-es",
"owner": "@elastic/appex-sharedux"
"owner": [
"@elastic/appex-sharedux",
"@elastic/enterprise-search-frontend"
]
}

View file

@ -17,5 +17,6 @@
],
"kbn_references": [
"@kbn/core-chrome-browser",
"@kbn/i18n",
],
}

View file

@ -5,33 +5,349 @@
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/
import type { SolutionNavigationDefinition } from '@kbn/core-chrome-browser';
import { i18n } from '@kbn/i18n';
import type {
NavigationTreeDefinition,
SolutionNavigationDefinition,
} from '@kbn/core-chrome-browser';
import { of } from 'rxjs';
const title = i18n.translate('navigation.obltNav.headerSolutionSwitcher.obltSolutionTitle', {
defaultMessage: 'Observability',
});
const icon = 'logoObservability';
const navTree: NavigationTreeDefinition = {
body: [
{ type: 'recentlyAccessed' },
{
type: 'navGroup',
id: 'observability_project_nav',
title,
icon,
defaultIsCollapsed: false,
isCollapsible: false,
breadcrumbStatus: 'hidden',
children: [
{
link: 'observability-overview',
},
{
link: 'discover',
renderAs: 'item',
children: [
{
// This is to show "observability-log-explorer" breadcrumbs when navigating from "discover" to "log explorer"
link: 'observability-logs-explorer',
},
],
},
{
link: 'dashboards',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/dashboards'));
},
},
{
link: 'observability-overview:alerts',
},
{
link: 'observability-overview:cases',
renderAs: 'item',
children: [
{
link: 'observability-overview:cases_configure',
},
{
link: 'observability-overview:cases_create',
},
],
},
{
link: 'slo',
},
{
id: 'aiMl',
title: i18n.translate('navigation.obltNav.ml.aiAndMlGroupTitle', {
defaultMessage: 'AI & ML',
}),
renderAs: 'accordion',
children: [
{
link: 'observabilityAIAssistant',
title: i18n.translate('navigation.obltNav.aiMl.aiAssistant', {
defaultMessage: 'AI Assistant',
}),
},
{
link: 'ml:anomalyDetection',
renderAs: 'item',
children: [
{
link: 'ml:singleMetricViewer',
},
{
link: 'ml:anomalyExplorer',
},
{
link: 'ml:settings',
},
],
},
{
title: i18n.translate('navigation.obltNav.ml.logRateAnalysis', {
defaultMessage: 'Log rate analysis',
}),
link: 'ml:logRateAnalysis',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.includes(prepend('/app/ml/aiops/log_rate_analysis'));
},
},
{
link: 'logs:anomalies',
},
{
link: 'logs:log-categories',
},
{
title: i18n.translate('navigation.obltNav.ml.changePointDetection', {
defaultMessage: 'Change point detection',
}),
link: 'ml:changePointDetections',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.includes(prepend('/app/ml/aiops/change_point_detection'));
},
},
{
title: i18n.translate('navigation.obltNav.ml.job.notifications', {
defaultMessage: 'Job notifications',
}),
link: 'ml:notifications',
},
],
},
{
id: 'apm',
title: i18n.translate('navigation.obltNav.applications', {
defaultMessage: 'Applications',
}),
renderAs: 'accordion',
children: [
{
link: 'apm:services',
getIsActive: ({ pathNameSerialized }) => {
const regex = /app\/apm\/.*service.*/;
return regex.test(pathNameSerialized);
},
},
{
link: 'apm:traces',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/apm/traces'));
},
},
{
link: 'apm:dependencies',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/apm/dependencies'));
},
},
{
id: 'synthetics',
title: i18n.translate('navigation.obltNav.apm.syntheticsGroupTitle', {
defaultMessage: 'Synthetics',
}),
renderAs: 'accordion',
children: [
{
link: 'synthetics',
title: i18n.translate('navigation.obltNav.apm.synthetics.monitors', {
defaultMessage: 'Monitors',
}),
},
{ link: 'synthetics:certificates' },
],
},
{ link: 'ux' },
],
},
{
id: 'metrics',
title: i18n.translate('navigation.obltNav.infrastructure', {
defaultMessage: 'Infrastructure',
}),
renderAs: 'accordion',
children: [
{
link: 'metrics:inventory',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/metrics/inventory'));
},
},
{
link: 'metrics:hosts',
getIsActive: ({ pathNameSerialized, prepend }) => {
return pathNameSerialized.startsWith(prepend('/app/metrics/hosts'));
},
},
{
link: 'metrics:metrics-explorer',
},
{
id: 'profiling',
title: i18n.translate('navigation.obltNav.infrastructure.universalProfiling', {
defaultMessage: 'Universal Profiling',
}),
renderAs: 'accordion',
children: [
{
link: 'profiling:stacktraces',
},
{
link: 'profiling:flamegraphs',
},
{
link: 'profiling:functions',
},
],
},
],
},
{
id: 'otherTools',
title: i18n.translate('navigation.obltNav.otherTools', {
defaultMessage: 'Other tools',
}),
renderAs: 'accordion',
children: [
{
link: 'logs:stream',
title: i18n.translate('navigation.obltNav.otherTools.logsStream', {
defaultMessage: 'Logs stream',
}),
},
],
},
],
},
],
footer: [
{
type: 'navItem',
title: i18n.translate('navigation.obltNav.getStarted', {
defaultMessage: 'Get started',
}),
link: 'observabilityOnboarding',
icon: 'launch',
},
{
type: 'navItem',
id: 'devTools',
title: i18n.translate('navigation.obltNav.devTools', {
defaultMessage: 'Developer tools',
}),
link: 'dev_tools',
icon: 'editorCodeBlock',
},
{
type: 'navGroup',
id: 'project_settings_project_nav',
title: i18n.translate('navigation.obltNav.management', {
defaultMessage: 'Management',
}),
icon: 'gear',
breadcrumbStatus: 'hidden',
children: [
{
link: 'management',
title: i18n.translate('navigation.obltNav.stackManagement', {
defaultMessage: 'Stack Management',
}),
renderAs: 'panelOpener',
spaceBefore: null,
children: [
{
title: 'Ingest',
children: [{ link: 'management:ingest_pipelines' }, { link: 'management:pipelines' }],
},
{
title: 'Data',
children: [
{ link: 'management:index_management' },
{ link: 'management:index_lifecycle_management' },
{ link: 'management:snapshot_restore' },
{ link: 'management:rollup_jobs' },
{ link: 'management:transform' },
{ link: 'management:cross_cluster_replication' },
{ link: 'management:remote_clusters' },
{ link: 'management:migrate_data' },
],
},
{
title: 'Alerts and Insights',
children: [
{ link: 'management:triggersActions' },
{ link: 'management:cases' },
{ link: 'management:triggersActionsConnectors' },
{ link: 'management:reporting' },
{ link: 'management:jobsListLink' },
{ link: 'management:watcher' },
{ link: 'management:maintenanceWindows' },
],
},
{
title: 'Security',
children: [
{ link: 'management:users' },
{ link: 'management:roles' },
{ link: 'management:api_keys' },
{ link: 'management:role_mappings' },
],
},
{
title: 'Kibana',
children: [
{ link: 'management:dataViews' },
{ link: 'management:filesManagement' },
{ link: 'management:objects' },
{ link: 'management:tags' },
{ link: 'management:search_sessions' },
{ link: 'management:spaces' },
{ link: 'management:settings' },
],
},
{
title: 'Stack',
children: [
{ link: 'management:license_management' },
{ link: 'management:upgrade_assistant' },
],
},
],
},
{
link: 'integrations',
},
{
link: 'fleet',
},
{
id: 'cloudLinkUserAndRoles',
cloudLink: 'userAndRoles',
},
{
id: 'cloudLinkBilling',
cloudLink: 'billingAndSub',
},
],
},
],
};
export const definition: SolutionNavigationDefinition = {
id: 'oblt',
title: 'Observability',
title,
icon: 'logoObservability',
homePage: 'discover', // Temp. Wil be updated when all links are registered
navigationTree$: of({
body: [
// Temp. In future work this will be loaded from a package
{
type: 'navGroup',
id: 'observability_project_nav',
title: 'Observability',
icon: 'logoObservability',
defaultIsCollapsed: false,
isCollapsible: false,
breadcrumbStatus: 'hidden',
children: [
{
link: 'discover',
spaceBefore: 'm',
},
],
},
],
}),
homePage: 'observabilityOnboarding',
navigationTree$: of(navTree),
};

View file

@ -1,5 +1,8 @@
{
"type": "shared-common",
"id": "@kbn/solution-nav-oblt",
"owner": "@elastic/appex-sharedux"
"owner": [
"@elastic/appex-sharedux",
"@elastic/obs-ux-management-team"
]
}

View file

@ -17,5 +17,6 @@
],
"kbn_references": [
"@kbn/core-chrome-browser",
"@kbn/i18n",
],
}

View file

@ -115,7 +115,7 @@ describe('Navigation Plugin', () => {
expect(coreStart.chrome.project.updateSolutionNavigations).toHaveBeenCalled();
const [arg] = coreStart.chrome.project.updateSolutionNavigations.mock.calls[0];
expect(Object.keys(arg)).toEqual(['es', 'oblt']);
expect(Object.keys(arg)).toEqual(['es', 'oblt', 'analytics']);
expect(coreStart.chrome.project.changeActiveSolutionNavigation).toHaveBeenCalledWith(null);
});

View file

@ -28,6 +28,7 @@ import type {
import { InternalChromeStart } from '@kbn/core-chrome-browser-internal';
import { definition as esDefinition } from '@kbn/solution-nav-es';
import { definition as obltDefinition } from '@kbn/solution-nav-oblt';
import { definition as analyticsDefinition } from '@kbn/solution-nav-analytics';
import type { PanelContentProvider } from '@kbn/shared-ux-chrome-navigation';
import { UserProfileData } from '@kbn/user-profile-components';
import {
@ -278,11 +279,15 @@ export class NavigationPublicPlugin
const solutionNavs: SolutionNavigationDefinitions = {
es: {
...esDefinition,
sideNavComponent: this.getSideNavComponent({ dataTestSubj: 'svlSearchSideNav' }),
sideNavComponent: this.getSideNavComponent({ dataTestSubj: 'searchSideNav' }),
},
oblt: {
...obltDefinition,
sideNavComponent: this.getSideNavComponent({ dataTestSubj: 'svlObservabilitySideNav' }),
sideNavComponent: this.getSideNavComponent({ dataTestSubj: 'observabilitySideNav' }),
},
analytics: {
...analyticsDefinition,
sideNavComponent: this.getSideNavComponent({ dataTestSubj: 'analyticsSideNav' }),
},
};

View file

@ -27,6 +27,7 @@
"@kbn/solution-nav-es",
"@kbn/solution-nav-oblt",
"@kbn/config",
"@kbn/solution-nav-analytics",
"@kbn/kibana-react-plugin",
"@kbn/security-plugin",
"@kbn/user-profile-components",

View file

@ -8,26 +8,26 @@
import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const PageObjects = getPageObjects(['common', 'header', 'home', 'dashboard']);
const PageObjects = getPageObjects(['common', 'header', 'discover', 'dashboard']);
const testSubjects = getService('testSubjects');
const navigation = getService('globalNav');
describe('solution navigation switcher', function describeIndexTests() {
it('should be able to switch between solutions', async () => {
await PageObjects.common.navigateToApp('home');
await PageObjects.common.navigateToApp('discover');
// Default to "search" solution
await testSubjects.existOrFail('svlSearchSideNav');
await testSubjects.missingOrFail('svlObservabilitySideNav');
await testSubjects.existOrFail('searchSideNav');
await testSubjects.missingOrFail('observabilitySideNav');
// Change to "observability" solution
await navigation.changeSolutionNavigation('oblt');
await testSubjects.existOrFail('svlObservabilitySideNav');
await testSubjects.missingOrFail('svlSearchSideNav');
await testSubjects.existOrFail('observabilitySideNav');
await testSubjects.missingOrFail('searchSideNav');
});
it('should contain links to manage deployment and view all deployments', async () => {
await PageObjects.common.navigateToApp('home');
await PageObjects.common.navigateToApp('discover');
await navigation.openSolutionNavSwitcher();

View file

@ -1590,6 +1590,8 @@
"@kbn/slo-schema/*": ["x-pack/packages/kbn-slo-schema/*"],
"@kbn/snapshot-restore-plugin": ["x-pack/plugins/snapshot_restore"],
"@kbn/snapshot-restore-plugin/*": ["x-pack/plugins/snapshot_restore/*"],
"@kbn/solution-nav-analytics": ["packages/solution-nav/analytics"],
"@kbn/solution-nav-analytics/*": ["packages/solution-nav/analytics/*"],
"@kbn/solution-nav-es": ["packages/solution-nav/es"],
"@kbn/solution-nav-es/*": ["packages/solution-nav/es/*"],
"@kbn/solution-nav-oblt": ["packages/solution-nav/oblt"],

View file

@ -5,6 +5,14 @@
* 2.0.
*/
import {
ENTERPRISE_SEARCH_APP_ID,
ENTERPRISE_SEARCH_CONTENT_APP_ID,
ENTERPRISE_SEARCH_APPLICATIONS_APP_ID,
ENTERPRISE_SEARCH_ANALYTICS_APP_ID,
ENTERPRISE_SEARCH_APPSEARCH_APP_ID,
ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID,
} from '@kbn/deeplinks-search';
import { i18n } from '@kbn/i18n';
import { IngestPipelineParams } from '@kbn/search-connectors';
@ -19,7 +27,7 @@ export const ENTERPRISE_SEARCH_PRODUCT_NAME = i18n.translate('xpack.enterpriseSe
});
export const ENTERPRISE_SEARCH_OVERVIEW_PLUGIN = {
ID: 'enterpriseSearch',
ID: ENTERPRISE_SEARCH_APP_ID,
NAME: SEARCH_PRODUCT_NAME,
NAV_TITLE: i18n.translate('xpack.enterpriseSearch.overview.navTitle', {
defaultMessage: 'Overview',
@ -32,7 +40,7 @@ export const ENTERPRISE_SEARCH_OVERVIEW_PLUGIN = {
};
export const ENTERPRISE_SEARCH_CONTENT_PLUGIN = {
ID: 'enterpriseSearchContent',
ID: ENTERPRISE_SEARCH_CONTENT_APP_ID,
NAME: SEARCH_PRODUCT_NAME,
NAV_TITLE: i18n.translate('xpack.enterpriseSearch.content.navTitle', {
defaultMessage: 'Content',
@ -63,7 +71,7 @@ export const AI_SEARCH_PLUGIN = {
};
export const ANALYTICS_PLUGIN = {
ID: 'enterpriseSearchAnalytics',
ID: ENTERPRISE_SEARCH_ANALYTICS_APP_ID,
NAME: i18n.translate('xpack.enterpriseSearch.analytics.productName', {
defaultMessage: 'Behavioral Analytics',
}),
@ -92,7 +100,7 @@ export const ELASTICSEARCH_PLUGIN = {
};
export const APP_SEARCH_PLUGIN = {
ID: 'appSearch',
ID: ENTERPRISE_SEARCH_APPSEARCH_APP_ID,
NAME: i18n.translate('xpack.enterpriseSearch.appSearch.productName', {
defaultMessage: 'App Search',
}),
@ -105,7 +113,7 @@ export const APP_SEARCH_PLUGIN = {
};
export const WORKPLACE_SEARCH_PLUGIN = {
ID: 'workplaceSearch',
ID: ENTERPRISE_SEARCH_WORKPLACESEARCH_APP_ID,
NAME: i18n.translate('xpack.enterpriseSearch.workplaceSearch.productName', {
defaultMessage: 'Workplace Search',
}),
@ -139,7 +147,7 @@ export const SEARCH_EXPERIENCES_PLUGIN = {
};
export const APPLICATIONS_PLUGIN = {
ID: 'enterpriseSearchApplications',
ID: ENTERPRISE_SEARCH_APPLICATIONS_APP_ID,
LOGO: 'logoEnterpriseSearch',
NAME: i18n.translate('xpack.enterpriseSearch.applications.productName', {
defaultMessage: 'Applications',

View file

@ -5,6 +5,8 @@
* 2.0.
*/
import { firstValueFrom } from 'rxjs';
import { ChartsPluginStart } from '@kbn/charts-plugin/public';
import { CloudSetup, CloudStart } from '@kbn/cloud-plugin/public';
import { ConsolePluginStart } from '@kbn/console-plugin/public';
@ -16,11 +18,13 @@ import {
Plugin,
PluginInitializerContext,
DEFAULT_APP_CATEGORIES,
AppDeepLink,
} from '@kbn/core/public';
import { DataPublicPluginStart } from '@kbn/data-plugin/public';
import { GuidedOnboardingPluginStart } from '@kbn/guided-onboarding-plugin/public';
import type { HomePublicPluginSetup } from '@kbn/home-plugin/public';
import { i18n } from '@kbn/i18n';
import { IndexManagementPluginStart } from '@kbn/index-management-plugin/public';
import { LensPublicStart } from '@kbn/lens-plugin/public';
import { LicensingPluginStart } from '@kbn/licensing-plugin/public';
@ -50,6 +54,15 @@ import {
} from '../common/locators/create_index_locator';
import { ClientConfigType, InitialAppData } from '../common/types';
import { ENGINES_PATH } from './applications/app_search/routes';
import { SEARCH_APPLICATIONS_PATH } from './applications/applications/routes';
import {
CONNECTORS_PATH,
SEARCH_INDICES_PATH,
CRAWLERS_PATH,
PLAYGROUND_PATH,
} from './applications/enterprise_search_content/routes';
import { docLinks } from './applications/shared/doc_links';
export interface ClientData extends InitialAppData {
@ -87,6 +100,60 @@ export interface ESConfig {
elasticsearch_host: string;
}
const contentLinks: AppDeepLink[] = [
{
id: 'connectors',
path: `/${CONNECTORS_PATH}`,
title: i18n.translate('xpack.enterpriseSearch.navigation.contentConnectorsLinkLabel', {
defaultMessage: 'Connectors',
}),
},
{
id: 'searchIndices',
path: `/${SEARCH_INDICES_PATH}`,
title: i18n.translate('xpack.enterpriseSearch.navigation.contentIndicesLinkLabel', {
defaultMessage: 'Indices',
}),
},
{
id: 'webCrawlers',
path: `/${CRAWLERS_PATH}`,
title: i18n.translate('xpack.enterpriseSearch.navigation.contentWebcrawlersLinkLabel', {
defaultMessage: 'Web crawlers',
}),
},
{
id: 'playground',
path: `/${PLAYGROUND_PATH}`,
title: i18n.translate('xpack.enterpriseSearch.navigation.contentPlaygroundLinkLabel', {
defaultMessage: 'Playground',
}),
},
];
const applicationsLinks: AppDeepLink[] = [
{
id: 'searchApplications',
path: `/${SEARCH_APPLICATIONS_PATH}`,
title: i18n.translate(
'xpack.enterpriseSearch.navigation.applicationsSearchApplicationsLinkLabel',
{
defaultMessage: 'Search Applications',
}
),
},
];
const appSearchLinks: AppDeepLink[] = [
{
id: 'engines',
path: `/${ENGINES_PATH}`,
title: i18n.translate('xpack.enterpriseSearch.navigation.appSearchEnginesLinkLabel', {
defaultMessage: 'Engines',
}),
},
];
export class EnterpriseSearchPlugin implements Plugin {
private config: ClientConfigType;
@ -130,9 +197,12 @@ export class EnterpriseSearchPlugin implements Plugin {
: undefined;
const plugins = { ...pluginsStart, cloud } as PluginsStart;
coreStart.chrome
.getChromeStyle$()
.subscribe((style) => (this.isSidebarEnabled = style === 'classic'));
const chromeStyle = await firstValueFrom(coreStart.chrome.getChromeStyle$());
this.isSidebarEnabled = chromeStyle === 'classic';
coreStart.chrome.getChromeStyle$().subscribe((style) => {
this.isSidebarEnabled = style === 'classic';
});
return { core: coreStart, isSidebarEnabled: this.isSidebarEnabled, params, plugins };
}
@ -184,6 +254,7 @@ export class EnterpriseSearchPlugin implements Plugin {
core.application.register({
appRoute: ENTERPRISE_SEARCH_CONTENT_PLUGIN.URL,
category: DEFAULT_APP_CATEGORIES.enterpriseSearch,
deepLinks: contentLinks,
euiIconType: ENTERPRISE_SEARCH_CONTENT_PLUGIN.LOGO,
id: ENTERPRISE_SEARCH_CONTENT_PLUGIN.ID,
mount: async (params: AppMountParameters) => {
@ -271,6 +342,7 @@ export class EnterpriseSearchPlugin implements Plugin {
core.application.register({
appRoute: APPLICATIONS_PLUGIN.URL,
category: DEFAULT_APP_CATEGORIES.enterpriseSearch,
deepLinks: applicationsLinks,
euiIconType: APPLICATIONS_PLUGIN.LOGO,
id: APPLICATIONS_PLUGIN.ID,
mount: async (params: AppMountParameters) => {
@ -338,6 +410,7 @@ export class EnterpriseSearchPlugin implements Plugin {
core.application.register({
appRoute: APP_SEARCH_PLUGIN.URL,
category: DEFAULT_APP_CATEGORIES.enterpriseSearch,
deepLinks: appSearchLinks,
euiIconType: ENTERPRISE_SEARCH_OVERVIEW_PLUGIN.LOGO,
id: APP_SEARCH_PLUGIN.ID,
mount: async (params: AppMountParameters) => {

View file

@ -72,6 +72,7 @@
"@kbn/search-connectors-plugin",
"@kbn/search-playground",
"@kbn/utility-types",
"@kbn/index-management-plugin"
"@kbn/index-management-plugin",
"@kbn/deeplinks-search"
]
}

View file

@ -16,6 +16,7 @@ import {
} from '@kbn/core/public';
import type { Logger } from '@kbn/logging';
import { i18n } from '@kbn/i18n';
import { AI_ASSISTANT_APP_ID } from '@kbn/deeplinks-observability';
import type {
ObservabilityAIAssistantAppPluginSetupDependencies,
ObservabilityAIAssistantAppPluginStartDependencies,
@ -49,7 +50,7 @@ export class ObservabilityAIAssistantAppPlugin
pluginsSetup: ObservabilityAIAssistantAppPluginSetupDependencies
): ObservabilityAIAssistantAppPublicSetup {
coreSetup.application.register({
id: 'observabilityAIAssistant',
id: AI_ASSISTANT_APP_ID,
title: i18n.translate('xpack.observabilityAiAssistant.appTitle', {
defaultMessage: 'Observability AI Assistant',
}),

View file

@ -49,7 +49,8 @@
"@kbn/react-kibana-context-theme",
"@kbn/shared-ux-link-redirect-app",
"@kbn/shared-ux-utility",
"@kbn/data-plugin"
"@kbn/data-plugin",
"@kbn/deeplinks-observability"
],
"exclude": ["target/**/*"]
}

View file

@ -16,6 +16,7 @@ import { i18n } from '@kbn/i18n';
import type { NavigationSection } from '@kbn/observability-shared-plugin/public';
import type { Location } from 'history';
import { BehaviorSubject, combineLatest, from, map } from 'rxjs';
import { OBLT_PROFILING_APP_ID } from '@kbn/deeplinks-observability';
import { registerEmbeddables } from './embeddables/register_embeddables';
import { getServices } from './services';
import type { ProfilingPluginPublicSetupDeps, ProfilingPluginPublicStartDeps } from './types';
@ -63,7 +64,7 @@ export class ProfilingPlugin implements Plugin {
}),
entries: links.map((link) => {
return {
app: 'profiling',
app: OBLT_PROFILING_APP_ID,
label: link.title,
path: `${link.path}?kuery=${kuery ?? ''}`,
matchPath: (path) => {
@ -85,7 +86,7 @@ export class ProfilingPlugin implements Plugin {
const profilingFetchServices = getServices();
coreSetup.application.register({
id: 'profiling',
id: OBLT_PROFILING_APP_ID,
title: 'Universal Profiling',
euiIconType: 'logoObservability',
appRoute: '/app/profiling',

View file

@ -52,7 +52,8 @@
"@kbn/profiling-utils",
"@kbn/security-plugin",
"@kbn/shared-ux-utility",
"@kbn/management-settings-components-field-row"
"@kbn/management-settings-components-field-row",
"@kbn/deeplinks-observability"
// add references to other TypeScript projects the plugin depends on
// requiredPlugins from ./kibana.json

View file

@ -47,6 +47,7 @@ import {
ObservabilityAIAssistantPublicSetup,
ObservabilityAIAssistantPublicStart,
} from '@kbn/observability-ai-assistant-plugin/public';
import { OBLT_UX_APP_ID } from '@kbn/deeplinks-observability';
import { SpacesPluginStart } from '@kbn/spaces-plugin/public';
export type UxPluginSetup = void;
@ -100,7 +101,7 @@ export class UxPlugin implements Plugin<UxPluginSetup, UxPluginStart> {
};
plugins.observability.dashboard.register({
appName: 'ux',
appName: OBLT_UX_APP_ID,
hasData: async (params?: HasDataParams) => {
const dataHelper = await getUxDataHelper();
const dataStartPlugin = await getDataStartPlugin(core);
@ -120,7 +121,7 @@ export class UxPlugin implements Plugin<UxPluginSetup, UxPluginStart> {
});
plugins.exploratoryView.register({
appName: 'ux',
appName: OBLT_UX_APP_ID,
hasData: async (params?: HasDataParams) => {
const dataHelper = await getUxDataHelper();
const dataStartPlugin = await getDataStartPlugin(core);
@ -157,7 +158,7 @@ export class UxPlugin implements Plugin<UxPluginSetup, UxPluginStart> {
label: i18n.translate('xpack.ux.overview.heading', {
defaultMessage: 'Dashboard',
}),
app: 'ux',
app: OBLT_UX_APP_ID,
path: '/',
matchFullPath: true,
ignoreTrailingSlash: true,
@ -175,7 +176,7 @@ export class UxPlugin implements Plugin<UxPluginSetup, UxPluginStart> {
const isDev = this.initContext.env.mode.dev;
core.application.register({
id: 'ux',
id: OBLT_UX_APP_ID,
title: 'User Experience',
order: 8500,
euiIconType: 'logoObservability',

View file

@ -45,6 +45,7 @@
"@kbn/shared-ux-link-redirect-app",
"@kbn/apm-data-view",
"@kbn/spaces-plugin",
"@kbn/deeplinks-observability"
],
"exclude": ["target/**/*"]
}

View file

@ -6226,6 +6226,10 @@
version "0.0.0"
uid ""
"@kbn/solution-nav-analytics@link:packages/solution-nav/analytics":
version "0.0.0"
uid ""
"@kbn/solution-nav-es@link:packages/solution-nav/es":
version "0.0.0"
uid ""