UNPKG

ngx-modialog-11

Version:
78 lines 9.65 kB
import { Injectable, Injector } from '@angular/core'; import { OverlayRenderer } from '../models/tokens'; import { DialogRefStack } from '../models/dialog-ref-stack'; import { vcRefStore } from '../models/vc-ref-store'; import { DialogRef } from '../models/dialog-ref'; const _stack = new DialogRefStack(); export class Overlay { constructor(_modalRenderer, injector) { this._modalRenderer = _modalRenderer; this.injector = injector; } get stackLength() { return _stack.length; } /** * Check if a given DialogRef is the top most ref in the stack. * TODO: distinguish between body modal vs in element modal. * @param dialogRef */ isTopMost(dialogRef) { return _stack.indexOf(dialogRef) === _stack.length - 1; } stackPosition(dialogRef) { return _stack.indexOf(dialogRef); } groupStackLength(dialogRef) { return _stack.groupLength(_stack.groupOf(dialogRef)); } closeAll(result = null) { _stack.closeAll(result); } /** * Creates an overlay and returns a dialog ref. * @param config instructions how to create the overlay * @param group A token to associate the new overlay with, used for reference (stacks usually) */ open(config, group) { const viewContainer = config.viewContainer; let containers = []; if (typeof viewContainer === 'string') { containers = vcRefStore.getVCRef(viewContainer); } else if (Array.isArray(viewContainer)) { containers = viewContainer; } else if (viewContainer) { containers = [viewContainer]; } else { containers = [null]; } return containers .map(vc => this.createOverlay(config.renderer || this._modalRenderer, vc, config, group)); } createOverlay(renderer, vcRef, config, group) { if (config.context) { config.context.normalize(); } if (!config.injector) { config.injector = this.injector; } const dialog = new DialogRef(this, config.context || {}); dialog.inElement = config.context && !!config.context.inElement; const cmpRef = renderer.render(dialog, vcRef, config.injector); Object.defineProperty(dialog, 'overlayRef', { value: cmpRef }); _stack.pushManaged(dialog, group); return dialog; } } Overlay.decorators = [ { type: Injectable } ]; /** @nocollapse */ Overlay.ctorParameters = () => [ { type: OverlayRenderer }, { type: Injector } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1vZGlhbG9nLTExL3NyYy9saWIvb3ZlcmxheS9vdmVybGF5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZFLE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0sa0JBQWtCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQU8sQ0FBQztBQUd6QyxNQUFNLE9BQU8sT0FBTztJQUtsQixZQUFvQixjQUErQixFQUFZLFFBQWtCO1FBQTdELG1CQUFjLEdBQWQsY0FBYyxDQUFpQjtRQUFZLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDakYsQ0FBQztJQUxELElBQUksV0FBVztRQUNiLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBS0Q7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxTQUF5QjtRQUNqQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGFBQWEsQ0FBQyxTQUF5QjtRQUNyQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQXlCO1FBQ3hDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFFBQVEsQ0FBQyxTQUFjLElBQUk7UUFDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBMkIsTUFBcUIsRUFBRSxLQUFXO1FBQy9ELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDM0MsSUFBSSxVQUFVLEdBQTRCLEVBQUUsQ0FBQztRQUU3QyxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUF1QixDQUFDLENBQUM7U0FDM0Q7YUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDdkMsVUFBVSxHQUFHLGFBQW9CLENBQUM7U0FDbkM7YUFBTSxJQUFJLGFBQWEsRUFBRTtZQUN4QixVQUFVLEdBQUcsQ0FBQyxhQUFhLENBQVEsQ0FBQztTQUNyQzthQUFNO1lBQ0wsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckI7UUFFRCxPQUFPLFVBQVU7YUFDZCxHQUFHLENBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVPLGFBQWEsQ0FBQyxRQUF5QixFQUN6QixLQUF1QixFQUN2QixNQUFxQixFQUNyQixLQUFVO1FBRTlCLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDcEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2pDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQU0sSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUVoRSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7OztZQTNFRixVQUFVOzs7O1lBUkYsZUFBZTtZQUZlLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgT3ZlcmxheVJlbmRlcmVyLCBPdmVybGF5Q29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL3Rva2Vucyc7XHJcbmltcG9ydCB7IERpYWxvZ1JlZlN0YWNrIH0gZnJvbSAnLi4vbW9kZWxzL2RpYWxvZy1yZWYtc3RhY2snO1xyXG5pbXBvcnQgeyB2Y1JlZlN0b3JlIH0gZnJvbSAnLi4vbW9kZWxzL3ZjLXJlZi1zdG9yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4uL21vZGVscy9kaWFsb2ctcmVmJztcclxuaW1wb3J0IHsgT3ZlcmxheUNvbnRleHQgfSBmcm9tICcuLi9tb2RlbHMvb3ZlcmxheS1jb250ZXh0JztcclxuXHJcbmNvbnN0IF9zdGFjayA9IG5ldyBEaWFsb2dSZWZTdGFjazxhbnk+KCk7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBPdmVybGF5IHtcclxuICBnZXQgc3RhY2tMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBfc3RhY2subGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kYWxSZW5kZXJlcjogT3ZlcmxheVJlbmRlcmVyLCBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhIGdpdmVuIERpYWxvZ1JlZiBpcyB0aGUgdG9wIG1vc3QgcmVmIGluIHRoZSBzdGFjay5cclxuICAgKiBUT0RPOiBkaXN0aW5ndWlzaCBiZXR3ZWVuIGJvZHkgbW9kYWwgdnMgaW4gZWxlbWVudCBtb2RhbC5cclxuICAgKiBAcGFyYW0gZGlhbG9nUmVmXHJcbiAgICovXHJcbiAgaXNUb3BNb3N0KGRpYWxvZ1JlZjogRGlhbG9nUmVmPGFueT4pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBfc3RhY2suaW5kZXhPZihkaWFsb2dSZWYpID09PSBfc3RhY2subGVuZ3RoIC0gMTtcclxuICB9XHJcblxyXG4gIHN0YWNrUG9zaXRpb24oZGlhbG9nUmVmOiBEaWFsb2dSZWY8YW55Pikge1xyXG4gICAgcmV0dXJuIF9zdGFjay5pbmRleE9mKGRpYWxvZ1JlZik7XHJcbiAgfVxyXG5cclxuICBncm91cFN0YWNrTGVuZ3RoKGRpYWxvZ1JlZjogRGlhbG9nUmVmPGFueT4pOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIF9zdGFjay5ncm91cExlbmd0aChfc3RhY2suZ3JvdXBPZihkaWFsb2dSZWYpKTtcclxuICB9XHJcblxyXG4gIGNsb3NlQWxsKHJlc3VsdDogYW55ID0gbnVsbCk6IHZvaWQge1xyXG4gICAgICBfc3RhY2suY2xvc2VBbGwocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYW4gb3ZlcmxheSBhbmQgcmV0dXJucyBhIGRpYWxvZyByZWYuXHJcbiAgICogQHBhcmFtIGNvbmZpZyBpbnN0cnVjdGlvbnMgaG93IHRvIGNyZWF0ZSB0aGUgb3ZlcmxheVxyXG4gICAqIEBwYXJhbSBncm91cCBBIHRva2VuIHRvIGFzc29jaWF0ZSB0aGUgbmV3IG92ZXJsYXkgd2l0aCwgdXNlZCBmb3IgcmVmZXJlbmNlIChzdGFja3MgdXN1YWxseSlcclxuICAgKi9cclxuICBvcGVuPFQgZXh0ZW5kcyBPdmVybGF5Q29udGV4dD4oY29uZmlnOiBPdmVybGF5Q29uZmlnLCBncm91cD86IGFueSk6IERpYWxvZ1JlZjxUPltdIHtcclxuICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSBjb25maWcudmlld0NvbnRhaW5lcjtcclxuICAgIGxldCBjb250YWluZXJzOiBBcnJheTxWaWV3Q29udGFpbmVyUmVmPiA9IFtdO1xyXG5cclxuICAgIGlmICh0eXBlb2Ygdmlld0NvbnRhaW5lciA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY29udGFpbmVycyA9IHZjUmVmU3RvcmUuZ2V0VkNSZWYodmlld0NvbnRhaW5lciBhcyBzdHJpbmcpO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZpZXdDb250YWluZXIpKSB7XHJcbiAgICAgIGNvbnRhaW5lcnMgPSB2aWV3Q29udGFpbmVyIGFzIGFueTtcclxuICAgIH0gZWxzZSBpZiAodmlld0NvbnRhaW5lcikge1xyXG4gICAgICBjb250YWluZXJzID0gW3ZpZXdDb250YWluZXJdIGFzIGFueTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnRhaW5lcnMgPSBbbnVsbF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbnRhaW5lcnNcclxuICAgICAgLm1hcCggdmMgPT4gdGhpcy5jcmVhdGVPdmVybGF5KGNvbmZpZy5yZW5kZXJlciB8fCB0aGlzLl9tb2RhbFJlbmRlcmVyLCB2YywgY29uZmlnLCBncm91cCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVPdmVybGF5KHJlbmRlcmVyOiBPdmVybGF5UmVuZGVyZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZjUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IE92ZXJsYXlDb25maWcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwOiBhbnkpOiBEaWFsb2dSZWY8YW55PiB7XHJcblxyXG4gICAgaWYgKGNvbmZpZy5jb250ZXh0KSB7XHJcbiAgICAgIGNvbmZpZy5jb250ZXh0Lm5vcm1hbGl6ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29uZmlnLmluamVjdG9yKSB7XHJcbiAgICAgIGNvbmZpZy5pbmplY3RvciA9IHRoaXMuaW5qZWN0b3I7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlhbG9nID0gbmV3IERpYWxvZ1JlZjxhbnk+KHRoaXMsIGNvbmZpZy5jb250ZXh0IHx8IHt9KTtcclxuICAgIGRpYWxvZy5pbkVsZW1lbnQgPSBjb25maWcuY29udGV4dCAmJiAhIWNvbmZpZy5jb250ZXh0LmluRWxlbWVudDtcclxuXHJcbiAgICBjb25zdCBjbXBSZWYgPSByZW5kZXJlci5yZW5kZXIoZGlhbG9nLCB2Y1JlZiwgY29uZmlnLmluamVjdG9yKTtcclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGlhbG9nLCAnb3ZlcmxheVJlZicsIHt2YWx1ZTogY21wUmVmfSk7XHJcbiAgICBfc3RhY2sucHVzaE1hbmFnZWQoZGlhbG9nLCBncm91cCk7XHJcblxyXG4gICAgcmV0dXJuIGRpYWxvZztcclxuICB9XHJcbn1cclxuIl19