navModel.ts 1.5 KB

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