Skip to content

Commit ed307e4

Browse files
authored
[SideNav] Open sidenav panel when on legacy management page (#241003)
## Summary close #240275 If we add the legacy management landing page into navigation tree structure but hide it from the sidenav then the navigation panel opens when you visit the legacy management page. You can land to that landing page by direct URL, breadcrumb or global search. This is how it going to look in serverless: <img width="2114" height="1249" alt="Image" src="https://github.com/user-attachments/assets/77312196-f290-428d-9ff6-9b078111d51a" /> Non-serverless: <img width="2114" height="1249" alt="Image" src="https://github.com/user-attachments/assets/2480175c-e233-420b-9c97-a3f332d62f23" />
1 parent 7cdd10f commit ed307e4

File tree

19 files changed

+129
-19
lines changed

19 files changed

+129
-19
lines changed

src/core/packages/chrome/browser-internal/src/ui/project/sidenav_v2/navigation/to_navigation_items.test.tsx

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,3 +282,46 @@ describe('empty panel opener', () => {
282282
expect(primaryItems.find((item) => item.id === 'securityGroup:rules')).toBeUndefined();
283283
});
284284
});
285+
286+
describe('hidden panel link', () => {
287+
// https://github.com/elastic/kibana/issues/240275
288+
it('should remove panel links marked as hidden, but should keep opener active', () => {
289+
const tree = structuredClone(navigationTree);
290+
// @ts-expect-error to avoid excess type checking for test
291+
const stackManagementNode = tree.footer[0].children[2].children[0];
292+
stackManagementNode.children.push({
293+
link: 'management',
294+
sideNavStatus: 'hidden',
295+
});
296+
297+
// Add management link under stack management section
298+
const {
299+
navItems: { footerItems },
300+
activeItemId,
301+
} = createNavigationItems(tree, [
302+
[
303+
// @ts-expect-error to avoid excess type checking for test
304+
tree.footer[0],
305+
// @ts-expect-error to avoid excess type checking for test
306+
tree.footer[0].children[2],
307+
stackManagementNode,
308+
stackManagementNode.children[stackManagementNode.children.length - 1],
309+
],
310+
]);
311+
312+
// No management link under Stack Management
313+
expect(footerItems[2]!.sections!.map((s) => s.label)).toMatchInlineSnapshot(`
314+
Array [
315+
"Ingest",
316+
"Data",
317+
"Alerts and Insights",
318+
"Security",
319+
"Kibana",
320+
"Stack",
321+
]
322+
`);
323+
324+
// But management panel is considered active
325+
expect(activeItemId).toBe('stack_management');
326+
});
327+
});

src/platform/plugins/shared/management/public/components/landing/solution_empty_prompt.tsx

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import React, { type FC } from 'react';
1010
import { FormattedMessage } from '@kbn/i18n-react';
1111
import { i18n } from '@kbn/i18n';
12-
import { EuiButton, EuiLink } from '@elastic/eui';
12+
import { EuiLink } from '@elastic/eui';
1313
import { type CoreStart } from '@kbn/core/public';
1414
import { KibanaPageTemplate } from '@kbn/shared-ux-page-kibana-template';
1515

@@ -92,19 +92,10 @@ export const SolutionEmptyPrompt: FC<Props> = ({ kibanaVersion, coreStart }) =>
9292
</p>
9393

9494
<p>
95-
<EuiButton
96-
fill
97-
iconType="spaces"
98-
onClick={() => {
99-
coreStart.chrome.sideNav.setPanelSelectedNode('stack_management');
100-
}}
101-
data-test-subj="viewAllStackMngtPagesButton"
102-
>
103-
<FormattedMessage
104-
id="management.landing.solution.viewAllPagesButton"
105-
defaultMessage="View all pages"
106-
/>
107-
</EuiButton>
95+
<FormattedMessage
96+
id="management.landing.text"
97+
defaultMessage="A complete list of apps is in the menu on the left."
98+
/>
10899
</p>
109100
</>
110101
}

src/platform/test/functional/page_objects/solution_navigation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ export function SolutionNavigationProvider(ctx: Pick<FtrProviderContext, 'getSer
356356
},
357357
async expectPanelExists(sectionId: NavigationId) {
358358
log.debug('SolutionNavigation.sidenav.expectPanelExists', sectionId);
359-
await testSubjects.existOrFail(`~sideNavPanel-id-${sectionId}`, {
359+
await testSubjects.existOrFail(`~side-navigation-panel_${sectionId}`, {
360360
timeout: TIMEOUT_CHECK,
361361
});
362362
},

x-pack/platform/plugins/private/translations/translations/de-DE.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5795,7 +5795,6 @@
57955795
"management.landing.header": "Willkommen beim Stack-Management {version}",
57965796
"management.landing.solution.header": "Stack-Management {version}",
57975797
"management.landing.solution.subhead": "Verwalten Sie Ihre {indicesLink}, {dataViewsLink}, {ingestPipelinesLink}, {usersLink} und vieles mehr.",
5798-
"management.landing.solution.viewAllPagesButton": "Alle Seiten anzeigen",
57995798
"management.landing.subhead": "Verwalten Sie Ihre Indizes, Datenquellen, gespeicherten Objekte, Kibana-Einstellungen und mehr.",
58005799
"management.landing.subhead.dataViewsLink": "Datenquellen",
58015800
"management.landing.subhead.indicesLink": "Index",

x-pack/platform/plugins/private/translations/translations/fr-FR.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5824,7 +5824,6 @@
58245824
"management.landing.header": "Bienvenue dans Gestion de la Suite {version}",
58255825
"management.landing.solution.header": "Gestion de la Suite {version}",
58265826
"management.landing.solution.subhead": "Gérez vos {indicesLink}, {dataViewsLink}, {ingestPipelinesLink}, {usersLink}, et plus encore.",
5827-
"management.landing.solution.viewAllPagesButton": "Afficher toutes les pages",
58285827
"management.landing.subhead": "Gérez vos index, vues de données, objets enregistrés, paramètres Kibana et plus encore.",
58295828
"management.landing.subhead.dataViewsLink": "Les vues de données sont introuvables",
58305829
"management.landing.subhead.indicesLink": "index système non migrés",

x-pack/platform/plugins/private/translations/translations/ja-JP.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5827,7 +5827,6 @@
58275827
"management.landing.header": "Stack Management {version}へようこそ",
58285828
"management.landing.solution.header": "スタック管理{version}",
58295829
"management.landing.solution.subhead": "{indicesLink}、{dataViewsLink}、{ingestPipelinesLink}、{usersLink}などを管理します。",
5830-
"management.landing.solution.viewAllPagesButton": "すべてのページを表示",
58315830
"management.landing.subhead": "インデックス、データビュー、保存されたオブジェクト、Kibanaの設定、その他を管理します。",
58325831
"management.landing.subhead.dataViewsLink": "データビュー",
58335832
"management.landing.subhead.indicesLink": "インデックス",

x-pack/platform/plugins/private/translations/translations/zh-CN.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5820,7 +5820,6 @@
58205820
"management.landing.header": "欢迎使用 Stack Management {version}",
58215821
"management.landing.solution.header": "Stack Management {version}",
58225822
"management.landing.solution.subhead": "管理您的 {indicesLink}、{dataViewsLink}、{ingestPipelinesLink}、{usersLink} 等。",
5823-
"management.landing.solution.viewAllPagesButton": "查看所有页面",
58245823
"management.landing.subhead": "管理您的索引、数据视图、已保存对象、Kibana 设置等等。",
58255824
"management.landing.subhead.dataViewsLink": "数据视图",
58265825
"management.landing.subhead.indicesLink": "索引",

x-pack/solutions/observability/plugins/observability/public/navigation_tree.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,12 @@ function createNavTree({ streamsAvailable }: { streamsAvailable?: boolean }) {
605605
},
606606
],
607607
},
608+
{
609+
// We include this link here to ensure that sidenav panel opens when user lands to legacy management landing page
610+
// https://github.com/elastic/kibana/issues/240275
611+
link: 'management',
612+
sideNavStatus: 'hidden',
613+
},
608614
],
609615
},
610616
],

x-pack/solutions/observability/plugins/serverless_observability/public/navigation_tree.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,12 @@ export const createNavigationTree = ({
547547
breadcrumbStatus: 'hidden',
548548
children: [{ link: 'management:settings' }],
549549
},
550+
{
551+
// We include this link here to ensure that sidenav panel opens when user lands to legacy management landing page
552+
// https://github.com/elastic/kibana/issues/240275
553+
link: 'management',
554+
sideNavStatus: 'hidden',
555+
},
550556
],
551557
},
552558
{

x-pack/solutions/observability/test/functional_solution_sidenav/tests/observability_sidenav.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type { FtrProviderContext } from '../ftr_provider_context';
1111
export default function ({ getPageObjects, getService }: FtrProviderContext) {
1212
const { common, solutionNavigation } = getPageObjects(['common', 'solutionNavigation']);
1313
const spaces = getService('spaces');
14+
const testSubjects = getService('testSubjects');
1415
const browser = getService('browser');
1516

1617
describe('observability solution', () => {
@@ -117,6 +118,12 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) {
117118
await browser.refresh();
118119
await solutionNavigation.sidenav.tour.expectHidden();
119120
});
121+
122+
it('opens panel on legacy management landing page', async () => {
123+
await common.navigateToApp('management', { basePath: `/s/${spaceCreated.id}` });
124+
await testSubjects.existOrFail('managementHomeSolution');
125+
await solutionNavigation.sidenav.expectPanelExists('stack_management');
126+
});
120127
});
121128
});
122129
}

0 commit comments

Comments
 (0)