UNPKG

component-injector

Version:

Component Injector service which allows to inject dynamically components into angular2+ projects

122 lines 8.96 kB
/** * @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