1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 | import { IFormRenderer, IFormRendererRegistry } from './tokens';
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | export class FormRendererRegistry implements IFormRendererRegistry {
|
12 | |
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | addRenderer(id: string, renderer: IFormRenderer): void {
|
21 | if (this._renderers[id]) {
|
22 | throw new Error(`A renderer with id '${id}' is already registered.`);
|
23 | }
|
24 | if (!renderer.fieldRenderer && !renderer.widgetRenderer) {
|
25 | throw new Error(
|
26 | `The component for '${id}' cannot be registered as it does not define 'fieldRenderer' nor 'widgetRenderer'.`
|
27 | );
|
28 | }
|
29 |
|
30 | const splitPosition = id.lastIndexOf('.');
|
31 | const pluginId = id.substring(0, splitPosition);
|
32 | const propertyName = id.substring(splitPosition + 1);
|
33 | if (pluginId.length == 0 || propertyName.length == 0) {
|
34 | throw new Error(
|
35 | `Form renderer id must follows the structure '<ISettingRegistry.IPlugin.id>.<propertyName>'; got ${id}.`
|
36 | );
|
37 | }
|
38 |
|
39 | this._renderers[id] = renderer;
|
40 | }
|
41 |
|
42 | |
43 |
|
44 |
|
45 |
|
46 | get renderers(): { [id: string]: IFormRenderer } {
|
47 | return this._renderers;
|
48 | }
|
49 |
|
50 | |
51 |
|
52 |
|
53 |
|
54 |
|
55 | getRenderer(id: string): IFormRenderer {
|
56 | return this._renderers[id];
|
57 | }
|
58 |
|
59 | private _renderers: { [id: string]: IFormRenderer } = {};
|
60 | }
|