ngx-simple-modal
Version:
A simple unopinionated framework to implement simple modal based behaviour in angular (v2+) projects.
117 lines (116 loc) • 13.5 kB
JavaScript
import * as tslib_1 from "tslib";
import { ApplicationRef, ComponentFactoryResolver, EmbeddedViewRef, Injectable, Injector, Optional, Type, } from '@angular/core';
import { SimpleModalHolderComponent } from './simple-modal-holder.component';
var SimpleModalServiceConfig = /** @class */ (function () {
function SimpleModalServiceConfig() {
this.container = null;
}
return SimpleModalServiceConfig;
}());
export { SimpleModalServiceConfig };
var SimpleModalService = /** @class */ (function () {
/**
* @param {ComponentFactoryResolver} resolver
* @param {ApplicationRef} applicationRef
* @param {Injector} injector
* @param {SimpleModalServiceConfig} config
*/
function SimpleModalService(resolver, applicationRef, injector, config) {
this.resolver = resolver;
this.applicationRef = applicationRef;
this.injector = injector;
if (config) {
this.container = config.container;
}
}
/**
* Adds modal
* @param {Type<SimpleModalComponent<T, T1>>} component
* @param {T?} data
* @param {SimpleModalOptionsOverrides?} options
* @return {Observable<T1>}
*/
SimpleModalService.prototype.addModal = function (component, data, options) {
if (!this.modalHolderComponent) {
this.modalHolderComponent = this.createSimpleModalHolder();
}
return this.modalHolderComponent.addModal(component, data, options);
};
/**
* Hides and removes modal from DOM, resolves promise when fully removed
* @param {SimpleModalComponent} component
* @return {Promise<{}>}
*/
SimpleModalService.prototype.removeModal = function (component) {
if (!this.modalHolderComponent) {
return Promise.resolve({});
}
return this.modalHolderComponent.removeModal(component);
};
/**
* Closes all modals, resolves promise when they're fully removed
* @return {Promise<{}>}
*/
SimpleModalService.prototype.removeAll = function () {
if (!this.modalHolderComponent) {
return Promise.resolve({});
}
return this.modalHolderComponent.removeAllModals();
};
Object.defineProperty(SimpleModalService.prototype, "container", {
get: function () {
if (typeof this._container === 'string') {
this._container = document.getElementById(this._container);
}
if (!this._container && this.applicationRef['components'].length) {
var componentRootViewContainer = this.applicationRef['components'][0];
this.container = componentRootViewContainer.hostView
.rootNodes[0];
}
// fallback
if (!this._container || typeof this._container === 'string') {
this._container = document.getElementsByTagName('body')[0];
}
return this._container;
},
/**
* Accessor for contain - will auto generate from string
* if needed or default to the root element if nothing was set
*/
set: function (c) {
this._container = c;
},
enumerable: true,
configurable: true
});
/**
* Creates and add to DOM modal holder component
* @return {SimpleModalHolderComponent}
*/
SimpleModalService.prototype.createSimpleModalHolder = function () {
var _this = this;
var componentFactory = this.resolver.resolveComponentFactory(SimpleModalHolderComponent);
var componentRef = componentFactory.create(this.injector);
var componentRootNode = componentRef.hostView
.rootNodes[0];
this.applicationRef.attachView(componentRef.hostView);
componentRef.onDestroy(function () {
_this.applicationRef.detachView(componentRef.hostView);
});
this.container.appendChild(componentRootNode);
return componentRef.instance;
};
SimpleModalService.ctorParameters = function () { return [
{ type: ComponentFactoryResolver },
{ type: ApplicationRef },
{ type: Injector },
{ type: SimpleModalServiceConfig, decorators: [{ type: Optional }] }
]; };
SimpleModalService = tslib_1.__decorate([
Injectable(),
tslib_1.__param(3, Optional())
], SimpleModalService);
return SimpleModalService;
}());
export { SimpleModalService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLW1vZGFsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtc2ltcGxlLW1vZGFsLyIsInNvdXJjZXMiOlsic2ltcGxlLW1vZGFsL3NpbXBsZS1tb2RhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsVUFBVSxFQUNWLFFBQVEsRUFDUixRQUFRLEVBQ1IsSUFBSSxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSTdFO0lBQUE7UUFDRSxjQUFTLEdBQXlCLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBQUQsK0JBQUM7QUFBRCxDQUFDLEFBRkQsSUFFQzs7QUFHRDtJQWFFOzs7OztPQUtHO0lBQ0gsNEJBQ1UsUUFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsUUFBa0IsRUFDZCxNQUFnQztRQUhwQyxhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUcxQixJQUFJLE1BQU0sRUFBRTtZQUNWLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQWdCLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gscUNBQVEsR0FBUixVQUNFLFNBQTRDLEVBQzVDLElBQVEsRUFDUixPQUFxQztRQUVyQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUM1RDtRQUNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBUSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdDQUFXLEdBQVgsVUFBWSxTQUF5QztRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzlCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUM1QjtRQUNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsc0NBQVMsR0FBVDtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDOUIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQU9ELHNCQUFZLHlDQUFTO2FBSXJCO1lBQ0UsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVEO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hFLElBQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLFNBQVMsR0FBSSwwQkFBMEIsQ0FBQyxRQUFpQztxQkFDM0UsU0FBUyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQzthQUNoQztZQUVELFdBQVc7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1RDtZQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBMUJEOzs7V0FHRzthQUVILFVBQXNCLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQzs7O09BQUE7SUFxQkQ7OztPQUdHO0lBQ0ssb0RBQXVCLEdBQS9CO1FBQUEsaUJBZ0JDO1FBZkMsSUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFM0YsSUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFNLGlCQUFpQixHQUFJLFlBQVksQ0FBQyxRQUFpQzthQUN0RSxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBRS9CLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RCxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3JCLEtBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFOUMsT0FBTyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQy9CLENBQUM7O2dCQXBHbUIsd0JBQXdCO2dCQUNsQixjQUFjO2dCQUNwQixRQUFRO2dCQUNOLHdCQUF3Qix1QkFBM0MsUUFBUTs7SUF2QkEsa0JBQWtCO1FBRDlCLFVBQVUsRUFBRTtRQXdCUixtQkFBQSxRQUFRLEVBQUUsQ0FBQTtPQXZCRixrQkFBa0IsQ0F5SDlCO0lBQUQseUJBQUM7Q0FBQSxBQXpIRCxJQXlIQztTQXpIWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEluamVjdGFibGUsXG4gIEluamVjdG9yLFxuICBPcHRpb25hbCxcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNpbXBsZU1vZGFsSG9sZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zaW1wbGUtbW9kYWwtaG9sZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaW1wbGVNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vc2ltcGxlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaW1wbGVNb2RhbE9wdGlvbnNPdmVycmlkZXMgfSBmcm9tICcuL3NpbXBsZS1tb2RhbC1vcHRpb25zJztcblxuZXhwb3J0IGNsYXNzIFNpbXBsZU1vZGFsU2VydmljZUNvbmZpZyB7XG4gIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBzdHJpbmcgPSBudWxsO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2ltcGxlTW9kYWxTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIG9mIG1vZGFsc1xuICAgKiBAdHlwZSB7U2ltcGxlTW9kYWxIb2xkZXJDb21wb25lbnR9XG4gICAqL1xuICBwcml2YXRlIG1vZGFsSG9sZGVyQ29tcG9uZW50OiBTaW1wbGVNb2RhbEhvbGRlckNvbXBvbmVudDtcblxuICAvKipcbiAgICogSFRNTCBjb250YWluZXIgZm9yIG1vZGFsc1xuICAgKiB0eXBlIHtIVE1MRWxlbWVudCB8IHN0cmluZ31cbiAgICovXG4gIHByaXZhdGUgX2NvbnRhaW5lcjtcblxuICAvKipcbiAgICogQHBhcmFtIHtDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9IHJlc29sdmVyXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZWZ9IGFwcGxpY2F0aW9uUmVmXG4gICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yXG4gICAqIEBwYXJhbSB7U2ltcGxlTW9kYWxTZXJ2aWNlQ29uZmlnfSBjb25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBjb25maWc6IFNpbXBsZU1vZGFsU2VydmljZUNvbmZpZ1xuICApIHtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgYXMgYW55O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG1vZGFsXG4gICAqIEBwYXJhbSB7VHlwZTxTaW1wbGVNb2RhbENvbXBvbmVudDxULCBUMT4+fSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtUP30gZGF0YVxuICAgKiBAcGFyYW0ge1NpbXBsZU1vZGFsT3B0aW9uc092ZXJyaWRlcz99IG9wdGlvbnNcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxUMT59XG4gICAqL1xuICBhZGRNb2RhbDxULCBUMT4oXG4gICAgY29tcG9uZW50OiBUeXBlPFNpbXBsZU1vZGFsQ29tcG9uZW50PFQsIFQxPj4sXG4gICAgZGF0YT86IFQsXG4gICAgb3B0aW9ucz86IFNpbXBsZU1vZGFsT3B0aW9uc092ZXJyaWRlc1xuICApOiBPYnNlcnZhYmxlPFQxPiB7XG4gICAgaWYgKCF0aGlzLm1vZGFsSG9sZGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm1vZGFsSG9sZGVyQ29tcG9uZW50ID0gdGhpcy5jcmVhdGVTaW1wbGVNb2RhbEhvbGRlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tb2RhbEhvbGRlckNvbXBvbmVudC5hZGRNb2RhbDxULCBUMT4oY29tcG9uZW50LCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBhbmQgcmVtb3ZlcyBtb2RhbCBmcm9tIERPTSwgcmVzb2x2ZXMgcHJvbWlzZSB3aGVuIGZ1bGx5IHJlbW92ZWRcbiAgICogQHBhcmFtIHtTaW1wbGVNb2RhbENvbXBvbmVudH0gY29tcG9uZW50XG4gICAqIEByZXR1cm4ge1Byb21pc2U8e30+fVxuXG4gICAqL1xuICByZW1vdmVNb2RhbChjb21wb25lbnQ6IFNpbXBsZU1vZGFsQ29tcG9uZW50PGFueSwgYW55Pik6IFByb21pc2U8e30+IHtcbiAgICBpZiAoIXRoaXMubW9kYWxIb2xkZXJDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tb2RhbEhvbGRlckNvbXBvbmVudC5yZW1vdmVNb2RhbChjb21wb25lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbGwgbW9kYWxzLCByZXNvbHZlcyBwcm9taXNlIHdoZW4gdGhleSdyZSBmdWxseSByZW1vdmVkXG4gICAqIEByZXR1cm4ge1Byb21pc2U8e30+fVxuICAgKi9cbiAgcmVtb3ZlQWxsKCk6IFByb21pc2U8e30+IHtcbiAgICBpZiAoIXRoaXMubW9kYWxIb2xkZXJDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tb2RhbEhvbGRlckNvbXBvbmVudC5yZW1vdmVBbGxNb2RhbHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3NvciBmb3IgY29udGFpbiAtIHdpbGwgYXV0byBnZW5lcmF0ZSBmcm9tIHN0cmluZ1xuICAgKiBpZiBuZWVkZWQgb3IgZGVmYXVsdCB0byB0aGUgcm9vdCBlbGVtZW50IGlmIG5vdGhpbmcgd2FzIHNldFxuICAgKi9cblxuICBwcml2YXRlIHNldCBjb250YWluZXIoYykge1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IGM7XG4gIH1cblxuICBwcml2YXRlIGdldCBjb250YWluZXIoKTogSFRNTEVsZW1lbnQge1xuICAgIGlmICh0eXBlb2YgdGhpcy5fY29udGFpbmVyID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fY29udGFpbmVyKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2NvbnRhaW5lciAmJiB0aGlzLmFwcGxpY2F0aW9uUmVmWydjb21wb25lbnRzJ10ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRSb290Vmlld0NvbnRhaW5lciA9IHRoaXMuYXBwbGljYXRpb25SZWZbJ2NvbXBvbmVudHMnXVswXTtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gKGNvbXBvbmVudFJvb3RWaWV3Q29udGFpbmVyLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KVxuICAgICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIC8vIGZhbGxiYWNrXG4gICAgaWYgKCF0aGlzLl9jb250YWluZXIgfHwgdHlwZW9mIHRoaXMuX2NvbnRhaW5lciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBhZGQgdG8gRE9NIG1vZGFsIGhvbGRlciBjb21wb25lbnRcbiAgICogQHJldHVybiB7U2ltcGxlTW9kYWxIb2xkZXJDb21wb25lbnR9XG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVNpbXBsZU1vZGFsSG9sZGVyKCk6IFNpbXBsZU1vZGFsSG9sZGVyQ29tcG9uZW50IHtcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShTaW1wbGVNb2RhbEhvbGRlckNvbXBvbmVudCk7XG5cbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICBjb25zdCBjb21wb25lbnRSb290Tm9kZSA9IChjb21wb25lbnRSZWYuaG9zdFZpZXcgYXMgRW1iZWRkZWRWaWV3UmVmPGFueT4pXG4gICAgICAucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgdGhpcy5hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG5cbiAgICBjb21wb25lbnRSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25SZWYuZGV0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoY29tcG9uZW50Um9vdE5vZGUpO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgfVxufVxuIl19