ngx-modialog-11
Version:
Modal / Dialog for Angular
78 lines • 9.65 kB
JavaScript
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