UNPKG

ng-halfmoon

Version:

Angular Library to build upon the halfmoon-framework

72 lines 11.4 kB
import { ApplicationRef, ComponentFactoryResolver, Injectable, InjectionToken, Injector } from '@angular/core'; import { ModalContainerComponent } from './modal-container/modal-container.component'; import { ModalRef } from './modal-ref'; export const MODAL_DATA = new InjectionToken('modalData'); export class ModalService { constructor(_applicationRef, _componentFactoryResolver, _injector) { this._applicationRef = _applicationRef; this._componentFactoryResolver = _componentFactoryResolver; this._injector = _injector; this.counter = 0; this.body = 'body'; } createModal(component, config) { var _a, _b, _c; this.modalRef = new ModalRef(); this.contentRef = this.createContent(component, config); this._applicationRef.attachView(this.contentRef.hostView); this.containerRef = this.createContainer(); this.containerRef.instance.id = (_a = config === null || config === void 0 ? void 0 : config.id) !== null && _a !== void 0 ? _a : `modal-${this.counter}`; this.containerRef.instance.defaultDismiss = (_b = config === null || config === void 0 ? void 0 : config.defaultDismiss) !== null && _b !== void 0 ? _b : false; this.modalRef.modalId = (_c = config === null || config === void 0 ? void 0 : config.id) !== null && _c !== void 0 ? _c : `modal-${this.counter}`; this.modalRef.close = (data) => { this.containerRef.instance.isShown = false; // timeout to not interrupt the closing animation setTimeout(() => { this.removeModal(); this.modalRef.afterClosed.emit(data); }, 100); }; this._applicationRef.attachView(this.containerRef.hostView); const selectedElement = document.querySelector(this.body); selectedElement === null || selectedElement === void 0 ? void 0 : selectedElement.appendChild(this.containerRef.location.nativeElement); // Trigger toggle a 1ms later to achieve the correct animation setTimeout(() => { this.containerRef.instance.isShown = true; }, 1); this.counter++; return this.modalRef; } createContainer() { const factory = this._componentFactoryResolver.resolveComponentFactory(ModalContainerComponent); const injector = Injector.create({ parent: this._injector, providers: [{ provide: ModalRef, useValue: this.modalRef }] }); return factory.create(injector, [[this.contentRef.location.nativeElement]]); } createContent(component, config) { const contentCmptFactory = this._componentFactoryResolver.resolveComponentFactory(component); const modalContentInjector = Injector.create({ providers: [ { provide: ModalRef, useValue: this.modalRef }, { provide: MODAL_DATA, useValue: config === null || config === void 0 ? void 0 : config.data } ], parent: this._injector }); return contentCmptFactory.create(modalContentInjector); } removeModal() { this.contentRef.destroy(); this.containerRef.destroy(); } } ModalService.decorators = [ { type: Injectable } ]; ModalService.ctorParameters = () => [ { type: ApplicationRef }, { type: ComponentFactoryResolver }, { type: Injector } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWhhbGZtb29uL3NyYy9saWIvYWR2YW5jZWQvbW9kYWwvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUV4QixVQUFVLEVBQ1YsY0FBYyxFQUNkLFFBQVEsRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUVwRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRXJDLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUcxRCxNQUFNLE9BQU8sWUFBWTtJQU92QixZQUNVLGVBQStCLEVBQy9CLHlCQUFtRCxFQUNuRCxTQUFtQjtRQUZuQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0IsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEwQjtRQUNuRCxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBVHJCLFlBQU8sR0FBVyxDQUFDLENBQUM7UUFJcEIsU0FBSSxHQUFXLE1BQU0sQ0FBQztJQU0zQixDQUFDO0lBRUosV0FBVyxDQUFPLFNBQWtCLEVBQUUsTUFBdUI7O1FBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUssQ0FBQztRQUVsQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFD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b0JBQW9CLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7O1lBbEZGLFVBQVU7OztZQWRULGNBQWM7WUFDZCx3QkFBd0I7WUFJeEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtNb2RhbENvbnRhaW5lckNvbXBvbmVudH0gZnJvbSAnLi9tb2RhbC1jb250YWluZXIvbW9kYWwtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge01vZGFsQ29uZmlnfSBmcm9tICcuL21vZGFsLWNvbmZpZyc7XG5pbXBvcnQge01vZGFsUmVmfSBmcm9tICcuL21vZGFsLXJlZic7XG5cbmV4cG9ydCBjb25zdCBNT0RBTF9EQVRBID0gbmV3IEluamVjdGlvblRva2VuKCdtb2RhbERhdGEnKTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZGFsU2VydmljZSB7XG4gIHByaXZhdGUgY291bnRlcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBtb2RhbFJlZjogTW9kYWxSZWY7XG4gIHByaXZhdGUgY29udGFpbmVyUmVmOiBDb21wb25lbnRSZWY8TW9kYWxDb250YWluZXJDb21wb25lbnQ+O1xuICBwcml2YXRlIGNvbnRlbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xuICBwcml2YXRlIGJvZHk6IHN0cmluZyA9ICdib2R5JztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9hcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yXG4gICkge31cblxuICBjcmVhdGVNb2RhbDxULCBEPihjb21wb25lbnQ6IFR5cGU8VD4sIGNvbmZpZz86IE1vZGFsQ29uZmlnPEQ+KTogTW9kYWxSZWY8VD4ge1xuICAgIHRoaXMubW9kYWxSZWYgPSBuZXcgTW9kYWxSZWY8VD4oKTtcblxuICAgIHRoaXMuY29udGVudFJlZiA9IHRoaXMuY3JlYXRlQ29udGVudChjb21wb25lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyh0aGlzLmNvbnRlbnRSZWYuaG9zdFZpZXcpO1xuXG4gICAgdGhpcy5jb250YWluZXJSZWYgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcigpO1xuICAgIHRoaXMuY29udGFpbmVyUmVmLmluc3RhbmNlLmlkID0gY29uZmlnPy5pZCA/PyBgbW9kYWwtJHt0aGlzLmNvdW50ZXJ9YDtcbiAgICB0aGlzLmNvbnRhaW5lclJlZi5pbnN0YW5jZS5kZWZhdWx0RGlzbWlzcyA9IGNvbmZpZz8uZGVmYXVsdERpc21pc3MgPz8gZmFsc2U7XG4gICAgdGhpcy5tb2RhbFJlZi5tb2RhbElkID0gY29uZmlnPy5pZCA/PyBgbW9kYWwtJHt0aGlzLmNvdW50ZXJ9YDtcblxuICAgIHRoaXMubW9kYWxSZWYuY2xvc2UgPSAoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5jb250YWluZXJSZWYuaW5zdGFuY2UuaXNTaG93biA9IGZhbHNlO1xuICAgICAgLy8gdGltZW91dCB0byBub3QgaW50ZXJydXB0IHRoZSBjbG9zaW5nIGFuaW1hdGlvblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kYWwoKTtcbiAgICAgICAgdGhpcy5tb2RhbFJlZi5hZnRlckNsb3NlZC5lbWl0KGRhdGEpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyh0aGlzLmNvbnRhaW5lclJlZi5ob3N0Vmlldyk7XG5cbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuYm9keSk7XG5cbiAgICBzZWxlY3RlZEVsZW1lbnQ/LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgLy8gVHJpZ2dlciB0b2dnbGUgYSAxbXMgbGF0ZXIgdG8gYWNoaWV2ZSB0aGUgY29ycmVjdCBhbmltYXRpb25cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY29udGFpbmVyUmVmLmluc3RhbmNlLmlzU2hvd24gPSB0cnVlO1xuICAgIH0sIDEpO1xuICAgIHRoaXMuY291bnRlcisrO1xuICAgIHJldHVybiB0aGlzLm1vZGFsUmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250YWluZXIoKTogQ29tcG9uZW50UmVmPE1vZGFsQ29udGFpbmVyQ29tcG9uZW50PiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShcbiAgICAgIE1vZGFsQ29udGFpbmVyQ29tcG9uZW50XG4gICAgKTtcblxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3IsXG4gICAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogTW9kYWxSZWYsIHVzZVZhbHVlOiB0aGlzLm1vZGFsUmVmfV1cbiAgICB9KTtcblxuICAgIHJldHVybiBmYWN0b3J5LmNyZWF0ZShpbmplY3RvciwgW1t0aGlzLmNvbnRlbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudF1dKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29udGVudDxULCBEPihcbiAgICBjb21wb25lbnQ6IFR5cGU8VD4sXG4gICAgY29uZmlnPzogTW9kYWxDb25maWc8RD5cbiAgKTogQ29tcG9uZW50UmVmPFQ+IHtcbiAgICBjb25zdCBjb250ZW50Q21wdEZhY3RvcnkgPVxuICAgICAgdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG5cbiAgICBjb25zdCBtb2RhbENvbnRlbnRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge3Byb3ZpZGU6IE1vZGFsUmVmLCB1c2VWYWx1ZTogdGhpcy5tb2RhbFJlZn0sXG4gICAgICAgIHtwcm92aWRlOiBNT0RBTF9EQVRBLCB1c2VWYWx1ZTogY29uZmlnPy5kYXRhfVxuICAgICAgXSxcbiAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICB9KTtcblxuICAgIHJldHVybiBjb250ZW50Q21wdEZhY3RvcnkuY3JlYXRlKG1vZGFsQ29udGVudEluamVjdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZW50UmVmLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNvbnRhaW5lclJlZi5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==