diff --git a/public/app/core/components/sidemenu/sidemenu.html b/public/app/core/components/sidemenu/sidemenu.html index 975e198b009..8aa3c6ae571 100644 --- a/public/app/core/components/sidemenu/sidemenu.html +++ b/public/app/core/components/sidemenu/sidemenu.html @@ -22,6 +22,16 @@ {{::menuItem.text}} +
  • + Max shown : {{::ctrl.maxShownOrgs}} + +
  • +
  • + + + {{::orgItem.text}} + +
  • diff --git a/public/app/core/components/sidemenu/sidemenu.ts b/public/app/core/components/sidemenu/sidemenu.ts index 84154621a0a..c6d721e0977 100644 --- a/public/app/core/components/sidemenu/sidemenu.ts +++ b/public/app/core/components/sidemenu/sidemenu.ts @@ -13,6 +13,10 @@ export class SideMenuCtrl { orgMenu: any; appSubUrl: string; loginUrl: string; + orgFilter: string; + orgItems: any; + orgs: any; + maxShownOrgs: number; /** @ngInject */ constructor(private $scope, private $location, private contextSrv, private backendSrv, private $element) { @@ -20,6 +24,7 @@ export class SideMenuCtrl { this.user = contextSrv.user; this.appSubUrl = config.appSubUrl; this.showSignout = this.contextSrv.isSignedIn && !config['authProxyEnabled']; + this.maxShownOrgs = 10; this.mainLinks = config.bootData.mainNavLinks; this.openUserDropdown(); @@ -31,6 +36,8 @@ export class SideMenuCtrl { } this.loginUrl = 'login?redirect=' + encodeURIComponent(this.$location.path()); }); + + this.orgFilter = ''; } getUrl(url) { @@ -51,38 +58,44 @@ export class SideMenuCtrl { this.orgMenu.push({section: this.user.orgName, cssClass: 'dropdown-menu-title'}); this.orgMenu.push({ text: "Preferences", - url: this.getUrl("/org"), + url: this.getUrl("/org") }); this.orgMenu.push({ text: "Users", - url: this.getUrl("/org/users"), + url: this.getUrl("/org/users") }); this.orgMenu.push({ text: "API Keys", - url: this.getUrl("/org/apikeys"), + url: this.getUrl("/org/apikeys") }); } this.orgMenu.push({cssClass: "divider"}); - this.backendSrv.get('/api/user/orgs').then(orgs => { - orgs.forEach(org => { - if (org.orgId === this.contextSrv.user.orgId) { - return; - } + this.orgs = orgs; + this.loadOrgsItems(); + }); + } - this.orgMenu.push({ + loadOrgsItems(){ + this.orgItems = []; + this.orgs.forEach(org => { + if (org.orgId === this.contextSrv.user.orgId) { + return; + } + + if (this.orgItems.length < this.maxShownOrgs && (this.orgFilter === '' || org.name.indexOf(this.orgFilter) !== -1)){ + this.orgItems.push({ text: "Switch to " + org.name, icon: "fa fa-fw fa-random", url: this.getUrl('/profile/switch-org/' + org.orgId), target: '_self' }); - }); - - if (config.allowOrgCreate) { - this.orgMenu.push({text: "New organization", icon: "fa fa-fw fa-plus", url: this.getUrl('/org/new')}); } }); + if (config.allowOrgCreate) { + this.orgItems.push({text: "New organization", icon: "fa fa-fw fa-plus", url: this.getUrl('/org/new')}); + } } }