Skip to content

Commit

Permalink
Fix dashboard active state & breadcrumbs
Browse files Browse the repository at this point in the history
  • Loading branch information
tsullivan committed Mar 5, 2025
1 parent a5dbe5c commit 5c929cd
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ export enum LinkCategoryType {
* The path should not be used for links displayed in the main left navigation, since highlighting won't work.
**/
export enum ExternalPageName {
// Dashboards
dashboards = 'dashboards',
// Discover
discover = 'discover:',
// Osquery
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ import {
isAccordionLinkCategory,
} from '@kbn/security-solution-navigation';
import type { SolutionPageName, SolutionLinkCategory, SolutionNavLink } from '../../common/links';
import { getNavLinkIdFromSolutionPageName, isBreadcrumbHidden } from './util';
import {
getNavLinkIdFromSolutionPageName,
isBreadcrumbHidden,
isSideNavStatusHidden,
} from './util';
import { SOLUTION_NAME } from '../../common/translations';

export const formatNavigationTree = (
Expand Down Expand Up @@ -51,22 +55,24 @@ export const formatNavigationTree = (

const formatNodesFromLinks = (
solutionNavLinks: SolutionNavLink[],
parentCategories?: Readonly<Array<LinkCategory<SolutionPageName>>>
parentCategories: Readonly<Array<LinkCategory<SolutionPageName>>>,
parentId?: SolutionPageName
): NodeDefinition[] => {
const nodes: NodeDefinition[] = [];
if (parentCategories?.length) {
parentCategories.forEach((category) => {
nodes.push(...formatNodesFromLinksWithCategory(solutionNavLinks, category));
nodes.push(...formatNodesFromLinksWithCategory(solutionNavLinks, category, parentId));
}, []);
} else {
nodes.push(...formatNodesFromLinksWithoutCategory(solutionNavLinks));
nodes.push(...formatNodesFromLinksWithoutCategory(solutionNavLinks, parentId));
}
return nodes;
};

const formatNodesFromLinksWithCategory = (
solutionNavLinks: SolutionNavLink[],
category: LinkCategory<SolutionPageName>
category: LinkCategory<SolutionPageName>,
parentId?: SolutionPageName
): NodeDefinition[] => {
if (!category?.linkIds) {
return [];
Expand All @@ -76,7 +82,7 @@ const formatNodesFromLinksWithCategory = (
const children = category.linkIds.reduce<NodeDefinition[]>((acc, linkId) => {
const solutionNavLink = solutionNavLinks.find(({ id }) => id === linkId);
if (solutionNavLink != null) {
acc.push(createNodeFromSolutionNavLink(solutionNavLink));
acc.push(createNodeFromSolutionNavLink(solutionNavLink, parentId));
}
return acc;
}, []);
Expand All @@ -99,23 +105,29 @@ const formatNodesFromLinksWithCategory = (
};

const formatNodesFromLinksWithoutCategory = (
solutionNavLinks: SolutionNavLink[]
): NodeDefinition[] =>
solutionNavLinks.map((solutionNavLink) => createNodeFromSolutionNavLink(solutionNavLink));
solutionNavLinks: SolutionNavLink[],
parentId?: SolutionPageName
): NodeDefinition[] => {
return solutionNavLinks.map((solutionNavLink) =>
createNodeFromSolutionNavLink(solutionNavLink, parentId)
);
};

const createNodeFromSolutionNavLink = (solutionNavLink: SolutionNavLink): NodeDefinition => {
const createNodeFromSolutionNavLink = (
solutionNavLink: SolutionNavLink,
parentId?: SolutionPageName
): NodeDefinition => {
const { id, title, links, categories, disabled } = solutionNavLink;
const link = getNavLinkIdFromSolutionPageName(id);
const node: NodeDefinition = {
id,
link: link as AppDeepLinkId,
title,
...(isBreadcrumbHidden(id) && { breadcrumbStatus: 'hidden' }),
...(disabled && { sideNavStatus: 'hidden' }),
...((isSideNavStatusHidden(id, parentId) || disabled) && { sideNavStatus: 'hidden' }),
};
// do not create child nav nodes for "Dashboards"
if (links?.length && id !== 'dashboards') {
node.children = formatNodesFromLinks(links, categories);
if (links?.length) {
node.children = formatNodesFromLinks(links, categories ?? [], id);
}
return node;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,11 @@ export const isBreadcrumbHidden = (id: SolutionPageName): boolean =>
HIDDEN_BREADCRUMBS.has(id) ||
/* management sub-pages set their breadcrumbs themselves, the main Management breadcrumb is configured with our navigationTree definition */
(id.startsWith(ExternalPageName.management) && id !== ExternalPageName.management);

export const isSideNavStatusHidden = (
_id: SolutionPageName,
parentId?: SolutionPageName
): boolean => {
/* in solution navigation, dashboard should simply navigate to a landing page, rather than showing children */
return parentId === ExternalPageName.dashboards;
};

0 comments on commit 5c929cd

Please sign in to comment.