Skip to content

Commit 2c88d60

Browse files
committed
Dynamic widgets registry
1 parent b7583cb commit 2c88d60

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

python/jupyterlab_widgets/src/plugin.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,29 @@ import '@jupyter-widgets/controls/css/widgets-base.css';
5858
import { KernelMessage } from '@jupyterlab/services';
5959
import { ITranslator, nullTranslator } from '@jupyterlab/translation';
6060
import { ISessionContext } from '@jupyterlab/apputils';
61+
import { ISignal, Signal } from '@lumino/signaling';
6162

62-
const WIDGET_REGISTRY: base.IWidgetRegistryData[] = [];
63+
class WidgetRegistry {
64+
65+
get widgets(): base.IWidgetRegistryData[] {
66+
return [...this._registry];
67+
}
68+
69+
push(data: base.IWidgetRegistryData) {
70+
this._registry.push(data);
71+
this._registeredWidget.emit(data);
72+
}
73+
74+
get registeredWidget(): ISignal<WidgetRegistry, base.IWidgetRegistryData> {
75+
return this._registeredWidget;
76+
}
77+
78+
private _registeredWidget = new Signal<WidgetRegistry, base.IWidgetRegistryData>(this);
79+
80+
private _registry: base.IWidgetRegistryData[] = [];
81+
}
82+
83+
const WIDGET_REGISTRY = new WidgetRegistry();
6384

6485
/**
6586
* The cached settings.
@@ -178,7 +199,10 @@ async function registerWidgetHandler(
178199

179200
if (!wManager) {
180201
wManager = widgetManagerFactory();
181-
WIDGET_REGISTRY.forEach((data) => wManager!.register(data));
202+
WIDGET_REGISTRY.widgets.forEach((data) => wManager!.register(data));
203+
WIDGET_REGISTRY.registeredWidget.connect((_, data) => {
204+
wManager!.register(data);
205+
});
182206
Private.widgetManagerProperty.set(wManagerOwner, wManager);
183207
currentOwner = wManagerOwner;
184208
content.disposed.connect((_) => {
@@ -241,7 +265,10 @@ export function registerWidgetManager(
241265
) as WidgetManager;
242266
if (!currentManager) {
243267
wManager = new WidgetManager(context, rendermime, SETTINGS);
244-
WIDGET_REGISTRY.forEach((data) => wManager!.register(data));
268+
WIDGET_REGISTRY.widgets.forEach((data) => wManager!.register(data));
269+
WIDGET_REGISTRY.registeredWidget.connect((_, data) => {
270+
wManager!.register(data);
271+
});
245272
Private.widgetManagerProperty.set(wManagerOwner, wManager);
246273
} else {
247274
wManager = currentManager;

0 commit comments

Comments
 (0)