navModel.ts 1.6 KB

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