ngx-pluto
Version:
191 lines • 15.4 kB
JavaScript
/**
* @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=