mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
125 lines
3.3 KiB
TypeScript
125 lines
3.3 KiB
TypeScript
import _ from 'lodash';
|
|
import { types, getEnv } from 'mobx-state-tree';
|
|
import { NavItem } from './NavItem';
|
|
|
|
export const NavStore = types
|
|
.model('NavStore', {
|
|
main: types.maybe(NavItem),
|
|
node: types.maybe(NavItem),
|
|
})
|
|
.actions(self => ({
|
|
load(...args) {
|
|
let children = getEnv(self).navTree;
|
|
let main, node;
|
|
let parents = [];
|
|
|
|
for (let id of args) {
|
|
node = children.find(el => el.id === id);
|
|
|
|
if (!node) {
|
|
throw new Error(`NavItem with id ${id} not found`);
|
|
}
|
|
|
|
children = node.children;
|
|
parents.push(node);
|
|
}
|
|
|
|
main = parents[parents.length - 2];
|
|
|
|
if (main.children) {
|
|
for (let item of main.children) {
|
|
item.active = false;
|
|
|
|
if (item.url === node.url) {
|
|
item.active = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
self.main = NavItem.create(main);
|
|
self.node = NavItem.create(node);
|
|
},
|
|
|
|
initFolderNav(folder: any, activeChildId: string) {
|
|
const folderUrl = createFolderUrl(folder.id, folder.slug);
|
|
|
|
let main = {
|
|
icon: 'fa fa-folder-open',
|
|
id: 'manage-folder',
|
|
subTitle: 'Manage folder dashboards & permissions',
|
|
url: '',
|
|
text: folder.title,
|
|
breadcrumbs: [{ title: 'Dashboards', url: 'dashboards' }],
|
|
children: [
|
|
{
|
|
active: activeChildId === 'manage-folder-dashboards',
|
|
icon: 'fa fa-fw fa-th-large',
|
|
id: 'manage-folder-dashboards',
|
|
text: 'Dashboards',
|
|
url: folderUrl,
|
|
},
|
|
{
|
|
active: activeChildId === 'manage-folder-permissions',
|
|
icon: 'fa fa-fw fa-lock',
|
|
id: 'manage-folder-permissions',
|
|
text: 'Permissions',
|
|
url: folderUrl + '/permissions',
|
|
},
|
|
{
|
|
active: activeChildId === 'manage-folder-settings',
|
|
icon: 'fa fa-fw fa-cog',
|
|
id: 'manage-folder-settings',
|
|
text: 'Settings',
|
|
url: folderUrl + '/settings',
|
|
},
|
|
],
|
|
};
|
|
|
|
self.main = NavItem.create(main);
|
|
},
|
|
|
|
initDatasourceEditNav(ds: any, plugin: any, currentPage: string) {
|
|
let title = 'New';
|
|
let subTitle = `Type: ${plugin.name}`;
|
|
|
|
if (ds.id) {
|
|
title = ds.name;
|
|
}
|
|
|
|
let main = {
|
|
img: plugin.info.logos.large,
|
|
id: 'ds-edit-' + plugin.id,
|
|
subTitle: subTitle,
|
|
url: '',
|
|
text: title,
|
|
breadcrumbs: [{ title: 'Data Sources', url: 'datasources' }],
|
|
children: [
|
|
{
|
|
active: currentPage === 'datasource-settings',
|
|
icon: 'fa fa-fw fa-sliders',
|
|
id: 'datasource-settings',
|
|
text: 'Settings',
|
|
url: `datasources/edit/${ds.id}`,
|
|
},
|
|
],
|
|
};
|
|
|
|
const hasDashboards = _.find(plugin.includes, { type: 'dashboard' }) !== undefined;
|
|
if (hasDashboards && ds.id) {
|
|
main.children.push({
|
|
active: currentPage === 'datasource-dashboards',
|
|
icon: 'fa fa-fw fa-th-large',
|
|
id: 'datasource-dashboards',
|
|
text: 'Dashboards',
|
|
url: `datasources/edit/${ds.id}/dashboards`,
|
|
});
|
|
}
|
|
|
|
self.main = NavItem.create(main);
|
|
},
|
|
}));
|
|
|
|
function createFolderUrl(folderId: number, slug: string) {
|
|
return `dashboards/folder/${folderId}/${slug}`;
|
|
}
|