From 3b070bfea292b5a3eef51f1ba18571b52f3b79fb Mon Sep 17 00:00:00 2001 From: Anastasiia Sliusar Date: Wed, 24 Jul 2024 13:37:03 +0200 Subject: [PATCH] Add context menu on Laucher --- packages/apputils/src/custom_env.tsx | 21 +------ packages/apputils/src/sessioncontext.tsx | 6 +- packages/notebook-extension/src/index.ts | 76 ++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 21 deletions(-) diff --git a/packages/apputils/src/custom_env.tsx b/packages/apputils/src/custom_env.tsx index cda8d191ecf1..741b93af7acf 100644 --- a/packages/apputils/src/custom_env.tsx +++ b/packages/apputils/src/custom_env.tsx @@ -97,8 +97,7 @@ function CustomEnv({updateFormData, defaultEnvValues, translator }: EnvProps) { } const handleChange = (envVars: PartialJSONObject) => { - console.log('envVars'); - console.dir(envVars); + setInputs({ ...formData, ...envVars @@ -112,25 +111,17 @@ function CustomEnv({updateFormData, defaultEnvValues, translator }: EnvProps) { }; let envBlock = []; - console.log('countEnvBlock'); - console.log(countEnvBlock); for(let index=1; index<=countEnvBlock; index++) { - console.log('loop'); let envData = formData[`${index}`] as PartialJSONObject | undefined; - console.log('---envData---'); - console.dir(envData); + let defaultName = envData && envData.name? envData.name: ''; let defaultEnvValue = envData && envData.value? envData.value: ''; - console.log('defaultName'); - console.log(defaultName); - console.log('defaultEnvValue'); - console.log(defaultEnvValue); envBlock.push() } const header = `${trans.__('Setup custom env variables:')}`; - const addMoreVarLabel= trans.__('Add'); + const addMoreVarLabel= trans.__('Add more'); return (
@@ -176,20 +167,14 @@ export class CustomEnvWidget extends ReactWidget { render(): JSX.Element { let k = 1; let tmp = {} as PartialJSONObject; - console.log('this.defaultEnvValues'); - console.dir(this.defaultEnvValues) for (let index in this.defaultEnvValues) { let envVarsIndex = `${k}`; - console.log('envVarsIndex'); - console.log(envVarsIndex); tmp[envVarsIndex] = { 'name': index, 'value':this.defaultEnvValues[index] }; k+=1; } - console.log('default obj'); - console.dir(tmp); return ( { + let envConfiguration: PartialJSONObject = {}; + let label = trans.__('Cancel'); + const buttons = [ + Dialog.cancelButton({ + label + }), + Dialog.okButton({ + label: trans.__('Setup'), + ariaLabel: trans.__('setup custom env variables') + }) + ]; + + let defaultEnvValues = {} + const dialog = new Dialog({ + title: trans.__('Select Kernel'), + body: new CustomEnvWidget(envConfiguration, defaultEnvValues, formData => { + envConfiguration = formData as PartialJSONObject; + console.log('envConfiguration'); + console.dir(envConfiguration); + }, translator), + buttons + }); + + const result = await dialog.launch(); + + if (!result.button.accept) { + return; + } + if (result.value) { + //saveve for each kernel spec + } + }; + + const LAUNCHER_LABEL = "jp-LauncherCard"; + const isLauncherLabel = (node: HTMLElement) => + node.classList.contains(LAUNCHER_LABEL); + let selectedSpec: ISpecModel | undefined; + + // add command for context menu on Launch app icon + app.commands.addCommand(CommandIDs.setupCustomEnv, { + label: trans.__('Setup custom env variables'), + caption: trans.__('Setup custom env variables for running a kernel'), + execute: async (args?: any) => { + const node = app.contextMenuHitTest(isLauncherLabel); + if (!node) { + return; + } + const specs = services.kernelspecs.specs; + if (!specs) { + return; + } + let defaultName = node.getAttribute('titile'); + for (const name in specs.kernelspecs) { + const spec = specs.kernelspecs[name]; + if (spec && spec.display_name === defaultName) { + selectedSpec = spec; + } + } + showCustomEnvVarsDialog(selectedSpec); + } + }); + + // Add a launcher item if the launcher is available. if (launcher) { void services.ready.then(() => { @@ -2027,6 +2097,12 @@ function activateNotebookHandler( onSpecsChanged(); services.kernelspecs.specsChanged.connect(onSpecsChanged); }); + + app.contextMenu.addItem({ + command: CommandIDs.setupCustomEnv, + selector: '.jp-LauncherCard', + rank: 0 + }); } return tracker;