123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import { NavModelItem, NavModel } from '@grafana/data';
- import { featureEnabled } from '@grafana/runtime';
- import { ProBadge } from 'app/core/components/Upgrade/ProBadge';
- import config from 'app/core/config';
- import { contextSrv } from 'app/core/services/context_srv';
- import { highlightTrial } from 'app/features/admin/utils';
- import { AccessControlAction, Team, TeamPermissionLevel } from 'app/types';
- const loadingTeam = {
- avatarUrl: 'public/img/user_profile.png',
- id: 1,
- name: 'Loading',
- email: 'loading',
- memberCount: 0,
- permission: TeamPermissionLevel.Member,
- };
- export function buildNavModel(team: Team): NavModelItem {
- const navModel: NavModelItem = {
- img: team.avatarUrl,
- id: 'team-' + team.id,
- subTitle: 'Manage members and settings',
- url: '',
- text: team.name,
- breadcrumbs: [{ title: 'Teams', url: 'org/teams' }],
- children: [
- // With RBAC this tab will always be available (but not always editable)
- // With Legacy it will be hidden by hideTabsFromNonTeamAdmin should the user not be allowed to see it
- {
- active: false,
- icon: 'sliders-v-alt',
- id: `team-settings-${team.id}`,
- text: 'Settings',
- url: `org/teams/edit/${team.id}/settings`,
- },
- ],
- };
- // While team is loading we leave the members tab
- // With RBAC the Members tab is available when user has ActionTeamsPermissionsRead for this team
- // With Legacy it will always be present
- if (
- team === loadingTeam ||
- contextSrv.hasPermissionInMetadata(AccessControlAction.ActionTeamsPermissionsRead, team)
- ) {
- navModel.children!.unshift({
- active: false,
- icon: 'users-alt',
- id: `team-members-${team.id}`,
- text: 'Members',
- url: `org/teams/edit/${team.id}/members`,
- });
- }
- const teamGroupSync: NavModelItem = {
- active: false,
- icon: 'sync',
- id: `team-groupsync-${team.id}`,
- text: 'External group sync',
- url: `org/teams/edit/${team.id}/groupsync`,
- };
- const isLoadingTeam = team === loadingTeam;
- if (highlightTrial()) {
- teamGroupSync.tabSuffix = () =>
- ProBadge({ experimentId: isLoadingTeam ? '' : 'feature-highlights-team-sync-badge', eventVariant: 'trial' });
- }
- // With both Legacy and RBAC the tab is protected being featureEnabled
- // While team is loading we leave the teamsync tab
- // With RBAC the External Group Sync tab is available when user has ActionTeamsPermissionsRead for this team
- if (featureEnabled('teamsync')) {
- if (isLoadingTeam || contextSrv.hasPermissionInMetadata(AccessControlAction.ActionTeamsPermissionsRead, team)) {
- navModel.children!.push(teamGroupSync);
- }
- } else if (config.featureToggles.featureHighlights) {
- navModel.children!.push({
- ...teamGroupSync,
- tabSuffix: () => ProBadge({ experimentId: isLoadingTeam ? '' : 'feature-highlights-team-sync-badge' }),
- });
- }
- return navModel;
- }
- export function getTeamLoadingNav(pageName: string): NavModel {
- const main = buildNavModel(loadingTeam);
- let node: NavModelItem;
- // find active page
- for (const child of main.children!) {
- if (child.id!.indexOf(pageName) > 0) {
- child.active = true;
- node = child;
- break;
- }
- }
- return {
- main: main,
- node: node!,
- };
- }
|