Skip to content

Commit

Permalink
Ensure Widget Manager can be defined asynchronously (#130)
Browse files Browse the repository at this point in the history
  • Loading branch information
philippjfr authored Jan 14, 2025
1 parent 6301780 commit 2000a5e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 7 deletions.
6 changes: 3 additions & 3 deletions src/manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@ const API_LAYOUT = URLExt.join(API_ROOT, '/layout/');
* A micro manager that contains the document context
*/
export class ContextManager implements IDisposable {
_wManager: any;
_widget_renderer: any;
private _app: JupyterFrontEnd;
private _context: DocumentRegistry.IContext<DocumentRegistry.IModel> | null;
private _comm: Kernel.IComm | undefined;

constructor(
app: JupyterFrontEnd,
context: DocumentRegistry.IContext<DocumentRegistry.IModel>,
manager: any
renderer: any
) {
this._app = app;
this._context = context;
this._wManager = manager;
this._widget_renderer = renderer;

this._comm = undefined;
context.saveState.connect(async (context: any, status: string) => {
Expand Down
2 changes: 1 addition & 1 deletion src/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ export class NBWidgetExtension implements INBWidgetExtension {
] as any);
}

const manager = new ContextManager(this._app, context, renderer.manager);
const manager = new ContextManager(this._app, context, renderer);

nb.content.rendermime.addFactory(
{
Expand Down
24 changes: 21 additions & 3 deletions src/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,31 @@ export class HVJSExec extends Widget implements IRenderMime.IRenderer {

_registerKernel(id: string): void {
const set_state = (state: any): Promise<any[]> => {
return this._manager._wManager.set_state(state);
return new Promise((resolve, reject) => {
const startTime = Date.now();
const checkVariable = async () => {
if (this._manager._widget_renderer.manager !== null) {
resolve(
await this._manager._widget_renderer.manager.set_state(state)
);
} else if (Date.now() - startTime >= 5000) {
reject(
new Error(
'Initialization of widget manager timed out after 5 seconds.'
)
);
} else {
setTimeout(checkVariable, 100);
}
};
checkVariable();
});
};
const create_view = (model: any, options?: any): any => {
return this._manager._wManager.create_view(model, options);
return this._manager._widget_renderer.manager.create_view(model, options);
};
const display_view = (view: any, el: any): any => {
return this._manager._wManager.display_view(view, el);
return this._manager._widget_renderer.manager.display_view(view, el);
};
const widget_manager: IWidgetManagerProxy = {
create_view,
Expand Down

0 comments on commit 2000a5e

Please sign in to comment.