105 lines
2.7 KiB
TypeScript

/** @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<EventOnMenu> = 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;
}
}