UNPKG

@ngx-performance-ui/ui

Version:
246 lines 19.9 kB
/** * @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=