Skip to content

Commit

Permalink
[8.x] [Solution nav] Use flyout for Stack Management in Search and Ob…
Browse files Browse the repository at this point in the history
…servability solutions (#208632) (#210630)

# Backport

This will backport the following commits from `main` to `8.x`:
- [[Solution nav] Use flyout for Stack Management in Search and
Observability solutions
(#208632)](#208632)

<!--- Backport version: 9.4.3 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sqren/backport)

<!--BACKPORT [{"author":{"name":"Tim
Sullivan","email":"tsullivan@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-02-11T16:14:32Z","message":"[Solution
nav] Use flyout for Stack Management in Search and Observability
solutions (#208632)\n\n## Summary\r\n\r\nCloses
https://github.com/elastic/kibana/issues/208636\r\nPart of
https://github.com/elastic/kibana-team/issues/1439\r\n\r\n###
Checklist\r\n\r\nCheck the PR satisfies following conditions.
\r\n\r\nReviewers should verify this PR satisfies this list as
well.\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common scenarios\r\n\r\n### Identify
risks\r\n\r\nDoes this PR introduce any risks? For example, consider
risks like hard\r\nto test bugs, performance regression, potential of
data loss.\r\n\r\nDescribe the risk, its severity, and mitigation for
each identified\r\nrisk. Invite stakeholders and evaluate how to proceed
before merging.\r\n\r\n- [ ] New lists of Stack Management navigation
items were added for\r\nflyout menus in serverless projects using static
declarations. There is\r\na risk that these lists have missing items,
which could hurt user\r\nexperience by making the pages harder to
navigate to.\r\n\r\n### Screenshots\r\n<details><summary>Observability /
Serverless</summary>\r\n\r\n![optimized-serverless-observability 4
48\r\n01 PM](https://github.com/user-attachments/assets/03d40840-385c-4a89-a181-a9b5ba82f820)\r\n\r\n</details>\r\n<details><summary>Observability
/ Stateful</summary>\r\n\r\n![optimized-stateful-observability 4
48\r\n01 PM](https://github.com/user-attachments/assets/e267e87a-584c-406d-8fea-99788fb2c0dd)\r\n\r\n</details>\r\n<details><summary>Search
/ Serverless</summary>\r\n\r\n![optimized-serverless-search 4
48\r\n01 PM](https://github.com/user-attachments/assets/258da8ec-5144-4439-b29f-b894b28963ad)\r\n\r\n</details>\r\n<details><summary>Search
/ Stateful</summary>\r\n\r\n![optimized-stateful-search 4
48\r\n01 PM](https://github.com/user-attachments/assets/fd6db7bb-536b-4804-950b-00f6716663ac)","sha":"f16446486c7695a13f564d53f7d630337a9a50e8","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","v9.0.0","Team:SharedUX","ci:project-deploy-observability","Team:obs-ux-management","backport:version","v8.18.0","v9.1.0","v8.19.0"],"title":"[Solution
nav] Use flyout for Stack Management in Search and Observability
solutions","number":208632,"url":"https://github.com/elastic/kibana/pull/208632","mergeCommit":{"message":"[Solution
nav] Use flyout for Stack Management in Search and Observability
solutions (#208632)\n\n## Summary\r\n\r\nCloses
https://github.com/elastic/kibana/issues/208636\r\nPart of
https://github.com/elastic/kibana-team/issues/1439\r\n\r\n###
Checklist\r\n\r\nCheck the PR satisfies following conditions.
\r\n\r\nReviewers should verify this PR satisfies this list as
well.\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common scenarios\r\n\r\n### Identify
risks\r\n\r\nDoes this PR introduce any risks? For example, consider
risks like hard\r\nto test bugs, performance regression, potential of
data loss.\r\n\r\nDescribe the risk, its severity, and mitigation for
each identified\r\nrisk. Invite stakeholders and evaluate how to proceed
before merging.\r\n\r\n- [ ] New lists of Stack Management navigation
items were added for\r\nflyout menus in serverless projects using static
declarations. There is\r\na risk that these lists have missing items,
which could hurt user\r\nexperience by making the pages harder to
navigate to.\r\n\r\n### Screenshots\r\n<details><summary>Observability /
Serverless</summary>\r\n\r\n![optimized-serverless-observability 4
48\r\n01 PM](https://github.com/user-attachments/assets/03d40840-385c-4a89-a181-a9b5ba82f820)\r\n\r\n</details>\r\n<details><summary>Observability
/ Stateful</summary>\r\n\r\n![optimized-stateful-observability 4
48\r\n01 PM](https://github.com/user-attachments/assets/e267e87a-584c-406d-8fea-99788fb2c0dd)\r\n\r\n</details>\r\n<details><summary>Search
/ Serverless</summary>\r\n\r\n![optimized-serverless-search 4
48\r\n01 PM](https://github.com/user-attachments/assets/258da8ec-5144-4439-b29f-b894b28963ad)\r\n\r\n</details>\r\n<details><summary>Search
/ Stateful</summary>\r\n\r\n![optimized-stateful-search 4
48\r\n01 PM](https://github.com/user-attachments/assets/fd6db7bb-536b-4804-950b-00f6716663ac)","sha":"f16446486c7695a13f564d53f7d630337a9a50e8"}},"sourceBranch":"main","suggestedTargetBranches":["9.0","8.18","8.x"],"targetPullRequestStates":[{"branch":"9.0","label":"v9.0.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"8.18","label":"v8.18.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/208632","number":208632,"mergeCommit":{"message":"[Solution
nav] Use flyout for Stack Management in Search and Observability
solutions (#208632)\n\n## Summary\r\n\r\nCloses
https://github.com/elastic/kibana/issues/208636\r\nPart of
https://github.com/elastic/kibana-team/issues/1439\r\n\r\n###
Checklist\r\n\r\nCheck the PR satisfies following conditions.
\r\n\r\nReviewers should verify this PR satisfies this list as
well.\r\n\r\n- [x] [Unit or
functional\r\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\r\nwere
updated or added to match the most common scenarios\r\n\r\n### Identify
risks\r\n\r\nDoes this PR introduce any risks? For example, consider
risks like hard\r\nto test bugs, performance regression, potential of
data loss.\r\n\r\nDescribe the risk, its severity, and mitigation for
each identified\r\nrisk. Invite stakeholders and evaluate how to proceed
before merging.\r\n\r\n- [ ] New lists of Stack Management navigation
items were added for\r\nflyout menus in serverless projects using static
declarations. There is\r\na risk that these lists have missing items,
which could hurt user\r\nexperience by making the pages harder to
navigate to.\r\n\r\n### Screenshots\r\n<details><summary>Observability /
Serverless</summary>\r\n\r\n![optimized-serverless-observability 4
48\r\n01 PM](https://github.com/user-attachments/assets/03d40840-385c-4a89-a181-a9b5ba82f820)\r\n\r\n</details>\r\n<details><summary>Observability
/ Stateful</summary>\r\n\r\n![optimized-stateful-observability 4
48\r\n01 PM](https://github.com/user-attachments/assets/e267e87a-584c-406d-8fea-99788fb2c0dd)\r\n\r\n</details>\r\n<details><summary>Search
/ Serverless</summary>\r\n\r\n![optimized-serverless-search 4
48\r\n01 PM](https://github.com/user-attachments/assets/258da8ec-5144-4439-b29f-b894b28963ad)\r\n\r\n</details>\r\n<details><summary>Search
/ Stateful</summary>\r\n\r\n![optimized-stateful-search 4
48\r\n01 PM](https://github.com/user-attachments/assets/fd6db7bb-536b-4804-950b-00f6716663ac)","sha":"f16446486c7695a13f564d53f7d630337a9a50e8"}},{"branch":"8.x","label":"v8.19.0","branchLabelMappingKey":"^v8.19.0$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->

---------

Co-authored-by: Tim Sullivan <tsullivan@users.noreply.github.com>
Co-authored-by: Timothy Sullivan <tsullivan@elastic.co>
  • Loading branch information
3 people authored Feb 11, 2025
1 parent fae24a9 commit 530f532
Show file tree
Hide file tree
Showing 10 changed files with 168 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ export type ManagementId =
| 'cross_cluster_replication'
| 'dataViews'
| 'data_quality'
| 'data_usage'
| 'filesManagement'
| 'license_management'
| 'index_lifecycle_management'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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',
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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', {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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');
Expand Down Expand Up @@ -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',
Expand Down
23 changes: 10 additions & 13 deletions x-pack/test_serverless/functional/test_suites/search/navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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']);
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down

0 comments on commit 530f532

Please sign in to comment.