grafana/public/app/angular/services/nav_model_srv.ts
Josh Hunt 3c6e0e8ef8
Chore: ESlint import order (#44959)
* Add and configure eslint-plugin-import

* Fix the lint:ts npm command

* Autofix + prettier all the files

* Manually fix remaining files

* Move jquery code in jest-setup to external file to safely reorder imports

* Resolve issue caused by circular dependencies within Prometheus

* Update .betterer.results

* Fix missing // @ts-ignore

* ignore iconBundle.ts

* Fix missing // @ts-ignore
2022-04-22 14:33:13 +01:00

81 lines
1.7 KiB
TypeScript

import { NavModel, NavModelItem } from '@grafana/data';
import coreModule from 'app/angular/core_module';
import config from 'app/core/config';
interface Nav {
breadcrumbs: NavModelItem[];
node?: NavModelItem;
main?: NavModelItem;
}
export class NavModelSrv {
navItems: NavModelItem[];
constructor() {
this.navItems = config.bootData.navTree;
}
getCfgNode() {
return this.navItems.find((navItem) => navItem.id === 'cfg');
}
getNav(...args: Array<string | number>) {
let children = this.navItems;
const nav: Nav = {
breadcrumbs: [],
};
for (const id of args) {
// if its a number then it's the index to use for main
if (typeof id === 'number') {
nav.main = nav.breadcrumbs[id];
break;
}
const node = children.find((child) => child.id === id);
if (node) {
nav.breadcrumbs.push(node);
nav.node = node;
nav.main = node;
children = node.children ?? [];
}
}
if (nav.main?.children) {
for (const item of nav.main.children) {
item.active = item.url === nav.node?.url;
}
}
return nav;
}
getNotFoundNav() {
return getNotFoundNav(); // the exported function
}
}
export function getExceptionNav(error: any): NavModel {
console.error(error);
return getWarningNav('Exception thrown', 'See console for details');
}
export function getNotFoundNav(): NavModel {
return getWarningNav('Page not found', '404 Error');
}
export function getWarningNav(text: string, subTitle?: string): NavModel {
const node = {
text,
subTitle,
icon: 'exclamation-triangle',
};
return {
breadcrumbs: [node],
node: node,
main: node,
};
}
coreModule.service('navModelSrv', NavModelSrv);