/** @file * @author Edouard DUPIN * @copyright 2018, Edouard DUPIN, all right reserved * @license PROPRIETARY (see license file) */ import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core'; import { Router } from '@angular/router'; import { isNullOrUndefined } from 'common/utils'; import { MenuItem } from 'common/model/menu-item'; export interface EventOnMenu { menu: MenuItem; newWindows: boolean; ctrl: boolean; } @Component({ selector: 'app-top-menu', templateUrl: './top-menu.html', styleUrls: ['./top-menu.less'], }) export class TopMenuComponent implements OnInit { @Input() menu: MenuItem[]; subMenu: MenuItem[] = undefined; subMenuPosition: String = undefined; @Output() callback: EventEmitter = new EventEmitter(); constructor(private router: Router) {} isNotButton(data: MenuItem) { return ( isNullOrUndefined(data.navigateTo) && (isNullOrUndefined(data.callback) || data.callback === false) && isNullOrUndefined(data.subMenu) ); } isEnable(data: MenuItem) { if (!isNullOrUndefined(data) && !isNullOrUndefined(data.enable) && data.enable === false) { return false; } return true; } getPosition(data: string): string { return `float: ${data}`; } ngOnInit() {} onOutUserProperty(): void { //console.log('onOutUserProperty ==> event...'); this.subMenu = undefined; } getClassMenuPosition(): string { if (isNullOrUndefined(this.subMenuPosition)) { return 'menu-left'; } return 'menu-' + this.subMenuPosition; } getClassModel(data?: string): string { if (isNullOrUndefined(data)) { return ''; } return 'model_' + data; } onGeneric(data: MenuItem, event: any): void { //console.log(`onGeneric()`); // check if we need to navigate if (!isNullOrUndefined(data.navigateTo)) { // remove in every case the subMenu: this.subMenu = undefined; this.subMenuPosition = undefined; this.router.navigate([data.navigateTo]); return; } if (!isNullOrUndefined(data.callback) && data.callback === true) { //console.log(`Emit message on ${JSON.stringify(data)}`); this.callback.emit({ menu: data, newWindows: event.which === 2, ctrl: event.ctrlKey, }); return; } // check if we need to display a submenu if (isNullOrUndefined(data.subMenu)) { //just a toggle mode: data.subMenu = undefined; this.subMenuPosition = undefined; return; } if (this.subMenu === data.subMenu) { //just a toggle mode: this.subMenu = undefined; this.subMenuPosition = undefined; return; } //console.log(`Set Menu: ${JSON.stringify(data.subMenu)}`); // set the requested menu this.subMenu = data.subMenu; this.subMenuPosition = data.position; } }