110 lines
2.5 KiB
TypeScript
110 lines
2.5 KiB
TypeScript
import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
|
|
import { NbpBaseComponent, NbpStyle, NbpSize, INbpButton } from '@isp/xdce-widget/base';
|
|
import { ISidePopup, ISidePopupButton } from './nbp-fid-side-popup.interfaces';
|
|
|
|
@Component({
|
|
selector: 'nbp-fid-side-popup',
|
|
templateUrl: './nbp-fid-side-popup.component.html',
|
|
styleUrls: ['./nbp-fid-side-popup.component.scss']
|
|
})
|
|
export class NbpFidSidePopupComponent extends NbpBaseComponent implements ISidePopup {
|
|
private static counter = 0;
|
|
readonly id = `side-popup-${NbpFidSidePopupComponent.counter++}`;
|
|
|
|
_style = NbpStyle;
|
|
_size = NbpSize;
|
|
|
|
private _isOpen = false;
|
|
private _nbpTitle?: string;
|
|
private _nbpSize: NbpSize = NbpSize.MD;
|
|
private _nbpStyle: NbpStyle = NbpStyle.DEFAULT;
|
|
private _nbpButtons: ISidePopupButton[] = [];
|
|
private _hideOverlay = false;
|
|
private _hideCloseButton = false;
|
|
|
|
@Input()
|
|
set hideOverlay(value: boolean) {
|
|
this._hideOverlay = value;
|
|
}
|
|
get hideOverlay(): boolean {
|
|
return this._hideOverlay;
|
|
}
|
|
|
|
@Input()
|
|
set hideCloseButton(value: boolean) {
|
|
this._hideCloseButton = value;
|
|
}
|
|
get hideCloseButton(): boolean {
|
|
return this._hideCloseButton;
|
|
}
|
|
|
|
@Input()
|
|
set isOpen(value: boolean) {
|
|
this._isOpen = value;
|
|
}
|
|
get isOpen(): boolean {
|
|
return this._isOpen;
|
|
}
|
|
|
|
@Input()
|
|
set nbpTitle(value: string) {
|
|
this._nbpTitle = value;
|
|
}
|
|
get nbpTitle(): string {
|
|
return this._nbpTitle;
|
|
}
|
|
|
|
@Input()
|
|
set nbpSize(value: NbpSize) {
|
|
this._nbpSize = value;
|
|
}
|
|
get nbpSize(): NbpSize {
|
|
return this._nbpSize;
|
|
}
|
|
|
|
@Input()
|
|
set nbpStyle(value: NbpStyle) {
|
|
this._nbpStyle = value;
|
|
}
|
|
get nbpStyle(): NbpStyle {
|
|
return this._nbpStyle;
|
|
}
|
|
|
|
@Input()
|
|
set nbpButtons(value: ISidePopupButton[]) {
|
|
this._nbpButtons = value;
|
|
}
|
|
get nbpButtons(): ISidePopupButton[] {
|
|
return this._nbpButtons;
|
|
}
|
|
|
|
@Output() isOpenChange = new EventEmitter<boolean>();
|
|
@Output() nbpOnButtonClick = new EventEmitter<INbpButton>();
|
|
@Output() closed = new EventEmitter<void>();
|
|
|
|
@HostListener('document:keydown.escape')
|
|
handleEscape() {
|
|
if (this.isOpen) {
|
|
this.close();
|
|
}
|
|
}
|
|
|
|
close() {
|
|
this.isOpen = false;
|
|
this.isOpenChange.emit(false);
|
|
this.closed.emit();
|
|
}
|
|
|
|
onOverlayClick(event: MouseEvent) {
|
|
if (event.target === event.currentTarget) {
|
|
this.close();
|
|
}
|
|
}
|
|
|
|
onButtonClick(button: ISidePopupButton) {
|
|
if (!button.disabled) {
|
|
this.nbpOnButtonClick.emit(button);
|
|
}
|
|
}
|
|
}
|