@ngx-performance-ui/ui
Version:
Ngx Performance UI - UI
246 lines • 19.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { ApplicationRef, ComponentFactoryResolver, Directive, ElementRef, Input, ReflectiveInjector, Renderer2, ViewContainerRef, } from '@angular/core';
import { Actions, ofActionDispatched, Select, Store } from '@ngxs/store';
import { Observable, Subject } from 'rxjs';
import { filter } from 'rxjs/operators';
import { PopoverComponent } from '../components';
import { createProjectableNode } from '../utils';
import { EventListenerState, takeUntilDestroy, takeUntilNotNull, EventListenerRemove, EventListenerAdd, EventListenerScrollVertical, } from '@ngx-performance-ui/core';
var PopoverDirective = /** @class */ (function () {
function PopoverDirective(actions, appRef, elRef, renderer, resolver, store, vcRef) {
this.actions = actions;
this.appRef = appRef;
this.elRef = elRef;
this.renderer = renderer;
this.resolver = resolver;
this.store = store;
this.vcRef = vcRef;
this.context = {};
this.placement = 'top';
this.trigger = 'click';
this.destroy$ = new Subject();
}
Object.defineProperty(PopoverDirective.prototype, "containerRect", {
get: /**
* @return {?}
*/
function () {
return ((/** @type {?} */ (((/** @type {?} */ (this.popover.location.nativeElement))).childNodes[0]))).getBoundingClientRect();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
PopoverDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
(this.trigger === 'mousemove' ? this.mousemove$ : this.click$)
.pipe(takeUntilDestroy(this), filter((/**
* @param {?} event
* @return {?}
*/
function (event) { return !!event; })))
.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var onMouseContainerOver = false;
if (_this.popover) {
_this.popover.hostView.detectChanges();
var _a = _this.containerRect, top_1 = _a.top, bottom = _a.bottom, left = _a.left, right = _a.right;
var x = event.x, y = event.y;
onMouseContainerOver = top_1 < y && bottom > y && left < x && right > x;
}
if (!_this.popover && _this.elRef.nativeElement.contains(event.target)) {
_this.show();
}
else if (_this.popover && !_this.elRef.nativeElement.contains(event.target) && !onMouseContainerOver) {
_this.hide();
}
}));
};
/**
* @return {?}
*/
PopoverDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
this.hide();
};
/**
* @return {?}
*/
PopoverDirective.prototype.show = /**
* @return {?}
*/
function () {
/** @type {?} */
var element = (/** @type {?} */ (this.elRef.nativeElement));
/** @type {?} */
var injector = ReflectiveInjector.resolveAndCreate([
{ provide: 'POPOVER_PROVIDER', useValue: (/** @type {?} */ ({ element: element, placement: this.placement })) },
]);
/** @type {?} */
var hedaerNode = createProjectableNode.call(this, this.header);
/** @type {?} */
var contentNode = createProjectableNode.call(this, this.content);
this.popover = this.resolver.resolveComponentFactory(PopoverComponent).create(injector, [hedaerNode, contentNode]);
this.appRef.attachView(this.popover.hostView);
this.renderer.appendChild(this.renderer.selectRootElement('p-root', true), ((/** @type {?} */ (this.popover.hostView))).rootNodes[0]);
this.subscribeTo();
};
/**
* @return {?}
*/
PopoverDirective.prototype.hide = /**
* @return {?}
*/
function () {
if (this.popover) {
this.popover.destroy();
this.popover = null;
}
this.destroy$.next();
this.store.dispatch(new EventListenerRemove('resize'));
};
/**
* @return {?}
*/
PopoverDirective.prototype.subscribeTo = /**
* @return {?}
*/
function () {
var _this = this;
this.store.dispatch(new EventListenerAdd('resize'));
this.resize$
.pipe(filter((/**
* @param {?} event
* @return {?}
*/
function (event) { return !!event; })), takeUntilNotNull(this.destroy$))
.subscribe((/**
* @param {?} _
* @return {?}
*/
function (_) { return _this.hide(); }));
this.actions
.pipe(ofActionDispatched(EventListenerScrollVertical), takeUntilNotNull(this.destroy$))
.subscribe((/**
* @param {?} _
* @return {?}
*/
function (_) { return _this.hide(); }));
};
PopoverDirective.decorators = [
{ type: Directive, args: [{
selector: '[pPopover]',
exportAs: 'pPopover',
},] }
];
/** @nocollapse */
PopoverDirective.ctorParameters = function () { return [
{ type: Actions },
{ type: ApplicationRef },
{ type: ElementRef },
{ type: Renderer2 },
{ type: ComponentFactoryResolver },
{ type: Store },
{ type: ViewContainerRef }
]; };
PopoverDirective.propDecorators = {
content: [{ type: Input, args: ['pPopover',] }],
context: [{ type: Input, args: ['pPopoverContext',] }],
header: [{ type: Input, args: ['pPopoverHeader',] }],
placement: [{ type: Input, args: ['pPopoverPlacement',] }],
trigger: [{ type: Input, args: ['pPopoverTrigger',] }]
};
tslib_1.__decorate([
Select(EventListenerState.getOne('mousemove')),
tslib_1.__metadata("design:type", Observable)
], PopoverDirective.prototype, "mousemove$", void 0);
tslib_1.__decorate([
Select(EventListenerState.getOne('click')),
tslib_1.__metadata("design:type", Observable)
], PopoverDirective.prototype, "click$", void 0);
tslib_1.__decorate([
Select(EventListenerState.getOne('resize')),
tslib_1.__metadata("design:type", Observable)
], PopoverDirective.prototype, "resize$", void 0);
return PopoverDirective;
}());
export { PopoverDirective };
if (false) {
/** @type {?} */
PopoverDirective.prototype.content;
/** @type {?} */
PopoverDirective.prototype.context;
/** @type {?} */
PopoverDirective.prototype.header;
/** @type {?} */
PopoverDirective.prototype.placement;
/** @type {?} */
PopoverDirective.prototype.trigger;
/** @type {?} */
PopoverDirective.prototype.mousemove$;
/** @type {?} */
PopoverDirective.prototype.click$;
/** @type {?} */
PopoverDirective.prototype.resize$;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.popover;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.destroy$;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.actions;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.appRef;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.elRef;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.renderer;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.resolver;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.store;
/**
* @type {?}
* @private
*/
PopoverDirective.prototype.vcRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Abmd4LXBlcmZvcm1hbmNlLXVpL3VpLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvcG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUV4QixTQUFTLEVBQ1QsVUFBVSxFQUdWLEtBQUssRUFHTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUdULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakQsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsMkJBQTJCLEdBQzVCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEM7SUFxQ0UsMEJBQ1UsT0FBZ0IsRUFDaEIsTUFBc0IsRUFDdEIsS0FBaUIsRUFDakIsUUFBbUIsRUFDbkIsUUFBa0MsRUFDbEMsS0FBWSxFQUNaLEtBQXVCO1FBTnZCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQTBCO1FBQ2xDLFVBQUssR0FBTCxLQUFLLENBQU87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Q0FBeUI7Ozs7O0lBQ3pCLG9DQUEyQjs7Ozs7SUFDM0Isb0NBQTBDOzs7OztJQUMxQyxpQ0FBb0I7Ozs7O0lBQ3BCLGlDQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFJlZmxlY3RpdmVJbmplY3RvcixcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBvZkFjdGlvbkRpc3BhdGNoZWQsIFNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IGNyZWF0ZVByb2plY3RhYmxlTm9kZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIEV2ZW50TGlzdGVuZXJTdGF0ZSxcbiAgdGFrZVVudGlsRGVzdHJveSxcbiAgdGFrZVVudGlsTm90TnVsbCxcbiAgRXZlbnRMaXN0ZW5lclJlbW92ZSxcbiAgRXZlbnRMaXN0ZW5lckFkZCxcbiAgRXZlbnRMaXN0ZW5lclNjcm9sbFZlcnRpY2FsLFxufSBmcm9tICdAbmd4LXBlcmZvcm1hbmNlLXVpL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbcFBvcG92ZXJdJyxcbiAgZXhwb3J0QXM6ICdwUG9wb3ZlcicsXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgncFBvcG92ZXInKVxuICBjb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgVHlwZTxhbnk+O1xuXG4gIEBJbnB1dCgncFBvcG92ZXJDb250ZXh0JylcbiAgY29udGV4dDogYW55ID0ge307XG5cbiAgQElucHV0KCdwUG9wb3ZlckhlYWRlcicpXG4gIGhlYWRlcjogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB8IFR5cGU8YW55PjtcblxuICBASW5wdXQoJ3BQb3BvdmVyUGxhY2VtZW50JylcbiAgcGxhY2VtZW50OiAndG9wJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnYm90dG9tJyA9ICd0b3AnO1xuXG4gIEBJbnB1dCgncFBvcG92ZXJUcmlnZ2VyJylcbiAgdHJpZ2dlcjogJ21vdXNlbW92ZScgfCAnY2xpY2snID0gJ2NsaWNrJztcblxuICBAU2VsZWN0KEV2ZW50TGlzdGVuZXJTdGF0ZS5nZXRPbmUoJ21vdXNlbW92ZScpKVxuICBtb3VzZW1vdmUkOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIEBTZWxlY3QoRXZlbnRMaXN0ZW5lclN0YXRlLmdldE9uZSgnY2xpY2snKSlcbiAgY2xpY2skOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+O1xuXG4gIEBTZWxlY3QoRXZlbnRMaXN0ZW5lclN0YXRlLmdldE9uZSgncmVzaXplJykpXG4gIHJlc2l6ZSQ6IE9ic2VydmFibGU8TW91c2VFdmVudD47XG5cbiAgcHJpdmF0ZSBwb3BvdmVyOiBDb21wb25lbnRSZWY8UG9wb3ZlckNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0IGNvbnRhaW5lclJlY3QoKTogQ2xpZW50UmVjdCB7XG4gICAgcmV0dXJuICgodGhpcy5wb3BvdmVyLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNoaWxkTm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY3Rpb25zOiBBY3Rpb25zLFxuICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSB2Y1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgICh0aGlzLnRyaWdnZXIgPT09ICdtb3VzZW1vdmUnID8gdGhpcy5tb3VzZW1vdmUkIDogdGhpcy5jbGljayQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveSh0aGlzKSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+ICEhZXZlbnQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGxldCBvbk1vdXNlQ29udGFpbmVyT3ZlciA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyKSB7XG4gICAgICAgICAgdGhpcy5wb3BvdmVyLmhvc3RWaWV3LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICBjb25zdCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9ID0gdGhpcy5jb250YWluZXJSZWN0O1xuICAgICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gZXZlbnQ7XG4gICAgICAgICAgb25Nb3VzZUNvbnRhaW5lck92ZXIgPSB0b3AgPCB5ICYmIGJvdHRvbSA+IHkgJiYgbGVmdCA8IHggJiYgcmlnaHQgPiB4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXIgJiYgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvcG92ZXIgJiYgIXRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmICFvbk1vdXNlQ29udGFpbmVyT3Zlcikge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgc2hvdygpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGluamVjdG9yID0gUmVmbGVjdGl2ZUluamVjdG9yLnJlc29sdmVBbmRDcmVhdGUoW1xuICAgICAgeyBwcm92aWRlOiAnUE9QT1ZFUl9QUk9WSURFUicsIHVzZVZhbHVlOiB7IGVsZW1lbnQsIHBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnQgfSBhcyBUb29sdGlwLkNvbmZpZyB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgaGVkYWVyTm9kZSA9IGNyZWF0ZVByb2plY3RhYmxlTm9kZS5jYWxsKHRoaXMsIHRoaXMuaGVhZGVyKTtcbiAgICBjb25zdCBjb250ZW50Tm9kZSA9IGNyZWF0ZVByb2plY3RhYmxlTm9kZS5jYWxsKHRoaXMsIHRoaXMuY29udGVudCk7XG5cbiAgICB0aGlzLnBvcG92ZXIgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFBvcG92ZXJDb21wb25lbnQpLmNyZWF0ZShpbmplY3RvciwgW2hlZGFlck5vZGUsIGNvbnRlbnROb2RlXSk7XG5cbiAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMucG9wb3Zlci5ob3N0Vmlldyk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChcbiAgICAgIHRoaXMucmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoJ3Atcm9vdCcsIHRydWUpLFxuICAgICAgKHRoaXMucG9wb3Zlci5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdLFxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmliZVRvKCk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLnBvcG92ZXIpIHtcbiAgICAgIHRoaXMucG9wb3Zlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnBvcG92ZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBFdmVudExpc3RlbmVyUmVtb3ZlKCdyZXNpemUnKSk7XG4gIH1cblxuICBzdWJzY3JpYmVUbygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBFdmVudExpc3RlbmVyQWRkKCdyZXNpemUnKSk7XG5cbiAgICB0aGlzLnJlc2l6ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gISFldmVudCksXG4gICAgICAgIHRha2VVbnRpbE5vdE51bGwodGhpcy5kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKF8gPT4gdGhpcy5oaWRlKCkpO1xuXG4gICAgdGhpcy5hY3Rpb25zXG4gICAgICAucGlwZShcbiAgICAgICAgb2ZBY3Rpb25EaXNwYXRjaGVkKEV2ZW50TGlzdGVuZXJTY3JvbGxWZXJ0aWNhbCksXG4gICAgICAgIHRha2VVbnRpbE5vdE51bGwodGhpcy5kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKF8gPT4gdGhpcy5oaWRlKCkpO1xuICB9XG59XG4iXX0=