member_webapp/src/app/commons/component/layout/menu/app.submenu.component.ts

111 lines
3.1 KiB
TypeScript
Raw Normal View History

2018-04-06 15:59:49 +09:00
import { Component, Input, OnInit } from '@angular/core';
import { trigger, state, style, transition, animate } from '@angular/animations';
import { MenuItem } from 'primeng/primeng';
import { AppComponent } from 'app/app.component';
@Component({
/* tslint:disable:component-selector */
selector: '[of-submenu]',
/* tslint:enable:component-selector */
templateUrl: './app.submenu.component.html',
animations: [
trigger('children', [
state('hiddenAnimated', style({
height: '0px'
})),
state('visibleAnimated', style({
height: '*'
})),
state('visible', style({
height: '*',
'z-index': 100
})),
state('hidden', style({
height: '0px',
'z-index': '*'
})),
transition('visibleAnimated => hiddenAnimated', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')),
transition('hiddenAnimated => visibleAnimated', animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))
])
]
})
export class AppSubMenuComponent {
@Input() item: MenuItem;
@Input() root: boolean;
@Input() visible: boolean;
_reset: boolean;
activeIndex: number;
constructor(public app: AppComponent) { }
itemClick(event: Event, item: MenuItem, index: number)  {
if (this.root) {
this.app.menuHoverActive = !this.app.menuHoverActive;
}
// avoid processing disabled items
if (item.disabled) {
event.preventDefault();
return true;
}
// activate current item and deactivate active sibling if any
this.activeIndex = (this.activeIndex === index) ? null : index;
// execute command
if (item.command) {
item.command({ originalEvent: event, item: item });
}
// prevent hash change
if (item.items || (!item.url && !item.routerLink)) {
setTimeout(() => {
this.app.layoutMenuScrollerViewChild.moveBar();
}, 450);
event.preventDefault();
}
// hide menu
if (!item.items) {
if (this.app.isHorizontal() || this.app.isSlim()) {
this.app.resetMenu = true;
} else {
this.app.resetMenu = false;
}
this.app.overlayMenuActive = false;
this.app.staticMenuMobileActive = false;
this.app.menuHoverActive = !this.app.menuHoverActive;
}
}
onMouseEnter(index: number) {
if (this.root && this.app.menuHoverActive && (this.app.isHorizontal() || this.app.isSlim())
&& !this.app.isMobile() && !this.app.isTablet()) {
this.activeIndex = index;
}
}
isActive(index: number): boolean {
return this.activeIndex === index;
}
@Input() get reset(): boolean {
return this._reset;
}
set reset(val: boolean) {
this._reset = val;
if (this._reset && (this.app.isHorizontal() ||  this.app.isSlim())) {
this.activeIndex = null;
}
}
}