Skip to content

Commit c5f9751

Browse files
committed
Support layout restoration
1 parent 7f8e0cb commit c5f9751

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

src/index.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
import {
2+
ILayoutRestorer,
23
JupyterFrontEnd,
34
JupyterFrontEndPlugin
45
} from '@jupyterlab/application';
5-
import { ICommandPalette } from '@jupyterlab/apputils';
6+
import {
7+
ICommandPalette,
8+
WidgetTracker
9+
} from '@jupyterlab/apputils';
610
import { ILauncher } from '@jupyterlab/launcher';
711
import { imageIcon } from '@jupyterlab/ui-components';
812

@@ -17,12 +21,14 @@ const plugin: JupyterFrontEndPlugin<void> = {
1721
description: 'A JupyterLab extension that displays a random image and caption.',
1822
autoStart: true,
1923
requires: [ICommandPalette, ILauncher], // dependencies of our extension
24+
optional: [ILayoutRestorer],
2025
activate: (
2126
app: JupyterFrontEnd,
2227
// The activation method receives dependencies in the order they are specified in
2328
// the "requires" parameter above:
2429
palette: ICommandPalette,
25-
launcher: ILauncher
30+
launcher: ILauncher,
31+
restorer: ILayoutRestorer | null
2632
) => {
2733
console.log('JupyterLab extension jupytercon2025-extension-workshop is activated!');
2834

@@ -36,13 +42,23 @@ const plugin: JupyterFrontEndPlugin<void> = {
3642
);
3743
});
3844

45+
// Track widget state
46+
const tracker_namespace = 'jupytercon2025-extension-workshop';
47+
const tracker = new WidgetTracker<ImageCaptionMainAreaWidget>({
48+
namespace: tracker_namespace
49+
});
50+
3951
//Register a new command:
4052
const command_id = 'image-caption:open';
4153
app.commands.addCommand(command_id, {
4254
execute: () => {
4355
// When the command is executed, create a new instance of our widget
4456
const widget = new ImageCaptionMainAreaWidget();
4557

58+
if (!tracker.has(widget)) {
59+
tracker.add(widget);
60+
}
61+
4662
// Then add it to the main area:
4763
app.shell.add(widget, 'main');
4864
},
@@ -52,6 +68,14 @@ const plugin: JupyterFrontEndPlugin<void> = {
5268

5369
palette.addItem({ command: command_id, category: 'Tutorial' });
5470
launcher.add({ command: command_id });
71+
72+
// Restore widget state
73+
if (restorer) {
74+
restorer.restore(tracker, {
75+
command: command_id,
76+
name: () => tracker_namespace
77+
});
78+
}
5579
}
5680
};
5781

0 commit comments

Comments
 (0)