I am trying to add a custom widget that extends ReactWidget
in a DockPanel
. However, when I add the widget using addWidget()
method of DockPanel, the widget is not rendered on the screen. Upon inspecting the DOM, I found out that the widget is actually present in the DockPanel div but the height of this div is 0px. Adding a widget that extends Widget
works just fine. Can someone explain why this might be happening? Also, how do I add a ReactWidget to DockPanel and show it correctly in the UI?
Thanks,
Rakesh.
You can get a lot of value from wrapping your outer widget in a MainAreaWidget, which is used by almost all of the core JupyterLab panels.
For the “why”, you can have a look at its style to find some of the right things you need.
Thank you @bollwyvl for the response. I didn’t quite understand which outer widget you meant when you suggested to wrap in MainAreaWidget
. Is it the ReactWidget
derived widget or the DockPanel
itself? I tried different permutations of wrapping them in the MainAreaWidget
as suggested but it didn’t work out. Could you please elaborate a bit more on your earlier suggestion?
Thanks,
Rakesh.
Have a look for MainAreaWidget
usage patterns in the jupyterlab source .
An untested example:
const content = new MyReactWidget();
content.addClass('xyz-my-widget');
const wrapper = new MainAreaWidget({content})
wrapper.title.label = "My Widget";
wrapper.addClass('xyz-my-wrapper');
app.shell.add(wrapper, 'main');
This will give you a well-styled outer widget that will size up properly in the DockPanel
, and then you can style things further. A starting point to fill the panel might be:
.xyz-my-wrapper {
display: flex;
flex-direction: column;
}
.xyz-my-wrapper .xyz-my-widget {
flex: 1;
}