diff --git a/packages/angular/src/library/jsonforms.component.ts b/packages/angular/src/library/jsonforms.component.ts index a8720ab07..5e633aa93 100644 --- a/packages/angular/src/library/jsonforms.component.ts +++ b/packages/angular/src/library/jsonforms.component.ts @@ -24,6 +24,7 @@ */ import maxBy from 'lodash/maxBy'; import { + ComponentFactory, ComponentFactoryResolver, Directive, Input, @@ -126,11 +127,32 @@ export class JsonFormsOutlet renderer !== undefined && renderer.tester(uischema, schema, testerContext) !== -1 ) { - bestComponent = renderer.renderer; + if (renderer.renderer instanceof Promise) { + renderer.renderer.then((resolvedRenderer) => { + bestComponent = resolvedRenderer; + const componentFactory = + this.componentFactoryResolver.resolveComponentFactory( + bestComponent + ); + this.renderComponent(componentFactory, uischema, schema, props); + }); + return; + } else { + bestComponent = renderer.renderer; + } } const componentFactory = this.componentFactoryResolver.resolveComponentFactory(bestComponent); + this.renderComponent(componentFactory, uischema, schema, props); + } + + private renderComponent( + componentFactory: ComponentFactory, + uischema: UISchemaElement, + schema: JsonSchema, + props: JsonFormsProps + ) { this.viewContainerRef.clear(); const currentComponentRef = this.viewContainerRef.createComponent(componentFactory);