ngx-admin/src/app/theme/sidebar/sidebar.component.ts

89 lines
2.2 KiB
TypeScript
Raw Normal View History

2016-04-27 16:02:27 +03:00
import {Component, ElementRef} from 'angular2/core';
import {SidebarService} from './sidebar.service';
import {Router} from 'angular2/router';
2016-04-27 13:17:51 +03:00
@Component({
selector: 'sidebar',
styles: [ require('./sidebar.scss') ],
template: require('./sidebar.html'),
2016-04-27 16:02:27 +03:00
providers: [SidebarService],
2016-04-27 13:17:51 +03:00
directives: [],
pipes: []
})
2016-04-27 16:02:27 +03:00
export class Sidebar {
elementRef: ElementRef;
router: Router;
2016-04-27 16:02:27 +03:00
menuItems: Array<any>;
menuHeight: number;
isMenuCollapsed: boolean;
2016-04-28 16:44:32 +03:00
showHoverElem: boolean;
hoverElemHeight: number;
hoverElemTop: number;
constructor(el: ElementRef, router: Router, private _sidebarService: SidebarService) {
this.elementRef = el;
this.router = router;
2016-04-27 16:02:27 +03:00
this.menuItems = this._sidebarService.getMenuItems();
}
ngOnInit() {
this.selectMenuItem();
}
// TODO: is it really the best event for this kind of things?
ngAfterViewInit() {
// TODO: get rid of magic 84 constant
this.menuHeight = this.elementRef.nativeElement.childNodes[0].clientHeight - 84;
}
menuExpand () {
this.isMenuCollapsed = false;
}
menuCollapse () {
this.isMenuCollapsed = true;
}
2016-04-28 16:44:32 +03:00
hoverItem = function ($event) {
this.showHoverElem = true;
this.hoverElemHeight = $event.currentTarget.clientHeight;
// TODO: get rid of magic 66 constant
this.hoverElemTop = $event.currentTarget.getBoundingClientRect().top - 66;
}
toggleSubMenu ($event, item) {
var submenu = $($event.currentTarget).next();
if (this.isMenuCollapsed) {
this.menuExpand();
if (!item.expanded) {
2016-04-28 16:37:07 +03:00
item.expanded = !item.expanded;
submenu.slideToggle();
}
} else {
item.expanded = !item.expanded;
2016-04-28 16:37:07 +03:00
submenu.slideToggle();
}
return false;
}
private selectMenuItem() {
2016-04-28 16:37:07 +03:00
let isCurrent = (instruction) => (instruction ? this.router.isRouteActive(this.router.generate([instruction])): false);
this.menuItems.forEach(function (menu) {
menu.selected = isCurrent(menu.name);
menu.expanded = menu.expanded || menu.selected;
if (menu.subMenu) {
menu.subMenu.forEach(function (subMenu) {
subMenu.selected = isCurrent(subMenu.name) && !subMenu.disabled;
});
}
});
2016-04-27 16:02:27 +03:00
}
}