UNPKG

modalicious

Version:
73 lines 10.6 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"; const noViewContainerRefMessage = `Modalicious: You must call setRootViewContainerRef on ModalService from your root component before calling ModalService.show()`; let ModalService = class ModalService { constructor(factoryResolver, appRef) { this.factoryResolver = factoryResolver; this.appRef = appRef; } setModalPositioning(useFixed) { this.defaultToFixedPositioning = useFixed; } setRootViewContainerRef(viewContainerRef) { this.rootViewContainer = viewContainerRef; } show(componentClass, providers = []) { if (!this.rootViewContainer) throw new Error(noViewContainerRefMessage); return new Promise((resolve, reject) => { let containerComponent; const containerFactory = this.factoryResolver .resolveComponentFactory(ModalContainerComponent); const close = () => tslib_1.__awaiter(this, void 0, void 0, function* () { yield containerComponent.instance.hide(); this.appRef.detachView(containerComponent.hostView); containerComponent.destroy(); }); const modalInstance = new ModalInstanceService((reason) => tslib_1.__awaiter(this, void 0, void 0, function* () { yield close(); reject(reason); }), (result) => tslib_1.__awaiter(this, void 0, void 0, function* () { yield close(); resolve(result); })); function modalInstanceFactory() { return modalInstance; } const containerInjector = Injector.create({ providers: [ { provide: ModalInstanceService, useFactory: modalInstanceFactory, deps: [] }, ], parent: this.rootViewContainer.parentInjector }); containerComponent = containerFactory .create(containerInjector); if (this.defaultToFixedPositioning) { containerComponent.instance.useFixedPosition = true; } const modalHostView = containerComponent.instance.modalHost.viewContainerRef; const modalFactory = this.factoryResolver .resolveComponentFactory(componentClass); const injector = Injector.create({ providers: [ { provide: ModalInstanceService, useFactory: modalInstanceFactory, deps: [] }, ...providers ], parent: this.rootViewContainer.parentInjector }); const 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); export { ModalService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vZGFsaWNpb3VzLyIsInNvdXJjZXMiOlsic2VydmljZXMvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCx3QkFBd0IsRUFFeEIsVUFBVSxFQUNWLFFBQVEsRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUc5RCxNQUFNLHlCQUF5QixHQUM3QixnSUFBZ0ksQ0FBQztBQUduSSxJQUFhLFlBQVksR0FBekIsTUFBYSxZQUFZO0lBSXZCLFlBQW9CLGVBQXlDLEVBQ3pDLE1BQXNCO1FBRHRCLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtRQUN6QyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtJQUMxQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBaUI7UUFDbkMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRUQsdUJBQXVCLENBQUMsZ0JBQWtDO1FBQ3hELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxDQUFhLGNBQWdDLEVBQUUsWUFBOEIsRUFBRTtRQUNqRixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUV4RSxPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksa0JBQXlELENBQUM7WUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZTtpQkFDMUMsdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUVwRCxNQUFNLEtBQUssR0FBRyxHQUFTLEVBQUU7Z0JBQ3ZCLE1BQU0sa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEQsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFBLENBQUM7WUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLG9CQUFvQixDQUFDLENBQU8sTUFBZSxFQUFFLEVBQUU7Z0JBQ3ZFLE1BQU0sS0FBSyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQSxFQUFFLENBQU8sTUFBVyxFQUFFLEVBQUU7Z0JBQ3ZCLE1BQU0sS0FBSyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQSxDQUFDLENBQUM7WUFFSCxTQUFTLG9CQUFvQjtnQkFDM0IsT0FBTyxhQUFhLENBQUM7WUFDdkIsQ0FBQztZQUVELE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDeEMsU0FBUyxFQUFFO29CQUNULEVBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDO2lCQUM1RTtnQkFDRCxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWM7YUFDOUMsQ0FBQyxDQUFDO1lBRUgsa0JBQWtCLEdBQUcsZ0JBQWdCO2lCQUNsQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUU3QixJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtnQkFDbEMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQzthQUNyRDtZQUVELE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7WUFFN0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWU7aUJBQ3RDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRzNDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLFNBQVMsRUFBRTtvQkFDVCxFQUFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQztvQkFDM0UsR0FBRyxTQUFTO2lCQUNiO2dCQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYzthQUM5QyxDQUFDLENBQUM7WUFFSCxNQUFNLGNBQWMsR0FBRyxZQUFZO2lCQUNoQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFcEIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRixDQUFBO0FBN0VZLFlBQVk7SUFEeEIsVUFBVSxFQUFFOzZDQUswQix3QkFBd0I7UUFDakMsY0FBYztHQUwvQixZQUFZLENBNkV4QjtTQTdFWSxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBJbmplY3RvciwgU3RhdGljUHJvdmlkZXIsIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01vZGFsQ29udGFpbmVyQ29tcG9uZW50fSBmcm9tICcuLi9tb2RhbC1jb250YWluZXIvbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge01vZGFsSW5zdGFuY2VTZXJ2aWNlfSBmcm9tIFwiLi9tb2RhbC1pbnN0YW5jZS5zZXJ2aWNlXCI7XG5cblxuY29uc3Qgbm9WaWV3Q29udGFpbmVyUmVmTWVzc2FnZSA9XG4gIGBNb2RhbGljaW91czogWW91IG11c3QgY2FsbCBzZXRSb290Vmlld0NvbnRhaW5lclJlZiBvbiBNb2RhbFNlcnZpY2UgZnJvbSB5b3VyIHJvb3QgY29tcG9uZW50IGJlZm9yZSBjYWxsaW5nIE1vZGFsU2VydmljZS5zaG93KClgO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kYWxTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByb290Vmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgcHJpdmF0ZSBkZWZhdWx0VG9GaXhlZFBvc2l0aW9uaW5nOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICB9XG5cbiAgc2V0TW9kYWxQb3NpdGlvbmluZyh1c2VGaXhlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGVmYXVsdFRvRml4ZWRQb3NpdGlvbmluZyA9IHVzZUZpeGVkO1xuICB9XG5cbiAgc2V0Um9vdFZpZXdDb250YWluZXJSZWYodmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIHRoaXMucm9vdFZpZXdDb250YWluZXIgPSB2aWV3Q29udGFpbmVyUmVmO1xuICB9XG5cbiAgc2hvdzxUQ29tcG9uZW50Pihjb21wb25lbnRDbGFzczogVHlwZTxUQ29tcG9uZW50PiwgcHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW10pOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICghdGhpcy5yb290Vmlld0NvbnRhaW5lcikgdGhyb3cgbmV3IEVycm9yKG5vVmlld0NvbnRhaW5lclJlZk1lc3NhZ2UpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IGNvbnRhaW5lckNvbXBvbmVudDogQ29tcG9uZW50UmVmPE1vZGFsQ29udGFpbmVyQ29tcG9uZW50PjtcbiAgICAgIGNvbnN0IGNvbnRhaW5lckZhY3RvcnkgPSB0aGlzLmZhY3RvcnlSZXNvbHZlclxuICAgICAgICAucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTW9kYWxDb250YWluZXJDb21wb25lbnQpO1xuXG4gICAgICBjb25zdCBjbG9zZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgY29udGFpbmVyQ29tcG9uZW50Lmluc3RhbmNlLmhpZGUoKTtcbiAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhjb250YWluZXJDb21wb25lbnQuaG9zdFZpZXcpO1xuICAgICAgICBjb250YWluZXJDb21wb25lbnQuZGVzdHJveSgpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9kYWxJbnN0YW5jZSA9IG5ldyBNb2RhbEluc3RhbmNlU2VydmljZShhc3luYyAocmVhc29uPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGF3YWl0IGNsb3NlKCk7XG4gICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgfSwgYXN5bmMgKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIGF3YWl0IGNsb3NlKCk7XG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiBtb2RhbEluc3RhbmNlRmFjdG9yeSgpIHtcbiAgICAgICAgcmV0dXJuIG1vZGFsSW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRhaW5lckluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAge3Byb3ZpZGU6IE1vZGFsSW5zdGFuY2VTZXJ2aWNlLCB1c2VGYWN0b3J5OiBtb2RhbEluc3RhbmNlRmFjdG9yeSwgZGVwczogW119LFxuICAgICAgICBdLFxuICAgICAgICBwYXJlbnQ6IHRoaXMucm9vdFZpZXdDb250YWluZXIucGFyZW50SW5qZWN0b3JcbiAgICAgIH0pO1xuXG4gICAgICBjb250YWluZXJDb21wb25lbnQgPSBjb250YWluZXJGYWN0b3J5XG4gICAgICAgIC5jcmVhdGUoY29udGFpbmVySW5qZWN0b3IpO1xuXG4gICAgICBpZiAodGhpcy5kZWZhdWx0VG9GaXhlZFBvc2l0aW9uaW5nKSB7XG4gICAgICAgIGNvbnRhaW5lckNvbXBvbmVudC5pbnN0YW5jZS51c2VGaXhlZFBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbW9kYWxIb3N0VmlldyA9IGNvbnRhaW5lckNvbXBvbmVudC5pbnN0YW5jZS5tb2RhbEhvc3Qudmlld0NvbnRhaW5lclJlZjtcblxuICAgICAgY29uc3QgbW9kYWxGYWN0b3J5ID0gdGhpcy5mYWN0b3J5UmVzb2x2ZXJcbiAgICAgICAgLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudENsYXNzKTtcblxuXG4gICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIHtwcm92aWRlOiBNb2RhbEluc3RhbmNlU2VydmljZSwgdXNlRmFjdG9yeTogbW9kYWxJbnN0YW5jZUZhY3RvcnksIGRlcHM6IFtdfSxcbiAgICAgICAgICAuLi5wcm92aWRlcnNcbiAgICAgICAgXSxcbiAgICAgICAgcGFyZW50OiB0aGlzLnJvb3RWaWV3Q29udGFpbmVyLnBhcmVudEluamVjdG9yXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbW9kYWxDb21wb25lbnQgPSBtb2RhbEZhY3RvcnlcbiAgICAgICAgLmNyZWF0ZShpbmplY3Rvcik7XG5cbiAgICAgIG1vZGFsSG9zdFZpZXcuaW5zZXJ0KG1vZGFsQ29tcG9uZW50Lmhvc3RWaWV3KTtcbiAgICAgIHRoaXMucm9vdFZpZXdDb250YWluZXIuaW5zZXJ0KGNvbnRhaW5lckNvbXBvbmVudC5ob3N0Vmlldyk7XG4gICAgfSk7XG4gIH1cbn1cblxuIl19