|
24 | 24 | */
|
25 | 25 | import maxBy from 'lodash/maxBy';
|
26 | 26 | import {
|
| 27 | + ComponentFactory, |
27 | 28 | ComponentFactoryResolver,
|
28 | 29 | Directive,
|
29 | 30 | Input,
|
@@ -126,11 +127,32 @@ export class JsonFormsOutlet
|
126 | 127 | renderer !== undefined &&
|
127 | 128 | renderer.tester(uischema, schema, testerContext) !== -1
|
128 | 129 | ) {
|
129 |
| - bestComponent = renderer.renderer; |
| 130 | + if (renderer.renderer instanceof Promise) { |
| 131 | + renderer.renderer.then((resolvedRenderer) => { |
| 132 | + bestComponent = resolvedRenderer; |
| 133 | + const componentFactory = |
| 134 | + this.componentFactoryResolver.resolveComponentFactory( |
| 135 | + bestComponent |
| 136 | + ); |
| 137 | + this.renderComponent(componentFactory, uischema, schema, props); |
| 138 | + }); |
| 139 | + return; |
| 140 | + } else { |
| 141 | + bestComponent = renderer.renderer; |
| 142 | + } |
130 | 143 | }
|
131 | 144 |
|
132 | 145 | const componentFactory =
|
133 | 146 | this.componentFactoryResolver.resolveComponentFactory(bestComponent);
|
| 147 | + this.renderComponent(componentFactory, uischema, schema, props); |
| 148 | + } |
| 149 | + |
| 150 | + private renderComponent( |
| 151 | + componentFactory: ComponentFactory<any>, |
| 152 | + uischema: UISchemaElement, |
| 153 | + schema: JsonSchema, |
| 154 | + props: JsonFormsProps |
| 155 | + ) { |
134 | 156 | this.viewContainerRef.clear();
|
135 | 157 | const currentComponentRef =
|
136 | 158 | this.viewContainerRef.createComponent(componentFactory);
|
|
0 commit comments