ohayolibs
Version:
Ohayo is a set of essential modules for ohayojp.
74 lines (64 loc) • 2.2 kB
text/typescript
import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';
import { OhayoLocaleService } from '@ohayo/theme';
import { CloseType, ReuseContextCloseEvent, ReuseContextI18n, ReuseCustomContextMenu, ReuseItem } from './reuse-tab.interfaces';
export class ReuseTcomponentsontextMenuComponent implements OnInit {
private _i18n: ReuseContextI18n;
set i18n(value: ReuseContextI18n) {
this._i18n = {
...this.i18nSrv.getData('reuseTab'),
...value,
};
}
get i18n(): ReuseContextI18n {
return this._i18n;
}
item: ReuseItem;
event: MouseEvent;
customContextMenu: ReuseCustomContextMenu[];
// tslint:disable-next-line:no-output-native
readonly close = new EventEmitter<ReuseContextCloseEvent>();
get includeNonCloseable(): boolean {
return this.event.ctrlKey;
}
constructor(private i18nSrv: OhayoLocaleService) { }
private notify(type: CloseType): void {
this.close.next({
type,
item: this.item,
includeNonCloseable: this.includeNonCloseable,
});
}
ngOnInit(): void {
if (this.includeNonCloseable) this.item.closable = true;
}
click(e: MouseEvent, type: CloseType, custom?: ReuseCustomContextMenu): void {
e.preventDefault();
e.stopPropagation();
if (type === 'close' && !this.item.closable) return;
if (type === 'closeRight' && this.item.last) return;
if (custom) {
if (this.isDisabled(custom)) return;
custom.fn(this.item, custom);
}
this.notify(type);
}
isDisabled(custom: ReuseCustomContextMenu): boolean {
return custom.disabled ? custom.disabled(this.item) : false;
}
closeMenu(event: MouseEvent): void {
if (event.type === 'click' && event.button === 2) return;
this.notify(null);
}
}