User Interface Helpers#

JupyterLab comes with helpers to show or request simple information from a user. Those speed up development and ensure a common look and feel.

Dialogs#

Generic Dialog#

To display a generic dialog, use showDialog function from @jupyterlab/apputils.

The options available are:

showDialog({
  title: 'Dialog title', // Can be text or a react element
  body: 'Dialog body', // Can be text, a widget or a react element
  host: document.body, // Parent element for rendering the dialog
  buttons: [ // List of buttons
   {
     label: 'my button', // Button label
     caption: 'my button title', // Button title
     className: 'my-button', // Additional button CSS class
     accept: true, // Whether this button will discard or accept the dialog
     displayType: 'default' // applies 'default' or 'warn' styles
   }
  ],
  checkbox: { // Optional checkbox in the dialog footer
    label: 'check me', // Checkbox label
    caption: 'check me I\'magic', // Checkbox title
    className: 'my-checkbox', // Additional checkbox CSS class
    checked: true, // Default checkbox state
  },
  defaultButton: 0, // Index of the default button
  focusNodeSelector: '.my-input', // Selector for focussing an input element when dialog opens
  hasClose: false, // Whether to display a close button or not
  renderer: undefined // To define customized dialog structure
})

Note

If no options are specified, the dialog will only contain OK and Cancel buttons.

Message Dialogs#

Helper functions to show a message to the user are available in the apputils package. These dialogs return a Promise resolving when the user dismisses the dialog.

There is one helper:

  • showErrorMessage : show an error message dialog.

Input Dialogs#

Helper functions to request a single input from the user are available in the apputils package within the InputDialog namespace. There are four helpers:

  • getBoolean : request a boolean through a checkbox.

  • getItem : request a item from a list; the list may be editable.

  • getNumber : request a number; if the user input is not a valid number, NaN is returned.

  • getText : request a short text.

  • getPassword : request a short password.

All dialogs are built on the standard Dialog. Therefore the helper functions each return a Promise resolving in a Dialog.IResult object.

// Request a boolean
InputDialog.getBoolean({ title: 'Check or not?' }).then(value => {
  console.log('boolean ' + value.value);
});

// Request a choice from a list
InputDialog.getItem({
  title: 'Pick a choice',
  items: ['1', '2']
}).then(value => {
  console.log('item ' + value.value);
});

// Request a choice from a list or specify your own choice
InputDialog.getItem({
  title: 'Pick a choice or write your own',
  items: ['1', '2'],
  editable: true
}).then(value => {
  console.log('editable item ' + value.value);
});

// Request a number
InputDialog.getNumber({ title: 'How much?' }).then(value => {
  console.log('number ' + value.value);
});

// Request a text
InputDialog.getText({ title: 'Provide a text' }).then(value => {
  console.log('text ' + value.value);
});

// Request a text
InputDialog.getPassword({ title: 'Input password' }).then(value => {
  console.log('A password was input');
});

File Dialogs#

Two helper functions to ask a user to open a file or a directory are available in the filebrowser package under the namespace FileDialog.

Here is an example to request a file.

const dialog = FileDialog.getOpenFiles({
  manager, // IDocumentManager
  filter: model => model.type == 'notebook' // optional (model: Contents.IModel) => boolean
});

const result = await dialog;

if(result.button.accept){
  let files = result.value;
}

And for a folder.

const dialog = FileDialog.getExistingDirectory({
  manager // IDocumentManager
});

const result = await dialog;

if(result.button.accept){
  let folders = result.value;
}

Note

The document manager can be obtained in a plugin by requesting IFileBrowserFactory token. The manager will be accessed through factory.defaultBrowser.model.manager.