navModel.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import _ from 'lodash';
  2. import { DataSource, NavModel } from 'app/types';
  3. import { PluginMeta } from '@grafana/ui/src/types';
  4. import config from 'app/core/config';
  5. export function buildNavModel(ds: DataSource, plugin: PluginMeta, currentPage: string): NavModel {
  6. let title = 'New';
  7. const subTitle = `Type: ${plugin.name}`;
  8. if (ds.id) {
  9. title = ds.name;
  10. }
  11. const main = {
  12. img: plugin.info.logos.large,
  13. id: 'ds-edit-' + plugin.id,
  14. subTitle: subTitle,
  15. url: '',
  16. text: title,
  17. breadcrumbs: [{ title: 'Data Sources', url: 'datasources' }],
  18. children: [
  19. {
  20. active: currentPage === 'datasource-settings',
  21. icon: 'fa fa-fw fa-sliders',
  22. id: 'datasource-settings',
  23. text: 'Settings',
  24. url: `datasources/edit/${ds.id}`,
  25. },
  26. ],
  27. };
  28. const hasDashboards = _.find(plugin.includes, { type: 'dashboard' }) !== undefined;
  29. if (hasDashboards && ds.id) {
  30. main.children.push({
  31. active: currentPage === 'datasource-dashboards',
  32. icon: 'fa fa-fw fa-th-large',
  33. id: 'datasource-dashboards',
  34. text: 'Dashboards',
  35. url: `datasources/edit/${ds.id}/dashboards`,
  36. });
  37. }
  38. if (config.buildInfo.isEnterprise) {
  39. main.children.push({
  40. active: currentPage === 'datasource-permissions',
  41. icon: 'fa fa-fw fa-lock',
  42. id: 'datasource-permissions',
  43. text: 'Permissions',
  44. url: `datasources/edit/${ds.id}/permissions`,
  45. });
  46. }
  47. return {
  48. main: main,
  49. node: _.find(main.children, { active: true }),
  50. };
  51. }