ng-halfmoon
Version:
Angular Library to build upon the halfmoon-framework
72 lines • 11.4 kB
JavaScript
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==