UNPKG

ngx-pluto

Version:
191 lines 15.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Subject, fromEvent } from "rxjs"; import { filter, take } from "rxjs/operators"; import { Injectable } from "@angular/core"; import { Overlay, OverlayContainer, OverlayConfig, OverlayPositionBuilder } from '@angular/cdk/overlay'; import { TemplatePortal } from '@angular/cdk/portal'; import * as i0 from "@angular/core"; import * as i1 from "@angular/cdk/overlay"; export class OverlayService { /** * @param {?} overlay * @param {?} overlayPositionBuilder * @param {?} overlayContainer */ constructor(overlay, overlayPositionBuilder, overlayContainer) { this.overlay = overlay; this.overlayPositionBuilder = overlayPositionBuilder; this.overlayContainer = overlayContainer; this.afterClosed = new Subject(); this.onClosed = this.afterClosed.asObservable(); this.close = (/** * @param {?} data * @return {?} */ (data) => { this.sub && this.sub.unsubscribe(); if (this.overlayRef) { this.overlayRef.dispose(); this.overlayRef = null; this.afterClosed.next(data); } }); } /** * @param {?} type * @param {?} origin * @param {?} tpl * @param {?} viewContainerRef * @param {?} data * @return {?} */ open(type, origin, tpl, viewContainerRef, data) { this.close(null); this.overlayRef = this.overlay.create(this.getOverlayConfig({ origin: origin }, type, true)); this.overlayRef.attach(new TemplatePortal(tpl, viewContainerRef, { $implicit: data, close: this.close })); this.sub = fromEvent(document, "click") .pipe(filter((/** * @param {?} event * @return {?} */ event => { /** @type {?} */ const clickTarget = (/** @type {?} */ (event.target)); return (clickTarget != origin && (!!this.overlayRef && !this.overlayRef.overlayElement.contains(clickTarget))); })), take(1)) .subscribe((/** * @return {?} */ () => { this.close(null); })); return this.onClosed.pipe(take(1)); } /** * @param {?} origin * @param {?} tpl * @param {?} viewContainerRef * @param {?} data * @return {?} */ openDropdown(origin, tpl, viewContainerRef, data) { return this.open(PopupType.DROPDOWN, origin, tpl, viewContainerRef, data); } /** * @return {?} */ isAttached() { if (this.overlayRef) { return this.overlayRef.hasAttached(); } return false; } /** * @private * @param {?} origin * @return {?} */ getOverlayPosition(origin) { /** @type {?} */ const positionStrategy = this.overlayPositionBuilder .flexibleConnectedTo(origin) .withPositions(this.getDropdownPositions()); return positionStrategy; } /** * @private * @param {?} __0 * @param {?} type * @param {?=} hasBackdrop * @return {?} */ getOverlayConfig({ origin }, type, hasBackdrop = false) { return new OverlayConfig({ hasBackdrop: hasBackdrop, backdropClass: 'backdrop-transparent', positionStrategy: type === PopupType.DROPDOWN ? this.getOverlayPosition(origin) : this.getOverlayPosition(origin), // TODO scrollStrategy: this.overlay.scrollStrategies.block() }); } /** * @private * @return {?} */ getDropdownPositions() { return [ { originX: "start", originY: "bottom", overlayX: "start", overlayY: "top", offsetX: 0, offsetY: 0 }, { originX: "start", originY: "top", overlayX: "start", overlayY: "bottom", offsetX: 0, offsetY: 0 } ]; } } OverlayService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ OverlayService.ctorParameters = () => [ { type: Overlay }, { type: OverlayPositionBuilder }, { type: OverlayContainer } ]; /** @nocollapse */ OverlayService.ngInjectableDef = i0.defineInjectable({ factory: function OverlayService_Factory() { return new OverlayService(i0.inject(i1.Overlay), i0.inject(i1.OverlayPositionBuilder), i0.inject(i1.OverlayContainer)); }, token: OverlayService, providedIn: "root" }); if (false) { /** @type {?} */ OverlayService.prototype.overlayRef; /** @type {?} */ OverlayService.prototype.sub; /** * @type {?} * @private */ OverlayService.prototype.afterClosed; /** @type {?} */ OverlayService.prototype.onClosed; /** @type {?} */ OverlayService.prototype.close; /** * @type {?} * @private */ OverlayService.prototype.overlay; /** * @type {?} * @private */ OverlayService.prototype.overlayPositionBuilder; /** * @type {?} * @private */ OverlayService.prototype.overlayContainer; } /** @enum {number} */ const PopupType = { DROPDOWN: 0, MENU: 1, }; export { PopupType }; PopupType[PopupType.DROPDOWN] = 'DROPDOWN'; PopupType[PopupType.MENU] = 'MENU'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LXBsdXRvLyIsInNvdXJjZXMiOlsibGliL2NvbW1vbi9vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQTRCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFPLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQW9CLGFBQWEsRUFBc0Msc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5SixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUtyRCxNQUFNLE9BQU8sY0FBYzs7Ozs7O0lBTXZCLFlBQW9CLE9BQWdCLEVBQ3hCLHNCQUE4QyxFQUM5QyxnQkFBa0M7UUFGMUIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUN4QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFMdEMsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3pDLGFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBZ0MzQyxVQUFLOzs7O1FBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNsQixJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJ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QUFPO1lBQ0g7Z0JBQ0ksT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxFQUFFLENBQUM7YUFDYjtZQUNEO2dCQUNJLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUUsS0FBSztnQkFDZCxRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE9BQU8sRUFBRSxDQUFDO2FBQ2I7U0FDSixDQUFDO0lBQ04sQ0FBQzs7O1lBNUZKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7OztZQUxRLE9BQU87WUFBeUYsc0JBQXNCO1lBQTdHLGdCQUFnQjs7Ozs7SUFPOUIsb0NBQXVCOztJQUN2Qiw2QkFBa0I7Ozs7O0lBQ2xCLHFDQUF5Qzs7SUFDekMsa0NBQTJDOztJQWdDM0MsK0JBT0M7Ozs7O0lBckNXLGlDQUF3Qjs7Ozs7SUFDaEMsZ0RBQXNEOzs7OztJQUN0RCwwQ0FBMEM7Ozs7SUFxRjlDLFdBQVk7SUFDWixPQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb250YWluZXIsIFBvc2l0aW9uU3RyYXRlZ3ksIE92ZXJsYXlDb25maWcsIENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsIE92ZXJsYXlSZWYsIE92ZXJsYXlQb3NpdGlvbkJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE92ZXJsYXlTZXJ2aWNlIHtcclxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XHJcbiAgICBzdWI6IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgYWZ0ZXJDbG9zZWQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBvbkNsb3NlZCA9IHRoaXMuYWZ0ZXJDbG9zZWQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxyXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheVBvc2l0aW9uQnVpbGRlcjogT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG92ZXJsYXlDb250YWluZXI6IE92ZXJsYXlDb250YWluZXIpIHsgfVxyXG5cclxuICAgIG9wZW4odHlwZTogUG9wdXBUeXBlLCBvcmlnaW46IEhUTUxFbGVtZW50LCB0cGw6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsIGRhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY2xvc2UobnVsbCk7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh0aGlzLmdldE92ZXJsYXlDb25maWcoeyBvcmlnaW46IG9yaWdpbiB9LCB0eXBlLCB0cnVlKSk7XHJcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodHBsLCB2aWV3Q29udGFpbmVyUmVmLCB7XHJcbiAgICAgICAgICAgICRpbXBsaWNpdDogZGF0YSwgY2xvc2U6IHRoaXMuY2xvc2VcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3ViID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCBcImNsaWNrXCIpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlja1RhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNsaWNrVGFyZ2V0ICE9IG9yaWdpbiAmJiAoISF0aGlzLm92ZXJsYXlSZWYgJiYgIXRoaXMub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhjbGlja1RhcmdldCkpKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZShudWxsKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLm9uQ2xvc2VkLnBpcGUodGFrZSgxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRyb3Bkb3duKG9yaWdpbjogSFRNTEVsZW1lbnQsIHRwbDogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgZGF0YTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbihQb3B1cFR5cGUuRFJPUERPV04sIG9yaWdpbiwgdHBsLCB2aWV3Q29udGFpbmVyUmVmLCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSA9IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnN1YiAmJiB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5hZnRlckNsb3NlZC5uZXh0KGRhdGEpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzQXR0YWNoZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luOiBhbnkpOiBQb3NpdGlvblN0cmF0ZWd5IHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5UG9zaXRpb25CdWlsZGVyXHJcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKG9yaWdpbilcclxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5nZXREcm9wZG93blBvc2l0aW9ucygpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHBvc2l0aW9uU3RyYXRlZ3k7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRPdmVybGF5Q29uZmlnKHsgb3JpZ2luIH0sIHR5cGU6IFBvcHVwVHlwZSwgaGFzQmFja2Ryb3AgPSBmYWxzZSk6IE92ZXJsYXlDb25maWcge1xyXG4gICAgICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XHJcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiBoYXNCYWNrZHJvcCxcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2JhY2tkcm9wLXRyYW5zcGFyZW50JyxcclxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdHlwZSA9PT0gUG9wdXBUeXBlLkRST1BET1dOID8gdGhpcy5nZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luKSA6IHRoaXMuZ2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbiksIC8vIFRPRE9cclxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKClcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERyb3Bkb3duUG9zaXRpb25zKCk6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXSB7XHJcbiAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogXCJzdGFydFwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBcInN0YXJ0XCIsXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogXCJ0b3BcIixcclxuICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXRZOiAwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6IFwic3RhcnRcIixcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogXCJzdGFydFwiLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgICAgICBvZmZzZXRYOiAwLFxyXG4gICAgICAgICAgICAgICAgb2Zmc2V0WTogMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGVudW0gUG9wdXBUeXBlIHtcclxuICAgIERST1BET1dOID0gMCxcclxuICAgIE1FTlUgPSAxXHJcbn0iXX0=