grafana/public/app/core/components/sidemenu/sidemenu.ts

90 lines
2.4 KiB
TypeScript
Raw Normal View History

2017-12-20 05:33:33 -06:00
import _ from 'lodash';
import config from 'app/core/config';
import $ from 'jquery';
import coreModule from '../../core_module';
import appEvents from 'app/core/app_events';
export class SideMenuCtrl {
user: any;
mainLinks: any;
2017-08-15 16:17:34 -05:00
bottomNav: any;
loginUrl: string;
isSignedIn: boolean;
isOpenMobile: boolean;
/** @ngInject */
constructor(private $scope, private $rootScope, private $location, private contextSrv, private $timeout) {
this.isSignedIn = contextSrv.isSignedIn;
this.user = contextSrv.user;
2017-12-28 10:01:28 -06:00
let navTree = _.cloneDeep(config.bootData.navTree);
this.mainLinks = _.filter(navTree, item => !item.hideFromMenu);
this.bottomNav = _.filter(navTree, item => item.hideFromMenu);
this.loginUrl = 'login?redirect=' + encodeURIComponent(this.$location.path());
2016-01-29 14:12:56 -06:00
if (contextSrv.user.orgCount > 1) {
2017-12-20 05:33:33 -06:00
let profileNode = _.find(this.bottomNav, { id: 'profile' });
if (profileNode) {
profileNode.showOrgSwitcher = true;
}
}
2017-12-20 05:33:33 -06:00
this.$scope.$on('$routeChangeSuccess', () => {
this.loginUrl = 'login?redirect=' + encodeURIComponent(this.$location.path());
});
}
2017-08-17 07:00:41 -05:00
toggleSideMenu() {
this.contextSrv.toggleSideMenu();
2017-12-20 05:33:33 -06:00
appEvents.emit('toggle-sidemenu');
2017-08-17 07:00:41 -05:00
this.$timeout(() => {
2017-12-20 05:33:33 -06:00
this.$rootScope.$broadcast('render');
2017-08-17 07:00:41 -05:00
});
}
toggleSideMenuSmallBreakpoint() {
2017-12-20 05:33:33 -06:00
appEvents.emit('toggle-sidemenu-mobile');
}
switchOrg() {
2017-12-20 05:33:33 -06:00
this.$rootScope.appEvent('show-modal', {
templateHtml: '<org-switcher dismiss="dismiss()"></org-switcher>',
});
}
itemClicked(item, evt) {
2017-12-20 05:33:33 -06:00
if (item.url === '/shortcuts') {
appEvents.emit('show-modal', {
templateHtml: '<help-modal></help-modal>',
});
evt.preventDefault();
}
}
}
export function sideMenuDirective() {
return {
2017-12-20 05:33:33 -06:00
restrict: 'E',
templateUrl: 'public/app/core/components/sidemenu/sidemenu.html',
controller: SideMenuCtrl,
bindToController: true,
2017-12-20 05:33:33 -06:00
controllerAs: 'ctrl',
scope: {},
link: function(scope, elem) {
// hack to hide dropdown menu
2017-12-20 05:33:33 -06:00
elem.on('click.dropdown', '.dropdown-menu a', function(evt) {
var menu = $(evt.target).parents('.dropdown-menu');
var parent = menu.parent();
menu.detach();
setTimeout(function() {
parent.append(menu);
}, 100);
});
2017-12-20 05:33:33 -06:00
},
};
}
2017-12-20 05:33:33 -06:00
coreModule.directive('sidemenu', sideMenuDirective);