Skip to content

Commit

Permalink
feat: when a widget fails, show a fallback error widget
Browse files Browse the repository at this point in the history
  • Loading branch information
maartenbreddels committed Aug 4, 2020
1 parent bfa0e8b commit 5b43717
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions js/src/manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import { MessageLoop } from '@phosphor/messaging';

import { requireLoader } from './loader';
import { batchRateMap } from './utils';
import * as errorwidget from './errorwidget';

if (typeof window !== "undefined" && typeof window.define !== "undefined") {
window.define("@jupyter-widgets/base", base);
Expand All @@ -49,6 +50,8 @@ if (typeof window !== "undefined" && typeof window.define !== "undefined") {
window.define("@phosphor/algorithm", PhosphorAlgorithm);
window.define("@phosphor/commands", PhosphorCommands);
window.define("@phosphor/domutils", PhosphorDomutils);

window.define("voila-errorwidget", errorwidget);
}

const WIDGET_MIMETYPE = 'application/vnd.jupyter.widget-view+json';
Expand Down Expand Up @@ -106,10 +109,19 @@ export class WidgetManager extends JupyterLabManager {
}

async loadClass(className, moduleName, moduleVersion) {
try {
return await this._loadClass(className, moduleName, moduleVersion)
} catch(error) {
return errorwidget.createErrorWidget(error);
};
}

async _loadClass(className, moduleName, moduleVersion) {
if (
moduleName === '@jupyter-widgets/base' ||
moduleName === '@jupyter-widgets/controls' ||
moduleName === '@jupyter-widgets/output'
moduleName === '@jupyter-widgets/output' ||
moduleName === 'voila-errorwidget'
) {
return super.loadClass(className, moduleName, moduleVersion);
}
Expand All @@ -120,7 +132,7 @@ export class WidgetManager extends JupyterLabManager {
return module[className];
}
else {
return Promise.reject("Class " + className + " not found in module " + moduleName + "@" + moduleVersion);
throw Error("Class " + className + " not found in module " + moduleName + "@" + moduleVersion);
}
})
}
Expand All @@ -145,6 +157,11 @@ export class WidgetManager extends JupyterLabManager {
version: output.OUTPUT_WIDGET_VERSION,
exports: output
});
this.register({
name: 'voila-errorwidget',
version: '1.0.0',
exports: errorwidget
});
}

async _build_models() {
Expand Down

0 comments on commit 5b43717

Please sign in to comment.