@junte/ui
Version:
Quality Angular UI components kit
123 lines • 13.2 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { Directive, ElementRef, EventEmitter, HostListener, Input, NgZone, OnDestroy, OnInit, Output, Renderer2 } from '@angular/core';
import { filter, takeWhile } from 'rxjs/operators';
import { Triggers } from '../../core/enums/triggers';
import { PopoverOptions } from './popover.component';
import { PopoverInstance, PopoverService } from './popover.service';
let PopoverDirective = class PopoverDirective {
constructor(popover, hostRef, renderer, zone) {
this.popover = popover;
this.hostRef = hostRef;
this.renderer = renderer;
this.zone = zone;
this.destroyed = false;
this.listeners = [];
this.attached = new EventEmitter();
this.removed = new EventEmitter();
}
set instance(instance) {
this._instance = instance;
if (!instance) {
this.removed.emit();
}
else {
this.attached.emit(instance);
}
}
get instance() {
return this._instance;
}
set __options__(options) {
this.options = new PopoverOptions(options);
}
mouseEnter() {
if (this.options.trigger === Triggers.hover) {
this.show();
}
}
click() {
if (this.options.trigger === Triggers.click) {
!this.instance ? this.show() : this.hide();
}
}
ngOnInit() {
this.popover.attached.pipe(takeWhile((() => !this.destroyed)), filter(target => !!this.instance && target !== this.hostRef)).subscribe(() => this.instance = null);
this.zone.runOutsideAngular(() => {
this.listeners.push(this.renderer.listen('document', 'mousemove', ({ path }) => {
if (!!this.instance && this.options.trigger === Triggers.hover && !this.picked(path)) {
this.hide(path);
}
}));
this.listeners.push(this.renderer.listen('document', 'click', ({ path }) => {
if (!!this.instance && this.options.trigger === Triggers.click && !this.picked(path)) {
this.hide(path);
}
}));
});
}
ngOnDestroy() {
this.destroyed = true;
if (!!this.instance) {
this.instance.hide();
this.instance = null;
}
this.listeners.forEach(listener => listener());
}
picked(elements) {
return elements.indexOf(this.hostRef.nativeElement) !== -1;
}
show() {
if ((this.options.content || this.options.contentTemplate) && !this.options.disabled) {
this.instance = this.popover.show(this.hostRef, this.options);
}
}
hide(path = []) {
if (!!this.instance && !this.instance.picked(path)) {
this.instance.hide();
this.instance = null;
}
}
};
PopoverDirective.ctorParameters = () => [
{ type: PopoverService },
{ type: ElementRef },
{ type: Renderer2 },
{ type: NgZone }
];
__decorate([
Input('jntPopover'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [Object])
], PopoverDirective.prototype, "__options__", null);
__decorate([
Output(),
__metadata("design:type", Object)
], PopoverDirective.prototype, "attached", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], PopoverDirective.prototype, "removed", void 0);
__decorate([
HostListener('mouseenter'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], PopoverDirective.prototype, "mouseEnter", null);
__decorate([
HostListener('click'),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], PopoverDirective.prototype, "click", null);
PopoverDirective = __decorate([
Directive({
selector: '[jntPopover]',
exportAs: 'jntPopover'
}),
__metadata("design:paramtypes", [PopoverService,
ElementRef,
Renderer2,
NgZone])
], PopoverDirective);
export { PopoverDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AanVudGUvdWkvIiwic291cmNlcyI6WyJsaWIvb3ZlcmxheXMvcG9wb3Zlci9wb3BvdmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQU1wRSxJQUFhLGdCQUFnQixHQUE3QixNQUFhLGdCQUFnQjtJQTZDM0IsWUFBb0IsT0FBdUIsRUFDdkIsT0FBbUIsRUFDbkIsUUFBbUIsRUFDbkIsSUFBWTtRQUhaLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBNUN4QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBZSxFQUFFLENBQUM7UUFxQm5DLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUcvQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQW9CN0IsQ0FBQztJQTFDRCxJQUFJLFFBQVEsQ0FBQyxRQUF5QjtRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFO1lB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Q0FBQztxQ0E4QzZCLGNBQWM7UUFDZCxVQUFVO1FBQ1QsU0FBUztRQUNiLE1BQU07R0FoRHJCLGdCQUFnQixDQWdHNUI7U0FoR1ksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUcmlnZ2VycyB9IGZyb20gJy4uLy4uL2NvcmUvZW51bXMvdHJpZ2dlcnMnO1xuaW1wb3J0IHsgUG9wb3Zlck9wdGlvbnMgfSBmcm9tICcuL3BvcG92ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJJbnN0YW5jZSwgUG9wb3ZlclNlcnZpY2UgfSBmcm9tICcuL3BvcG92ZXIuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tqbnRQb3BvdmVyXScsXG4gIGV4cG9ydEFzOiAnam50UG9wb3Zlcidcbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcml2YXRlIG9wdGlvbnM6IFBvcG92ZXJPcHRpb25zO1xuICBwcml2YXRlIF9pbnN0YW5jZTogUG9wb3Zlckluc3RhbmNlO1xuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xuICBwcml2YXRlIGxpc3RlbmVyczogRnVuY3Rpb25bXSA9IFtdO1xuXG4gIHNldCBpbnN0YW5jZShpbnN0YW5jZTogUG9wb3Zlckluc3RhbmNlKSB7XG4gICAgdGhpcy5faW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICB0aGlzLnJlbW92ZWQuZW1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF0dGFjaGVkLmVtaXQoaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpbnN0YW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cblxuICBASW5wdXQoJ2pudFBvcG92ZXInKVxuICBzZXQgX19vcHRpb25zX18ob3B0aW9uczogUGFydGlhbDxQb3BvdmVyT3B0aW9ucz4pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBuZXcgUG9wb3Zlck9wdGlvbnMob3B0aW9ucyk7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgYXR0YWNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFBvcG92ZXJJbnN0YW5jZT4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJylcbiAgbW91c2VFbnRlcigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnRyaWdnZXIgPT09IFRyaWdnZXJzLmhvdmVyKSB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycpXG4gIGNsaWNrKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMudHJpZ2dlciA9PT0gVHJpZ2dlcnMuY2xpY2spIHtcbiAgICAgICF0aGlzLmluc3RhbmNlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvcG92ZXI6IFBvcG92ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgICAgICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucG9wb3Zlci5hdHRhY2hlZC5waXBlKFxuICAgICAgdGFrZVdoaWxlKCgoKSA9PiAhdGhpcy5kZXN0cm95ZWQpKSxcbiAgICAgIGZpbHRlcih0YXJnZXQgPT4gISF0aGlzLmluc3RhbmNlICYmIHRhcmdldCAhPT0gdGhpcy5ob3N0UmVmKVxuICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMuaW5zdGFuY2UgPSBudWxsKTtcblxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZW1vdmUnLCAoe3BhdGh9KSA9PiB7XG4gICAgICAgIGlmICghIXRoaXMuaW5zdGFuY2UgJiYgdGhpcy5vcHRpb25zLnRyaWdnZXIgPT09IFRyaWdnZXJzLmhvdmVyICYmICF0aGlzLnBpY2tlZChwYXRoKSkge1xuICAgICAgICAgIHRoaXMuaGlkZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoe3BhdGh9KSA9PiB7XG4gICAgICAgIGlmICghIXRoaXMuaW5zdGFuY2UgJiYgdGhpcy5vcHRpb25zLnRyaWdnZXIgPT09IFRyaWdnZXJzLmNsaWNrICYmICF0aGlzLnBpY2tlZChwYXRoKSkge1xuICAgICAgICAgIHRoaXMuaGlkZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIGlmICghIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuaGlkZSgpO1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4gbGlzdGVuZXIoKSk7XG4gIH1cblxuICBwcml2YXRlIHBpY2tlZChlbGVtZW50czogSFRNTEVsZW1lbnRbXSkge1xuICAgIHJldHVybiBlbGVtZW50cy5pbmRleE9mKHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50KSAhPT0gLTE7XG4gIH1cblxuICBwcml2YXRlIHNob3coKSB7XG4gICAgaWYgKCh0aGlzLm9wdGlvbnMuY29udGVudCB8fCB0aGlzLm9wdGlvbnMuY29udGVudFRlbXBsYXRlKSAmJiAhdGhpcy5vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmluc3RhbmNlID0gdGhpcy5wb3BvdmVyLnNob3codGhpcy5ob3N0UmVmLCB0aGlzLm9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGlkZShwYXRoOiBIVE1MRWxlbWVudFtdID0gW10pIHtcbiAgICBpZiAoISF0aGlzLmluc3RhbmNlICYmICF0aGlzLmluc3RhbmNlLnBpY2tlZChwYXRoKSkge1xuICAgICAgdGhpcy5pbnN0YW5jZS5oaWRlKCk7XG4gICAgICB0aGlzLmluc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==