navModel.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import { Team, TeamPermissionLevel } from 'app/types';
  2. import config from 'app/core/config';
  3. import { NavModelItem, NavModel } from '@grafana/ui';
  4. export function buildNavModel(team: Team): NavModelItem {
  5. const navModel = {
  6. img: team.avatarUrl,
  7. id: 'team-' + team.id,
  8. subTitle: 'Manage members & settings',
  9. url: '',
  10. text: team.name,
  11. breadcrumbs: [{ title: 'Teams', url: 'org/teams' }],
  12. children: [
  13. {
  14. active: false,
  15. icon: 'gicon gicon-team',
  16. id: `team-members-${team.id}`,
  17. text: 'Members',
  18. url: `org/teams/edit/${team.id}/members`,
  19. },
  20. {
  21. active: false,
  22. icon: 'fa fa-fw fa-sliders',
  23. id: `team-settings-${team.id}`,
  24. text: 'Settings',
  25. url: `org/teams/edit/${team.id}/settings`,
  26. },
  27. ],
  28. };
  29. if (config.buildInfo.isEnterprise) {
  30. navModel.children.push({
  31. active: false,
  32. icon: 'fa fa-fw fa-refresh',
  33. id: `team-groupsync-${team.id}`,
  34. text: 'External group sync',
  35. url: `org/teams/edit/${team.id}/groupsync`,
  36. });
  37. }
  38. return navModel;
  39. }
  40. export function getTeamLoadingNav(pageName: string): NavModel {
  41. const main = buildNavModel({
  42. avatarUrl: 'public/img/user_profile.png',
  43. id: 1,
  44. name: 'Loading',
  45. email: 'loading',
  46. memberCount: 0,
  47. permission: TeamPermissionLevel.Member,
  48. });
  49. let node: NavModelItem;
  50. // find active page
  51. for (const child of main.children) {
  52. if (child.id.indexOf(pageName) > 0) {
  53. child.active = true;
  54. node = child;
  55. break;
  56. }
  57. }
  58. return {
  59. main: main,
  60. node: node,
  61. };
  62. }