member_webapp/src/app/commons/component/layout/menu/app.submenu.component.ts
2018-04-06 15:59:49 +09:00

111 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}