UNPKG

modalicious

Version:
96 lines 12 kB
import * as tslib_1 from "tslib"; import { ApplicationRef, ComponentFactoryResolver, Injectable, Injector } from '@angular/core'; import { ModalContainerComponent } from '../modal-container/modal-container.component'; import { ModalInstanceService } from "./modal-instance.service"; var noViewContainerRefMessage = "Modalicious: You must call setRootViewContainerRef on ModalService from your root component before calling ModalService.show()"; var ModalService = /** @class */ (function () { function ModalService(factoryResolver, appRef) { this.factoryResolver = factoryResolver; this.appRef = appRef; } ModalService.prototype.setModalPositioning = function (useFixed) { this.defaultToFixedPositioning = useFixed; }; ModalService.prototype.setRootViewContainerRef = function (viewContainerRef) { this.rootViewContainer = viewContainerRef; }; ModalService.prototype.show = function (componentClass, providers) { var _this = this; if (providers === void 0) { providers = []; } if (!this.rootViewContainer) throw new Error(noViewContainerRefMessage); return new Promise(function (resolve, reject) { var containerComponent; var containerFactory = _this.factoryResolver .resolveComponentFactory(ModalContainerComponent); var close = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, containerComponent.instance.hide()]; case 1: _a.sent(); this.appRef.detachView(containerComponent.hostView); containerComponent.destroy(); return [2 /*return*/]; } }); }); }; var modalInstance = new ModalInstanceService(function (reason) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, close()]; case 1: _a.sent(); reject(reason); return [2 /*return*/]; } }); }); }, function (result) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, close()]; case 1: _a.sent(); resolve(result); return [2 /*return*/]; } }); }); }); function modalInstanceFactory() { return modalInstance; } var containerInjector = Injector.create({ providers: [ { provide: ModalInstanceService, useFactory: modalInstanceFactory, deps: [] }, ], parent: _this.rootViewContainer.parentInjector }); containerComponent = containerFactory .create(containerInjector); if (_this.defaultToFixedPositioning) { containerComponent.instance.useFixedPosition = true; } var modalHostView = containerComponent.instance.modalHost.viewContainerRef; var modalFactory = _this.factoryResolver .resolveComponentFactory(componentClass); var injector = Injector.create({ providers: tslib_1.__spread([ { provide: ModalInstanceService, useFactory: modalInstanceFactory, deps: [] } ], providers), parent: _this.rootViewContainer.parentInjector }); var modalComponent = modalFactory .create(injector); modalHostView.insert(modalComponent.hostView); _this.rootViewContainer.insert(containerComponent.hostView); }); }; ModalService = tslib_1.__decorate([ Injectable(), tslib_1.__metadata("design:paramtypes", [ComponentFactoryResolver, ApplicationRef]) ], ModalService); return ModalService; }()); export { ModalService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vZGFsaWNpb3VzLyIsInNvdXJjZXMiOlsic2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCx3QkFBd0IsRUFFeEIsVUFBVSxFQUNWLFFBQVEsRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxJQUFNLHlCQUF5QixHQUM3QixnSUFBZ0ksQ0FBQztBQUduSTtJQUlFLHNCQUFvQixlQUF5QyxFQUN6QyxNQUFzQjtRQUR0QixvQkFBZSxHQUFmLGVBQWUsQ0FBMEI7UUFDekMsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7SUFDMUMsQ0FBQztJQUVELDBDQUFtQixHQUFuQixVQUFvQixRQUFpQjtRQUNuQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRCw4Q0FBdUIsR0FBdkIsVUFBd0IsZ0JBQWtDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsMkJBQUksR0FBSixVQUFpQixjQUFnQyxFQUFFLFNBQWdDO1FBQW5GLGlCQTREQztRQTVEa0QsMEJBQUEsRUFBQSxjQUFnQztRQUNqRixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUV4RSxPQUFPLElBQUksT0FBTyxDQUFNLFVBQUMsT0FBTyxFQUFFLE1BQU07WUFDdEMsSUFBSSxrQkFBeUQsQ0FBQztZQUM5RCxJQUFNLGdCQUFnQixHQUFHLEtBQUksQ0FBQyxlQUFlO2lCQUMxQyx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBRXBELElBQU0sS0FBSyxHQUFHOzs7Z0NBQ1oscUJBQU0sa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFBOzs0QkFBeEMsU0FBd0MsQ0FBQzs0QkFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7NEJBQ3BELGtCQUFrQixDQUFDLE9BQU8sRUFBRSxDQUFDOzs7O2lCQUM5QixDQUFDO1lBRUYsSUFBTSxhQUFhLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxVQUFPLE1BQWU7OztnQ0FDbkUscUJBQU0sS0FBSyxFQUFFLEVBQUE7OzRCQUFiLFNBQWEsQ0FBQzs0QkFDZCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Ozs7aUJBQ2hCLEVBQUUsVUFBTyxNQUFXOzs7Z0NBQ25CLHFCQUFNLEtBQUssRUFBRSxFQUFBOzs0QkFBYixTQUFhLENBQUM7NEJBQ2QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzs7O2lCQUNqQixDQUFDLENBQUM7WUFFSCxTQUFTLG9CQUFvQjtnQkFDM0IsT0FBTyxhQUFhLENBQUM7WUFDdkIsQ0FBQztZQUVELElBQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsU0FBUyxFQUFFO29CQUNULEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDO2lCQUM1RTtnQkFDRCxNQUFNLEVBQUUsS0FBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWM7YUFDOUMsQ0FBQyxDQUFDO1lBRUgsa0JBQWtCLEdBQUcsZ0JBQWdCO2lCQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUU3QixJQUFJLEtBQUksQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbEMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUNyRDtZQUVELElBQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7WUFFN0UsSUFBTSxZQUFZLEdBQUcsS0FBSSxDQUFDLGVBQWU7aUJBQ3RDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRzNDLElBQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLFNBQVM7b0JBQ1AsRUFBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUM7bUJBQ3hFLFNBQVMsQ0FDYjtnQkFDRCxNQUFNLEVBQUUsS0FBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWM7YUFDOUMsQ0FBQyxDQUFDO1lBRUgsSUFBTSxjQUFjLEdBQUcsWUFBWTtpQkFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRXBCLGFBQWEsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBNUVVLFlBQVk7UUFEeEIsVUFBVSxFQUFFO2lEQUswQix3QkFBd0I7WUFDakMsY0FBYztPQUwvQixZQUFZLENBNkV4QjtJQUFELG1CQUFDO0NBQUEsQUE3RUQsSUE2RUM7U0E3RVksWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsIFN0YXRpY1Byb3ZpZGVyLCBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbENvbnRhaW5lckNvbXBvbmVudH0gZnJvbSAnLi4vbW9kYWwtY29udGFpbmVyL21vZGFsLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtNb2RhbEluc3RhbmNlU2VydmljZX0gZnJvbSBcIi4vbW9kYWwtaW5zdGFuY2Uuc2VydmljZVwiO1xuXG5cbmNvbnN0IG5vVmlld0NvbnRhaW5lclJlZk1lc3NhZ2UgPVxuICBgTW9kYWxpY2lvdXM6IFlvdSBtdXN0IGNhbGwgc2V0Um9vdFZpZXdDb250YWluZXJSZWYgb24gTW9kYWxTZXJ2aWNlIGZyb20geW91ciByb290IGNvbXBvbmVudCBiZWZvcmUgY2FsbGluZyBNb2RhbFNlcnZpY2Uuc2hvdygpYDtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZGFsU2VydmljZSB7XG4gIHByaXZhdGUgcm9vdFZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gIHByaXZhdGUgZGVmYXVsdFRvRml4ZWRQb3NpdGlvbmluZzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYpIHtcbiAgfVxuXG4gIHNldE1vZGFsUG9zaXRpb25pbmcodXNlRml4ZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRlZmF1bHRUb0ZpeGVkUG9zaXRpb25pbmcgPSB1c2VGaXhlZDtcbiAgfVxuXG4gIHNldFJvb3RWaWV3Q29udGFpbmVyUmVmKHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICB0aGlzLnJvb3RWaWV3Q29udGFpbmVyID0gdmlld0NvbnRhaW5lclJlZjtcbiAgfVxuXG4gIHNob3c8VENvbXBvbmVudD4oY29tcG9uZW50Q2xhc3M6IFR5cGU8VENvbXBvbmVudD4sIHByb3ZpZGVyczogU3RhdGljUHJvdmlkZXJbXSA9IFtdKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMucm9vdFZpZXdDb250YWluZXIpIHRocm93IG5ldyBFcnJvcihub1ZpZXdDb250YWluZXJSZWZNZXNzYWdlKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCBjb250YWluZXJDb21wb25lbnQ6IENvbXBvbmVudFJlZjxNb2RhbENvbnRhaW5lckNvbXBvbmVudD47XG4gICAgICBjb25zdCBjb250YWluZXJGYWN0b3J5ID0gdGhpcy5mYWN0b3J5UmVzb2x2ZXJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1vZGFsQ29udGFpbmVyQ29tcG9uZW50KTtcblxuICAgICAgY29uc3QgY2xvc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGNvbnRhaW5lckNvbXBvbmVudC5pbnN0YW5jZS5oaWRlKCk7XG4gICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcoY29udGFpbmVyQ29tcG9uZW50Lmhvc3RWaWV3KTtcbiAgICAgICAgY29udGFpbmVyQ29tcG9uZW50LmRlc3Ryb3koKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vZGFsSW5zdGFuY2UgPSBuZXcgTW9kYWxJbnN0YW5jZVNlcnZpY2UoYXN5bmMgKHJlYXNvbj86IHN0cmluZykgPT4ge1xuICAgICAgICBhd2FpdCBjbG9zZSgpO1xuICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgIH0sIGFzeW5jIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBhd2FpdCBjbG9zZSgpO1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KTtcblxuICAgICAgZnVuY3Rpb24gbW9kYWxJbnN0YW5jZUZhY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiBtb2RhbEluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWluZXJJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIHtwcm92aWRlOiBNb2RhbEluc3RhbmNlU2VydmljZSwgdXNlRmFjdG9yeTogbW9kYWxJbnN0YW5jZUZhY3RvcnksIGRlcHM6IFtdfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFyZW50OiB0aGlzLnJvb3RWaWV3Q29udGFpbmVyLnBhcmVudEluamVjdG9yXG4gICAgICB9KTtcblxuICAgICAgY29udGFpbmVyQ29tcG9uZW50ID0gY29udGFpbmVyRmFjdG9yeVxuICAgICAgICAuY3JlYXRlKGNvbnRhaW5lckluamVjdG9yKTtcblxuICAgICAgaWYgKHRoaXMuZGVmYXVsdFRvRml4ZWRQb3NpdGlvbmluZykge1xuICAgICAgICBjb250YWluZXJDb21wb25lbnQuaW5zdGFuY2UudXNlRml4ZWRQb3NpdGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1vZGFsSG9zdFZpZXcgPSBjb250YWluZXJDb21wb25lbnQuaW5zdGFuY2UubW9kYWxIb3N0LnZpZXdDb250YWluZXJSZWY7XG5cbiAgICAgIGNvbnN0IG1vZGFsRmFjdG9yeSA9IHRoaXMuZmFjdG9yeVJlc29sdmVyXG4gICAgICAgIC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRDbGFzcyk7XG5cblxuICAgICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICB7cHJvdmlkZTogTW9kYWxJbnN0YW5jZVNlcnZpY2UsIHVzZUZhY3Rvcnk6IG1vZGFsSW5zdGFuY2VGYWN0b3J5LCBkZXBzOiBbXX0sXG4gICAgICAgICAgLi4ucHJvdmlkZXJzXG4gICAgICAgIF0sXG4gICAgICAgIHBhcmVudDogdGhpcy5yb290Vmlld0NvbnRhaW5lci5wYXJlbnRJbmplY3RvclxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1vZGFsQ29tcG9uZW50ID0gbW9kYWxGYWN0b3J5XG4gICAgICAgIC5jcmVhdGUoaW5qZWN0b3IpO1xuXG4gICAgICBtb2RhbEhvc3RWaWV3Lmluc2VydChtb2RhbENvbXBvbmVudC5ob3N0Vmlldyk7XG4gICAgICB0aGlzLnJvb3RWaWV3Q29udGFpbmVyLmluc2VydChjb250YWluZXJDb21wb25lbnQuaG9zdFZpZXcpO1xuICAgIH0pO1xuICB9XG59XG5cbiJdfQ==