component-injector
Version:
Component Injector service which allows to inject dynamically components into angular2+ projects
151 lines • 9.99 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ComponentFactoryResolver, Injectable } from '@angular/core';
import * as i0 from "@angular/core";
var ComponentInjector = /** @class */ (function () {
function ComponentInjector(resolver) {
this.resolver = resolver;
}
/**
* @param {?} componentsList
* @return {?}
*/
ComponentInjector.prototype.setComponentFactories = /**
* @param {?} componentsList
* @return {?}
*/
function (componentsList) {
var _this = this;
if (componentsList) {
componentsList.forEach((/**
* @param {?} component
* @return {?}
*/
function (component) {
/** @type {?} */
var factory = _this.resolver.resolveComponentFactory(component);
if (factory) {
ComponentInjector.entryComponentsFactories.push(factory);
}
}));
}
};
/**
* @param {?} container
* @param {?} componentSelector
* @return {?}
*/
ComponentInjector.prototype.inject = /**
* @param {?} container
* @param {?} componentSelector
* @return {?}
*/
function (container, componentSelector) {
/** @type {?} */
var componentFactory = this.getComponentFactory(componentSelector);
if (componentFactory) {
return this.injectComponentFactory(container, componentFactory);
}
else {
console.warn('Component [' + componentSelector + '] cannot be found! ' +
'Make sure it is included in the `entryComponents` list.');
}
return null;
};
/**
* @param {?} componentRef
* @param {?} properties
* @return {?}
*/
ComponentInjector.prototype.setProperties = /**
* @param {?} componentRef
* @param {?} properties
* @return {?}
*/
function (componentRef, properties) {
if (componentRef) {
for (var property in properties) {
if (properties.hasOwnProperty(property)) {
componentRef.instance[property] = properties[property];
}
}
}
};
/**
* @param {?} componentRef
* @return {?}
*/
ComponentInjector.prototype.remove = /**
* @param {?} componentRef
* @return {?}
*/
function (componentRef) {
if (componentRef) {
componentRef.destroy();
}
componentRef = null;
};
/**
* @protected
* @param {?} componentSelector
* @return {?}
*/
ComponentInjector.prototype.getComponentFactory = /**
* @protected
* @param {?} componentSelector
* @return {?}
*/
function (componentSelector) {
/** @type {?} */
var factories = ComponentInjector.entryComponentsFactories;
/** @type {?} */
var componentFactory = factories.find((/**
* @param {?} component
* @return {?}
*/
function (component) {
return component.selector === componentSelector;
}));
return componentFactory ? componentFactory : null;
};
/**
* @protected
* @param {?} container
* @param {?} componentFactory
* @return {?}
*/
ComponentInjector.prototype.injectComponentFactory = /**
* @protected
* @param {?} container
* @param {?} componentFactory
* @return {?}
*/
function (container, componentFactory) {
return container.createComponent(componentFactory);
};
ComponentInjector.entryComponentsFactories = [];
ComponentInjector.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
ComponentInjector.ctorParameters = function () { return [
{ type: ComponentFactoryResolver }
]; };
/** @nocollapse */ ComponentInjector.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function ComponentInjector_Factory() { return new ComponentInjector(i0.ɵɵinject(i0.ComponentFactoryResolver)); }, token: ComponentInjector, providedIn: "root" });
return ComponentInjector;
}());
export { ComponentInjector };
if (false) {
/** @type {?} */
ComponentInjector.entryComponentsFactories;
/**
* @type {?}
* @private
*/
ComponentInjector.prototype.resolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWluamVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tcG9uZW50LWluamVjdG9yLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC1pbmplY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLHdCQUF3QixFQUN4QixVQUFVLEVBR1gsTUFBTSxlQUFlLENBQUM7O0FBRXZCO0lBT0UsMkJBQW9CLFFBQWtDO1FBQWxDLGFBQVEsR0FBUixRQUFRLENBQTBCO0lBRXRELENBQUM7Ozs7O0lBRU0saURBQXFCOzs7O0lBQTVCLFVBQTZCLGNBQWlDO1FBQTlELGlCQVNDO1FBUkMsSUFBSSxjQUFjLEVBQUU7WUFDbEIsY0FBYyxDQUFDLE9BQU87Ozs7WUFBQyxVQUFDLFNBQTBCOztvQkFDNUMsT0FBTyxHQUFHLEtBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDO2dCQUM5RCxJQUFJLE9BQU8sRUFBRTtvQkFDWCxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzFEO1lBQ0gsQ0FBQyxFQUFDLENBQUM7U0FDSjtJQUNILENBQUM7Ozs7OztJQUVELGtDQUFNOzs7OztJQUFOLFVBQU8sU0FBMkIsRUFBRSxpQkFBeUI7O1lBQ3ZELGdCQUFnQixHQUEwQixJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7UUFDekYsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztTQUNqRTthQUNJO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLEdBQUcscUJBQXFCO2dCQUNwRSx5REFBeUQsQ0FBQyxDQUFDO1NBQzlEO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7Ozs7SUFFRCx5Q0FBYTs7Ozs7SUFBYixVQUFjLFlBQStCLEVBQUUsVUFBZTtRQUM1RCxJQUFJLFlBQVksRUFBRTtZQUNoQixLQUFLLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRTtnQkFDL0IsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUN2QyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDeEQ7YUFDRjtTQUNGO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxrQ0FBTTs7OztJQUFOLFVBQU8sWUFBc0M7UUFDM0MsSUFBSSxZQUFZLEVBQUU7WUFDaEIsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsWUFBWSxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDOzs7Ozs7SUFFUywrQ0FBbUI7Ozs7O0lBQTdCLFVBQThCLGlCQUF5Qjs7WUFDakQsU0FBUyxHQUFHLGlCQUFpQixDQUFDLHdCQUF3Qjs7WUFDdEQsZ0JBQWdCLEdBQVEsU0FBUyxDQUFDLElBQUk7Ozs7UUFBQyxVQUFDLFNBQWM7WUFDeEQsT0FBTyxTQUFTLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDO1FBQ2xELENBQUMsRUFBQztRQUVGLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEQsQ0FBQzs7Ozs7OztJQUVTLGtEQUFzQjs7Ozs7O0lBQWhDLFVBQWlDLFNBQTJCLEVBQUUsZ0JBQXVDO1FBQ25HLE9BQU8sU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUEzRGEsMENBQXdCLEdBQTRCLEVBQUUsQ0FBQzs7Z0JBSnRFLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBUkMsd0JBQXdCOzs7NEJBSDFCO0NBeUVDLEFBaEVELElBZ0VDO1NBN0RZLGlCQUFpQjs7O0lBQzVCLDJDQUFxRTs7Ozs7SUFHekQscUNBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZixcbiAgSW5qZWN0YWJsZSxcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50SW5qZWN0b3Ige1xuICBwdWJsaWMgc3RhdGljIGVudHJ5Q29tcG9uZW50c0ZhY3RvcmllczogQ29tcG9uZW50RmFjdG9yeTxhbnk+W10gPSBbXTtcblxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcikge1xuXG4gIH1cblxuICBwdWJsaWMgc2V0Q29tcG9uZW50RmFjdG9yaWVzKGNvbXBvbmVudHNMaXN0OiBUeXBlPENvbXBvbmVudD5bXSk6IHZvaWQge1xuICAgIGlmIChjb21wb25lbnRzTGlzdCkge1xuICAgICAgY29tcG9uZW50c0xpc3QuZm9yRWFjaCgoY29tcG9uZW50OiBUeXBlPENvbXBvbmVudD4pID0+IHtcbiAgICAgICAgbGV0IGZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudCk7XG4gICAgICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgICAgQ29tcG9uZW50SW5qZWN0b3IuZW50cnlDb21wb25lbnRzRmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGluamVjdChjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGNvbXBvbmVudFNlbGVjdG9yOiBzdHJpbmcpOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwge1xuICAgIGxldCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4gPSB0aGlzLmdldENvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50U2VsZWN0b3IpO1xuICAgIGlmIChjb21wb25lbnRGYWN0b3J5KSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmplY3RDb21wb25lbnRGYWN0b3J5KGNvbnRhaW5lciwgY29tcG9uZW50RmFjdG9yeSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdDb21wb25lbnQgWycgKyBjb21wb25lbnRTZWxlY3RvciArICddIGNhbm5vdCBiZSBmb3VuZCEgJyArXG4gICAgICAgICdNYWtlIHN1cmUgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIGBlbnRyeUNvbXBvbmVudHNgIGxpc3QuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzZXRQcm9wZXJ0aWVzKGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4sIHByb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuICAgIGlmIChjb21wb25lbnRSZWYpIHtcbiAgICAgIGZvciAobGV0IHByb3BlcnR5IGluIHByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XG4gICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW3Byb3BlcnR5XSA9IHByb3BlcnRpZXNbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlKGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKGNvbXBvbmVudFJlZikge1xuICAgICAgY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgY29tcG9uZW50UmVmID0gbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudFNlbGVjdG9yOiBzdHJpbmcpOiBDb21wb25lbnRGYWN0b3J5PGFueT4ge1xuICAgIGxldCBmYWN0b3JpZXMgPSBDb21wb25lbnRJbmplY3Rvci5lbnRyeUNvbXBvbmVudHNGYWN0b3JpZXM7XG4gICAgbGV0IGNvbXBvbmVudEZhY3Rvcnk6IGFueSA9IGZhY3Rvcmllcy5maW5kKChjb21wb25lbnQ6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIGNvbXBvbmVudC5zZWxlY3RvciA9PT0gY29tcG9uZW50U2VsZWN0b3I7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY29tcG9uZW50RmFjdG9yeSA/IGNvbXBvbmVudEZhY3RvcnkgOiBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluamVjdENvbXBvbmVudEZhY3RvcnkoY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLCBjb21wb25lbnRGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PGFueT4pOiBDb21wb25lbnRSZWY8YW55PiB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gIH1cbn1cbiJdfQ==