component-injector
Version:
Component Injector service which allows to inject dynamically components into angular2+ projects
122 lines • 8.96 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";
export class ComponentInjector {
/**
* @param {?} resolver
*/
constructor(resolver) {
this.resolver = resolver;
}
/**
* @param {?} componentsList
* @return {?}
*/
setComponentFactories(componentsList) {
if (componentsList) {
componentsList.forEach((/**
* @param {?} component
* @return {?}
*/
(component) => {
/** @type {?} */
let factory = this.resolver.resolveComponentFactory(component);
if (factory) {
ComponentInjector.entryComponentsFactories.push(factory);
}
}));
}
}
/**
* @param {?} container
* @param {?} componentSelector
* @return {?}
*/
inject(container, componentSelector) {
/** @type {?} */
let 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 {?}
*/
setProperties(componentRef, properties) {
if (componentRef) {
for (let property in properties) {
if (properties.hasOwnProperty(property)) {
componentRef.instance[property] = properties[property];
}
}
}
}
/**
* @param {?} componentRef
* @return {?}
*/
remove(componentRef) {
if (componentRef) {
componentRef.destroy();
}
componentRef = null;
}
/**
* @protected
* @param {?} componentSelector
* @return {?}
*/
getComponentFactory(componentSelector) {
/** @type {?} */
let factories = ComponentInjector.entryComponentsFactories;
/** @type {?} */
let componentFactory = factories.find((/**
* @param {?} component
* @return {?}
*/
(component) => {
return component.selector === componentSelector;
}));
return componentFactory ? componentFactory : null;
}
/**
* @protected
* @param {?} container
* @param {?} componentFactory
* @return {?}
*/
injectComponentFactory(container, componentFactory) {
return container.createComponent(componentFactory);
}
}
ComponentInjector.entryComponentsFactories = [];
ComponentInjector.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
ComponentInjector.ctorParameters = () => [
{ type: ComponentFactoryResolver }
];
/** @nocollapse */ ComponentInjector.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function ComponentInjector_Factory() { return new ComponentInjector(i0.ɵɵinject(i0.ComponentFactoryResolver)); }, token: ComponentInjector, providedIn: "root" });
if (false) {
/** @type {?} */
ComponentInjector.entryComponentsFactories;
/**
* @type {?}
* @private
*/
ComponentInjector.prototype.resolver;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWluamVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tcG9uZW50LWluamVjdG9yLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC1pbmplY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLHdCQUF3QixFQUN4QixVQUFVLEVBR1gsTUFBTSxlQUFlLENBQUM7O0FBS3ZCLE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUFJNUIsWUFBb0IsUUFBa0M7UUFBbEMsYUFBUSxHQUFSLFFBQVEsQ0FBMEI7SUFFdEQsQ0FBQzs7Ozs7SUFFTSxxQkFBcUIsQ0FBQyxjQUFpQztRQUM1RCxJQUFJLGNBQWMsRUFBRTtZQUNsQixjQUFjLENBQUMsT0FBTzs7OztZQUFDLENBQUMsU0FBMEIsRUFBRSxFQUFFOztvQkFDaEQsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDO2dCQUM5RCxJQUFJLE9BQU8sRUFBRTtvQkFDWCxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzFEO1lBQ0gsQ0FBQyxFQUFDLENBQUM7U0FDSjtJQUNILENBQUM7Ozs7OztJQUVELE1BQU0sQ0FBQyxTQUEyQixFQUFFLGlCQUF5Qjs7WUFDdkQsZ0JBQWdCLEdBQTBCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RixJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ2pFO2FBQ0k7WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsR0FBRyxxQkFBcUI7Z0JBQ3BFLHlEQUF5RCxDQUFDLENBQUM7U0FDOUQ7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Ozs7OztJQUVELGFBQWEsQ0FBQyxZQUErQixFQUFFLFVBQWU7UUFDNUQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsS0FBSyxJQUFJLFFBQVEsSUFBSSxVQUFVLEVBQUU7Z0JBQy9CLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDdkMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3hEO2FBQ0Y7U0FDRjtJQUNILENBQUM7Ozs7O0lBRUQsTUFBTSxDQUFDLFlBQXNDO1FBQzNDLElBQUksWUFBWSxFQUFFO1lBQ2hCLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QjtRQUNELFlBQVksR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQzs7Ozs7O0lBRVMsbUJBQW1CLENBQUMsaUJBQXlCOztZQUNqRCxTQUFTLEdBQUcsaUJBQWlCLENBQUMsd0JBQXdCOztZQUN0RCxnQkFBZ0IsR0FBUSxTQUFTLENBQUMsSUFBSTs7OztRQUFDLENBQUMsU0FBYyxFQUFFLEVBQUU7WUFDNUQsT0FBTyxTQUFTLENBQUMsUUFBUSxLQUFLLGlCQUFpQixDQUFDO1FBQ2xELENBQUMsRUFBQztRQUVGLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEQsQ0FBQzs7Ozs7OztJQUVTLHNCQUFzQixDQUFDLFNBQTJCLEVBQUUsZ0JBQXVDO1FBQ25HLE9BQU8sU0FBUyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7O0FBM0RhLDBDQUF3QixHQUE0QixFQUFFLENBQUM7O1lBSnRFLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVJDLHdCQUF3Qjs7Ozs7SUFVeEIsMkNBQXFFOzs7OztJQUd6RCxxQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ29tcG9uZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBUeXBlLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnRJbmplY3RvciB7XG4gIHB1YmxpYyBzdGF0aWMgZW50cnlDb21wb25lbnRzRmFjdG9yaWVzOiBDb21wb25lbnRGYWN0b3J5PGFueT5bXSA9IFtdO1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21wb25lbnRGYWN0b3JpZXMoY29tcG9uZW50c0xpc3Q6IFR5cGU8Q29tcG9uZW50PltdKTogdm9pZCB7XG4gICAgaWYgKGNvbXBvbmVudHNMaXN0KSB7XG4gICAgICBjb21wb25lbnRzTGlzdC5mb3JFYWNoKChjb21wb25lbnQ6IFR5cGU8Q29tcG9uZW50PikgPT4ge1xuICAgICAgICBsZXQgZmFjdG9yeSA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcbiAgICAgICAgaWYgKGZhY3RvcnkpIHtcbiAgICAgICAgICBDb21wb25lbnRJbmplY3Rvci5lbnRyeUNvbXBvbmVudHNGYWN0b3JpZXMucHVzaChmYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW5qZWN0KGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgY29tcG9uZW50U2VsZWN0b3I6IHN0cmluZyk6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCB7XG4gICAgbGV0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PiA9IHRoaXMuZ2V0Q29tcG9uZW50RmFjdG9yeShjb21wb25lbnRTZWxlY3Rvcik7XG4gICAgaWYgKGNvbXBvbmVudEZhY3RvcnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmluamVjdENvbXBvbmVudEZhY3RvcnkoY29udGFpbmVyLCBjb21wb25lbnRGYWN0b3J5KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvbXBvbmVudCBbJyArIGNvbXBvbmVudFNlbGVjdG9yICsgJ10gY2Fubm90IGJlIGZvdW5kISAnICtcbiAgICAgICAgJ01ha2Ugc3VyZSBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgYGVudHJ5Q29tcG9uZW50c2AgbGlzdC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNldFByb3BlcnRpZXMoY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiwgcHJvcGVydGllczogYW55KTogdm9pZCB7XG4gICAgaWYgKGNvbXBvbmVudFJlZikge1xuICAgICAgZm9yIChsZXQgcHJvcGVydHkgaW4gcHJvcGVydGllcykge1xuICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2VbcHJvcGVydHldID0gcHJvcGVydGllc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW1vdmUoY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoY29tcG9uZW50UmVmKSB7XG4gICAgICBjb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgIH1cbiAgICBjb21wb25lbnRSZWYgPSBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50U2VsZWN0b3I6IHN0cmluZyk6IENvbXBvbmVudEZhY3Rvcnk8YW55PiB7XG4gICAgbGV0IGZhY3RvcmllcyA9IENvbXBvbmVudEluamVjdG9yLmVudHJ5Q29tcG9uZW50c0ZhY3RvcmllcztcbiAgICBsZXQgY29tcG9uZW50RmFjdG9yeTogYW55ID0gZmFjdG9yaWVzLmZpbmQoKGNvbXBvbmVudDogYW55KSA9PiB7XG4gICAgICByZXR1cm4gY29tcG9uZW50LnNlbGVjdG9yID09PSBjb21wb25lbnRTZWxlY3RvcjtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb21wb25lbnRGYWN0b3J5ID8gY29tcG9uZW50RmFjdG9yeSA6IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5qZWN0Q29tcG9uZW50RmFjdG9yeShjb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55Pik6IENvbXBvbmVudFJlZjxhbnk+IHtcbiAgICByZXR1cm4gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRGYWN0b3J5KTtcbiAgfVxufVxuIl19