diff --git a/src/platform/packages/shared/deeplinks/management/deep_links.ts b/src/platform/packages/shared/deeplinks/management/deep_links.ts index 4b47c6c6a4602..567367067d522 100644 --- a/src/platform/packages/shared/deeplinks/management/deep_links.ts +++ b/src/platform/packages/shared/deeplinks/management/deep_links.ts @@ -36,6 +36,7 @@ export type ManagementId = | 'cross_cluster_replication' | 'dataViews' | 'data_quality' + | 'data_usage' | 'filesManagement' | 'license_management' | 'index_lifecycle_management' diff --git a/x-pack/solutions/observability/plugins/observability/public/navigation_tree.ts b/x-pack/solutions/observability/plugins/observability/public/navigation_tree.ts index 16718648c9724..99015588cf340 100644 --- a/x-pack/solutions/observability/plugins/observability/public/navigation_tree.ts +++ b/x-pack/solutions/observability/plugins/observability/public/navigation_tree.ts @@ -465,7 +465,6 @@ function createNavTree({ streamsAvailable }: { streamsAvailable?: boolean }) { children: [ { id: 'stack_management', // This id can't be changed as we use it to open the panel programmatically - link: 'management', title: i18n.translate('xpack.observability.obltNav.stackManagement', { defaultMessage: 'Stack Management', }), diff --git a/x-pack/solutions/observability/plugins/serverless_observability/public/navigation_tree.ts b/x-pack/solutions/observability/plugins/serverless_observability/public/navigation_tree.ts index e6fb3c9107306..de9630f22e557 100644 --- a/x-pack/solutions/observability/plugins/serverless_observability/public/navigation_tree.ts +++ b/x-pack/solutions/observability/plugins/serverless_observability/public/navigation_tree.ts @@ -368,10 +368,73 @@ export const createNavigationTree = ({ breadcrumbStatus: 'hidden', children: [ { - link: 'management', + id: 'management', title: i18n.translate('xpack.serverlessObservability.nav.mngt', { defaultMessage: 'Management', }), + spaceBefore: null, + renderAs: 'panelOpener', + children: [ + { + title: i18n.translate('xpack.serverlessObservability.nav.mngt.data', { + defaultMessage: 'Data', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:index_management', breadcrumbStatus: 'hidden' }, + { link: 'management:transform', breadcrumbStatus: 'hidden' }, + { link: 'management:ingest_pipelines', breadcrumbStatus: 'hidden' }, + { link: 'management:dataViews', breadcrumbStatus: 'hidden' }, + { link: 'management:jobsListLink', breadcrumbStatus: 'hidden' }, + { link: 'management:pipelines', breadcrumbStatus: 'hidden' }, + { link: 'management:data_quality', breadcrumbStatus: 'hidden' }, + { link: 'management:data_usage', breadcrumbStatus: 'hidden' }, + ], + }, + { + title: i18n.translate('xpack.serverlessObservability.nav.mngt.access', { + defaultMessage: 'Access', + }), + breadcrumbStatus: 'hidden', + children: [{ link: 'management:api_keys', breadcrumbStatus: 'hidden' }], + }, + { + title: i18n.translate('xpack.serverlessObservability.nav.mngt.alertsAndInsights', { + defaultMessage: 'Alerts and insights', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:triggersActionsConnectors', breadcrumbStatus: 'hidden' }, + { link: 'management:maintenanceWindows', breadcrumbStatus: 'hidden' }, + ], + }, + { + title: i18n.translate('xpack.serverlessObservability.nav.mngt.content', { + defaultMessage: 'Content', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:spaces', breadcrumbStatus: 'hidden' }, + { link: 'management:objects', breadcrumbStatus: 'hidden' }, + { link: 'management:filesManagement', breadcrumbStatus: 'hidden' }, + { link: 'management:reporting', breadcrumbStatus: 'hidden' }, + { link: 'management:tags', breadcrumbStatus: 'hidden' }, + ], + }, + { + title: i18n.translate('xpack.serverlessObservability.nav.mngt.other', { + defaultMessage: 'Other', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:settings', breadcrumbStatus: 'hidden' }, + { + link: 'management:observabilityAiAssistantManagement', + breadcrumbStatus: 'hidden', + }, + ], + }, + ], }, { link: 'integrations', diff --git a/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts b/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts index f1ac59dfbb14a..9c9b1f57c27f2 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/public/navigation_tree.ts @@ -358,7 +358,6 @@ export const getNavigationTreeDefinition = ({ }, ], id: 'stack_management', // This id can't be changed as we use it to open the panel programmatically - link: 'management', renderAs: 'panelOpener', spaceBefore: null, title: i18n.translate('xpack.enterpriseSearch.searchNav.mngt', { diff --git a/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts b/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts index 335d5741f1e33..1e8e8d927a6c2 100644 --- a/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts +++ b/x-pack/solutions/search/plugins/serverless_search/public/navigation_tree.ts @@ -163,10 +163,86 @@ export const navigationTree = ({ isAppRegistered }: ApplicationStart): Navigatio }), }, { - link: 'management', + id: 'management', title: i18n.translate('xpack.serverlessSearch.nav.mngt', { defaultMessage: 'Management', }), + spaceBefore: null, + renderAs: 'panelOpener', + children: [ + { + title: i18n.translate('xpack.serverlessSearch.nav.mngt.data', { + defaultMessage: 'Data', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:index_management', breadcrumbStatus: 'hidden' }, + { link: 'management:transform', breadcrumbStatus: 'hidden' }, + { link: 'management:ingest_pipelines', breadcrumbStatus: 'hidden' }, + { link: 'management:dataViews', breadcrumbStatus: 'hidden' }, + { link: 'management:jobsListLink', breadcrumbStatus: 'hidden' }, + { link: 'management:pipelines', breadcrumbStatus: 'hidden' }, + { link: 'management:data_quality', breadcrumbStatus: 'hidden' }, + { link: 'management:data_usage', breadcrumbStatus: 'hidden' }, + ], + }, + { + title: i18n.translate('xpack.serverlessSearch.nav.mngt.access', { + defaultMessage: 'Access', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:api_keys', breadcrumbStatus: 'hidden' }, + { link: 'management:roles', breadcrumbStatus: 'hidden' }, + { + cloudLink: 'userAndRoles', + title: i18n.translate('xpack.serverlessSearch.nav.mngt.access.userAndRoles', { + defaultMessage: 'Manage Organization Members', + }), + }, + ], + }, + { + title: i18n.translate('xpack.serverlessSearch.nav.mngt.alertsAndInsights', { + defaultMessage: 'Alerts and insights', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:triggersActions', breadcrumbStatus: 'hidden' }, + { link: 'management:triggersActionsConnectors', breadcrumbStatus: 'hidden' }, + ], + }, + { + title: i18n.translate('xpack.serverlessSearch.nav.mngt.content', { + defaultMessage: 'Content', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:spaces', breadcrumbStatus: 'hidden' }, + { link: 'management:objects', breadcrumbStatus: 'hidden' }, + { link: 'management:filesManagement', breadcrumbStatus: 'hidden' }, + { link: 'management:reporting', breadcrumbStatus: 'hidden' }, + { link: 'management:tags', breadcrumbStatus: 'hidden' }, + ], + }, + { + title: i18n.translate('xpack.serverlessSearch.nav.mngt.other', { + defaultMessage: 'Other', + }), + breadcrumbStatus: 'hidden', + children: [ + { link: 'management:settings', breadcrumbStatus: 'hidden' }, + { + link: 'management:observabilityAiAssistantManagement', + breadcrumbStatus: 'hidden', + title: i18n.translate( + 'xpack.serverlessSearch.nav.mngt.other.aiAssistantSettings', + { defaultMessage: 'AI Assistant Settings' } + ), + }, + ], + }, + ], }, { id: 'cloudLinkDeployment', diff --git a/x-pack/test/functional_solution_sidenav/tests/observability_sidenav.ts b/x-pack/test/functional_solution_sidenav/tests/observability_sidenav.ts index 8a93ffde38346..9e643dfdeb9a5 100644 --- a/x-pack/test/functional_solution_sidenav/tests/observability_sidenav.ts +++ b/x-pack/test/functional_solution_sidenav/tests/observability_sidenav.ts @@ -80,8 +80,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // navigate to a different section await solutionNavigation.sidenav.openSection('project_settings_project_nav'); - await solutionNavigation.sidenav.clickLink({ deepLinkId: 'management' }); - await solutionNavigation.sidenav.expectLinkActive({ deepLinkId: 'management' }); + await solutionNavigation.sidenav.clickLink({ navId: 'stack_management' }); + await solutionNavigation.sidenav.expectLinkActive({ navId: 'stack_management' }); + await solutionNavigation.sidenav.clickPanelLink('management:tags'); await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Stack Management' }); // navigate back to the home page using header logo diff --git a/x-pack/test/functional_solution_sidenav/tests/search_sidenav.ts b/x-pack/test/functional_solution_sidenav/tests/search_sidenav.ts index f90ea3e7b705f..a954cc907800d 100644 --- a/x-pack/test/functional_solution_sidenav/tests/search_sidenav.ts +++ b/x-pack/test/functional_solution_sidenav/tests/search_sidenav.ts @@ -62,8 +62,9 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // navigate to a different section await solutionNavigation.sidenav.openSection('project_settings_project_nav'); - await solutionNavigation.sidenav.clickLink({ deepLinkId: 'management' }); - await solutionNavigation.sidenav.expectLinkActive({ deepLinkId: 'management' }); + await solutionNavigation.sidenav.clickLink({ navId: 'stack_management' }); + await solutionNavigation.sidenav.expectLinkActive({ navId: 'stack_management' }); + await solutionNavigation.sidenav.clickPanelLink('management:tags'); await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Stack Management' }); // navigate back to the home page using header logo diff --git a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts index 428d346386b98..4298bb4bb7313 100644 --- a/x-pack/test_serverless/functional/test_suites/observability/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/observability/navigation.ts @@ -50,9 +50,10 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'AI Assistant' }); // navigate to a different section await svlCommonNavigation.sidenav.openSection('project_settings_project_nav'); - await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management' }); - await svlCommonNavigation.sidenav.expectLinkActive({ deepLinkId: 'management' }); - await svlCommonNavigation.breadcrumbs.expectBreadcrumbExists({ deepLinkId: 'management' }); + await svlCommonNavigation.sidenav.clickLink({ navId: 'management' }); + await svlCommonNavigation.sidenav.expectLinkActive({ navId: 'management' }); + await svlCommonNavigation.sidenav.clickPanelLink('management:tags'); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Management', 'Tags']); // navigate back to serverless oblt overview await svlCommonNavigation.clickLogo(); @@ -66,7 +67,8 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { it('active sidenav section is auto opened on load', async () => { await svlCommonNavigation.sidenav.openSection('project_settings_project_nav'); - await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management' }); + await svlCommonNavigation.sidenav.clickLink({ navId: 'management' }); + await svlCommonNavigation.sidenav.clickPanelLink('management:tags'); await browser.refresh(); await svlCommonNavigation.expectExists(); await svlCommonNavigation.sidenav.expectSectionOpen('project_settings_project_nav'); @@ -135,8 +137,8 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { it('navigates to maintenance windows', async () => { await svlCommonNavigation.sidenav.openSection('project_settings_project_nav'); - await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management' }); - await testSubjects.click('app-card-maintenanceWindows'); + await svlCommonNavigation.sidenav.clickLink({ navId: 'management' }); + await svlCommonNavigation.sidenav.clickPanelLink('management:maintenanceWindows'); await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts([ 'Management', 'Maintenance Windows', diff --git a/x-pack/test_serverless/functional/test_suites/search/navigation.ts b/x-pack/test_serverless/functional/test_suites/search/navigation.ts index 960b0987183ee..65b9530dfd667 100644 --- a/x-pack/test_serverless/functional/test_suites/search/navigation.ts +++ b/x-pack/test_serverless/functional/test_suites/search/navigation.ts @@ -184,16 +184,10 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { deepLinkId: 'ml:modelManagement', }); // > Management - await solutionNavigation.sidenav.clickLink({ - deepLinkId: 'management', - }); - await solutionNavigation.sidenav.expectLinkActive({ - deepLinkId: 'management', - }); - await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ text: 'Management' }); - await solutionNavigation.breadcrumbs.expectBreadcrumbExists({ - deepLinkId: 'management', - }); + await solutionNavigation.sidenav.clickLink({ navId: 'management' }); + await solutionNavigation.sidenav.expectLinkActive({ navId: 'management' }); + await svlCommonNavigation.sidenav.clickPanelLink('management:tags'); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Management', 'Tags']); // navigate back to serverless search overview await svlCommonNavigation.clickLogo(); @@ -226,9 +220,12 @@ export default function ({ getPageObject, getService }: FtrProviderContext) { it('navigate management', async () => { await svlCommonNavigation.sidenav.openSection('project_settings_project_nav'); - await svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management' }); - await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Management']); - await testSubjects.click('app-card-dataViews'); + await svlCommonNavigation.sidenav.clickLink({ navId: 'management' }); + await svlCommonNavigation.sidenav.clickPanelLink('management:tags'); + await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Management', 'Tags']); + + await svlCommonNavigation.sidenav.clickLink({ navId: 'management' }); + await svlCommonNavigation.sidenav.clickPanelLink('management:dataViews'); await svlCommonNavigation.breadcrumbs.expectBreadcrumbTexts(['Management', 'Data views']); }); diff --git a/x-pack/test_serverless/functional/test_suites/search/pipelines.ts b/x-pack/test_serverless/functional/test_suites/search/pipelines.ts index 9cb53310e5405..2c9164926f82d 100644 --- a/x-pack/test_serverless/functional/test_suites/search/pipelines.ts +++ b/x-pack/test_serverless/functional/test_suites/search/pipelines.ts @@ -20,8 +20,8 @@ export default function ({ getPageObjects }: FtrProviderContext) { before(async () => { await pageObjects.svlCommonPage.loginWithRole('developer'); await pageObjects.svlCommonNavigation.sidenav.openSection('project_settings_project_nav'); - await pageObjects.svlCommonNavigation.sidenav.clickLink({ deepLinkId: 'management' }); - await pageObjects.svlManagementPage.clickIngestPipelinesManagementCard(); + await pageObjects.svlCommonNavigation.sidenav.clickLink({ navId: 'management' }); + await pageObjects.svlCommonNavigation.sidenav.clickPanelLink('management:ingest_pipelines'); }); it('has embedded console', async () => {