UNPKG

2.02 kBJavaScriptView Raw
1/* -----------------------------------------------------------------------------
2| Copyright (c) Jupyter Development Team.
3| Distributed under the terms of the Modified BSD License.
4|----------------------------------------------------------------------------*/
5/**
6 * A registry for property renderers used in the FormEditor component.
7 */
8export class FormRendererRegistry {
9 constructor() {
10 this._renderers = {};
11 }
12 /**
13 * Adds a renderer for a given property of a given settings plugin.
14 *
15 * The id must follow that structure `<ISettingRegistry.IPlugin.id>.<propertyName>`
16 *
17 * @param id - Unique ID for the given renderer.
18 * @param renderer - A renderer interfacing IFormRenderer.
19 */
20 addRenderer(id, renderer) {
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(`The component for '${id}' cannot be registered as it does not define 'fieldRenderer' nor 'widgetRenderer'.`);
26 }
27 const splitPosition = id.lastIndexOf('.');
28 const pluginId = id.substring(0, splitPosition);
29 const propertyName = id.substring(splitPosition + 1);
30 if (pluginId.length == 0 || propertyName.length == 0) {
31 throw new Error(`Form renderer id must follows the structure '<ISettingRegistry.IPlugin.id>.<propertyName>'; got ${id}.`);
32 }
33 this._renderers[id] = renderer;
34 }
35 /**
36 * Returns all registered renderers in dictionary form.
37 * @returns - A dictionary that maps an id to a renderer.
38 */
39 get renderers() {
40 return this._renderers;
41 }
42 /**
43 * Returns the renderer for the given id
44 * @param id - The unique id for the renderer.
45 * @returns - A renderer interfacing IFormRenderer.
46 */
47 getRenderer(id) {
48 return this._renderers[id];
49 }
50}
51//# sourceMappingURL=FormRendererRegistry.js.map
\No newline at end of file