Add a command#
A “command” is a behavior that can be triggered from a menu in the JupyterGIS UI.
To add a new command in JupyterGIS#
- Get started with - packages/base/src/constants.tswhere we’ll add a new command ID to the- CommandIDsnamespace for the command you’re going to define.- export namespace CommandIDs { // ... export const myNewCommand = 'jupytergis:myNewCommand'; // ... } 
- In the same file, add an icon for your command to the - iconObjectmapping. We use Font Awesome 5 icons. You can find icons and the corresponding icon class string by searching here.- const iconObject = { // ... [CommandIDs.myNewCommand]: { iconClass: 'fas fa-question' }, // ... }; 
- Add your command to the command registry in - packages/base/src/commands.ts. Inside the- addCommands()function definition, add a new call to- commands.addCommand(). Pass in your label, behaviors, and icon.- export function addCommands(/* ... */): void { // ... commands.addCommand(CommandIDs.myNewCommand, { label: trans.__('My new command label'), isEnabled: (): boolean => { // ... }, execute: (): void => { // ... }, ...icons.get(CommandIDs.myNewCommand), }); // ... } - The - labelparameter defines the text that will be displayed in the UI (e.g. in menus, command palette, or hover text).
- Your - isEnabled()function is called to determine whether the command is available (i.e., active/clickable) based on the current state of the application.
- execute()defines what happens when the command is triggered (e.g. user clicks the menu item or presses a keyboard shortcut).
 
- Add your command to the toolbar in - packages/base/src/toolbar/widget.tsx. Within the- ToolbarWidgetclass’- constructor()method, add a new call to- this.addItem(). Pass in your command ID object, label, and the JupyterGIS command registry as a bare minimum. The icon we set earlier will be found automatically.- export class ToolbarWidget extends ReactiveToolbar { constructor(options: ToolbarWidget.IOptions) { // ... if (options.commands) { // ... this.addItem( 'myNewCommand', new CommandToolbarButton({ id: CommandIDs.myNewCommand, label: '', commands: options.commands, }), ); // ... } } } 
- Re-build JupyterGIS ( - jlpm run build) and test!