105 lines
2.7 KiB
TypeScript
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;
|
|
}
|
|
}
|